#################                                                                                ###############      ####                                                                 
#::::::::::::::::#                                                                             ##:::::::::::::::#  ###:::#                                                                 
#::::::######:::::#                                                                           #:::::######::::::#  #:::::#                                                                 
##:::::#     #:::::#                                                                          #:::::#     #######  #:::::#                                                                 
  #::::#     #:::::#   ###########      #########   ###########    ######      ############   #:::::#        #######:::::#######       ###########   ####  ########        ############    
  #::::#     #:::::# ##:::::::::::##   #:::::::::###::::##::::#    #::::#    ##::::::::::::## #:::::#        #:::::::::::::::::#     ##:::::::::::## #:::##::::::::##    ##::::::::::::##  
  #::::######:::::# #:::::::::::::::# #:::::::::::::::::##::::#    #::::#   #::::::#####:::::###::::####     #:::::::::::::::::#    #:::::::::::::::##::::::::::::::##  #::::::#####:::::##
  #:::::::::::::##  #:::::#####:::::##::::::#####::::::###::::#    #::::#  #::::::#     #:::::# ##::::::###########:::::::######    #:::::#####:::::###:::::::::::::::##::::::#     #:::::#
  #::::######:::::# #::::#     #::::##:::::#     #:::::# #::::#    #::::#  #:::::::#####::::::#   ###::::::::##    #:::::#          #::::#     #::::#  #:::::####:::::##:::::::#####::::::#
  #::::#     #:::::##::::#     #::::##:::::#     #:::::# #::::#    #::::#  #:::::::::::::::::#       ######::::#   #:::::#          #::::#     #::::#  #::::#    #::::##:::::::::::::::::# 
  #::::#     #:::::##::::#     #::::##:::::#     #:::::# #::::#    #::::#  #::::::###########             #:::::#  #:::::#          #::::#     #::::#  #::::#    #::::##::::::###########  
  #::::#     #:::::##::::#     #::::##::::::#    #:::::# #:::::####:::::#  #:::::::#                      #:::::#  #:::::#    #######::::#     #::::#  #::::#    #::::##:::::::#           
##:::::#     #:::::##:::::#####:::::##:::::::#####:::::# #:::::::::::::::###::::::::#         #######     #:::::#  #::::::####:::::##:::::#####:::::#  #::::#    #::::##::::::::#          
#::::::#     #:::::##:::::::::::::::# #::::::::::::::::#  #:::::::::::::::# #::::::::######## #::::::######:::::#  ##::::::::::::::##:::::::::::::::#  #::::#    #::::# #::::::::########  
#::::::#     #:::::# ##:::::::::::##   ##::::::::::::::#   ##::::::::##:::#  ##:::::::::::::# #:::::::::::::::##     ##:::::::::::## ##:::::::::::##   #::::#    #::::#  ##:::::::::::::#  
########     #######   ###########       ########::::::#     ########  ####    ##############  ###############         ###########     ###########     ######    ######    ##############  
                                                 #:::::#                                                                                                                                   
                                     ######      #:::::#                                                                                                                                   
                                     #:::::##   ##:::::#                                                                                                                                   
                                      #::::::###:::::::#                                                                                                                                   
                                       ##:::::::::::::#                                                                                                                                    
                                         ###::::::###                                                                                                                                      
                                            ######