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