aaaaaaaaaa
     AAAaaaaaaaaa
    aAAA@@@@@@@@@a
    @AAA@@@@@@@@@@
    @AAA@@@@@@@@@@
    aAAA@@@@@@@@@a
    `AAAA@@@@@@@@'
     @AAA@@@@@@@@
     @AAAA@@@@@@@
     @AAA@@@@@@@@             __.----._
     aAAA@@@@@@@a        _.--':::::::: `-._     __.--------.
     `@AA@@@@@@@'     ,-':::::: :::::::::__`;--' _.---~~~~`.`.
      @AA@@@@@@@     .': :::::::: ::,---'_____,-|||||||||||||:
      @AA@@@@@@@   .':::: :::::::_.-'`-'~      `\||||||||||||:
      aAA@@@@@@a .'::::::: :::,-'....     .:::.   \||||||||||:
      `@AA@@@@@'.': ::::::: ,'........  ,,'  __ \  :|||||||_,'
       @AA@@@@@ :::: ::::::; ......... ::  /' C| ) |||||,-'
       @AA@@@@@ ::::: ::,-;__ ...         `--~~` \ `._'
       @AA@@@@@ `.;;;;,',~-._`-,            _.-'  )  _`-_
       @AA@@@@@  :;;;;|:   _ `-'                 (_,'-;;-)
       @AA@@@@@  `.;.'::  ; )                .         ".
       @AA@@@@@   :.'.`.`. \  (\              :       __|
       @AA@@@@@    `... :`. `  :;              ;    /~--~\
       @AA@@@@@     : ...`.`-.;,'             '    ||    ||
       @AA@@@@@      `.... ~`--'              :    ::__,-||
       aAA@@@@a       :                       .    `-.~~~;'
       `@AA@@@'        `.                     :          `.
        @AA@@@           `.                    .     :     ;
        @AA@@@             :-._ _                    `.___,'
        @AA@@@             ::    `- - - ._ _              '
        @AA@@@             ::                ` - - .____.'
        @AA@@@             ::                     ,'
        @AA@@@       _--~~  ::                  ,'
        @AA@@@   _,-';;;;;; ::                  ;-____
      __@@@@@@__'::::::::::: \._                |:::::;----._
     ;          ~~~.;;;;;;;;;;; \._             /::::::::::::;-._
     ;  ;~~~~--____  `;;::::::::::::\._        /:::::::::::::::::;-_
     `--,--'~~~   _`   \;::::::::::::: \._   /::::::::::::::::::::;;;-._
    :::;   ___.--' `    `;;:::::::::::::: \/ :::::::::::::::::::::::::::`.
  :::::;  :     _.-.      `;:::::::::::::::||:::::::::::_,-'||||||||||||;;.
 ::::::`\_;   :'    `       `-.__ :::::::::||:::::::_,-'|||||||||||||||||;;
::::::::@@:  :'  /----           `---._:::::||::::,'|||||||||||||||||||||;;
:: .------------  -. `           ,'####`-.___||:::|||||||||||||||||||||||;|
::(       ________  `._____     ,'###########`--.'_ `--|||||||||||||||||;,'
::(               `--'-.:| `-._,'#########################`--.||||||||||,'
::(       --------.___.;:|  |\ `-.##############################`-.||||.'
::(     _ ____    ;::::::|  |:\  |:`-.#############################||||'
::\`._   `@@@@`---'::::|:|__|::\_|::|__`-.#####################,-####,'
:::\  `-. `@@@@@@@|::::||:::::::::::::::::|`-.#############,-'#######'
:::/`   `._;aaaaa/:||:::|||:::::::::|:::::||:::`-.######,':::
::/         ~~~~~::||||:::|||::::::::||:::||:::::::`--':::::
 /      `--__(::::||||||:::::|||:::::::||:||:::::::::::::::
             /::::|||||||:::::::|||::::||:||::::::::::::::