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