Skip to content

Instantly share code, notes, and snippets.

@variousauthors
Created June 27, 2020 07:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save variousauthors/7c1a81337d1ba59c3204334ca189a646 to your computer and use it in GitHub Desktop.
Save variousauthors/7c1a81337d1ba59c3204334ca189a646 to your computer and use it in GitHub Desktop.
Exercice de Style (PuzzleScript Script)
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
title Exercice de Style
author arrogantgamer & edderiofer
homepage www.puzzlescript.net
norepeat_action
run_rules_on_level_start
again_interval 0.1
zoomscreen 24x12
========
OBJECTS
========
Background
black
Grass
LIGHTGREEN
Water
#ADD8E6
Player
brown #493c2b #000000
..0..
.111.
01110
02220
.2.2.
TreeTip
#44891A brown #54992A #64A93A
.....
.....
.....
.....
..3..
tree
#44891A brown #54992A #64A93A
.232.
02220
00000
.111.
.....
stump
brown LIGHTBROWN
.111.
.111.
.111.
.000.
.....
LogH
brown
.....
00000
00000
00000
.....
LogV
brown LIGHTBROWN
.000.
.000.
.000.
.000.
.111.
BridgeH
brown #ADD8E6
11111
00000
00000
00000
11111
BridgeV
brown #ADD8E6 yellow #BDE8F6
10001
10001
10001
10001
10001
Stone
lightgrey grey
..000
00011
00001
01111
1111.
SunkenStone
LIGHTGRAY grey #ADD8E6 #9DC8E6
.....
..000
20011
30001
33333
Momentum
TRANSPARENT
Beach
yellow #BDE8F6
00000
11111
.....
.....
.....
BirchTop
white #44891A #54992A #64A93A #74B94A
44444
44444
33333
22222
11111
BirchTopLeft
white #44891A #54992A #64A93A
.....
....2
....2
....2
....1
BirchTopRight
white #44891A #54992A #64A93A
.....
2....
2....
2....
1....
BirchTrunkTop
white #337819 DARKGRAY grey
11111
.003.
.020.
.000.
.300.
BirchTrunkBottom
white green DARKGRAY grey
.020.
.000.
.003.
.200.
.....
BirchStump
white YELLOW
.111.
.111.
.111.
.000.
.....
BirchLogVTop
white #337819 DARKGRAY grey
.010.
.000.
.000.
.000.
.000.
BirchLogVBottom
white #337819 DARKGRAY grey YELLOW
.000.
.000.
.000.
.000.
.444.
BirchLogHLeft
white #337819 DARKGRAY grey
.....
00000
10000
00000
.....
BirchLogHRight
white #337819 DARKGRAY grey
.....
00000
00001
00000
.....
BirchBridgeVTop
white DARKGRAY grey #ADD8E6 yellow #BDE8F6
30003
30013
32003
30003
30203
BirchBridgeVBottom
white DARKGRAY grey #ADD8E6 yellow #BDE8F6
30003
30013
30003
30103
32003
BirchBridgeHLeft
white DARKGRAY grey #ADD8E6 yellow #BDE8F6
33333
10001
00200
00000
33333
BirchBridgeHRight
white DARKGRAY grey #ADD8E6 yellow #BDE8F6
33333
20000
00010
02000
33333
=======
LEGEND
=======
~ = water
. = Background and Grass
P = Player and Grass
T = tree and Grass
o = stone and Grass
I = BirchTrunkBottom and grass
Log = LogV or LogH
BirchLogH = BirchLogHLeft or BirchLogHRight
BirchLogV = BirchLogVTop or BirchLogVBottom
BirchLog = BirchLogV or BirchLogH
BirchBridgeH = BirchBridgeHLeft or BirchBridgeHRight
BirchBridgeV = BirchBridgeVTop or BirchBridgeVBottom
Bridge = BridgeV or BridgeH or BirchBridgeVTop or BirchBridgeVBottom or BirchBridgeHLeft or BirchBridgeHRight
Obstacle = Log or Tree or Stone or SunkenStone
=======
SOUNDS
=======
================
COLLISIONLAYERS
================
Background
Grass,
Water,
Beach,
SunkenStone,
Stump, Bridge, BirchStump
Player, Tree, Log, Stone, BirchTrunkBottom, BirchLog
Momentum, TreeTip, BirchTrunkTop, BirchTop, BirchTopRight, BirchTopLeft
======
RULES
======
( the player can push stones )
[ > player | stone ] -> [ > player | > stone ]
( stones that land in the water sink )
late [ stone water ] -> [ water SunkenStone ]
( the player can't cross water like, at all )
[ > player | water ] -> [ player | water ]
[ > player | SunkenStone ] -> [ player | SunkenStone ]
vertical [ > player | bridgeH ] -> [ player | bridgeH ]
horizontal [ > player | bridgeV ] -> [ player | bridgeV ]
vertical [ > player | BirchBridgeH ] -> [ player | BirchBridgeH ]
horizontal [ > player | BirchBridgeV ] -> [ player | BirchBridgeV ]
( bridges are checkpoints )
late [ player bridge ] -> checkpoint
( the player can push logs )
vertical [ > player | logV ] -> [ > player | > logV ]
horizontal [ > player | logH ] -> [ > player | > logH ]
( the player just wwwwrecks trees )
vertical [> player | tree | no Obstacle ] -> [player | stump | LogV ]
horizontal [ > player | tree | no Obstacle ] -> [player | stump | LogH ]
up [> player | BirchTrunkBottom | no Obstacle | no Obstacle ] -> [player | BirchStump | BirchLogVBottom | BirchLogVTop ]
down [> player | BirchTrunkBottom | no Obstacle | no Obstacle ] -> [player | BirchStump | BirchLogVTop | BirchLogVBottom ]
left [> player | BirchTrunkBottom | no Obstacle | no Obstacle ] -> [player | BirchStump | BirchLogHRight | BirchLogHLeft ]
right [> player | BirchTrunkBottom | no Obstacle | no Obstacle ] -> [player | BirchStump | BirchLogHLeft | BirchLogHRight ]
( rolling: this could be cleaned up )
vertical [ > player | logH ] -> [ player | > logH ]
horizontal [ > player | logV ] -> [ player | > logV ]
( pine log )
( roll logs horizontally )
horizontal [ LogV | Momentum ] -> [ > LogV | ]
horizontal [ > LogV | no Obstacle | ] -> [ > LogV | | Momentum ] again
( roll logs vertically )
vertical [ LogH | Momentum ] -> [ > LogH | ]
vertical [ > LogH | no Obstacle | ] -> [ > LogH | | Momentum ] again
( birch logs )
( pushing Vertical Logs )
vertical [ > Player | BirchLogV ] -> [ > Player | > BirchLogV ]
+ horizontal [ > Player | BirchLogV ] -> [ Player | > BirchLogV ]
+ rigid horizontal [ BirchLogVTop | Momentum ] -> [ > BirchLogVTop | ]
+ rigid horizontal [ > BirchLogVTop | no Obstacle | ] -> [ > BirchLogVTop | | Momentum ] again
+ rigid horizontal [ BirchLogVBottom | Momentum ] -> [ > BirchLogVBottom | ]
+ rigid horizontal [ > BirchLogVBottom | no Obstacle | ] -> [ > BirchLogVBottom | | Momentum ] again
+ rigid up [ Moving BirchLogVBottom | BirchLogVTop ] -> [ Moving BirchLogVBottom | MOVING BirchLogVTop ]
+ rigid down [ Moving BirchLogVTop | BirchLogVBottom ] -> [ Moving BirchLogVTop | MOVING BirchLogVBottom ]
( pushing Horizontal Logs )
horizontal [ > Player | BirchLogH ] -> [ > Player | > BirchLogH ]
+ vertical [ > Player | BirchLogH ] -> [ Player | > BirchLogH ]
+ rigid vertical [ BirchLogHLeft | Momentum ] -> [ > BirchLogHLeft | ]
+ rigid vertical [ > BirchLogHLeft | no Obstacle | ] -> [ > BirchLogHLeft | | Momentum ] again
+ rigid vertical [ BirchLogHRight | Momentum ] -> [ > BirchLogHRight | ]
+ rigid vertical [ > BirchLogHRight | no Obstacle | ] -> [ > BirchLogHRight | | Momentum ] again
+ rigid right [ Moving BirchLogHLeft | BirchLogHRight ] -> [ Moving BirchLogHLeft | MOVING BirchLogHRight ]
+ rigid left [ Moving BirchLogHRight | BirchLogHLeft ] -> [ Moving BirchLogHRight | MOVING BirchLogHLeft ]
( remove the momentum marker )
[ Momentum Obstacle ] -> [ Obstacle ]
[ Momentum Obstacle | Momentum ] -> [ Obstacle | ]
( logs in water become bridges )
late [ water logV ] -> [ bridgeV ]
late [ water logH ] -> [ bridgeH ]
late down [ water BirchLogVTop | water BirchLogVBottom ] -> [ BirchBridgeVTop | BirchBridgeVBottom ]
late right [ water BirchLogHLeft | water BirchLogHRight ] -> [ BirchBridgeHLeft | BirchBridgeHRight ]
( render pretty things )
down [ TreeTip | no tree ] -> [ | ]
up [ tree | no TreeTip ] -> [ tree | TreeTip ]
down [ Grass | water no beach ] -> [ Grass | water beach ]
up [ BirchTrunkBottom | | ] -> [ BirchTrunkBottom | BirchTrunkTop | BirchTop ]
down [ BirchTop | BirchTrunkTop | no BirchTrunkBottom ] -> [ | | ]
left [ BirchTop | ] -> [ BirchTop | BirchTopLeft ]
right [ BirchTopLeft | no BirchTop ] -> [ | ]
right [ BirchTop | ] -> [ BirchTop | BirchTopRight ]
left [ BirchTopRight | no BirchTop ] -> [ | ]
==============
WINCONDITIONS
==============
=======
LEVELS
=======
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~T...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..I..~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..~~..I.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~...o.~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~..I..~~.~.o...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~~...~~..~..o.~~~.o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~..~~~~~~~~~~~~~~...~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~..~~~~~~~~~..I...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....I.~~~~.I..~~~~~~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....o.~~.....~~~o.~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~I......~....o~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~...~~~.I....~~oT.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~I.~~~..I~..~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~..o...~~~~~~~~~~~~~~.~~.~~.......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~.....o~~~~~~~~~~~~~~~~~~~~...I...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~......~....~~~..~~~~~~~~~~~..~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~.I..~~~.o...~....~~~o...~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~...~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~....~......T~.T..~~.......~..~~..~~~~.....~~~..~~~~~~~~.o.~..T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~..~~.I.....~~..o~~.......~....o...~~.I...~~I...~~~~~~~...o....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~..~~~....~~~..I..~~.oI.....~..o.~~~..o.~~..~~~~T..~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~..o~~~~~~~..~~~~~~.I..~~.....o~~..~~.I..~~..~~~~...~~...~~....o~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~..~~~.o...~~~~~~~~..~~~~~~~~~~...~T...~.T.o.T~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~......~~~~~~~...~~~~~~~~~~...~~~~~...~~~~~~~~~~~..~~..~....~......~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~.....~~~~~~~.....~~~~~~~~~~~~~~~~.....~~~~~~~~~...o~.~~~I.~~~.o.~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~..~~~~~~~~......~~~~~~~~~~~~~~~...o..~~~~~~~~~~T.T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~....~~~~~~~~~~~~.....~~~~~~~~~~...~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~..~~~~~~~~~~~~~~~~~I.~~~~~~~~~~~~~~.o.~~~...~~~~.T....~.T..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o.T.o~...oT.~T....~~..~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..~~~~~~~~~~~~~.T.~~......o.~T.o..~~.o..~...o.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....oI~~~~~~~~~~~~......~o.T....~~~..~~~..o.~.T...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T....~~~~~~~~~~~....T.~~~~..~~~~~~~~~~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~..~~~~~~~~~~~~~~...~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T....~~T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~.T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...o..~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~~..~.o~~~~~~~~~~o....~~...o.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..o~~~~~~~~.T.~~~~~~~~~~~~~~~~~~......~~~~~~~~~~...~~~.T...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~.I..o.~~~~~~~..~...~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~.......~~~~~~~~...I.~~~~~~~~~~~~~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~...T.~~~~~~~~.....~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~..o~~~~~~~~o.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o~~~~~~~~~o..~~I.~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~..~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T..~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~..~~~...~.T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....T..~~~.T....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T...o.~~~..~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...o..~~~~~~..~~~~~o..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...o.~~~...~.T~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..o..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~.I.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~..~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~.T....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o.~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~.T~~.....o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....I.~~~~~~..~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..TT...o~......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T..o..~~~~~.....T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~...~..~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~.T....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..~~~~~~~~~~~~..o.o..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~........~~...~~~~~~I..~..o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.I.....o.~.T..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~..~....~~~~o......~~~~~~~~~~....~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~..I..~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T....~....~~~~.....T.~~~~~~~~~..o.o..~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~...~~~......~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.......~~..~~~~~......~~~~~~~~~~.......~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T....~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~..~~~~~~~~..~~..o....o~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~..~~I....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~....~~~~~~~~~~~~~~~~~...~...~....o.T.~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o.~~~~~~~~..~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~o..~~~~~~~~~~..~..o~....T..~~.......~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~..T..~~~~~~~~T..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~..T.~~~~~~~~~~~~~...~T...~.o....~~~~~.o.~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~...~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~..T...~~~~~~~~~~~.o......~~...~~~~~~~~~~~~~~~~..~.~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~..o.~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~.....~~~~~~~~~~~~..~~...~~~~~~~~~~~~~...~~~~.....~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~.I...~~...~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~.......~~...~~..~~~~~~~T~~~~~...~~~~~.o...~~~.....~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~....~~o....~.T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~......~.........~~T.~~~~~~~.....~~~~...T~~~~~o..~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o..~~......T..~......~~~~.o...~~~~~~o..~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...o....~~......~~~~~~..~~~~~~~...~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.o.....~~~.....T~....~~~~~..~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~.T~..~...o.~~.....~~~.....~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...T.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~.T...~......~~...o..~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~..oo....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~.o.....~......~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~~~~...T.~~.o...~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~..~~~~.....o.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....o~~~~~~.o..~~...~~~...T.~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~......~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~.o....~~~~~~~~~..~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~...~~....T~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~......~~o.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T.~~~.o..~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~....~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~..~~..o..~~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.......T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~..o....~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~........~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....T~....T..~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T..T~..~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T...~...~..~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..o..~~~~~~~~..~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~....~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~..P..~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~~~T~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~......~~~~..~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...o...~~~~..o~~..~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.T..~..~~~~....~...~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~~~~~~~~...~~.o~..~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~..~~.T....~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~~~~~.....~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..o...~~~~~~~..~..~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...T..~~~~~~~~~..T.~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~...~~~~....~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.....~~.o...~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..~~..T..~.....~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..........~...o.~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..........~~...~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~.....o..~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~o....~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~....~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment