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