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