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