==%==&#$$%+?=>>&#$#$%!*?%%%??=+*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&%%%%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%========%%%%%%%%%%%%%%%%%%&&&&&&&%%%%%%%%%%%%%%%%&&&&&&&&&
?====&#$$$+!*>=$#&%=$=)+>>???=+*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
>===?%%$&=;;;*?%$&==$&++>+>>??>*!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!+&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&
>?==?%$$%>::;!+&&%%?=%+++>>>??=+++++++++++++>>>>>>>>>>>>>>???????%&%%%%%&$$$$&$$$$$$$$$$$$&&&&&&&&&&&&%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$$
=>?===%%=):::;*=$$?>??>>)+>>>?=%#$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&%&%%%%%%=%%&%%%&&&&&&&&&&&&&&&&&&&&$$&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&&%%%%%%%%%%%%%%%
&>???===?);::;!+?>>>>>+>>)+>>>??#$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%=%%%%%%&&&&&&&&&&&&&&%%%%%%%%%%==============================%%%%%%%%%%%%%%%%%%%%%%%&%%%&
&>>>?>>+>*;;;;!)>>>>>+>>>++>>?=?$$$$$$$$$$$$$$$$$$$$$$&&&&&&&%%=%%%%%%%=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$$$$$
%+*;:-~~~~~~~--;)+++++>>>>+>>?=?&$$$$&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%=%%=%%%%%%&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%
-~~-:;!***!!;;;:-~:!)>>>>>>>>?==&#####$$&&$#$$$##############%%%%%%%%%%=%%%=%=%%%%%%%%%%%%%%==========================================%%%%%%%%%%%%%%%%%%%%%%%%%%
;))+>>??>??+++>??)!--;)>?+>>?===%$#$$$&%>+%&%&$#@@@@@@@@@@@@#%%%%%%%%&&&%%=%%%%%%%=%%%%%%%%%%%%%==========%%==%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
&&???>>>?%$&=%%&%%==+;-;)>>??=%==$$$$$$$&=?=&###@@@@@@@@@@@@#%%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
&&=???>>>%$%>?====%%%=+:-*???=%%????===%%=%$####@@@##@@@@@@@#&%%%%%%%&%&========================================================================================
&&%????)+?%=>>>>+>>++>>+!-!?==%%????????%&####@@@@@$$@@@@@@@@&%%%%%%%&&&%%==============%%============%%==%%===========%%%%%%%===========%%%==========%%%%%%%%%%
&&&?=??>>>>>+++++++)++>>>)-!=%%%?>?????=&@@###@@@@@$$#@@@@@@@&%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========%%%%%%============%%%%%%%%==%%==%%%%%%%%%%
&&&==?>??>>>>>>>>>+++>>>>>)-*???>>>>>>>>%#@@##@@@@@#$#@@@@@@@&%%%%%%%&&&%%%%%%==================================================================================
&&&=??>>>>++++)))))****))))!-)>>>+++++++?#@@##@@@@@@@@@@@@@@@&%%%%%%%&&&========================================================================================
&&&%???>>>++++)**!!;;!!*)***;:+>++++++++>#@@###@@@@#@@@@@@@@@&%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%==%%%%%%==%%==========%=%%====================================
%%&&=?>>>>+++=)**:)*:-~~~~~^^^~-:;*+++++>$@@@###@@@#######@@@&%%%%%%%&&&%%%%%%%%%%%%%%%%======================================%%%%====%%====%%%%==%%%%%%%%%%%%%%
%%&&=?>>>+*))?%+:~^^^^~-:;;;;---~~^~:!++>&@@@#$$##########@@@&%%%%%%%&&&%=======================================================================================
%%%&%?>>>+*%+-~^^~-::!))+%?>);;+++);-~~;)%@@@#$###&%&%=%%%&&&&%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==%%%========%========================================
%%%%%?>>+!-~^^-:-!>**!!!)+**);:+>++;~!;-~!%@@@#$&==???>>>????=%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%====%%===================%=====%==
%%%%%=);~^^-*?%?*!%))===%=+**;;+>)*~-+);*-->#@$==?==??>>+++))>%%%%%%%&&&%=======================================================================================
%%%=+:^^~:!*&%?>>)+?>+%&&$%>*;;>>+:^)&=!+%!~!$$??+)++*!!!!;;;)%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%======%%%%%%==============================
%=)-^^-!))*!+*))??*)>?=%$$&=+;*>>)~~=&%+;%&>-:=>)*!!*!!!)+))??%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==============================
)-^^:+>>)))!*;!!>=)**)>%%%==):)>>:^!=%&?;!>#=:-;>?)**)!!>&&%%%%%%%%%%&&&%=================================================================================%%%%%%
~~:+=%=>+))!;;*!)=>)*)+??**);;+>)~~!>%+!!:!$@%:~%#&+*)++?=###$%%%%%%%%&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==%%%%%%%%%%%%%%======%%==============================
:+=%%%%>++)!:!)!!>%>)++>>)**:*+>:^;==>++*;!$@@%-:$#&)>>>?=%&$$%%%%%%%%%&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%======%%%%===%%%%%
==%%%%%?++))*>+)+=&=>>>?=>*:;++*^^>?????=)!>$@@?~!>~.!&&&&&&&&=?>+))**!!;;:::::::::;;!!!**))++>>??===============================================%%%%%%%%%%%%%%%
===%%%%=>+))*+>>>?%%=?=%=>;:)++:^:??=????+*!*?$&*~~,,.)?>+*:~^,...''''....,,,,,,^^^^^^^~~~~^~~~---:!)?%%%%%%===%================================================
====%%%=>+)***+=?>?>+>&%%)-*++*^~)=%%%%==+*!*)>%%:~;;^^>?*-^,,.....''''...,,^^^^~~~~~~~---------------)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%============================
=====%%%>>+!)+>?*!!!!*>>*-;)+)-^;>#@@@@@#>)!!+=$#>~:!:,*$):--~~~^^,,......^^^^^^~~~~~~~~~~~~~~^^^,,...:===========================%%==%%%%%%%%%%%%%%%%%%%%%%%%%%
======%%>>+;)??)**!****;-!+++;^~)>#@@@@@@$?)*>%#@$:~!!~,%+;::::::----~~~~~^^^,,,,,,,,.....'''''''''...;%%%%%%%%%%%%%====%%%%====================================
?======%?>):*)******)*:-*>>+*~^!+>%&&$$$$$%=??&###)~;*;,!+;:::::::::--------~~~~^^^^^,,,..........'..,!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
==?=====?>>+>>?>++)*;-;+?+++:^:++>&&&&&&&&%%%%%%%%>~-!!~,!;:::::::::--------~~~~^^^^^,,,,,...''''.'..,!==================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
??)+)?==+!*;)!)!*!:-:;***);:^^;+>>#####$#$$$######%-^~:^.-::::::::::--------~~~~^^^^^,,,,,...''''....,*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
??)*+???+!!;)*;:--:;!)>)!::^^:;+>?####$$$$$$$$$$##&:~~~-;+::::::::::--------~~~~^^^^^,,,,,...''''....,)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&
+)*!*****)+)!:-:!)>????>+!~^;>>>=#########$#$#####&-:=%$$%:::::::::::-------~~~~^^^^^,,,,,...''''....,>$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
)+>???>+!;:::*+??????>>>)~^:>>>%######$$$$$$$$$$$$=-;$$##&:::::::::::-------~~~~^^^^^,,,,,...'''''...,+%%%%%%%%&%%&&&&&&&&&&$$$$$$$$$$$#######################$$
*!;::--:;!!*;)+++++++++)-^-+>??============%%%%%&&+~*&$$#&:::::::::::-------~~~~~^^^^,,,,....''''.'..,>%%%%%%%%%%%%%%%%%%%&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$
---:;;!!!!!!:!!!;;;;;;;~^-;;;!!!!!!*********)))***-~!)))+)::::::::::--------~~~~~^^^^,,,,....''''.'..,>%%%%%%%%%%%%%%%%%%%%%%%&%&&&&%&&&&&&&&&&&&&&&&&&&&%&&&&&&
;;;;;;;;;;::;;;;;;;;;:~^-;;;;;;!!!!!!!!!******!!!:^:!!!!!!:::))!::::::------~~~~~^^^^,,,,.....'''.'..,)>>>>?????=========%=%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&
;;;:::::::;;;:;;;;;;-^~-;;;;;;;;!;!!!!!!!!*!!!!!:^-;!!!!;;:::>+?===>+)*!;:----~~~~^^^^^^^~~...''''...,;!!!!!!!!!*********)))))++++++>>>>>>????======%%%%%%%%&&&&
;::;::;;;;;;;:;;;;:~^~:;;;;;;;;;;;;;!!!!!!!!!;;-^~;;!!!;;;:::+::;:;!)+>?==%=%=======??>>)*>...''''...,;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!***********)))))))))))))++++
:;;;;;;;;;;;;;;;:-~~-:;;;;;;;;;;;;;!!!!!!;;!;-~^-;!!*!;;;;:::+:=$%!:)+!-------~~~~^^^^,,..+...'''....,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!***************************
-~--:;;!!!!;;;:-~~-:;;;;;;;;;;;;;!!!!;;;;!;-~^~:!**!!;;;;;:::+!%;+=>$?&?:=$$&!~~~^^^^^,,..+...''''...^;;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**!**********)))))))))))))
!;:-----:;;;:-~-::;;;;;;;;;;;!!!!;;;;;;;:~^^~:!**!!;;;;;;;:::+!=:::)&)*>;#+:+=~~~^^^^,,,..+...''''...^;;;;;;;;;;;;;;;!!!!!!!!!!!!!!!!!!*!!********))))))))))))))
***!;;:--~~~~~-:;;;;;;;;;;!!!!;;;;::-~~^^~:;!!;;;;;;;;;;;::::);%::!:)=&?:+$&=!~~~^^^^,,,..+...''.....^:;;;;;;;;;;;;;;;;;;;;;;;!!!!!!!!!!!!!********)))))))))))))
*!!!!;;;!;;:---~~~-----:::::---~~~~^~~-:;;;;:::::;;;;;;::::::);)%=&)%:!#*>;;+#:~~^^^^,,,.,)...''..''.^:::::::::::::;;;;;;;;;;;;;;;;;;;;!!!!!!!!!*******)**))))))
!;:-~~--;!*!!;;!;;:::----~~~~----:::::::::::::::::;;;::::::::*;:!);:?$$%:%&>=#-~~^^^,,,,.,)..'.''''..^::::::::::::::::::::::::;;;;;;;;;;;;;!!!!!!!!!************
---:;!*)))))))))**********!!!;;;::::::::::::::::;;;::::::::::*!::::::::---!+):~~^^^^,,,,.,)..''''''..^:::::::::::::::::::::::::::::::;;;;;;;;;;;;!!!!!!!!*******
*))))****!!!!!!!!;;;;;;;;:::::::::::::::;;:;:;;!;::::::::::::!*::::::------~~~~~^^^^,,,,.,)..''''''..~--------:::::::::::::::::::::::::::;;;;;;;;;;;!!!!!!!!!***
!;;;;;;;;;;;;;;;;;;;::::;::;:;::;:::::;;;;;;;;;::::::::::::::;*+!;;::------~~~~~^^^^,,,,.^)..''''''..~----------------:::::::::::::::::::::::::::;;;;;;;!!!!!!!!
;;;;;;;;;;;;;;;;;;::::::;;;;;;;;;;;;;;;;;;;!;::::::::::::::::;)>)%&&*------~~~~~^^^^,,,,.^*..''''''..~--------------------------:::::::::::::::::::::;;;;;;;!!!!
!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!;;::::::::::::::::::)+)%)*?------~~~~~^^^^,,,,.^*..''''''..~--------------------------------::::::::::::::::::;;;;;;;!
!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!!;::::::::::::::::::::)++!?%)------~~~~~^^^^,,,,.^*..''''''..~-------------------------------------:::::::::::::::::;;;;
!!!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!!;;:::::::::::::::::::::))+=!;$;-----~~~~~^^^^,,,,.~*..''''''..--------------------------------------------:--::::::::::::
!!!!!!!!!!!;;;;;;;;;;;;;;;;;;;;;;;!*!;;;;:::::::::::::::::::::+:;!%&&;-----~~~~~^^^,,,,,.~!..''''''..-----------------------------------------------::::::::::::
!!!!!!!!!!!!;;;;;;;;;;;;;;;;;;;;!*!;;;;;;;;:::::;;;;::::::::::)::::;:------~~~~~^^^,,,,,.-!.''''''.,.-----------------------------------------------::::::::::::
!!!!!!!!!!!!;;;;;;;;;;;;;;;;;;!**;;;;;;;;;;;;;;;;;::::::::::::)::::-:------~~~~~^^^,,,,..-!.''''..*;,-----------------------------------::::::::::::::::::::::::
!!!!!!!!!!!;;;;;;;;;;;;;;;;!!**!;;;;;;;;;;;;;;;;;;::::::::::::):;;:-:-----~~~~~~^^^,,,,..-;...''+-!^,---------------------------::------::::::::::::::::::::::::
!!!!!!!!!!!;;;;;;;;;;;;;;!!**!;;;;;;;;;;;;;;;;;;;;;;;;::::::::):+&:!*-;:---~~~~^^^^,,,,.^!*.~=,,&-?~,:::------------------------------:-::::::::::::::::::::::::
!!!!!!!!!;;;;;;;;;;;;;!!!**!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::):=?)!%:&=-++*??>+~!>?>~,*?>&!-&;!=-!~,::::---------------------------------::::::::::::::::::::::
!!!!!!!!!;;;;;;;;;;;;!!))!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::);$>%:&*$$:%+)&!!;-#*-+!:%,:+?:??+)-+^,::::---------------------------:-::--::::::::::::::::::::::
!!;;;;;;;;;;;;;;;;;!!*)!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::**?+&!?%??>$:)#=?+~>%=>:)>.:+>:*>*;.'',::---------------------------------::::::::::::::::::::::::
!;;;;;;;;;;;;;;;;!!**!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::**::))*#**$&-)&;:-~*~~+=;&:*%~::,.''''^:----------------------------------::::::::::::::::::::::::
!;;;;;;;;;;;;;;;;*)!;;;;;;;;::::::::::::::;;;;;;;;;::::::::::::)>+!::):-%+-*$=?>~%=?%;,;+>:..'''''''^----~~~~~----------------------------::::::::::::::::::::::
;;;;;;;;;;;;;;;!)!;;;;;;;;;;::::::::::::::::;;;;;;;::::::::::::::;+>>+*;:-~-::::^^--^,,^-)~'''''''''^--~~~~~~~~--------------------------::::---::::::::::::::::
;;;;;;;;;;;;;!*!;;;;::;;::::::::::::::::::::::::::::::::::::::::::--:;*+>>>>>>>>>>++++)*;~..''''''''^-~~~~~~~~~~~~~~----------------------------::::::::::::::::
;;;;;;;;;;;!*!;;;;;;::::::::::::::::::::::::::::::::::::::::::::---------~~~~~~~~^^,,,,....'''''''''^~~~~~~~~~~~~~~~~-------------------------------::::::::::::
;;;;;;;;;!*!;;;;:::::::::::::::::::::::::::::::::::::::::::;:::::--------~~~~~^^^,,,,,....'''''''''.^^^^^~~~~~~~~~~~~~-------------------------------:::::::::::
;;;;;;;!*!;;::::::::::::::::::::::::::::::::::::::::::::::;;;::::-------~~~~~^^^^^,,,,...''''''''''.^^^^^^^~~~~~~~~~~~~~--------------------------------::::::::
;;;;;!**;;::::::::::::::::::::::::::::::::::::::--::::::::;;;;::::-------~~~~^^^^^,,,,...'''''''''.^^^^^^^^~~~~~~~~~~~~~--------------------------------::::::::
!;:;**;;::::::::::::::::::::::::::::::::::------------:::::;:;;:::::-----~~~~^^^^^,,,,...''''''''.^^^^^^^^^~~~~~~~~~~~~~~~-----~------------------------::::::::
;;**;;::::::::::::::::::::::::::::::::---------------:::::::::;;;:::-----~~~~~^^^,,,,,....'''''.,^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~-------------------------:::::::
**!;::::::::::::::::::::::::::------------------------:::::::::::;;:-----~~~~~^^^,,,,,...'''.,^^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~--~~----------------------::::
!;:::::::::::::::::::::::::---------------------------::::::::::::::;::--~~~~~^^^,,,,,...,,^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~--------------------------::::
;:::::::::::::::::::::--::----------------------------:::::------------:::----~~~~~^~~~~~^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~------------------------::-:
::::::::::::::::::-------------------------------------------------------~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~------------------------::-:
::::::::::::::::::---------------------------------------------------------~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~----------------------::-:
::::::::::::::::::---------------------------------------------------------~~~~~~~~~~~~~~~~~~~~~~~^~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~------------------------::
::::::::::::::::::--------------------------------------------------------------~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~------------------------::
::::::::::::::::::----------------------------------------------------------------~~~~~~~~~~~~~~~~~^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~~~----------------------::::
::::::::::::::::::----------------------------------------------------------------~~~~~~~~~~~~~~~~~~~^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~~----------------------::::
::::::::::::::::::--------------------------------------------------------------------~~~~~~~~~~~~~~~^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~---------------------::-:
::::::::::::::::::--------------------------------------------------------------------~~~~--~~~~~~~~~~~^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~---------------------::::
::::::::::::::::::----------------------------------------------------------------------------~~~~~~~~^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~----------------------::::
::::::::::::::::::----------------------------------------------------------------------------~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~----------------------::::
::::::::::::::::::----------------------------------------------------------------------------~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~---------------------:::::
::::::::::::::::::------------------------------::--:-----------------------------------------~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~--------------------::::::
::::::::::::::::::------------------------------::--------------------------------------------~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~----------------------:::::
::::::::::::::::::------------------------------::--------------------------------------------~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~-----------------------:::::
::::::::::::::::::::----------------------:---::::::::---------------------------------------~~~~~~~~~^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~-----------------------:::::
::::::::::::::::::::----------------------:---::::::::--------------------------------------~~~~~~~~~^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~----------------------::::::
::::::::::::::::::::--------------------------::::::::--------------------------------------~~~~~~~~~^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~--------------------::::::::
::::::::::::::::::::----------------------------::::::::------------------------------------~~~~~~~~~^^^^^^^^^^^~~~~~~~~~~~~~~~~~~----------------------::::::::
::::::::::::::::::::::::------------------------::::::::-----------------------------------~~~~~~~~~~^^^^^^^^^^^~~~~~~~~~~~~~~~~~-----------------------::::::::
::::::::::::::::::::::::--------------------------::::::-:::::::--::----------------------~~~~~~~~~~~^^^^^^^^^^^^^~~~~~~~~~~~~~~~-----------------------::::::::
::::::::::::::::::::::::::--::--------------------::::::::::::::::::----------------------~~~~~~~~~~~^^^^^^^^^^^~~~~~~~~~~~~~~~~~-~--------------------:::::::::
::::::::::::::::::::::::::::::----------------------:::::::-::::::::---------------------~~~~~~~~~~~~^^^^^^^^^^^^~~~~~~~~~~~~~~~~--------------------:::::::::::
::::::::::::::::::::::::::::::::::::::------------------------::::::--------------------~~~~~~~~~~~~^^^^^^^^^^^^^~~~~~~~~~~~~~~~~---------------------::::::::::
;:::::::::::::::::::::::::::::::::::::------------------------::::::--------------------~~~~~~~~~~~^^^^^^^^^^^~~^~~~~~~~~~~~~~~~~---------------------::::::::::
;:::::::::::::::::::::::::::::::::::::::------------------------------------------------~~~~~~~~~~~^~^^^^^^^^^^^~~~~~~~~~~~~~~~~--------------------::::::::::::
;:::::::::::::::::::::::::::::::::::::::------------------------------------------------~~~~~~~~~~~~~^^^^^^^^~^~~~~~~~~~~~~~~~~~------------------::::::::::::::
;:::::::::::::::::::::::::::::::::::::::::----------------------------------------------~~~~~~~~~~~~~^^^^^^^^~^~~~~~~~~~~~~~~~~~------------------::::::::::::::