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