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