# #                             
#   #     # #          #    ###  ###  # # 
#   #  #  # #  ##      #   #    #   # # # 
##### # # # # #  #    # #  ###  #     # # 
#   # ### # # #  #    ###     # #     # # 
#   # #   # # #  #   #   #    # #   # # # 
#   #  ## # #  ##    #   # ###   ###  # #