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