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