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