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