. :-++:-#: :::-:....   :      .  .:  .
                                          :#0%000=+:    .===:::.  :. ...  :..-=:.---     .-*-
                             .          .+00000#*++::*+**%==:=..=.  :  ..-=+--. .: . :.#++::
                         .  .%: =    :==%0000%+-=#=-**==::*++-.=-  :::.    :.  : .::**=... :..:..  . .==-..
                          *..*0%#-:--.*00000#####%+**+*+:.:=+***+*=. . =+-.==**-..== ..  ...  -    = =00*=:.
                   .   .    +-0000#00+000000%#%%0%0%+======--**+=++-:-=-=:-.    .:..  .:..  ::.     .-+#=   :
                   .. ..  .*0+0000#00000000000%++=.::+=---:--:---:---===**-=::=: ...:-.:-.:-  :   :*%=*=   .
                   :.  -=..+0=+%#:-0000%%0%0*:-*+*%000000000000000000#+-:.-:-:.: :..::-=- .+: :-= .#:+%   :. :
                     .  .*%+**:0+.=%%0*++:.=*#00000000%***+-=##+:*%#%%0000%*==-++:...--:-=:.:-*--+:+=:  :..     .
                 .... .*--=. = #. ##++#- -%00000#+=:=:   --   +   *:  +*-=0#%00%*+=*=::===::*=.:.:--=  :      .  .
                   -+:... -  ..  -+:0* :*0000%=*     -   -%=  *#- *#.  =  =. **%%00%%#+=-=0#*+*+:--=- ..  . -=  :
                   :.   .-:   - ::.%- -#000#-::*     ++-=%000#0000000: 0* =#+* -=:*#%00%*==+#%#--. ::.-.  :-=. ..
                   :.  .-+-. : . :*- *00*.-*    =  -*000000000000000000000%00*+#:*0%00%#++##+:.-::=++=.==-:.
               :   :   .: -:-.=-: =.%00+%.  +: -#0000000000000%00000000%000000000000000#00*+0%%##****-=+=:=.. ::  *
              .::  ..--- . =*-%#:+ *00%  ...%0000000000000000%%*0%*00000#*%000000000000000000000000000#%%%-..:.: :-=
          .      ..  : . = -*.#=:*-00=-- =00000000000000*%000000%0#0000000:*00000%#0000000000000000%0*+#.-#:.:-:-.:%%
         ..:     ..  . - : =-.=:*:%%*= :000000000%0000+-00=*::::+=-+%*+-%0%.=-++=+##%0000000%00*%0%#-++-:%= ==:. .=*
        .   ..:. -...:   .    -.%:00-#-.00000000#%000%0*%#=  .:       .=+#%: ==+**+*%%%00000-.%=%**#+--:-==##:
        :.    :  :  ..  ..   ==-%+00. %000000000:000%%#-.. +0000+      .:+%+ +==-+*%00000.=*--++----=+:.=*:.
          ::..   . :  :.::.. -*-0+0=.-*000000000.0000#=-. .00#000.     :-%0+ +===*#00%00*=*+##=:=-==#.
          :     :  -:.  :. .=-%=%=0=--000000000%:000#: :.  -%00%=     :+-%0-.*+##%00%:=-*##%#==-:---:
           .    .::  .:. ..-.:*:0=%=:.00000000%+.=0***.              .=**%#.+##%0#+:==-=%%#---::.:
         -..       .. .-.=.. -+ 0:0*-.00000000**= +0=--.:: ...    .  :=*%0:=%0%*+::::.*#0#+=: :
        :        : ..   .. :.:*.0:0*-+000000%##*==.-#%#+--=:  :.   -:%00%--+=-:::  .=*-=*:.:=+.
      .-      . .. .    . ::-=+:%=0%=#00000%###++++-.=0%00###:==+=%*0#+-::-==: .=#==***=: -+:
      :. .  :    .    . :-==:-:+0#000000000%###*#****=:-=#%000%0%*=-..--:.  .-=+:-+=::-:=#-
      .. . .        :...*#:=-++#0%00000000000000000000%0%#**++=-:::::. .- :--.. . .:+#+#*:
      . .        . .:.:-:=-=%0%%%0000000#00000%000000#%0*::*:  : .:-:-::     .  :=::-+-
         .   ....    ..  .--*#000*%000#0#%%-** .# .*: .+-:-:   .::         ::--:    .
        :  .: .           =+#*%%%#==+=+==*#**++*#*+=:-:   .  :-:.:--:       .:*#*:==..
          .  .           :%0*-%#=:.-=+:-===++=   .  :-:.:--:       .:*#*:==..
            :.           %0%0*:+:.+*+**--:.::..   .:=:....      .++#%#+++-.
                        :%0#*#*+#---:=*==:--..::  .::     . .:***=++*=:.
                         .-...:---==++===+===. .:...  . ..---::--.:
                                        :-:-===+-++==-=*-.==+-:
                                                      ......
                                                                                             :..   :: ...   .
                                                                                .  ..::- .::   .::::  :
                                                                        ...::.  --::: .-.  .:=     .          :.
                                                                -:- .-:+-::::-:.-:.   .             .-=+-+++-
                       zxz       .-.                       .-*++***+:... .
                 ..   .xxx.       -#+*+---.          :-:=:...: :                                           .
              :---    zoxx=.     .:.                          .                                          :
                     /xxxxx*.        ....      . ..                                                .-==::..
     ..              xxxxxxx*.                                                               ..:--+---
     .    .  :      =x`xxxx`x.                           ...
           ... .-   .x`xxxx`x+      -===:  --=-...                             .. :
             --++    x`xxxx`x+     ::.        .
              .     :X`xxxx`x:  .    -.      -:
            -          Z##z/    -...
           .           dx:x-             :.:-      ..:+ .. :.            ..++--=
              .        x+-x             :--++=:         ::..             ..
                       x|.x              :
                      /x|+x*