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