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