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