..:::::::::::::...
                         .:::::::::::::::::::::::.
                       :::::::::::::::::::::::::::::.
                     ::::::::::::::::::::::::::::::::::
                    :::::::::'''''''`'':::::::::::::::::
                   .:::''`.,  nnr  , nn,,,,.``_`'::::::::
                   ::' ,n=",dMP",n', MMPMP"4b,`"nx.`::::::
                   `.nMMb.nMM.nP",nP JMB4Mn 4MMn MMb.`::::
                  .dMMMMMMMMMMLuMMP  )ML 4ML 4MMMMMMMb.`::
                 .MMMMMMMMMMMMMMM"."  "Mb."Mx`4MMMMMMMM.`:
                 MMMMMP"P4MMMMM"""" .dc`Mb "Mn 4MMMMMMMM.
                uMMM" .,xnMMMP  .r d$$$.`M:.`4b."MMMM."T"
          .. .,nMMMMnMMP"""" . ,".d$$$$$:P:?b`.`.`MMMML +.
        .dMMMM"  "3M",, .";===   $$$$$$$c::::`b-`.)MMMMb Mr
        P ..,/ ,xP" nP -"       :$$$$$$P?::..::::>`"MMMP.MM
       '.dMP".nP".nP"  .. `?.:  `J$$$$$h.:"L.:::::::MM L`4M
       uMMMMMP x "   .d$$$cd$$L,,$$$$$$$$$cc,.z:;:d'MM .,dMB
     ,J" '"" ,P    xL $$$$$$$$$$$$$$$$$$$$$$$$$r. Mr4MMP"MMB
   ,df'      Mn' ,`$F $$$$$$$$$$$.???$P?$$$$$$$L.dMB4MP d"P
 ,pP"    ,xnMM" $".``c$$$$$$$$$$$h.::'.,z$$$$$$$'MM,'"$MM
J"     .dMMP" ,d".$".x`?$$$$$$$$$$$$hcd$$$$$$$$$c,.$uM$MP
      -4MM ,c$F)."$xP$=."$$$$$$$"': ,$$"?$$$$$$$$"$nMM$">   ,cc,
    .=  M' )$$$'.$;hn,x\,`?$$$$$ccJccicicc$$$$$P$-MMM$$x>h ="3$$c.
  .=      -$$$P'$$?")"$."/d"?$$$$$$$$$$$$$$$$$" ./$dP,P"... d$$$$h.
              J,n.$'$ d" \$-.`?$$$$$$$$$$$$P" .."./$x"${CCCCCC>,.$$.
             ,==",=$nMBF $$  . ."???$$P"""$$...$$d$x"${CCCCCCCCCC$$$
           nL  ="'uMMMbn`$$    $$ccc,$F  .`"$,c$$$dP$$)CCCCCCCCCCC.$h
      .-- ,"> .nMMMMMMMM$$, h,c$$$$$hc"" ...$=$"$$M.$,CCCCCCCCCCCCCC.
   ,n.nmdP  ,dMMMMMM"''$-'',`?.$$$$$$$$$$$PP,cF.>$M$.CC'CCCCCCCCCCCCC
 ,dMPP"'.,uMMP""" '".,{{{>>>.F?$$$$$$$..""',c".{>'M${>$$`C>{CCC>?..,,
 "    .MMMMMP'   .{CCCCCCCCCC>.""$$$$$$$h=-$%.CC>{>.`..'C`.{C.`C,`'{C
     .MMMP"CCCC.{CCCCCCCCCC(--,C,.""??$$$-"$,CC'>-$'$C>CC,$CCC>.`>>,,,.
   ,CMMP"????CC{CCCCCCCCCCCC>--{CCCC,..""`.{C>$,$,/$-\>CCC$CCCC>.`{CCCC,
  JCPP"       ,CCCCCCCCCCCCC>{CCCCCCCCCC,,CCC$/$,C$/${>CC)$CCCC>' `)CCCC
 dC='         {CCCCC'C{CCCCCCCCCCCCCCCCCCCC>$-.{>C,(''CCCC{C>>-$.-CCCCCC
JCC           CCCCCC>C`CCCCCCCCCCCCCCCCCCC'"?,C>CCCCCCCCCC=\$$$..{CCCCCC>,
3CC                CCCCCCCCCCCCCCCCCCCCCC`CCCCC?CCCCCCCCCCC.'$P??""""""?CCh
`CP",nmn        .   cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC???CCCCCc,           ?CC
 ? uMMP ,nmnmdMMM'  3CcCCCCCCCCCCCCCCCCCCCCCCCCCCCCF nx.?CCCCC            CC
  dMM",dMMMMMMP"'   `CCChCCCCCCCCCCCCCCCCCCCcccCCCCh MMMx."??"           zCC
  MP nMMMMMMMM,      ?CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc )MMMMMn.  ..     ,cCCP
  " =MMMMMMMMMMMbm,   ?CCCCCCCCCCCCCCcCCCCCCCC?????"",dMMMMMMMb;MMr .zCCCP"
     "MMMMMMMMMMMMP'   ?CCCCCCCCCCCCCCCCCCCCC nmMMMMMMMMMMMMMMP{MMM ?CCP"
      `MMMMMMM          "CCCCCCCCCCCCCCCCCCCC."4MMMMMMMMMMMMMMb`MMM.`"
       MM4MMMMx           "??CCCCCCCCCCCCCCCCCccc= ,MMMMMMMMMMM "MM
       4Mr "4MMr               ""?????????????"",nmMMMMMMMMMMMMP  "
       `M    `"                C|C             4MMMPPP4MMMMMMP
                               C|C              "      MMMM"
                               C|C              ;!;   dMMP'
                           ,,, "|"              ;' {! P" ;{!
                      . . .  ...  -          `" , ;,,. -'!!!.
                     ''' '.;;;;;.         ,!' ." `-._``--..`'
                    ;;;;;..```..;;;{>   ''- ...;;;.   `~- ' ;;
                  .`''!!!!!!!!''''`.;; ;;;;;;..````''-;' ,;!!'
                  ''{;;......;;;;-'`   `'!!!!!!!!!!-- ,;!!'`
                       ```````        !!;,,.````.,,;{!!'`
                                       ```''''''''''``