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