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