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