summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 98ff3f2)
raw | patch | inline | side by side (parent: 98ff3f2)
author | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Wed, 6 Sep 2017 20:23:41 +0000 (23:23 +0300) | ||
committer | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Wed, 6 Sep 2017 20:24:09 +0000 (23:24 +0300) |
13 files changed:
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 3be96517735e7b8f12b98fe79a453dadde11c3e2..7f77a41a3194d89279f537bdd2d656cc92030b85 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
g_Console_Add('player left the map');
gExitByTrigger := True;
//g_Game_ExitLevel(gTriggers[a].Data.MapName);
- g_Game_ExitLevel(gTriggers[a].trigData.trigMapName);
+ g_Game_ExitLevel(gTriggers[a].trigData.trigMap);
break;
end;
end;
begin
gExitByTrigger := True;
//gNextMap := gTriggers[a].Data.MapName;
- gNextMap := gTriggers[a].trigData.trigMapName;
+ gNextMap := gTriggers[a].trigData.trigMap;
Break;
end;
// Èùåì ñëåäóþùóþ êàðòó â WAD ôàéëå
diff --git a/src/game/g_main.pas b/src/game/g_main.pas
index 06e5ace8c04ede683e71ac4445ba8e019cc8df49..f3e38724fb0183a50c394b9ceafff886dfc70f4c 100644 (file)
--- a/src/game/g_main.pas
+++ b/src/game/g_main.pas
begin
gExitByTrigger := True;
//g_Game_ExitLevel(gTriggers[a].Data.MapName);
- g_Game_ExitLevel(gTriggers[a].trigData.trigMapName);
+ g_Game_ExitLevel(gTriggers[a].trigData.trigMap);
Break;
end;
goto Cheated;
index accdcb7ee23d5892e4f0fc39ebdfbe52ec3509ea..d982204b256927b22a1f2c24666397c5739d7a87 100644 (file)
--- a/src/game/g_monsters.pas
+++ b/src/game/g_monsters.pas
MONSTATE_REVIVE = 10;
MONSTATE_RUNOUT = 11;
+{ in mapdef now
BH_NORMAL = 0;
BH_KILLER = 1;
BH_MANIAC = 2;
BH_INSANE = 3;
BH_CANNIBAL = 4;
BH_GOOD = 5;
+}
type
TMonster = Class (TObject)
diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas
index 6f45fc2cf45a9cd567b86c4c734cfdfe043faf9e..55190ae2b7dd52d5847d2599501dd457f2b4796b 100644 (file)
--- a/src/game/g_panel.pas
+++ b/src/game/g_panel.pas
if (mOldMovingActive <> mMovingActive) then mNeedSend := true;
mOldMovingActive := mMovingActive;
- if g_Game_IsServer and g_Game_IsNet then
+ if not g_Game_IsClient then
begin
if actMoveTrig then g_Triggers_Press(mEndPosTrig, ACTIVATE_CUSTOM);
if actSizeTrig then g_Triggers_Press(mEndSizeTrig, ACTIVATE_CUSTOM);
diff --git a/src/mapdef/mapdef.txt b/src/mapdef/mapdef.txt
index 591eadbc4ec71a5754428347ccd1940cda449d15..ed2f95d74f709b412fe5d864aec61204f6be759c 100644 (file)
--- a/src/mapdef/mapdef.txt
+++ b/src/mapdef/mapdef.txt
// notes:
// field without offset is not in binary format
-// fields with `omitdefault` won't be written when they contain default values
+// fields with `writedefault` won't be written when they contain default values
// fields with `internal` won't be written to any file ever (and won't be read)
// `ubyte` is unsigned byte, and `byte` is signed byte
// all strings are in utf-8
////////////////////////////////////////////////////////////////////////////////
// main blocks
-TMapHeaderRec_1 is "map" size 452 bytes header binblock 7 {
- //_ is "version" type uint minvalue 1 maxvalue 1;
- MapName is "name" type char[32] offset 0;
- MapAuthor is "author" type char[32] offset 32 default "" omitdefault;
- MapDescription is "description" type char[256] offset 64 default "" omitdefault;
- MusicName is "music" type char[64] offset 320 default 'Standart.wad:D2DMUS\ПРОСТОТА' omitdefault;
- SkyName is "sky" type char[64] offset 384 default 'Standart.wad:D2DSKY\RSKY1' omitdefault;
- //Width is "width" type ushort offset 448;
- //Height is "height" type ushort offset 450;
- Size is "size" type size offset 448 as wh;
- // not in binary
- Title is "title" type string default "" omitdefault;
-}
-
-TTextureRec_1 is "texture" size 65 bytes binblock 1 {
- Resource is "path" type char[64] offset 0;
- Anim is "animated" type bool offset 64 default false omitdefault;
- // internals
- TexIdx is "texidx" type uint internal;
-}
-
-TPanelRec_1 is "panel" size 18 bytes binblock 2 {
- //X is "x" type int offset 0;
- //Y is "y" type int offset 4;
- Pos is "position" type point offset 0 as xy;
- //Width is "width" type ushort offset 8;
- //Height is "height" type ushort offset 10;
- Size is "size" type size offset 8 as wh as wh;
- TextureNum is "texture" type ushort offset 12 texture;
- PanelType is "type" type ushort offset 14 bitset unique PanelType;
- Alpha is "alpha" type ubyte offset 16 default 0 omitdefault;
- Flags is "flags" type ubyte offset 17 bitset PanelFlag default PANEL_FLAG_NONE omitdefault;
+"map" size 452 bytes header binblock 7 {
+ "name" type char[32] offset 0 writedefault;
+ "author" type char[32] offset 32 default "";
+ "description" type char[256] offset 64 default "";
+ "music" type char[64] offset 320 default 'Standart.wad:D2DMUS\ПРОСТОТА';
+ "sky" type char[64] offset 384 default 'Standart.wad:D2DSKY\RSKY1';
+ "size" type size offset 448 as wh writedefault;
+}
+
+"texture" size 65 bytes binblock 1 {
+ "path" type char[64] offset 0 writedefault;
+ "animated" type bool offset 64 default false;
+}
+
+"panel" size 18 bytes binblock 2 {
+ "position" type point offset 0 as xy writedefault;
+ "size" type size offset 8 as wh as wh writedefault;
+ "texture" type ushort offset 12 texture writedefault;
+ "type" type ushort offset 14 bitset unique PanelType writedefault;
+ "alpha" type ubyte offset 16 default 0;
+ "flags" type ubyte offset 17 bitset PanelFlag default PANEL_FLAG_NONE;
// moving platform options, not in binary
- MoveSpeed is "move_speed" type point default (0 0) omitdefault;
- SizeSpeed is "size_speed" type point default (0 0) omitdefault; // alas, `size` cannot be negative
- MoveStart is "move_start" type point default (0 0) omitdefault;
- MoveEnd is "move_end" type point default (0 0) omitdefault;
- SizeEnd is "size_end" type size default (0 0) omitdefault;
- MoveActive is "move_active" type bool default false omitdefault;
- MoveOnce is "move_once" type bool default false omitdefault;
- EndPosTrigger is "end_pos_trigger" type int trigger default null omitdefault;
- EndSizeTrigger is "end_size_trigger" type int trigger default null omitdefault;
- // not in binary
- //Id is "id" type string default "" omitdefault;
- // internals
- PanIdx is "panidx" type uint internal;
-}
-
-TItemRec_1 is "item" size 10 bytes binblock 3 {
- //X is "x" type int offset 0;
- //Y is "y" type int offset 4;
- Pos is "position" type point offset 0 as xy;
- ItemType is "type" type ubyte offset 8 enum Item;
- Options is "options" type ubyte offset 9 bitset ItemOption default ITEM_OPTION_NONE omitdefault;
- // not in binary
- //Id is "id" type string default "" omitdefault;
- // internals
- ItemIdx is "itemidx" type uint internal;
-}
-
-TMonsterRec_1 is "monster" size 10 bytes binblock 5 {
- //X is "x" type int offset 0;
- //Y is "y" type int offset 4;
- Pos is "position" type point offset 0 as xy;
- MonsterType is "type" type ubyte offset 8 enum Monster;
- Direction is "direction" type ubyte offset 9 enum DirType default DIR_LEFT omitdefault;
- // not in binary
- //Id is "id" type string default "" omitdefault;
- // internals
- MonsIdx is "monsidx" type uint internal;
-}
-
-TAreaRec_1 is "area" size 10 bytes binblock 4 {
- //X is "x" type int offset 0;
- //Y is "y" type int offset 4;
- Pos is "position" type point offset 0 as xy;
- AreaType is "type" type ubyte offset 8 enum AreaType;
- Direction is "direction" type ubyte offset 9 enum DirType default DIR_LEFT omitdefault;
- // not in binary
- //Id is "id" type string default "" omitdefault;
- // internals
- AreaIdx is "areaidx" type uint internal;
-}
-
-TTriggerRec_1 is "trigger" size 148 bytes binblock 6 {
- //X is "x" type int offset 0;
- //Y is "y" type int offset 4;
- Pos is "position" type point offset 0 as xy;
- //Width is "width" type ushort offset 8;
- //Height is "height" type ushort offset 10;
- Size is "size" type size offset 8 as wh;
- Enabled is "enabled" type bool offset 12 default true omitdefault;
- TexturePanel is "texturepanel" type int offset 13 panel default null omitdefault;
- TriggerType is "type" type ubyte offset 17 enum TriggerType;
- ActivateType is "activatetype" type ubyte offset 18 bitset ActivateType;
- Keys is "keys" type ubyte offset 19 bitset Key default KEY_NONE omitdefault;
+ "move_speed" type point default (0 0);
+ "size_speed" type point default (0 0); // alas, `size` cannot be negative
+ "move_start" type point default (0 0);
+ "move_end" type point default (0 0);
+ "size_end" type size default (0 0);
+ "move_active" type bool default false;
+ "move_once" type bool default false;
+ "end_pos_trigger" trigger default null;
+ "end_size_trigger" trigger default null;
+}
+
+"item" size 10 bytes binblock 3 {
+ "position" type point offset 0 as xy writedefault;
+ "type" type ubyte offset 8 enum Item writedefault;
+ "options" type ubyte offset 9 bitset ItemOption default ITEM_OPTION_NONE;
+}
+
+"monster" size 10 bytes binblock 5 {
+ "position" type point offset 0 as xy writedefault;
+ "type" type ubyte offset 8 enum Monster writedefault;
+ "direction" type ubyte offset 9 enum DirType default DIR_LEFT;
+}
+
+"area" size 10 bytes binblock 4 {
+ "position" type point offset 0 as xy writedefault;
+ "type" type ubyte offset 8 enum AreaType writedefault;
+ "direction" type ubyte offset 9 enum DirType default DIR_LEFT;
+}
+
+"trigger" size 148 bytes binblock 6 {
+ "position" type point offset 0 as xy writedefault;
+ "size" type size offset 8 as wh writedefault;
+ "enabled" type bool offset 12 default true;
+ "texture_panel" type int offset 13 panel default null;
+ "type" type ubyte offset 17 enum TriggerType writedefault;
+ "activate_type" type ubyte offset 18 bitset ActivateType;
+ "keys" type ubyte offset 19 bitset Key default KEY_NONE;
//WARNING: "trigdata" MUST be defined before "type", and "type" MUST be named "type" (for now, can be changed later)
- DATA is "triggerdata" type trigdata[128] offset 20; // the only special nested structure
- // not in binary
- //Id is "id" type string default "" omitdefault;
- // internals
- TrigIdx is "trigidx" type uint internal;
+ "triggerdata" type trigdata[128] offset 20; // the only special nested structure
}
////////////////////////////////////////////////////////////////////////////////
-/*
-enum {
- TEXTURE_NAME_WATER = '_water_0',
- TEXTURE_NAME_ACID1 = '_water_1',
- TEXTURE_NAME_ACID2 = '_water_2',
-}
-*/
-
+// special texture identifiers, used to generate pascal sources
enum TextureSpecial {
TEXTURE_SPECIAL_WATER = -1,
TEXTURE_SPECIAL_ACID1 = -2,
MONSTER_BARREL, // 18
MONSTER_ROBO, // 19
MONSTER_MAN, // 20
+ // aliases (fixme: it should be `MONSTER_ZOMBIE = MONSTER_ZOMBY`!)
+ MONSTER_ZOMBIE = 3,
+}
+
+enum MonsterBehaviour {
+ BH_NORMAL, // 0
+ BH_KILLER, // 1
+ BH_MANIAC, // 2
+ BH_INSANE, // 3
+ BH_CANNIBAL, // 4
+ BH_GOOD, // 5
}
enum TriggerShot {
TRIGGER_EFFECT_POS_AREA, // 1
}
+enum TriggerMusicAction {
+ TRIGGER_MUSIC_ACTION_STOP, // 0
+ TRIGGER_MUSIC_ACTION_PLAY, // 1; unpause or restart
+}
+
+enum TriggerScoreAction {
+ TRIGGER_SCORE_ACTION_ADD, // 0
+ TRIGGER_SCORE_ACTION_SUB, // 1
+ TRIGGER_SCORE_ACTION_WIN, // 2
+ TRIGGER_SCORE_ACTION_LOOSE, // 3
+}
+
+enum TriggerMessageDest {
+ TRIGGER_MESSAGE_DEST_ME, // 0
+ TRIGGER_MESSAGE_DEST_MY_TEAM, // 1
+ TRIGGER_MESSAGE_DEST_ENEMY_TEAM, // 2
+ TRIGGER_MESSAGE_DEST_RED_TEAM, // 3
+ TRIGGER_MESSAGE_DEST_BLUE_TEAM, // 4
+ TRIGGER_MESSAGE_DEST_EVERYONE, // 5
+}
+
+enum TriggerMessageKind {
+ TRIGGER_MESSAGE_KIND_CHAT, // 0
+ TRIGGER_MESSAGE_KIND_GAME, // 1
+}
+
bitset ActivateType {
ACTIVATE_NONE = 0, // 0
ACTIVATE_PLAYERCOLLIDE, // 1
////////////////////////////////////////////////////////////////////////////////
// various triggers
TriggerData for TRIGGER_EXIT {
- MapName is "map" type char[16] offset 0;
+ "map" type char[16] offset 0 writedefault;
}
TriggerData for TRIGGER_TELEPORT {
- TargetPoint is "target" type point offset 0;
- d2d_teleport is "d2d" type bool offset 8 default false omitdefault;
- silent_teleport is "silent" type bool offset 9 default false omitdefault;
- TlpDir is "direction" type ubyte offset 10 enum DirType default DIR_LEFT omitdefault;
+ "target" type point offset 0 writedefault;
+ "d2d" type bool offset 8 default false;
+ "silent" type bool offset 9 default false;
+ "direction" type ubyte offset 10 enum DirType default DIR_LEFT;
}
TriggerData for (TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR, TRIGGER_DOOR, TRIGGER_DOOR5, TRIGGER_CLOSETRAP, TRIGGER_TRAP, TRIGGER_LIFTUP, TRIGGER_LIFTDOWN, TRIGGER_LIFT) {
- PanelID is "panelid" type int offset 0 panel;
- NoSound is "silent" type bool offset 4 default false omitdefault;
- d2d_doors is "d2d" type bool offset 5 default false omitdefault;
+ "panelid" type int offset 0 panel writedefault;
+ "silent" type bool offset 4 default false;
+ "d2d" type bool offset 5 default false;
}
TriggerData for (TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF) {
- //tX is "tx" type int offset 0;
- //tY is "ty" type int offset 4;
- Pos is "position" type point offset 0 as txy default (0 0);
- //tWidth is "width" type ushort offset 8;
- //tHeight is "height" type ushort offset 10;
- Size is "size" type size offset 8 as twh default (0 0);
- Wait is "wait" type ushort offset 12 default 0;
- Count is "count" type ushort offset 14 default 0;
- MonsterID is "monsterid" type int offset 16 monster as monsterid default null;
- ExtRandom is "extrandom" type bool offset 20 default false;
+ "position" type point offset 0 as txy default (0 0) writedefault;
+ "size" type size offset 8 as twh default (0 0);
+ "wait" type ushort offset 12 default 0;
+ "count" alias pressCount type ushort offset 14 default 0;
+ "monsterid" type int offset 16 monster as monsterid default null;
+ "ext_random" type bool offset 20 default false;
// this one is for moving platforms
- PanelId is "panelid" type int panel default null omitdefault;
+ "panelid" panel default null;
+}
+
+enum TriggerScoreTeam {
+ TRIGGER_SCORE_TEAM_MINE_RED, // 0
+ TRIGGER_SCORE_TEAM_MINE_BLUE, // 1
+ TRIGGER_SCORE_TEAM_FORCE_RED, // 2
+ TRIGGER_SCORE_TEAM_FORCE_BLUE, // 3
}
TriggerData for TRIGGER_SECRET {
}
TriggerData for TRIGGER_TEXTURE {
- ActivateOnce is "activateonce" type bool offset 0;
- AnimOnce is "animateonce" type bool offset 1;
+ "activate_once" type bool offset 0 default false writedefault;
+ "animate_once" type bool offset 1 default false writedefault;
}
TriggerData for TRIGGER_SOUND {
- SoundName is "soundname" type char[64] offset 0;
- Volume is "volume" type ubyte offset 64;
- Pan is "pan" type ubyte offset 65;
- Local is "local" type bool offset 66;
- PlayCount is "playcount" type ubyte offset 67;
- SoundSwitch is "soundswitch" type bool offset 68;
+ "sound_name" type char[64] offset 0 writedefault;
+ "volume" type ubyte offset 64 default 0 writedefault; //??? default ???
+ "pan" type ubyte offset 65 default 0;
+ "local" type bool offset 66 default true; //??? default ???
+ "play_count" type ubyte offset 67 default 1;
+ "sound_switch" type bool offset 68 default false; //??? default ???
}
TriggerData for TRIGGER_SPAWNMONSTER {
- MonPos is "position" type point offset 0;
- MonType is "type" type ubyte offset 8;
- MonHealth is "health" type int offset 12;
- MonDir is "direction" type ubyte offset 16 enum DirType;
- MonActive is "active" type bool offset 17;
- MonCount is "count" type int offset 20;
- MonEffect is "effect" type ubyte offset 24;
- MonMax is "max" type ushort offset 26;
- MonDelay is "delay" type ushort offset 28;
- MonBehav is "behaviour" type ubyte offset 30;
+ "position" type point offset 0 as txy writedefault;
+ "type" alias spawnMonsType type ubyte offset 8 enum Monster default MONSTER_IMP writedefault;
+ "health" type int offset 12 writedefault;
+ "direction" type ubyte offset 16 enum DirType default DIR_LEFT writedefault;
+ "active" type bool offset 17 default true;
+ "count" alias monsCount type int offset 20 default 1 writedefault;
+ "effect" type ubyte offset 24 enum EffectAction default EFFECT_NONE writedefault;
+ "max" type ushort offset 26 default 1 writedefault;
+ "delay" type ushort offset 28 default 1000 writedefault;
+ "behaviour" type ubyte offset 30 enum MonsterBehaviour default BH_NORMAL;
}
TriggerData for TRIGGER_SPAWNITEM {
- ItemPos is "position" type point offset 0;
- ItemType is "type" type ubyte offset 8;
- ItemFalls is "gravity" type bool offset 9;
- ItemOnlyDM is "dmonly" type bool offset 10;
- ItemCount is "count" type int offset 12;
- ItemEffect is "effect" type ubyte offset 16;
- ItemMax is "max" type ushort offset 18;
- ItemDelay is "delay" type ushort offset 20;
+ "position" type point offset 0 as txy writedefault;
+ "type" alias spawnItemType type ubyte offset 8 enum Item default ITEM_NONE writedefault;
+ "gravity" type bool offset 9 default true;
+ "dmonly" type bool offset 10 default false;
+ "count" alias itemCount type int offset 12 default 1;
+ "effect" type ubyte offset 16 enum EffectAction default EFFECT_NONE writedefault;
+ "max" type ushort offset 18 default 1;
+ "delay" type ushort offset 20 default 1000 writedefault;
}
TriggerData for TRIGGER_MUSIC {
- MusicName is "name" type char[64] offset 0;
- MusicAction is "action" type ubyte offset 64;
+ "name" alias musicName type char[64] offset 0 writedefault;
+ "action" alias musicAction type ubyte offset 64 enum TriggerMusicAction writedefault;
}
TriggerData for TRIGGER_PUSH {
- PushAngle is "angle" type ushort offset 0;
- PushForce is "force" type ubyte offset 2;
- ResetVel is "resetvelocity" type bool offset 3;
+ "angle" type ushort offset 0 writedefault;
+ "force" type ubyte offset 2 writedefault;
+ "reset_velocity" type bool offset 3 default false writedefault;
}
TriggerData for TRIGGER_SCORE {
- ScoreAction is "action" type ubyte offset 0;
- ScoreCount is "count" type ubyte offset 1;
- ScoreTeam is "team" type ubyte offset 2;
- ScoreCon is "console" type bool offset 3;
- ScoreMsg is "message" type bool offset 4;
+ "action" alias scoreAction type ubyte offset 0 enum TriggerScoreAction default TRIGGER_SCORE_ACTION_ADD writedefault;
+ "count" alias scoreCount type ubyte offset 1 default 1 writedefault;
+ "team" alias scoreTeam type ubyte offset 2 enum TriggerScoreTeam writedefault;
+ "console" alias scoreCon type bool offset 3 default false writedefault;
+ "message" alias scoreMsg type bool offset 4 default true writedefault;
}
TriggerData for TRIGGER_MESSAGE {
- MessageKind is "kind" type ubyte offset 0;
- MessageSendTo is "sendto" type ubyte offset 1;
- MessageText is "text" type char[100] offset 2;
- MessageTime is "time" type ushort offset 102;
+ "kind" type ubyte offset 0 enum TriggerMessageKind default TRIGGER_MESSAGE_KIND_GAME writedefault;
+ "dest" alias msgDest type ubyte enum TriggerMessageDest offset 1;
+ "text" type char[100] offset 2 writedefault;
+ "time" alias msgTime type ushort offset 102 writedefault;
}
TriggerData for TRIGGER_DAMAGE {
- DamageValue is "amount" type ushort offset 0;
- DamageInterval is "interval" type ushort offset 2;
+ "amount" type ushort offset 0 writedefault;
+ "interval" type ushort offset 2 writedefault;
}
TriggerData for TRIGGER_HEALTH {
- HealValue is "amount" type ushort offset 0;
- HealInterval is "interval" type ushort offset 2;
- HealMax is "max" type bool offset 4;
- HealSilent is "silent" type bool offset 5;
+ "amount" type ushort offset 0 writedefault;
+ "interval" type ushort offset 2 writedefault;
+ "max" alias healMax type bool offset 4 writedefault;
+ "silent" type bool offset 5 writedefault;
}
TriggerData for TRIGGER_SHOT {
- ShotPos is "position" type point offset 0;
- ShotType is "type" type ubyte offset 8 enum TriggerShot;
- ShotTarget is "target" type ubyte offset 9 enum TriggerShotTarget;
- ShotSound is "silent" type negbool offset 10; // negbool!
- ShotAim is "aim" type byte offset 11;
- ShotPanelID is "panelid" type int offset 12;
- ShotIntSight is "sight" type ushort offset 16;
- ShotAngle is "angle" type ushort offset 18;
- ShotWait is "wait" type ushort offset 20;
- ShotAccuracy is "accuracy" type ushort offset 22;
- ShotAmmo is "ammo" type ushort offset 24;
- ShotIntReload is "reload" type ushort offset 26;
+ "position" type point offset 0 as txy writedefault;
+ "type" alias shotType type ubyte offset 8 enum TriggerShot writedefault;
+ "target" alias shotTarget type ubyte offset 9 enum TriggerShotTarget writedefault;
+ "quiet" type negbool offset 10; // negbool!
+ "aim" type byte offset 11 enum TriggerShotAim default TRIGGER_SHOT_AIM_DEFAULT;
+ "panelid" type int offset 12 panel default null writedefault;
+ "sight" type ushort offset 16;
+ "angle" type ushort offset 18;
+ "wait" type ushort offset 20;
+ "accuracy" type ushort offset 22;
+ "ammo" type ushort offset 24;
+ "reload" type ushort offset 26;
}
TriggerData for TRIGGER_EFFECT {
- FXCount is "count" type ubyte offset 0;
- FXType is "type" type ubyte offset 1;
- FXSubType is "subtype" type ubyte offset 2;
- FXColorR is "colorr" type ubyte offset 3;
- FXColorG is "colorg" type ubyte offset 4;
- FXColorB is "colorb" type ubyte offset 5;
- FXPos is "position" type ubyte offset 6;
- FXWait is "wait" type ushort offset 8;
- FXVelX is "velx" type byte offset 10;
- FXVelY is "vely" type byte offset 11;
- FXSpreadL is "spreadl" type ubyte offset 12;
- FXSpreadR is "spreadr" type ubyte offset 13;
- FXSpreadU is "spreadu" type ubyte offset 14;
- FXSpreadD is "spreadd" type ubyte offset 15;
+ "count" alias FXCount type ubyte offset 0 writedefault;
+ "type" alias FXType type ubyte offset 1 enum TriggerEffect default TRIGGER_EFFECT_PARTICLE writedefault;
+ "subtype" alias FXSubType type ubyte offset 2 enum TriggerEffectType default TRIGGER_EFFECT_SPARK writedefault;
+ "red" alias FXRed type ubyte offset 3 writedefault;
+ "green" alias FXGreen type ubyte offset 4 writedefault;
+ "blue" alias FXBlue type ubyte offset 5 writedefault;
+ "pos" alias FXPos type ubyte offset 6 enum TriggerEffectPos default TRIGGER_EFFECT_POS_CENTER writedefault;
+ "wait" type ushort offset 8 writedefault;
+ "vel_x" type byte offset 10 writedefault;
+ "vel_y" type byte offset 11 writedefault;
+ "spread_l" type ubyte offset 12 writedefault;
+ "spread_r" type ubyte offset 13 writedefault;
+ "spread_u" type ubyte offset 14 writedefault;
+ "spread_d" type ubyte offset 15 writedefault;
}
diff --git a/src/shared/MAPDEF.pas b/src/shared/MAPDEF.pas
index 2e7ec96e8310ed7c6aa719e8729e5828068246ea..4f4a3cdd0859e2d07c7c9bef845684be16b5cd8f 100644 (file)
--- a/src/shared/MAPDEF.pas
+++ b/src/shared/MAPDEF.pas
@@ -371,11 +371,11 @@ function TDynRecordHelper.Direction (): Byte; inline; begin result := Byte(getFi
function TDynRecordHelper.AreaType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.Enabled (): Boolean; inline; begin result := (getFieldWithType('enabled', TDynField.TType.TBool).ival <> 0); end;
function TDynRecordHelper.TriggerType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.ActivateType (): Byte; inline; begin result := Byte(getFieldWithType('activatetype', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.ActivateType (): Byte; inline; begin result := Byte(getFieldWithType('activate_type', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.Keys (): Byte; inline; begin result := Byte(getFieldWithType('keys', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.getPanelId (): Integer; inline; begin result := getFieldWithType('panelid', TDynField.TType.TInt).recrefIndex; end;
-function TDynRecordHelper.getTexturePanel (): Integer; begin result := getFieldWithType('texturepanel', TDynField.TType.TInt).recrefIndex; end;
+function TDynRecordHelper.getTexturePanel (): Integer; begin result := getFieldWithType('texture_panel', TDynField.TType.TInt).recrefIndex; end;
{$INCLUDE mapdef_impl.inc}
index ea71555c68ff7a6d4c4fa2db980990e96f41d8e0..8aaa522a45bae64530243a8fa031f42b4b035b4f 100644 (file)
--- a/src/shared/hashtable.pas
+++ b/src/shared/hashtable.pas
type
THashIntInt = specialize THashBase<Integer, Integer>;
THashStrInt = specialize THashBase<AnsiString, Integer>;
+ THashStrStr = specialize THashBase<AnsiString, AnsiString>;
function hashNewIntInt (): THashIntInt;
function hashNewStrInt (): THashStrInt;
+function hashNewStrStr (): THashStrStr;
function u32Hash (a: LongWord): LongWord; inline;
// for integer keys
function hiiequ (constref a, b: Integer): Boolean;
function hiihash (constref k: Integer): LongWord;
+function hsiequ (constref a, b: AnsiString): Boolean;
+function hsihash (constref k: AnsiString): LongWord;
implementation
end;
+function hashNewStrStr (): THashStrStr;
+begin
+ result := THashStrStr.Create(hsihash, hsiequ);
+end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
{$PUSH}
{$RANGECHECKS OFF}
diff --git a/src/shared/mapdef.inc b/src/shared/mapdef.inc
index c4ab9848657502190c5eb86bd968c83c52efcde6..3000a298ea22a5ea1b73d2283e0583434a7d6dfa 100644 (file)
--- a/src/shared/mapdef.inc
+++ b/src/shared/mapdef.inc
MONSTER_BARREL = 18;
MONSTER_ROBO = 19;
MONSTER_MAN = 20;
+ MONSTER_ZOMBIE = 3;
+
+// MonsterBehaviour
+const
+ BH_NORMAL = 0;
+ BH_KILLER = 1;
+ BH_MANIAC = 2;
+ BH_INSANE = 3;
+ BH_CANNIBAL = 4;
+ BH_GOOD = 5;
// TriggerShot
const
TRIGGER_EFFECT_POS_CENTER = 0;
TRIGGER_EFFECT_POS_AREA = 1;
+// TriggerMusicAction
+const
+ TRIGGER_MUSIC_ACTION_STOP = 0;
+ TRIGGER_MUSIC_ACTION_PLAY = 1;
+
+// TriggerScoreAction
+const
+ TRIGGER_SCORE_ACTION_ADD = 0;
+ TRIGGER_SCORE_ACTION_SUB = 1;
+ TRIGGER_SCORE_ACTION_WIN = 2;
+ TRIGGER_SCORE_ACTION_LOOSE = 3;
+
+// TriggerMessageDest
+const
+ TRIGGER_MESSAGE_DEST_ME = 0;
+ TRIGGER_MESSAGE_DEST_MY_TEAM = 1;
+ TRIGGER_MESSAGE_DEST_ENEMY_TEAM = 2;
+ TRIGGER_MESSAGE_DEST_RED_TEAM = 3;
+ TRIGGER_MESSAGE_DEST_BLUE_TEAM = 4;
+ TRIGGER_MESSAGE_DEST_EVERYONE = 5;
+
+// TriggerMessageKind
+const
+ TRIGGER_MESSAGE_KIND_CHAT = 0;
+ TRIGGER_MESSAGE_KIND_GAME = 1;
+
// ActivateType
const
ACTIVATE_NONE = 0;
KEY_REDTEAM = 8;
KEY_BLUETEAM = 16;
+// TriggerScoreTeam
+const
+ TRIGGER_SCORE_TEAM_MINE_RED = 0;
+ TRIGGER_SCORE_TEAM_MINE_BLUE = 1;
+ TRIGGER_SCORE_TEAM_FORCE_RED = 2;
+ TRIGGER_SCORE_TEAM_FORCE_BLUE = 3;
+
const defaultMapDef: AnsiString = ''+
#47#47#32#121#101#115#44#32#116#104#105#115#32#102#105#108#101#32#115#101+
#101#115#58#10#47#47#32#32#32#102#105#101#108#100#32#119#105#116#104#111#117+
#116#32#111#102#102#115#101#116#32#105#115#32#110#111#116#32#105#110#32#98+
#105#110#97#114#121#32#102#111#114#109#97#116#10#47#47#32#32#32#102#105#101+
- #108#100#115#32#119#105#116#104#32#96#111#109#105#116#100#101#102#97#117#108+
- #116#96#32#119#111#110#39#116#32#98#101#32#119#114#105#116#116#101#110#32+
- #119#104#101#110#32#116#104#101#121#32#99#111#110#116#97#105#110#32#100#101+
- #102#97#117#108#116#32#118#97#108#117#101#115#10#47#47#32#32#32#102#105#101+
- #108#100#115#32#119#105#116#104#32#96#105#110#116#101#114#110#97#108#96#32+
- #119#111#110#39#116#32#98#101#32#119#114#105#116#116#101#110#32#116#111#32+
- #97#110#121#32#102#105#108#101#32#101#118#101#114#32#40#97#110#100#32#119+
+ #108#100#115#32#119#105#116#104#32#96#119#114#105#116#101#100#101#102#97#117+
+ #108#116#96#32#119#111#110#39#116#32#98#101#32#119#114#105#116#116#101#110+
+ #32#119#104#101#110#32#116#104#101#121#32#99#111#110#116#97#105#110#32#100+
+ #101#102#97#117#108#116#32#118#97#108#117#101#115#10#47#47#32#32#32#102#105+
+ #101#108#100#115#32#119#105#116#104#32#96#105#110#116#101#114#110#97#108#96+
+ #32#119#111#110#39#116#32#98#101#32#119#114#105#116#116#101#110#32#116#111+
+ #32#97#110#121#32#102#105#108#101#32#101#118#101#114#32#40#97#110#100#32#119+
#111#110#39#116#32#98#101#32#114#101#97#100#41#10#47#47#32#32#32#96#117#98+
#121#116#101#96#32#105#115#32#117#110#115#105#103#110#101#100#32#98#121#116+
#101#44#32#97#110#100#32#96#98#121#116#101#96#32#105#115#32#115#105#103#110+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47#32#109#97#105#110+
- #32#98#108#111#99#107#115#10#84#77#97#112#72#101#97#100#101#114#82#101#99#95+
- #49#32#105#115#32#34#109#97#112#34#32#115#105#122#101#32#52#53#50#32#98#121+
- #116#101#115#32#104#101#97#100#101#114#32#98#105#110#98#108#111#99#107#32#55+
- #32#123#10#32#32#47#47#95#32#105#115#32#34#118#101#114#115#105#111#110#34#32+
- #116#121#112#101#32#117#105#110#116#32#109#105#110#118#97#108#117#101#32#49+
- #32#109#97#120#118#97#108#117#101#32#49#59#10#32#32#77#97#112#78#97#109#101+
- #32#105#115#32#34#110#97#109#101#34#32#116#121#112#101#32#99#104#97#114#91+
- #51#50#93#32#111#102#102#115#101#116#32#48#59#10#32#32#77#97#112#65#117#116+
- #104#111#114#32#105#115#32#34#97#117#116#104#111#114#34#32#116#121#112#101+
- #32#99#104#97#114#91#51#50#93#32#111#102#102#115#101#116#32#51#50#32#100#101+
- #102#97#117#108#116#32#34#34#32#111#109#105#116#100#101#102#97#117#108#116+
- #59#10#32#32#77#97#112#68#101#115#99#114#105#112#116#105#111#110#32#105#115+
- #32#34#100#101#115#99#114#105#112#116#105#111#110#34#32#116#121#112#101#32+
- #99#104#97#114#91#50#53#54#93#32#111#102#102#115#101#116#32#54#52#32#100#101+
- #102#97#117#108#116#32#34#34#32#111#109#105#116#100#101#102#97#117#108#116+
- #59#10#32#32#77#117#115#105#99#78#97#109#101#32#105#115#32#34#109#117#115+
- #105#99#34#32#116#121#112#101#32#99#104#97#114#91#54#52#93#32#111#102#102+
- #115#101#116#32#51#50#48#32#100#101#102#97#117#108#116#32#39#83#116#97#110+
- #100#97#114#116#46#119#97#100#58#68#50#68#77#85#83#92#208#159#208#160#208+
- #158#208#161#208#162#208#158#208#162#208#144#39#32#111#109#105#116#100#101+
- #102#97#117#108#116#59#10#32#32#83#107#121#78#97#109#101#32#105#115#32#34+
- #115#107#121#34#32#116#121#112#101#32#99#104#97#114#91#54#52#93#32#111#102+
- #102#115#101#116#32#51#56#52#32#100#101#102#97#117#108#116#32#39#83#116#97+
- #110#100#97#114#116#46#119#97#100#58#68#50#68#83#75#89#92#82#83#75#89#49#39+
- #32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#47#47#87#105#100+
- #116#104#32#105#115#32#34#119#105#100#116#104#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#52#52#56#59#10#32#32#47+
- #47#72#101#105#103#104#116#32#105#115#32#34#104#101#105#103#104#116#34#32+
- #116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#52+
- #53#48#59#10#32#32#83#105#122#101#32#105#115#32#34#115#105#122#101#34#32#116+
- #121#112#101#32#115#105#122#101#32#111#102#102#115#101#116#32#52#52#56#32#97+
- #115#32#119#104#59#10#32#32#47#47#32#110#111#116#32#105#110#32#98#105#110#97+
- #114#121#10#32#32#84#105#116#108#101#32#105#115#32#34#116#105#116#108#101#34+
- #32#116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97#117#108#116+
- #32#34#34#32#32#111#109#105#116#100#101#102#97#117#108#116#59#10#125#10#10+
- #84#84#101#120#116#117#114#101#82#101#99#95#49#32#105#115#32#34#116#101#120+
+ #32#98#108#111#99#107#115#10#34#109#97#112#34#32#115#105#122#101#32#52#53#50+
+ #32#98#121#116#101#115#32#104#101#97#100#101#114#32#98#105#110#98#108#111#99+
+ #107#32#55#32#123#10#32#32#34#110#97#109#101#34#32#116#121#112#101#32#99#104+
+ #97#114#91#51#50#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#97#117#116#104#111#114#34#32#116+
+ #121#112#101#32#99#104#97#114#91#51#50#93#32#111#102#102#115#101#116#32#51+
+ #50#32#100#101#102#97#117#108#116#32#34#34#59#10#32#32#34#100#101#115#99#114+
+ #105#112#116#105#111#110#34#32#116#121#112#101#32#99#104#97#114#91#50#53#54+
+ #93#32#111#102#102#115#101#116#32#54#52#32#100#101#102#97#117#108#116#32#34+
+ #34#59#10#32#32#34#109#117#115#105#99#34#32#116#121#112#101#32#99#104#97#114+
+ #91#54#52#93#32#111#102#102#115#101#116#32#51#50#48#32#100#101#102#97#117+
+ #108#116#32#39#83#116#97#110#100#97#114#116#46#119#97#100#58#68#50#68#77#85+
+ #83#92#208#159#208#160#208#158#208#161#208#162#208#158#208#162#208#144#39#59+
+ #10#32#32#34#115#107#121#34#32#116#121#112#101#32#99#104#97#114#91#54#52#93+
+ #32#111#102#102#115#101#116#32#51#56#52#32#100#101#102#97#117#108#116#32#39+
+ #83#116#97#110#100#97#114#116#46#119#97#100#58#68#50#68#83#75#89#92#82#83#75+
+ #89#49#39#59#10#32#32#34#115#105#122#101#34#32#116#121#112#101#32#115#105+
+ #122#101#32#111#102#102#115#101#116#32#52#52#56#32#97#115#32#119#104#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#34#116#101#120+
#116#117#114#101#34#32#115#105#122#101#32#54#53#32#98#121#116#101#115#32#98+
- #105#110#98#108#111#99#107#32#49#32#123#10#32#32#82#101#115#111#117#114#99+
- #101#32#105#115#32#34#112#97#116#104#34#32#116#121#112#101#32#99#104#97#114+
- #91#54#52#93#32#111#102#102#115#101#116#32#48#59#10#32#32#65#110#105#109#32+
- #105#115#32#34#97#110#105#109#97#116#101#100#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#54#52#32#100#101#102#97#117#108#116+
- #32#102#97#108#115#101#32#111#109#105#116#100#101#102#97#117#108#116#59#10+
- #32#32#47#47#32#105#110#116#101#114#110#97#108#115#10#32#32#84#101#120#73+
- #100#120#32#105#115#32#34#116#101#120#105#100#120#34#32#116#121#112#101#32+
- #117#105#110#116#32#105#110#116#101#114#110#97#108#59#10#125#10#10#84#80#97+
- #110#101#108#82#101#99#95#49#32#105#115#32#34#112#97#110#101#108#34#32#115+
- #105#122#101#32#49#56#32#98#121#116#101#115#32#98#105#110#98#108#111#99#107+
- #32#50#32#123#10#32#32#47#47#88#32#105#115#32#34#120#34#32#116#121#112#101+
- #32#105#110#116#32#111#102#102#115#101#116#32#48#59#10#32#32#47#47#89#32#105+
- #115#32#34#121#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101+
- #116#32#52#59#10#32#32#80#111#115#32#105#115#32#34#112#111#115#105#116#105+
- #111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101+
- #116#32#48#32#97#115#32#120#121#59#10#32#32#47#47#87#105#100#116#104#32#105+
- #115#32#34#119#105#100#116#104#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#56#59#10#32#32#47#47#72#101#105#103#104+
- #116#32#105#115#32#34#104#101#105#103#104#116#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#49#48#59#10#32#32#83#105+
- #122#101#32#105#115#32#34#115#105#122#101#34#32#116#121#112#101#32#115#105+
- #122#101#32#111#102#102#115#101#116#32#56#32#97#115#32#119#104#32#97#115#32+
- #119#104#59#10#32#32#84#101#120#116#117#114#101#78#117#109#32#105#115#32#34+
- #116#101#120#116#117#114#101#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#49#50#32#116#101#120#116#117#114#101#59+
- #10#32#32#80#97#110#101#108#84#121#112#101#32#105#115#32#34#116#121#112#101+
- #34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116+
- #32#49#52#32#98#105#116#115#101#116#32#117#110#105#113#117#101#32#80#97#110+
- #101#108#84#121#112#101#59#10#32#32#65#108#112#104#97#32#105#115#32#34#97+
- #108#112#104#97#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#49#54#32#100#101#102#97#117#108#116#32#48#32#111#109#105#116+
- #100#101#102#97#117#108#116#59#10#32#32#70#108#97#103#115#32#105#115#32#34+
- #102#108#97#103#115#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
- #102#115#101#116#32#49#55#32#98#105#116#115#101#116#32#80#97#110#101#108#70+
- #108#97#103#32#100#101#102#97#117#108#116#32#80#65#78#69#76#95#70#76#65#71+
- #95#78#79#78#69#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#47+
- #47#32#109#111#118#105#110#103#32#112#108#97#116#102#111#114#109#32#111#112+
- #116#105#111#110#115#44#32#110#111#116#32#105#110#32#98#105#110#97#114#121+
- #10#32#32#77#111#118#101#83#112#101#101#100#32#105#115#32#34#109#111#118#101+
- #95#115#112#101#101#100#34#32#116#121#112#101#32#112#111#105#110#116#32#100+
- #101#102#97#117#108#116#32#40#48#32#48#41#32#111#109#105#116#100#101#102#97+
- #117#108#116#59#10#32#32#83#105#122#101#83#112#101#101#100#32#105#115#32#34+
- #115#105#122#101#95#115#112#101#101#100#34#32#116#121#112#101#32#112#111#105+
- #110#116#32#100#101#102#97#117#108#116#32#40#48#32#48#41#32#111#109#105#116+
- #100#101#102#97#117#108#116#59#32#47#47#32#97#108#97#115#44#32#96#115#105+
- #122#101#96#32#99#97#110#110#111#116#32#98#101#32#110#101#103#97#116#105#118+
- #101#10#32#32#77#111#118#101#83#116#97#114#116#32#105#115#32#34#109#111#118+
- #101#95#115#116#97#114#116#34#32#116#121#112#101#32#112#111#105#110#116#32+
- #100#101#102#97#117#108#116#32#40#48#32#48#41#32#111#109#105#116#100#101#102+
- #97#117#108#116#59#10#32#32#77#111#118#101#69#110#100#32#105#115#32#34#109+
- #111#118#101#95#101#110#100#34#32#116#121#112#101#32#112#111#105#110#116#32+
- #100#101#102#97#117#108#116#32#40#48#32#48#41#32#111#109#105#116#100#101#102+
- #97#117#108#116#59#10#32#32#83#105#122#101#69#110#100#32#105#115#32#34#115+
- #105#122#101#95#101#110#100#34#32#116#121#112#101#32#115#105#122#101#32#100+
- #101#102#97#117#108#116#32#40#48#32#48#41#32#111#109#105#116#100#101#102#97+
- #117#108#116#59#10#32#32#77#111#118#101#65#99#116#105#118#101#32#105#115#32+
- #34#109#111#118#101#95#97#99#116#105#118#101#34#32#116#121#112#101#32#98#111+
- #111#108#32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#111#109#105+
- #116#100#101#102#97#117#108#116#59#10#32#32#77#111#118#101#79#110#99#101#32+
- #105#115#32#34#109#111#118#101#95#111#110#99#101#34#32#116#121#112#101#32#98+
- #111#111#108#32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#111#109+
- #105#116#100#101#102#97#117#108#116#59#10#32#32#69#110#100#80#111#115#84#114+
- #105#103#103#101#114#32#105#115#32#34#101#110#100#95#112#111#115#95#116#114+
- #105#103#103#101#114#34#32#116#121#112#101#32#105#110#116#32#116#114#105#103+
- #103#101#114#32#100#101#102#97#117#108#116#32#110#117#108#108#32#111#109#105+
- #116#100#101#102#97#117#108#116#59#10#32#32#69#110#100#83#105#122#101#84#114+
- #105#103#103#101#114#32#105#115#32#34#101#110#100#95#115#105#122#101#95#116+
- #114#105#103#103#101#114#34#32#116#121#112#101#32#105#110#116#32#116#114#105+
- #103#103#101#114#32#100#101#102#97#117#108#116#32#110#117#108#108#32#111#109+
- #105#116#100#101#102#97#117#108#116#59#10#32#32#47#47#32#110#111#116#32#105+
- #110#32#98#105#110#97#114#121#10#32#32#47#47#73#100#32#105#115#32#34#105#100+
- #34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97#117#108+
- #116#32#34#34#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#47+
- #47#32#105#110#116#101#114#110#97#108#115#10#32#32#80#97#110#73#100#120#32+
- #105#115#32#34#112#97#110#105#100#120#34#32#116#121#112#101#32#117#105#110+
- #116#32#105#110#116#101#114#110#97#108#59#10#125#10#10#84#73#116#101#109#82+
- #101#99#95#49#32#105#115#32#34#105#116#101#109#34#32#115#105#122#101#32#49+
- #48#32#98#121#116#101#115#32#98#105#110#98#108#111#99#107#32#51#32#123#10#32+
- #32#47#47#88#32#105#115#32#34#120#34#32#116#121#112#101#32#105#110#116#32+
- #111#102#102#115#101#116#32#48#59#10#32#32#47#47#89#32#105#115#32#34#121#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#52#59#10#32+
- #32#80#111#115#32#105#115#32#34#112#111#115#105#116#105#111#110#34#32#116+
- #121#112#101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97+
- #115#32#120#121#59#10#32#32#73#116#101#109#84#121#112#101#32#105#115#32#34+
- #116#121#112#101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#56#32#101#110#117#109#32#73#116#101#109#59#10#32#32#79#112+
- #116#105#111#110#115#32#105#115#32#34#111#112#116#105#111#110#115#34#32#116+
- #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#57#32#98+
- #105#116#115#101#116#32#73#116#101#109#79#112#116#105#111#110#32#100#101#102+
- #97#117#108#116#32#73#84#69#77#95#79#80#84#73#79#78#95#78#79#78#69#32#111+
- #109#105#116#100#101#102#97#117#108#116#59#10#32#32#47#47#32#110#111#116#32+
- #105#110#32#98#105#110#97#114#121#10#32#32#47#47#73#100#32#105#115#32#34#105+
- #100#34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97#117+
- #108#116#32#34#34#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32+
- #47#47#32#105#110#116#101#114#110#97#108#115#10#32#32#73#116#101#109#73#100+
- #120#32#105#115#32#34#105#116#101#109#105#100#120#34#32#116#121#112#101#32+
- #117#105#110#116#32#105#110#116#101#114#110#97#108#59#10#125#10#10#84#77#111+
- #110#115#116#101#114#82#101#99#95#49#32#105#115#32#34#109#111#110#115#116+
- #101#114#34#32#115#105#122#101#32#49#48#32#98#121#116#101#115#32#98#105#110+
- #98#108#111#99#107#32#53#32#123#10#32#32#47#47#88#32#105#115#32#34#120#34#32+
- #116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#59#10#32#32+
- #47#47#89#32#105#115#32#34#121#34#32#116#121#112#101#32#105#110#116#32#111+
- #102#102#115#101#116#32#52#59#10#32#32#80#111#115#32#105#115#32#34#112#111+
- #115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111+
- #102#102#115#101#116#32#48#32#97#115#32#120#121#59#10#32#32#77#111#110#115+
- #116#101#114#84#121#112#101#32#105#115#32#34#116#121#112#101#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110+
- #117#109#32#77#111#110#115#116#101#114#59#10#32#32#68#105#114#101#99#116#105+
- #111#110#32#105#115#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121+
+ #105#110#98#108#111#99#107#32#49#32#123#10#32#32#34#112#97#116#104#34#32#116+
+ #121#112#101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#110#105+
+ #109#97#116#101#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102+
+ #115#101#116#32#54#52#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59+
+ #10#125#10#10#34#112#97#110#101#108#34#32#115#105#122#101#32#49#56#32#98#121+
+ #116#101#115#32#98#105#110#98#108#111#99#107#32#50#32#123#10#32#32#34#112+
+ #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
+ #111#102#102#115#101#116#32#48#32#97#115#32#120#121#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#115#105#122#101#34#32#116#121#112+
+ #101#32#115#105#122#101#32#111#102#102#115#101#116#32#56#32#97#115#32#119+
+ #104#32#97#115#32#119#104#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#116#101#120#116#117#114#101#34#32#116#121#112#101#32#117#115+
+ #104#111#114#116#32#111#102#102#115#101#116#32#49#50#32#116#101#120#116#117+
+ #114#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
+ #116#121#112#101#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#49#52#32#98#105#116#115#101#116#32#117#110#105#113#117+
+ #101#32#80#97#110#101#108#84#121#112#101#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#97#108#112#104#97#34#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#100#101#102#97+
+ #117#108#116#32#48#59#10#32#32#34#102#108#97#103#115#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#55#32#98#105#116#115+
+ #101#116#32#80#97#110#101#108#70#108#97#103#32#100#101#102#97#117#108#116#32+
+ #80#65#78#69#76#95#70#76#65#71#95#78#79#78#69#59#10#32#32#47#47#32#109#111+
+ #118#105#110#103#32#112#108#97#116#102#111#114#109#32#111#112#116#105#111+
+ #110#115#44#32#110#111#116#32#105#110#32#98#105#110#97#114#121#10#32#32#34+
+ #109#111#118#101#95#115#112#101#101#100#34#32#116#121#112#101#32#112#111#105+
+ #110#116#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#34#115+
+ #105#122#101#95#115#112#101#101#100#34#32#116#121#112#101#32#112#111#105#110+
+ #116#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#32#47#47#32#97#108+
+ #97#115#44#32#96#115#105#122#101#96#32#99#97#110#110#111#116#32#98#101#32+
+ #110#101#103#97#116#105#118#101#10#32#32#34#109#111#118#101#95#115#116#97+
+ #114#116#34#32#116#121#112#101#32#112#111#105#110#116#32#100#101#102#97#117+
+ #108#116#32#40#48#32#48#41#59#10#32#32#34#109#111#118#101#95#101#110#100#34+
+ #32#116#121#112#101#32#112#111#105#110#116#32#100#101#102#97#117#108#116#32+
+ #40#48#32#48#41#59#10#32#32#34#115#105#122#101#95#101#110#100#34#32#116#121+
+ #112#101#32#115#105#122#101#32#100#101#102#97#117#108#116#32#40#48#32#48#41+
+ #59#10#32#32#34#109#111#118#101#95#97#99#116#105#118#101#34#32#116#121#112+
+ #101#32#98#111#111#108#32#100#101#102#97#117#108#116#32#102#97#108#115#101+
+ #59#10#32#32#34#109#111#118#101#95#111#110#99#101#34#32#116#121#112#101#32+
+ #98#111#111#108#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32+
+ #32#34#101#110#100#95#112#111#115#95#116#114#105#103#103#101#114#34#32#116+
+ #114#105#103#103#101#114#32#100#101#102#97#117#108#116#32#110#117#108#108#59+
+ #10#32#32#34#101#110#100#95#115#105#122#101#95#116#114#105#103#103#101#114+
+ #34#32#116#114#105#103#103#101#114#32#100#101#102#97#117#108#116#32#110#117+
+ #108#108#59#10#125#10#10#34#105#116#101#109#34#32#115#105#122#101#32#49#48+
+ #32#98#121#116#101#115#32#98#105#110#98#108#111#99#107#32#51#32#123#10#32#32+
+ #34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110+
+ #116#32#111#102#102#115#101#116#32#48#32#97#115#32#120#121#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#116+
+ #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101+
+ #110#117#109#32#73#116#101#109#32#119#114#105#116#101#100#101#102#97#117#108+
+ #116#59#10#32#32#34#111#112#116#105#111#110#115#34#32#116#121#112#101#32#117+
+ #98#121#116#101#32#111#102#102#115#101#116#32#57#32#98#105#116#115#101#116+
+ #32#73#116#101#109#79#112#116#105#111#110#32#100#101#102#97#117#108#116#32+
+ #73#84#69#77#95#79#80#84#73#79#78#95#78#79#78#69#59#10#125#10#10#34#109#111+
+ #110#115#116#101#114#34#32#115#105#122#101#32#49#48#32#98#121#116#101#115#32+
+ #98#105#110#98#108#111#99#107#32#53#32#123#10#32#32#34#112#111#115#105#116+
+ #105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115+
+ #101#116#32#48#32#97#115#32#120#121#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#116#121#112#101#34#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32#77#111+
+ #110#115#116#101#114#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#57#32#101#110#117#109#32#68#105+
+ #114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73#82#95#76#69#70#84+
+ #59#10#125#10#10#34#97#114#101#97#34#32#115#105#122#101#32#49#48#32#98#121+
+ #116#101#115#32#98#105#110#98#108#111#99#107#32#52#32#123#10#32#32#34#112+
+ #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
+ #111#102#102#115#101#116#32#48#32#97#115#32#120#121#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#116#121#112+
+ #101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110#117+
+ #109#32#65#114#101#97#84#121#112#101#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121+
#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#57#32#101#110+
#117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73+
- #82#95#76#69#70#84#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32+
- #47#47#32#110#111#116#32#105#110#32#98#105#110#97#114#121#10#32#32#47#47#73+
- #100#32#105#115#32#34#105#100#34#32#116#121#112#101#32#115#116#114#105#110+
- #103#32#100#101#102#97#117#108#116#32#34#34#32#111#109#105#116#100#101#102+
- #97#117#108#116#59#10#32#32#47#47#32#105#110#116#101#114#110#97#108#115#10+
- #32#32#77#111#110#115#73#100#120#32#105#115#32#34#109#111#110#115#105#100+
- #120#34#32#116#121#112#101#32#117#105#110#116#32#105#110#116#101#114#110#97+
- #108#59#10#125#10#10#84#65#114#101#97#82#101#99#95#49#32#105#115#32#34#97+
- #114#101#97#34#32#115#105#122#101#32#49#48#32#98#121#116#101#115#32#98#105+
- #110#98#108#111#99#107#32#52#32#123#10#32#32#47#47#88#32#105#115#32#34#120+
- #34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#59#10+
- #32#32#47#47#89#32#105#115#32#34#121#34#32#116#121#112#101#32#105#110#116#32+
- #111#102#102#115#101#116#32#52#59#10#32#32#80#111#115#32#105#115#32#34#112+
- #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
- #111#102#102#115#101#116#32#48#32#97#115#32#120#121#59#10#32#32#65#114#101+
- #97#84#121#112#101#32#105#115#32#34#116#121#112#101#34#32#116#121#112#101#32+
- #117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32+
- #65#114#101#97#84#121#112#101#59#10#32#32#68#105#114#101#99#116#105#111#110+
- #32#105#115#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#57#32#101#110#117#109+
- #32#68#105#114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73#82#95+
- #76#69#70#84#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#47#47+
- #32#110#111#116#32#105#110#32#98#105#110#97#114#121#10#32#32#47#47#73#100#32+
- #105#115#32#34#105#100#34#32#116#121#112#101#32#115#116#114#105#110#103#32+
- #100#101#102#97#117#108#116#32#34#34#32#111#109#105#116#100#101#102#97#117+
- #108#116#59#10#32#32#47#47#32#105#110#116#101#114#110#97#108#115#10#32#32#65+
- #114#101#97#73#100#120#32#105#115#32#34#97#114#101#97#105#100#120#34#32#116+
- #121#112#101#32#117#105#110#116#32#105#110#116#101#114#110#97#108#59#10#125+
- #10#10#84#84#114#105#103#103#101#114#82#101#99#95#49#32#105#115#32#34#116+
- #114#105#103#103#101#114#34#32#115#105#122#101#32#49#52#56#32#98#121#116#101+
- #115#32#98#105#110#98#108#111#99#107#32#54#32#123#10#32#32#47#47#88#32#105+
- #115#32#34#120#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101+
- #116#32#48#59#10#32#32#47#47#89#32#105#115#32#34#121#34#32#116#121#112#101+
- #32#105#110#116#32#111#102#102#115#101#116#32#52#59#10#32#32#80#111#115#32+
- #105#115#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112+
- #111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#120#121#59#10+
- #32#32#47#47#87#105#100#116#104#32#105#115#32#34#119#105#100#116#104#34#32+
- #116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#56+
- #59#10#32#32#47#47#72#101#105#103#104#116#32#105#115#32#34#104#101#105#103+
- #104#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
- #101#116#32#49#48#59#10#32#32#83#105#122#101#32#105#115#32#34#115#105#122+
- #101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115#101#116#32+
- #56#32#97#115#32#119#104#59#10#32#32#69#110#97#98#108#101#100#32#105#115#32+
- #34#101#110#97#98#108#101#100#34#32#116#121#112#101#32#98#111#111#108#32#111+
- #102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#116#114#117+
- #101#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#84#101#120+
- #116#117#114#101#80#97#110#101#108#32#105#115#32#34#116#101#120#116#117#114+
- #101#112#97#110#101#108#34#32#116#121#112#101#32#105#110#116#32#111#102#102+
- #115#101#116#32#49#51#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32+
- #110#117#108#108#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32+
- #84#114#105#103#103#101#114#84#121#112#101#32#105#115#32#34#116#121#112#101+
- #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #49#55#32#101#110#117#109#32#84#114#105#103#103#101#114#84#121#112#101#59#10+
- #32#32#65#99#116#105#118#97#116#101#84#121#112#101#32#105#115#32#34#97#99+
- #116#105#118#97#116#101#116#121#112#101#34#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#49#56#32#98#105#116#115#101#116#32#65+
- #99#116#105#118#97#116#101#84#121#112#101#59#10#32#32#75#101#121#115#32#105+
- #115#32#34#107#101#121#115#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#49#57#32#98#105#116#115#101#116#32#75#101#121#32+
- #100#101#102#97#117#108#116#32#75#69#89#95#78#79#78#69#32#111#109#105#116+
- #100#101#102#97#117#108#116#59#10#32#32#47#47#87#65#82#78#73#78#71#58#32#34+
- #116#114#105#103#100#97#116#97#34#32#77#85#83#84#32#98#101#32#100#101#102+
- #105#110#101#100#32#98#101#102#111#114#101#32#34#116#121#112#101#34#44#32#97+
- #110#100#32#34#116#121#112#101#34#32#77#85#83#84#32#98#101#32#110#97#109#101+
- #100#32#34#116#121#112#101#34#32#40#102#111#114#32#110#111#119#44#32#99#97+
- #110#32#98#101#32#99#104#97#110#103#101#100#32#108#97#116#101#114#41#10#32+
- #32#68#65#84#65#32#105#115#32#34#116#114#105#103#103#101#114#100#97#116#97+
- #34#32#116#121#112#101#32#116#114#105#103#100#97#116#97#91#49#50#56#93#32+
- #111#102#102#115#101#116#32#50#48#59#32#47#47#32#116#104#101#32#111#110#108+
- #121#32#115#112#101#99#105#97#108#32#110#101#115#116#101#100#32#115#116#114+
- #117#99#116#117#114#101#10#32#32#47#47#32#110#111#116#32#105#110#32#98#105+
- #110#97#114#121#10#32#32#47#47#73#100#32#105#115#32#34#105#100#34#32#116#121+
- #112#101#32#115#116#114#105#110#103#32#100#101#102#97#117#108#116#32#34#34+
- #32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#47#47#32#105#110+
- #116#101#114#110#97#108#115#10#32#32#84#114#105#103#73#100#120#32#105#115#32+
- #34#116#114#105#103#105#100#120#34#32#116#121#112#101#32#117#105#110#116#32+
- #105#110#116#101#114#110#97#108#59#10#125#10#10#10#47#47#47#47#47#47#47#47+
+ #82#95#76#69#70#84#59#10#125#10#10#34#116#114#105#103#103#101#114#34#32#115+
+ #105#122#101#32#49#52#56#32#98#121#116#101#115#32#98#105#110#98#108#111#99+
+ #107#32#54#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121+
+ #112#101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115+
+ #32#120#121#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
+ #115#105#122#101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115+
+ #101#116#32#56#32#97#115#32#119#104#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#101#110#97#98#108#101#100#34#32#116#121#112#101+
+ #32#98#111#111#108#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
+ #108#116#32#116#114#117#101#59#10#32#32#34#116#101#120#116#117#114#101#95+
+ #112#97#110#101#108#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115+
+ #101#116#32#49#51#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32#110+
+ #117#108#108#59#10#32#32#34#116#121#112#101#34#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#49#55#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#84#121#112#101#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#97#99#116#105#118#97#116#101#95#116#121#112+
+ #101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#49#56#32#98#105#116#115#101#116#32#65#99#116#105#118#97#116#101#84#121+
+ #112#101#59#10#32#32#34#107#101#121#115#34#32#116#121#112#101#32#117#98#121+
+ #116#101#32#111#102#102#115#101#116#32#49#57#32#98#105#116#115#101#116#32#75+
+ #101#121#32#100#101#102#97#117#108#116#32#75#69#89#95#78#79#78#69#59#10#32+
+ #32#47#47#87#65#82#78#73#78#71#58#32#34#116#114#105#103#100#97#116#97#34#32+
+ #77#85#83#84#32#98#101#32#100#101#102#105#110#101#100#32#98#101#102#111#114+
+ #101#32#34#116#121#112#101#34#44#32#97#110#100#32#34#116#121#112#101#34#32+
+ #77#85#83#84#32#98#101#32#110#97#109#101#100#32#34#116#121#112#101#34#32#40+
+ #102#111#114#32#110#111#119#44#32#99#97#110#32#98#101#32#99#104#97#110#103+
+ #101#100#32#108#97#116#101#114#41#10#32#32#34#116#114#105#103#103#101#114+
+ #100#97#116#97#34#32#116#121#112#101#32#116#114#105#103#100#97#116#97#91#49+
+ #50#56#93#32#111#102#102#115#101#116#32#50#48#59#32#47#47#32#116#104#101#32+
+ #111#110#108#121#32#115#112#101#99#105#97#108#32#110#101#115#116#101#100#32+
+ #115#116#114#117#99#116#117#114#101#10#125#10#10#10#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#42+
- #10#101#110#117#109#32#123#10#32#32#84#69#88#84#85#82#69#95#78#65#77#69#95+
- #87#65#84#69#82#32#61#32#39#95#119#97#116#101#114#95#48#39#44#10#32#32#84#69+
- #88#84#85#82#69#95#78#65#77#69#95#65#67#73#68#49#32#61#32#39#95#119#97#116+
- #101#114#95#49#39#44#10#32#32#84#69#88#84#85#82#69#95#78#65#77#69#95#65#67+
- #73#68#50#32#61#32#39#95#119#97#116#101#114#95#50#39#44#10#125#10#42#47#10+
- #10#101#110#117#109#32#84#101#120#116#117#114#101#83#112#101#99#105#97#108+
- #32#123#10#32#32#84#69#88#84#85#82#69#95#83#80#69#67#73#65#76#95#87#65#84#69+
- #82#32#61#32#45#49#44#10#32#32#84#69#88#84#85#82#69#95#83#80#69#67#73#65#76+
- #95#65#67#73#68#49#32#61#32#45#50#44#10#32#32#84#69#88#84#85#82#69#95#83#80+
- #69#67#73#65#76#95#65#67#73#68#50#32#61#32#45#51#44#10#32#32#84#69#88#84#85+
- #82#69#95#78#79#78#69#32#61#32#45#52#44#10#125#10#10#47#47#32#100#105#114+
- #101#99#116#105#111#110#115#10#101#110#117#109#32#68#105#114#84#121#112#101+
- #32#123#10#32#32#68#73#82#95#76#69#70#84#44#32#47#47#32#48#10#32#32#68#73#82+
- #95#82#73#71#72#84#44#32#47#47#32#49#10#32#32#68#73#82#95#83#79#77#69#84#72+
- #73#78#71#50#44#32#47#47#32#50#10#125#10#10#47#47#32#116#114#105#103#103#101+
- #114#115#10#101#110#117#109#32#84#114#105#103#103#101#114#84#121#112#101#32+
- #123#10#32#32#84#82#73#71#71#69#82#95#78#79#78#69#44#32#47#47#32#48#10#32#32+
- #84#82#73#71#71#69#82#95#69#88#73#84#44#32#47#47#32#49#10#32#32#84#82#73#71+
- #71#69#82#95#84#69#76#69#80#79#82#84#44#32#47#47#32#50#10#32#32#84#82#73#71+
- #71#69#82#95#79#80#69#78#68#79#79#82#44#32#47#47#32#51#10#32#32#84#82#73#71+
- #71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#52#10#32#32#84#82#73+
- #71#71#69#82#95#68#79#79#82#44#32#47#47#32#53#10#32#32#84#82#73#71#71#69#82+
- #95#68#79#79#82#53#44#32#47#47#32#54#10#32#32#84#82#73#71#71#69#82#95#67#76+
- #79#83#69#84#82#65#80#44#32#47#47#32#55#10#32#32#84#82#73#71#71#69#82#95#84+
- #82#65#80#44#32#47#47#32#56#10#32#32#84#82#73#71#71#69#82#95#80#82#69#83#83+
- #44#32#47#47#32#57#10#32#32#84#82#73#71#71#69#82#95#83#69#67#82#69#84#44#32+
- #47#47#32#49#48#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80#44#32#47+
- #47#32#49#49#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87#78#44#32+
- #47#47#32#49#50#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#44#32#47#47#32+
- #49#51#10#32#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69#44#32#47#47#32+
- #49#52#10#32#32#84#82#73#71#71#69#82#95#79#78#44#32#47#47#32#49#53#10#32#32+
- #84#82#73#71#71#69#82#95#79#70#70#44#32#47#47#32#49#54#10#32#32#84#82#73#71+
- #71#69#82#95#79#78#79#70#70#44#32#47#47#32#49#55#10#32#32#84#82#73#71#71#69+
- #82#95#83#79#85#78#68#44#32#47#47#32#49#56#10#32#32#84#82#73#71#71#69#82#95+
- #83#80#65#87#78#77#79#78#83#84#69#82#44#32#47#47#32#49#57#10#32#32#84#82#73+
- #71#71#69#82#95#83#80#65#87#78#73#84#69#77#44#32#47#47#32#50#48#10#32#32#84+
- #82#73#71#71#69#82#95#77#85#83#73#67#44#32#47#47#32#50#49#10#32#32#84#82#73+
- #71#71#69#82#95#80#85#83#72#44#32#47#47#32#50#50#10#32#32#84#82#73#71#71#69+
- #82#95#83#67#79#82#69#44#32#47#47#32#50#51#10#32#32#84#82#73#71#71#69#82#95+
- #77#69#83#83#65#71#69#44#32#47#47#32#50#52#10#32#32#84#82#73#71#71#69#82#95+
- #68#65#77#65#71#69#44#32#47#47#32#50#53#10#32#32#84#82#73#71#71#69#82#95#72+
- #69#65#76#84#72#44#32#47#47#32#50#54#10#32#32#84#82#73#71#71#69#82#95#83#72+
- #79#84#44#32#47#47#32#50#55#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67+
- #84#44#32#47#47#32#50#56#10#32#32#84#82#73#71#71#69#82#95#83#67#82#73#80#84+
- #44#32#47#47#32#50#57#10#32#32#47#47#10#32#32#84#82#73#71#71#69#82#95#77#65+
- #88#32#61#32#77#65#88#44#10#125#10#10#47#47#32#34#97#115#32#88#88#88#34#32+
- #109#101#97#110#115#32#34#103#101#110#101#114#97#116#101#32#116#104#105#115+
- #32#105#100#101#110#116#105#102#105#101#114#32#102#111#114#32#112#97#115#99+
- #97#108#32#115#111#117#114#99#101#115#10#98#105#116#115#101#116#32#80#97#110+
- #101#108#84#121#112#101#32#123#10#32#32#80#65#78#69#76#95#78#79#78#69#32#61+
- #32#48#44#32#47#47#32#48#10#32#32#80#65#78#69#76#95#87#65#76#76#44#32#47#47+
- #32#49#10#32#32#80#65#78#69#76#95#66#65#67#75#44#32#47#47#32#50#10#32#32#80+
- #65#78#69#76#95#70#79#82#69#44#32#47#47#32#52#10#32#32#80#65#78#69#76#95#87+
- #65#84#69#82#44#32#47#47#32#56#10#32#32#80#65#78#69#76#95#65#67#73#68#49#44+
- #32#47#47#32#49#54#10#32#32#80#65#78#69#76#95#65#67#73#68#50#44#32#47#47#32+
- #51#50#10#32#32#80#65#78#69#76#95#83#84#69#80#44#32#47#47#32#54#52#10#32#32+
- #80#65#78#69#76#95#76#73#70#84#85#80#44#32#47#47#32#49#50#56#10#32#32#80#65+
- #78#69#76#95#76#73#70#84#68#79#87#78#44#32#47#47#32#50#53#54#10#32#32#80#65+
- #78#69#76#95#79#80#69#78#68#79#79#82#44#32#47#47#32#53#49#50#10#32#32#80#65+
- #78#69#76#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#49#48#50#52#10#32#32+
- #80#65#78#69#76#95#66#76#79#67#75#77#79#78#44#32#47#47#32#50#48#52#56#10#32+
- #32#80#65#78#69#76#95#76#73#70#84#76#69#70#84#44#32#47#47#32#52#48#57#54#10+
- #32#32#80#65#78#69#76#95#76#73#70#84#82#73#71#72#84#44#32#47#47#32#56#49#57+
- #50#10#125#10#10#98#105#116#115#101#116#32#80#97#110#101#108#70#108#97#103+
- #32#123#10#32#32#80#65#78#69#76#95#70#76#65#71#95#78#79#78#69#32#61#32#48#44+
- #32#47#47#32#48#10#32#32#80#65#78#69#76#95#70#76#65#71#95#66#76#69#78#68#73+
- #78#71#44#32#47#47#32#49#10#32#32#80#65#78#69#76#95#70#76#65#71#95#72#73#68+
- #69#44#32#47#47#32#50#10#32#32#80#65#78#69#76#95#70#76#65#71#95#87#65#84#69+
- #82#84#69#88#84#85#82#69#83#44#32#47#47#32#52#10#125#10#10#101#110#117#109+
- #32#69#102#102#101#99#116#65#99#116#105#111#110#32#123#10#32#32#69#70#70#69+
- #67#84#95#78#79#78#69#44#32#47#47#32#48#10#32#32#69#70#70#69#67#84#95#84#69+
- #76#69#80#79#82#84#44#32#47#47#32#49#10#32#32#69#70#70#69#67#84#95#82#69#83+
- #80#65#87#78#44#32#47#47#32#50#10#32#32#69#70#70#69#67#84#95#70#73#82#69#44+
- #32#47#47#32#51#10#125#10#10#101#110#117#109#32#73#116#101#109#32#123#10#32+
- #32#73#84#69#77#95#78#79#78#69#44#32#47#47#32#48#10#32#32#73#84#69#77#95#77+
- #69#68#75#73#84#95#83#77#65#76#76#44#32#47#47#32#49#10#32#32#73#84#69#77#95+
- #77#69#68#75#73#84#95#76#65#82#71#69#44#32#47#47#32#50#10#32#32#73#84#69#77+
- #95#77#69#68#75#73#84#95#66#76#65#67#75#44#32#47#47#32#51#10#32#32#73#84#69+
- #77#95#65#82#77#79#82#95#71#82#69#69#78#44#32#47#47#32#52#10#32#32#73#84#69+
- #77#95#65#82#77#79#82#95#66#76#85#69#44#32#47#47#32#53#10#32#32#73#84#69#77+
- #95#83#80#72#69#82#69#95#66#76#85#69#44#32#47#47#32#54#10#32#32#73#84#69#77+
- #95#83#80#72#69#82#69#95#87#72#73#84#69#44#32#47#47#32#55#10#32#32#73#84#69+
- #77#95#83#85#73#84#44#32#47#47#32#56#10#32#32#73#84#69#77#95#79#88#89#71#69+
- #78#44#32#47#47#32#57#10#32#32#73#84#69#77#95#73#78#86#85#76#44#32#47#47#32+
- #49#48#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#65#87#44#32#47#47#32+
- #49#49#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#72#79#84#71#85#78#49+
- #44#32#47#47#32#49#50#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#72#79+
- #84#71#85#78#50#44#32#47#47#32#49#51#10#32#32#73#84#69#77#95#87#69#65#80#79+
- #78#95#67#72#65#73#78#71#85#78#44#32#47#47#32#49#52#10#32#32#73#84#69#77#95+
- #87#69#65#80#79#78#95#82#79#67#75#69#84#76#65#85#78#67#72#69#82#44#32#47#47+
- #32#49#53#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#80#76#65#83#77#65#44+
- #32#47#47#32#49#54#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#66#70#71#44+
- #32#47#47#32#49#55#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#85#80#69+
- #82#80#85#76#69#77#69#84#44#32#47#47#32#49#56#10#32#32#73#84#69#77#95#65#77+
- #77#79#95#66#85#76#76#69#84#83#44#32#47#47#32#49#57#10#32#32#73#84#69#77#95+
- #65#77#77#79#95#66#85#76#76#69#84#83#95#66#79#88#44#32#47#47#32#50#48#10#32+
- #32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#44#32#47#47#32#50#49#10+
- #32#32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#95#66#79#88#44#32#47+
- #47#32#50#50#10#32#32#73#84#69#77#95#65#77#77#79#95#82#79#67#75#69#84#44#32+
- #47#47#32#50#51#10#32#32#73#84#69#77#95#65#77#77#79#95#82#79#67#75#69#84#95+
- #66#79#88#44#32#47#47#32#50#52#10#32#32#73#84#69#77#95#65#77#77#79#95#67#69+
- #76#76#44#32#47#47#32#50#53#10#32#32#73#84#69#77#95#65#77#77#79#95#67#69#76+
- #76#95#66#73#71#44#32#47#47#32#50#54#10#32#32#73#84#69#77#95#65#77#77#79#95+
- #66#65#67#75#80#65#67#75#44#32#47#47#32#50#55#10#32#32#73#84#69#77#95#75#69+
- #89#95#82#69#68#44#32#47#47#32#50#56#10#32#32#73#84#69#77#95#75#69#89#95#71+
- #82#69#69#78#44#32#47#47#32#50#57#10#32#32#73#84#69#77#95#75#69#89#95#66#76+
- #85#69#44#32#47#47#32#51#48#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#75+
- #65#83#84#69#84#44#32#47#47#32#51#49#10#32#32#73#84#69#77#95#87#69#65#80#79+
- #78#95#80#73#83#84#79#76#44#32#47#47#32#51#50#10#32#32#73#84#69#77#95#66#79+
- #84#84#76#69#44#32#47#47#32#51#51#10#32#32#73#84#69#77#95#72#69#76#77#69#84+
- #44#32#47#47#32#51#52#10#32#32#73#84#69#77#95#74#69#84#80#65#67#75#44#32#47+
- #47#32#51#53#10#32#32#73#84#69#77#95#73#78#86#73#83#44#32#47#47#32#51#54#10+
- #32#32#73#84#69#77#95#87#69#65#80#79#78#95#70#76#65#77#69#84#72#82#79#87#69+
- #82#44#32#47#47#32#51#55#10#32#32#73#84#69#77#95#65#77#77#79#95#70#85#69#76+
- #67#65#78#44#32#47#47#32#51#56#10#32#32#47#47#10#32#32#73#84#69#77#95#77#65+
- #88#32#61#32#77#65#88#44#32#47#47#32#115#116#111#114#101#32#116#104#101#32+
- #108#97#115#116#32#105#116#101#109#39#115#32#105#100#32#105#110#32#104#101+
- #114#101#32#117#115#101#32#116#104#105#115#32#105#110#32#102#111#114#32#108+
- #111#111#112#115#10#125#10#10#98#105#116#115#101#116#32#73#116#101#109#79+
- #112#116#105#111#110#32#123#10#32#32#73#84#69#77#95#79#80#84#73#79#78#95#78+
- #79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#73#84#69#77#95#79#80#84#73+
- #79#78#95#79#78#76#89#68#77#44#32#47#47#32#49#10#32#32#73#84#69#77#95#79#80+
- #84#73#79#78#95#70#65#76#76#44#32#47#47#32#50#10#125#10#10#101#110#117#109+
- #32#65#114#101#97#84#121#112#101#32#123#10#32#32#65#82#69#65#95#78#79#78#69+
- #44#32#47#47#32#48#10#32#32#65#82#69#65#95#80#76#65#89#69#82#80#79#73#78#84+
- #49#44#32#47#47#32#49#10#32#32#65#82#69#65#95#80#76#65#89#69#82#80#79#73#78+
- #84#50#44#32#47#47#32#50#10#32#32#65#82#69#65#95#68#77#80#79#73#78#84#44#32+
- #47#47#32#51#10#32#32#65#82#69#65#95#82#69#68#70#76#65#71#44#32#47#47#32#52+
- #10#32#32#65#82#69#65#95#66#76#85#69#70#76#65#71#44#32#47#47#32#53#10#32#32+
- #65#82#69#65#95#68#79#77#70#76#65#71#44#32#47#47#32#54#10#32#32#65#82#69#65+
- #95#82#69#68#84#69#65#77#80#79#73#78#84#44#32#47#47#32#55#10#32#32#65#82#69+
- #65#95#66#76#85#69#84#69#65#77#80#79#73#78#84#44#32#47#47#32#56#10#125#10#10+
- #101#110#117#109#32#77#111#110#115#116#101#114#32#123#10#32#32#77#79#78#83+
- #84#69#82#95#78#79#78#69#44#32#47#47#32#48#10#32#32#77#79#78#83#84#69#82#95+
- #68#69#77#79#78#44#32#47#47#32#49#10#32#32#77#79#78#83#84#69#82#95#73#77#80+
- #44#32#47#47#32#50#10#32#32#77#79#78#83#84#69#82#95#90#79#77#66#89#44#32#47+
- #47#32#51#10#32#32#77#79#78#83#84#69#82#95#83#69#82#71#44#32#47#47#32#52#10+
- #32#32#77#79#78#83#84#69#82#95#67#89#66#69#82#44#32#47#47#32#53#10#32#32#77+
- #79#78#83#84#69#82#95#67#71#85#78#44#32#47#47#32#54#10#32#32#77#79#78#83#84+
- #69#82#95#66#65#82#79#78#44#32#47#47#32#55#10#32#32#77#79#78#83#84#69#82#95+
- #75#78#73#71#72#84#44#32#47#47#32#56#10#32#32#77#79#78#83#84#69#82#95#67#65+
- #67#79#44#32#47#47#32#57#10#32#32#77#79#78#83#84#69#82#95#83#79#85#76#44#32+
- #47#47#32#49#48#10#32#32#77#79#78#83#84#69#82#95#80#65#73#78#44#32#47#47#32+
- #49#49#10#32#32#77#79#78#83#84#69#82#95#83#80#73#68#69#82#44#32#47#47#32#49+
- #50#10#32#32#77#79#78#83#84#69#82#95#66#83#80#44#32#47#47#32#49#51#10#32#32+
- #77#79#78#83#84#69#82#95#77#65#78#67#85#66#44#32#47#47#32#49#52#10#32#32#77+
- #79#78#83#84#69#82#95#83#75#69#76#44#32#47#47#32#49#53#10#32#32#77#79#78#83+
- #84#69#82#95#86#73#76#69#44#32#47#47#32#49#54#10#32#32#77#79#78#83#84#69#82+
- #95#70#73#83#72#44#32#47#47#32#49#55#10#32#32#77#79#78#83#84#69#82#95#66#65+
- #82#82#69#76#44#32#47#47#32#49#56#10#32#32#77#79#78#83#84#69#82#95#82#79#66+
- #79#44#32#47#47#32#49#57#10#32#32#77#79#78#83#84#69#82#95#77#65#78#44#32#47+
- #47#32#50#48#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#83+
- #104#111#116#32#123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#80#73#83+
- #84#79#76#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
- #66#85#76#76#69#84#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72+
- #79#84#95#83#72#79#84#71#85#78#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69+
- #82#95#83#72#79#84#95#83#83#71#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69+
- #82#95#83#72#79#84#95#73#77#80#44#32#47#47#32#52#10#32#32#84#82#73#71#71#69+
- #82#95#83#72#79#84#95#80#76#65#83#77#65#44#32#47#47#32#53#10#32#32#84#82#73+
- #71#71#69#82#95#83#72#79#84#95#83#80#73#68#69#82#44#32#47#47#32#54#10#32#32+
- #84#82#73#71#71#69#82#95#83#72#79#84#95#67#65#67#79#44#32#47#47#32#55#10#32+
- #32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#65#82#79#78#44#32#47#47#32#56+
- #10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#77#65#78#67#85#66#44#32#47+
- #47#32#57#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#82#69#86#44#32#47+
- #47#32#49#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#82#79#67#75#69+
- #84#44#32#47#47#32#49#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66+
- #70#71#44#32#47#47#32#49#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
- #69#88#80#76#44#32#47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79+
- #84#95#66#70#71#69#88#80#76#44#32#47#47#32#49#52#10#32#32#47#47#10#32#32#84+
- #82#73#71#71#69#82#95#83#72#79#84#95#77#65#88#32#61#32#77#65#88#44#10#125#10+
- #10#101#110#117#109#32#84#114#105#103#103#101#114#83#104#111#116#84#97#114+
- #103#101#116#32#123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82+
- #71#69#84#95#78#79#78#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95+
- #83#72#79#84#95#84#65#82#71#69#84#95#77#79#78#44#32#47#47#32#49#10#32#32#84+
- #82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#80#76#82#44#32#47+
- #47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84+
- #95#82#69#68#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
- #95#84#65#82#71#69#84#95#66#76#85#69#44#32#47#47#32#52#10#32#32#84#82#73#71+
- #71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#77#79#78#80#76#82#44#32#47+
- #47#32#53#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84+
- #95#80#76#82#77#79#78#44#32#47#47#32#54#10#125#10#10#101#110#117#109#32#84+
- #114#105#103#103#101#114#83#104#111#116#65#105#109#32#123#10#32#32#84#82#73+
- #71#71#69#82#95#83#72#79#84#95#65#73#77#95#68#69#70#65#85#76#84#44#32#47#47+
- #32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#65#76#76+
- #77#65#80#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
- #65#73#77#95#84#82#65#67#69#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82+
- #95#83#72#79#84#95#65#73#77#95#84#82#65#67#69#65#76#76#44#32#47#47#32#51#10+
- #125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99+
- #116#32#123#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#65#82+
- #84#73#67#76#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70+
- #69#67#84#95#65#78#73#77#65#84#73#79#78#44#32#47#47#32#49#10#125#10#10#101+
- #110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#84#121#112+
- #101#32#123#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#76#73+
- #81#85#73#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69+
- #67#84#95#76#76#73#81#85#73#68#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69+
- #82#95#69#70#70#69#67#84#95#68#76#73#81#85#73#68#44#32#47#47#32#50#10#32#32+
- #84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#66#76#79#79#68#44#32#47#47#32+
- #51#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#80#65#82#75#44+
- #32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#66#85+
- #66#66#76#69#44#32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69+
- #67#84#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#101#110#117#109#32#84+
- #114#105#103#103#101#114#69#102#102#101#99#116#80#111#115#32#123#10#32#32#84+
- #82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#79#83#95#67#69#78#84#69#82#44+
- #32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#79+
- #83#95#65#82#69#65#44#32#47#47#32#49#10#125#10#10#98#105#116#115#101#116#32+
- #65#99#116#105#118#97#116#101#84#121#112#101#32#123#10#32#32#65#67#84#73#86+
- #65#84#69#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#65#67#84#73+
- #86#65#84#69#95#80#76#65#89#69#82#67#79#76#76#73#68#69#44#32#47#47#32#49#10+
- #32#32#65#67#84#73#86#65#84#69#95#77#79#78#83#84#69#82#67#79#76#76#73#68#69+
- #44#32#47#47#32#50#10#32#32#65#67#84#73#86#65#84#69#95#80#76#65#89#69#82#80+
- #82#69#83#83#44#32#47#47#32#52#10#32#32#65#67#84#73#86#65#84#69#95#77#79#78+
- #83#84#69#82#80#82#69#83#83#44#32#47#47#32#56#10#32#32#65#67#84#73#86#65#84+
- #69#95#83#72#79#84#44#32#47#47#32#49#54#10#32#32#65#67#84#73#86#65#84#69#95+
- #78#79#77#79#78#83#84#69#82#44#32#47#47#32#51#50#10#32#32#65#67#84#73#86#65+
- #84#69#95#67#85#83#84#79#77#32#61#32#50#53#53#44#32#47#47#32#110#111#116#101+
- #32#116#104#97#116#32#34#100#105#114#101#99#116#32#97#115#115#105#103#110#34+
- #32#102#105#101#108#100#32#100#111#101#115#110#39#116#32#97#102#102#101#99+
- #116#32#98#105#116#32#99#111#117#110#116#101#114#10#125#10#10#98#105#116#115+
- #101#116#32#75#101#121#32#123#10#32#32#75#69#89#95#78#79#78#69#32#61#32#48+
- #44#32#47#47#32#48#10#32#32#75#69#89#95#82#69#68#44#32#47#47#32#49#10#32#32+
- #75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#10#32#32#75#69#89#95#66#76#85+
- #69#44#32#47#47#32#52#10#32#32#75#69#89#95#82#69#68#84#69#65#77#44#32#47#47+
- #32#56#10#32#32#75#69#89#95#66#76#85#69#84#69#65#77#44#32#47#47#32#49#54#10+
- #125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47+
+ #32#115#112#101#99#105#97#108#32#116#101#120#116#117#114#101#32#105#100#101+
+ #110#116#105#102#105#101#114#115#44#32#117#115#101#100#32#116#111#32#103#101+
+ #110#101#114#97#116#101#32#112#97#115#99#97#108#32#115#111#117#114#99#101+
+ #115#10#101#110#117#109#32#84#101#120#116#117#114#101#83#112#101#99#105#97+
+ #108#32#123#10#32#32#84#69#88#84#85#82#69#95#83#80#69#67#73#65#76#95#87#65+
+ #84#69#82#32#61#32#45#49#44#10#32#32#84#69#88#84#85#82#69#95#83#80#69#67#73+
+ #65#76#95#65#67#73#68#49#32#61#32#45#50#44#10#32#32#84#69#88#84#85#82#69#95+
+ #83#80#69#67#73#65#76#95#65#67#73#68#50#32#61#32#45#51#44#10#32#32#84#69#88+
+ #84#85#82#69#95#78#79#78#69#32#61#32#45#52#44#10#125#10#10#47#47#32#100#105+
+ #114#101#99#116#105#111#110#115#10#101#110#117#109#32#68#105#114#84#121#112+
+ #101#32#123#10#32#32#68#73#82#95#76#69#70#84#44#32#47#47#32#48#10#32#32#68+
+ #73#82#95#82#73#71#72#84#44#32#47#47#32#49#10#32#32#68#73#82#95#83#79#77#69+
+ #84#72#73#78#71#50#44#32#47#47#32#50#10#125#10#10#47#47#32#116#114#105#103+
+ #103#101#114#115#10#101#110#117#109#32#84#114#105#103#103#101#114#84#121#112+
+ #101#32#123#10#32#32#84#82#73#71#71#69#82#95#78#79#78#69#44#32#47#47#32#48+
+ #10#32#32#84#82#73#71#71#69#82#95#69#88#73#84#44#32#47#47#32#49#10#32#32#84+
+ #82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#44#32#47#47#32#50#10#32#32#84+
+ #82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32#47#47#32#51#10#32#32#84+
+ #82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#52#10#32#32+
+ #84#82#73#71#71#69#82#95#68#79#79#82#44#32#47#47#32#53#10#32#32#84#82#73#71+
+ #71#69#82#95#68#79#79#82#53#44#32#47#47#32#54#10#32#32#84#82#73#71#71#69#82+
+ #95#67#76#79#83#69#84#82#65#80#44#32#47#47#32#55#10#32#32#84#82#73#71#71#69+
+ #82#95#84#82#65#80#44#32#47#47#32#56#10#32#32#84#82#73#71#71#69#82#95#80#82+
+ #69#83#83#44#32#47#47#32#57#10#32#32#84#82#73#71#71#69#82#95#83#69#67#82#69+
+ #84#44#32#47#47#32#49#48#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80+
+ #44#32#47#47#32#49#49#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87+
+ #78#44#32#47#47#32#49#50#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#44#32+
+ #47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69#44#32+
+ #47#47#32#49#52#10#32#32#84#82#73#71#71#69#82#95#79#78#44#32#47#47#32#49#53+
+ #10#32#32#84#82#73#71#71#69#82#95#79#70#70#44#32#47#47#32#49#54#10#32#32#84+
+ #82#73#71#71#69#82#95#79#78#79#70#70#44#32#47#47#32#49#55#10#32#32#84#82#73+
+ #71#71#69#82#95#83#79#85#78#68#44#32#47#47#32#49#56#10#32#32#84#82#73#71#71+
+ #69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#44#32#47#47#32#49#57#10#32#32+
+ #84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#44#32#47#47#32#50#48#10+
+ #32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#44#32#47#47#32#50#49#10#32#32+
+ #84#82#73#71#71#69#82#95#80#85#83#72#44#32#47#47#32#50#50#10#32#32#84#82#73+
+ #71#71#69#82#95#83#67#79#82#69#44#32#47#47#32#50#51#10#32#32#84#82#73#71#71+
+ #69#82#95#77#69#83#83#65#71#69#44#32#47#47#32#50#52#10#32#32#84#82#73#71#71+
+ #69#82#95#68#65#77#65#71#69#44#32#47#47#32#50#53#10#32#32#84#82#73#71#71#69+
+ #82#95#72#69#65#76#84#72#44#32#47#47#32#50#54#10#32#32#84#82#73#71#71#69#82+
+ #95#83#72#79#84#44#32#47#47#32#50#55#10#32#32#84#82#73#71#71#69#82#95#69#70+
+ #70#69#67#84#44#32#47#47#32#50#56#10#32#32#84#82#73#71#71#69#82#95#83#67#82+
+ #73#80#84#44#32#47#47#32#50#57#10#32#32#47#47#10#32#32#84#82#73#71#71#69#82+
+ #95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#47#47#32#34#97#115#32#88#88+
+ #88#34#32#109#101#97#110#115#32#34#103#101#110#101#114#97#116#101#32#116#104+
+ #105#115#32#105#100#101#110#116#105#102#105#101#114#32#102#111#114#32#112#97+
+ #115#99#97#108#32#115#111#117#114#99#101#115#10#98#105#116#115#101#116#32#80+
+ #97#110#101#108#84#121#112#101#32#123#10#32#32#80#65#78#69#76#95#78#79#78#69+
+ #32#61#32#48#44#32#47#47#32#48#10#32#32#80#65#78#69#76#95#87#65#76#76#44#32+
+ #47#47#32#49#10#32#32#80#65#78#69#76#95#66#65#67#75#44#32#47#47#32#50#10#32+
+ #32#80#65#78#69#76#95#70#79#82#69#44#32#47#47#32#52#10#32#32#80#65#78#69#76+
+ #95#87#65#84#69#82#44#32#47#47#32#56#10#32#32#80#65#78#69#76#95#65#67#73#68+
+ #49#44#32#47#47#32#49#54#10#32#32#80#65#78#69#76#95#65#67#73#68#50#44#32#47+
+ #47#32#51#50#10#32#32#80#65#78#69#76#95#83#84#69#80#44#32#47#47#32#54#52#10+
+ #32#32#80#65#78#69#76#95#76#73#70#84#85#80#44#32#47#47#32#49#50#56#10#32#32+
+ #80#65#78#69#76#95#76#73#70#84#68#79#87#78#44#32#47#47#32#50#53#54#10#32#32+
+ #80#65#78#69#76#95#79#80#69#78#68#79#79#82#44#32#47#47#32#53#49#50#10#32#32+
+ #80#65#78#69#76#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#49#48#50#52#10+
+ #32#32#80#65#78#69#76#95#66#76#79#67#75#77#79#78#44#32#47#47#32#50#48#52#56+
+ #10#32#32#80#65#78#69#76#95#76#73#70#84#76#69#70#84#44#32#47#47#32#52#48#57+
+ #54#10#32#32#80#65#78#69#76#95#76#73#70#84#82#73#71#72#84#44#32#47#47#32#56+
+ #49#57#50#10#125#10#10#98#105#116#115#101#116#32#80#97#110#101#108#70#108#97+
+ #103#32#123#10#32#32#80#65#78#69#76#95#70#76#65#71#95#78#79#78#69#32#61#32+
+ #48#44#32#47#47#32#48#10#32#32#80#65#78#69#76#95#70#76#65#71#95#66#76#69#78+
+ #68#73#78#71#44#32#47#47#32#49#10#32#32#80#65#78#69#76#95#70#76#65#71#95#72+
+ #73#68#69#44#32#47#47#32#50#10#32#32#80#65#78#69#76#95#70#76#65#71#95#87#65+
+ #84#69#82#84#69#88#84#85#82#69#83#44#32#47#47#32#52#10#125#10#10#101#110#117+
+ #109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#123#10#32#32#69#70#70+
+ #69#67#84#95#78#79#78#69#44#32#47#47#32#48#10#32#32#69#70#70#69#67#84#95#84+
+ #69#76#69#80#79#82#84#44#32#47#47#32#49#10#32#32#69#70#70#69#67#84#95#82#69+
+ #83#80#65#87#78#44#32#47#47#32#50#10#32#32#69#70#70#69#67#84#95#70#73#82#69+
+ #44#32#47#47#32#51#10#125#10#10#101#110#117#109#32#73#116#101#109#32#123#10+
+ #32#32#73#84#69#77#95#78#79#78#69#44#32#47#47#32#48#10#32#32#73#84#69#77#95+
+ #77#69#68#75#73#84#95#83#77#65#76#76#44#32#47#47#32#49#10#32#32#73#84#69#77+
+ #95#77#69#68#75#73#84#95#76#65#82#71#69#44#32#47#47#32#50#10#32#32#73#84#69+
+ #77#95#77#69#68#75#73#84#95#66#76#65#67#75#44#32#47#47#32#51#10#32#32#73#84+
+ #69#77#95#65#82#77#79#82#95#71#82#69#69#78#44#32#47#47#32#52#10#32#32#73#84+
+ #69#77#95#65#82#77#79#82#95#66#76#85#69#44#32#47#47#32#53#10#32#32#73#84#69+
+ #77#95#83#80#72#69#82#69#95#66#76#85#69#44#32#47#47#32#54#10#32#32#73#84#69+
+ #77#95#83#80#72#69#82#69#95#87#72#73#84#69#44#32#47#47#32#55#10#32#32#73#84+
+ #69#77#95#83#85#73#84#44#32#47#47#32#56#10#32#32#73#84#69#77#95#79#88#89#71+
+ #69#78#44#32#47#47#32#57#10#32#32#73#84#69#77#95#73#78#86#85#76#44#32#47#47+
+ #32#49#48#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#65#87#44#32#47#47+
+ #32#49#49#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#72#79#84#71#85#78+
+ #49#44#32#47#47#32#49#50#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#72+
+ #79#84#71#85#78#50#44#32#47#47#32#49#51#10#32#32#73#84#69#77#95#87#69#65#80+
+ #79#78#95#67#72#65#73#78#71#85#78#44#32#47#47#32#49#52#10#32#32#73#84#69#77+
+ #95#87#69#65#80#79#78#95#82#79#67#75#69#84#76#65#85#78#67#72#69#82#44#32#47+
+ #47#32#49#53#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#80#76#65#83#77#65+
+ #44#32#47#47#32#49#54#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#66#70#71+
+ #44#32#47#47#32#49#55#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#85#80+
+ #69#82#80#85#76#69#77#69#84#44#32#47#47#32#49#56#10#32#32#73#84#69#77#95#65+
+ #77#77#79#95#66#85#76#76#69#84#83#44#32#47#47#32#49#57#10#32#32#73#84#69#77+
+ #95#65#77#77#79#95#66#85#76#76#69#84#83#95#66#79#88#44#32#47#47#32#50#48#10+
+ #32#32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#44#32#47#47#32#50#49+
+ #10#32#32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#95#66#79#88#44#32+
+ #47#47#32#50#50#10#32#32#73#84#69#77#95#65#77#77#79#95#82#79#67#75#69#84#44+
+ #32#47#47#32#50#51#10#32#32#73#84#69#77#95#65#77#77#79#95#82#79#67#75#69#84+
+ #95#66#79#88#44#32#47#47#32#50#52#10#32#32#73#84#69#77#95#65#77#77#79#95#67+
+ #69#76#76#44#32#47#47#32#50#53#10#32#32#73#84#69#77#95#65#77#77#79#95#67#69+
+ #76#76#95#66#73#71#44#32#47#47#32#50#54#10#32#32#73#84#69#77#95#65#77#77#79+
+ #95#66#65#67#75#80#65#67#75#44#32#47#47#32#50#55#10#32#32#73#84#69#77#95#75+
+ #69#89#95#82#69#68#44#32#47#47#32#50#56#10#32#32#73#84#69#77#95#75#69#89#95+
+ #71#82#69#69#78#44#32#47#47#32#50#57#10#32#32#73#84#69#77#95#75#69#89#95#66+
+ #76#85#69#44#32#47#47#32#51#48#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95+
+ #75#65#83#84#69#84#44#32#47#47#32#51#49#10#32#32#73#84#69#77#95#87#69#65#80+
+ #79#78#95#80#73#83#84#79#76#44#32#47#47#32#51#50#10#32#32#73#84#69#77#95#66+
+ #79#84#84#76#69#44#32#47#47#32#51#51#10#32#32#73#84#69#77#95#72#69#76#77#69+
+ #84#44#32#47#47#32#51#52#10#32#32#73#84#69#77#95#74#69#84#80#65#67#75#44#32+
+ #47#47#32#51#53#10#32#32#73#84#69#77#95#73#78#86#73#83#44#32#47#47#32#51#54+
+ #10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#70#76#65#77#69#84#72#82#79#87+
+ #69#82#44#32#47#47#32#51#55#10#32#32#73#84#69#77#95#65#77#77#79#95#70#85#69+
+ #76#67#65#78#44#32#47#47#32#51#56#10#32#32#47#47#10#32#32#73#84#69#77#95#77+
+ #65#88#32#61#32#77#65#88#44#32#47#47#32#115#116#111#114#101#32#116#104#101+
+ #32#108#97#115#116#32#105#116#101#109#39#115#32#105#100#32#105#110#32#104+
+ #101#114#101#32#117#115#101#32#116#104#105#115#32#105#110#32#102#111#114#32+
+ #108#111#111#112#115#10#125#10#10#98#105#116#115#101#116#32#73#116#101#109+
+ #79#112#116#105#111#110#32#123#10#32#32#73#84#69#77#95#79#80#84#73#79#78#95+
+ #78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#73#84#69#77#95#79#80#84+
+ #73#79#78#95#79#78#76#89#68#77#44#32#47#47#32#49#10#32#32#73#84#69#77#95#79+
+ #80#84#73#79#78#95#70#65#76#76#44#32#47#47#32#50#10#125#10#10#101#110#117+
+ #109#32#65#114#101#97#84#121#112#101#32#123#10#32#32#65#82#69#65#95#78#79#78+
+ #69#44#32#47#47#32#48#10#32#32#65#82#69#65#95#80#76#65#89#69#82#80#79#73#78+
+ #84#49#44#32#47#47#32#49#10#32#32#65#82#69#65#95#80#76#65#89#69#82#80#79#73+
+ #78#84#50#44#32#47#47#32#50#10#32#32#65#82#69#65#95#68#77#80#79#73#78#84#44+
+ #32#47#47#32#51#10#32#32#65#82#69#65#95#82#69#68#70#76#65#71#44#32#47#47#32+
+ #52#10#32#32#65#82#69#65#95#66#76#85#69#70#76#65#71#44#32#47#47#32#53#10#32+
+ #32#65#82#69#65#95#68#79#77#70#76#65#71#44#32#47#47#32#54#10#32#32#65#82#69+
+ #65#95#82#69#68#84#69#65#77#80#79#73#78#84#44#32#47#47#32#55#10#32#32#65#82+
+ #69#65#95#66#76#85#69#84#69#65#77#80#79#73#78#84#44#32#47#47#32#56#10#125#10+
+ #10#101#110#117#109#32#77#111#110#115#116#101#114#32#123#10#32#32#77#79#78+
+ #83#84#69#82#95#78#79#78#69#44#32#47#47#32#48#10#32#32#77#79#78#83#84#69#82+
+ #95#68#69#77#79#78#44#32#47#47#32#49#10#32#32#77#79#78#83#84#69#82#95#73#77+
+ #80#44#32#47#47#32#50#10#32#32#77#79#78#83#84#69#82#95#90#79#77#66#89#44#32+
+ #47#47#32#51#10#32#32#77#79#78#83#84#69#82#95#83#69#82#71#44#32#47#47#32#52+
+ #10#32#32#77#79#78#83#84#69#82#95#67#89#66#69#82#44#32#47#47#32#53#10#32#32+
+ #77#79#78#83#84#69#82#95#67#71#85#78#44#32#47#47#32#54#10#32#32#77#79#78#83+
+ #84#69#82#95#66#65#82#79#78#44#32#47#47#32#55#10#32#32#77#79#78#83#84#69#82+
+ #95#75#78#73#71#72#84#44#32#47#47#32#56#10#32#32#77#79#78#83#84#69#82#95#67+
+ #65#67#79#44#32#47#47#32#57#10#32#32#77#79#78#83#84#69#82#95#83#79#85#76#44+
+ #32#47#47#32#49#48#10#32#32#77#79#78#83#84#69#82#95#80#65#73#78#44#32#47#47+
+ #32#49#49#10#32#32#77#79#78#83#84#69#82#95#83#80#73#68#69#82#44#32#47#47#32+
+ #49#50#10#32#32#77#79#78#83#84#69#82#95#66#83#80#44#32#47#47#32#49#51#10#32+
+ #32#77#79#78#83#84#69#82#95#77#65#78#67#85#66#44#32#47#47#32#49#52#10#32#32+
+ #77#79#78#83#84#69#82#95#83#75#69#76#44#32#47#47#32#49#53#10#32#32#77#79#78+
+ #83#84#69#82#95#86#73#76#69#44#32#47#47#32#49#54#10#32#32#77#79#78#83#84#69+
+ #82#95#70#73#83#72#44#32#47#47#32#49#55#10#32#32#77#79#78#83#84#69#82#95#66+
+ #65#82#82#69#76#44#32#47#47#32#49#56#10#32#32#77#79#78#83#84#69#82#95#82#79+
+ #66#79#44#32#47#47#32#49#57#10#32#32#77#79#78#83#84#69#82#95#77#65#78#44#32+
+ #47#47#32#50#48#10#32#32#47#47#32#97#108#105#97#115#101#115#32#40#102#105+
+ #120#109#101#58#32#105#116#32#115#104#111#117#108#100#32#98#101#32#96#77#79+
+ #78#83#84#69#82#95#90#79#77#66#73#69#32#61#32#77#79#78#83#84#69#82#95#90#79+
+ #77#66#89#96#33#41#10#32#32#77#79#78#83#84#69#82#95#90#79#77#66#73#69#32#61+
+ #32#51#44#10#125#10#10#101#110#117#109#32#77#111#110#115#116#101#114#66#101+
+ #104#97#118#105#111#117#114#32#123#10#32#32#66#72#95#78#79#82#77#65#76#44#32+
+ #47#47#32#48#10#32#32#66#72#95#75#73#76#76#69#82#44#32#47#47#32#49#10#32#32+
+ #66#72#95#77#65#78#73#65#67#44#32#47#47#32#50#10#32#32#66#72#95#73#78#83#65+
+ #78#69#44#32#47#47#32#51#10#32#32#66#72#95#67#65#78#78#73#66#65#76#44#32#47+
+ #47#32#52#10#32#32#66#72#95#71#79#79#68#44#32#47#47#32#53#10#125#10#10#101+
+ #110#117#109#32#84#114#105#103#103#101#114#83#104#111#116#32#123#10#32#32#84+
+ #82#73#71#71#69#82#95#83#72#79#84#95#80#73#83#84#79#76#44#32#47#47#32#48#10+
+ #32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#85#76#76#69#84#44#32#47#47+
+ #32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#83#72#79#84#71#85#78+
+ #44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#83#83#71+
+ #44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#73#77#80+
+ #44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#80#76#65+
+ #83#77#65#44#32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
+ #83#80#73#68#69#82#44#32#47#47#32#54#10#32#32#84#82#73#71#71#69#82#95#83#72+
+ #79#84#95#67#65#67#79#44#32#47#47#32#55#10#32#32#84#82#73#71#71#69#82#95#83+
+ #72#79#84#95#66#65#82#79#78#44#32#47#47#32#56#10#32#32#84#82#73#71#71#69#82+
+ #95#83#72#79#84#95#77#65#78#67#85#66#44#32#47#47#32#57#10#32#32#84#82#73#71+
+ #71#69#82#95#83#72#79#84#95#82#69#86#44#32#47#47#32#49#48#10#32#32#84#82#73+
+ #71#71#69#82#95#83#72#79#84#95#82#79#67#75#69#84#44#32#47#47#32#49#49#10#32+
+ #32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#70#71#44#32#47#47#32#49#50#10+
+ #32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#69#88#80#76#44#32#47#47#32#49+
+ #51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#70#71#69#88#80#76#44+
+ #32#47#47#32#49#52#10#32#32#47#47#10#32#32#84#82#73#71#71#69#82#95#83#72#79+
+ #84#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#101#110#117#109#32#84#114+
+ #105#103#103#101#114#83#104#111#116#84#97#114#103#101#116#32#123#10#32#32#84+
+ #82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#78#79#78#69#44#32+
+ #47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69+
+ #84#95#77#79#78#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79+
+ #84#95#84#65#82#71#69#84#95#80#76#82#44#32#47#47#32#50#10#32#32#84#82#73#71+
+ #71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#82#69#68#44#32#47#47#32#51+
+ #10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#66#76+
+ #85#69#44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84+
+ #65#82#71#69#84#95#77#79#78#80#76#82#44#32#47#47#32#53#10#32#32#84#82#73#71+
+ #71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#80#76#82#77#79#78#44#32#47+
+ #47#32#54#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#83#104+
+ #111#116#65#105#109#32#123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
+ #65#73#77#95#68#69#70#65#85#76#84#44#32#47#47#32#48#10#32#32#84#82#73#71#71+
+ #69#82#95#83#72#79#84#95#65#73#77#95#65#76#76#77#65#80#44#32#47#47#32#49#10+
+ #32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#84#82#65#67#69#44+
+ #32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95+
+ #84#82#65#67#69#65#76#76#44#32#47#47#32#51#10#125#10#10#101#110#117#109#32+
+ #84#114#105#103#103#101#114#69#102#102#101#99#116#32#123#10#32#32#84#82#73+
+ #71#71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#44#32#47#47#32+
+ #48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#65#78#73#77#65#84+
+ #73#79#78#44#32#47#47#32#49#10#125#10#10#101#110#117#109#32#84#114#105#103+
+ #103#101#114#69#102#102#101#99#116#84#121#112#101#32#123#10#32#32#84#82#73+
+ #71#71#69#82#95#69#70#70#69#67#84#95#83#76#73#81#85#73#68#44#32#47#47#32#48+
+ #10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#76#76#73#81#85#73#68+
+ #44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#68+
+ #76#73#81#85#73#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#69#70+
+ #70#69#67#84#95#66#76#79#79#68#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69+
+ #82#95#69#70#70#69#67#84#95#83#80#65#82#75#44#32#47#47#32#52#10#32#32#84#82+
+ #73#71#71#69#82#95#69#70#70#69#67#84#95#66#85#66#66#76#69#44#32#47#47#32#53+
+ #10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#77#65#88#32#61#32#77+
+ #65#88#44#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#69#102+
+ #102#101#99#116#80#111#115#32#123#10#32#32#84#82#73#71#71#69#82#95#69#70#70+
+ #69#67#84#95#80#79#83#95#67#69#78#84#69#82#44#32#47#47#32#48#10#32#32#84#82+
+ #73#71#71#69#82#95#69#70#70#69#67#84#95#80#79#83#95#65#82#69#65#44#32#47#47+
+ #32#49#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#77#117#115+
+ #105#99#65#99#116#105#111#110#32#123#10#32#32#84#82#73#71#71#69#82#95#77#85+
+ #83#73#67#95#65#67#84#73#79#78#95#83#84#79#80#44#32#47#47#32#48#10#32#32#84+
+ #82#73#71#71#69#82#95#77#85#83#73#67#95#65#67#84#73#79#78#95#80#76#65#89#44+
+ #32#47#47#32#49#59#32#117#110#112#97#117#115#101#32#111#114#32#114#101#115+
+ #116#97#114#116#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114+
+ #83#99#111#114#101#65#99#116#105#111#110#32#123#10#32#32#84#82#73#71#71#69+
+ #82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#65#68#68#44#32#47#47#32#48#10+
+ #32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#83#85+
+ #66#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65+
+ #67#84#73#79#78#95#87#73#78#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82+
+ #95#83#67#79#82#69#95#65#67#84#73#79#78#95#76#79#79#83#69#44#32#47#47#32#51+
+ #10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115+
+ #97#103#101#68#101#115#116#32#123#10#32#32#84#82#73#71#71#69#82#95#77#69#83+
+ #83#65#71#69#95#68#69#83#84#95#77#69#44#32#47#47#32#48#10#32#32#84#82#73#71+
+ #71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#77#89#95#84#69#65#77#44+
+ #32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68+
+ #69#83#84#95#69#78#69#77#89#95#84#69#65#77#44#32#47#47#32#50#10#32#32#84#82+
+ #73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#82#69#68#95#84#69+
+ #65#77#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71+
+ #69#95#68#69#83#84#95#66#76#85#69#95#84#69#65#77#44#32#47#47#32#52#10#32#32+
+ #84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#69#86#69#82+
+ #89#79#78#69#44#32#47#47#32#53#10#125#10#10#101#110#117#109#32#84#114#105+
+ #103#103#101#114#77#101#115#115#97#103#101#75#105#110#100#32#123#10#32#32#84+
+ #82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#75#73#78#68#95#67#72#65#84#44+
+ #32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#75+
+ #73#78#68#95#71#65#77#69#44#32#47#47#32#49#10#125#10#10#98#105#116#115#101+
+ #116#32#65#99#116#105#118#97#116#101#84#121#112#101#32#123#10#32#32#65#67#84+
+ #73#86#65#84#69#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#65#67+
+ #84#73#86#65#84#69#95#80#76#65#89#69#82#67#79#76#76#73#68#69#44#32#47#47#32+
+ #49#10#32#32#65#67#84#73#86#65#84#69#95#77#79#78#83#84#69#82#67#79#76#76#73+
+ #68#69#44#32#47#47#32#50#10#32#32#65#67#84#73#86#65#84#69#95#80#76#65#89#69+
+ #82#80#82#69#83#83#44#32#47#47#32#52#10#32#32#65#67#84#73#86#65#84#69#95#77+
+ #79#78#83#84#69#82#80#82#69#83#83#44#32#47#47#32#56#10#32#32#65#67#84#73#86+
+ #65#84#69#95#83#72#79#84#44#32#47#47#32#49#54#10#32#32#65#67#84#73#86#65#84+
+ #69#95#78#79#77#79#78#83#84#69#82#44#32#47#47#32#51#50#10#32#32#65#67#84#73+
+ #86#65#84#69#95#67#85#83#84#79#77#32#61#32#50#53#53#44#32#47#47#32#110#111+
+ #116#101#32#116#104#97#116#32#34#100#105#114#101#99#116#32#97#115#115#105+
+ #103#110#34#32#102#105#101#108#100#32#100#111#101#115#110#39#116#32#97#102+
+ #102#101#99#116#32#98#105#116#32#99#111#117#110#116#101#114#10#125#10#10#98+
+ #105#116#115#101#116#32#75#101#121#32#123#10#32#32#75#69#89#95#78#79#78#69+
+ #32#61#32#48#44#32#47#47#32#48#10#32#32#75#69#89#95#82#69#68#44#32#47#47#32+
+ #49#10#32#32#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#10#32#32#75#69#89+
+ #95#66#76#85#69#44#32#47#47#32#52#10#32#32#75#69#89#95#82#69#68#84#69#65#77+
+ #44#32#47#47#32#56#10#32#32#75#69#89#95#66#76#85#69#84#69#65#77#44#32#47#47+
+ #32#49#54#10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114#105#111#117#115#32#116+
- #114#105#103#103#101#114#115#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84#32#123#10#32#32#77#97+
- #112#78#97#109#101#32#105#115#32#34#109#97#112#34#32#116#121#112#101#32#99+
- #104#97#114#91#49#54#93#32#111#102#102#115#101#116#32#48#59#10#125#10#10#84+
+ #47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114#105#111#117+
+ #115#32#116#114#105#103#103#101#114#115#10#84#114#105#103#103#101#114#68#97+
+ #116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84#32#123#10#32+
+ #32#34#109#97#112#34#32#116#121#112#101#32#99#104#97#114#91#49#54#93#32#111+
+ #102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32#32#34#116#97+
+ #114#103#101#116#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102+
+ #115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102+
+ #115#101#116#32#56#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10+
+ #32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32#102#97#108+
+ #115#101#59#10#32#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112+
+ #101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32#101#110+
+ #117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73+
+ #82#95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97+
+ #32#102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32+
+ #84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#84#82#73#71#71#69+
+ #82#95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79#82#53#44#32#84#82+
+ #73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82#73#71#71#69#82#95+
+ #84#82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80#44#32#84#82#73+
+ #71#71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71#71#69#82#95#76#73+
+ #70#84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112+
+ #101#32#105#110#116#32#111#102#102#115#101#116#32#48#32#112#97#110#101#108+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105+
+ #108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#52#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32+
+ #32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#53#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#125+
+ #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#40#84#82#73+
+ #71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71#69#82#95#79#78#44#32#84+
+ #82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71#69#82#95#79#78#79#70#70+
+ #41#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101+
+ #32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116+
+ #120#121#32#100#101#102#97#117#108#116#32#40#48#32#48#41#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#122#101#34#32#116#121+
+ #112#101#32#115#105#122#101#32#111#102#102#115#101#116#32#56#32#97#115#32+
+ #116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#34+
+ #119#97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34+
+ #99#111#117#110#116#34#32#97#108#105#97#115#32#112#114#101#115#115#67#111+
+ #117#110#116#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
+ #115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#109+
+ #111#110#115#116#101#114#105#100#34#32#116#121#112#101#32#105#110#116#32#111+
+ #102#102#115#101#116#32#49#54#32#109#111#110#115#116#101#114#32#97#115#32+
+ #109#111#110#115#116#101#114#105#100#32#100#101#102#97#117#108#116#32#110+
+ #117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111#109#34#32#116+
+ #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#50#48#32#100+
+ #101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47#32#116#104+
+ #105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118#105#110#103+
+ #32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110#101#108#105+
+ #100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32#110#117#108+
+ #108#59#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#83#99#111+
+ #114#101#84#101#97#109#32#123#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82+
+ #69#95#84#69#65#77#95#77#73#78#69#95#82#69#68#44#32#47#47#32#48#10#32#32#84+
+ #82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69#95#66#76+
+ #85#69#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95+
+ #84#69#65#77#95#70#79#82#67#69#95#82#69#68#44#32#47#47#32#50#10#32#32#84#82+
+ #73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95#66#76+
+ #85#69#44#32#47#47#32#51#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
+ #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#69#67#82#69#84#32#123#10+
+ #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
+ #73#71#71#69#82#95#84#69#88#84#85#82#69#32#123#10#32#32#34#97#99#116#105#118+
+ #97#116#101#95#111#110#99#101#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#48#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#110+
+ #105#109#97#116#101#95#111#110#99#101#34#32#116#121#112#101#32#98#111#111+
+ #108#32#111#102#102#115#101#116#32#49#32#100#101#102#97#117#108#116#32#102+
+ #97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125+
+ #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71+
+ #71#69#82#95#83#79#85#78#68#32#123#10#32#32#34#115#111#117#110#100#95#110#97+
+ #109#101#34#32#116#121#112#101#32#99#104#97#114#91#54#52#93#32#111#102#102+
+ #115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#118#111#108#117#109#101#34#32#116#121#112#101#32#117#98#121#116+
+ #101#32#111#102#102#115#101#116#32#54#52#32#100#101#102#97#117#108#116#32#48+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#32#47#47#63#63#63#32+
+ #100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#97#110#34#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#53#32#100+
+ #101#102#97#117#108#116#32#48#59#10#32#32#34#108#111#99#97#108#34#32#116#121+
+ #112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#54#54#32#100#101+
+ #102#97#117#108#116#32#116#114#117#101#59#32#47#47#63#63#63#32#100#101#102+
+ #97#117#108#116#32#63#63#63#10#32#32#34#112#108#97#121#95#99#111#117#110#116+
+ #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
+ #54#55#32#100#101#102#97#117#108#116#32#49#59#10#32#32#34#115#111#117#110+
+ #100#95#115#119#105#116#99#104#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#54#56#32#100#101#102#97#117#108#116#32#102#97+
+ #108#115#101#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63+
+ #10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84+
+ #82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#32#123#10#32#32#34+
+ #112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110+
+ #116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32+
+ #97#108#105#97#115#32#115#112#97#119#110#77#111#110#115#84#121#112#101#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32+
+ #101#110#117#109#32#77#111#110#115#116#101#114#32#100#101#102#97#117#108#116+
+ #32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#104#101#97#108#116#104#34#32#116#121#112#101#32+
+ #105#110#116#32#111#102#102#115#101#116#32#49#50#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#100#105#114#101#99#116#105#111#110#34+
+ #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49+
+ #54#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117+
+ #108#116#32#68#73#82#95#76#69#70#84#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#97#99#116#105#118#101#34#32#116#121#112#101#32+
+ #98#111#111#108#32#111#102#102#115#101#116#32#49#55#32#100#101#102#97#117+
+ #108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110#116#34#32#97#108+
+ #105#97#115#32#109#111#110#115#67#111#117#110#116#32#116#121#112#101#32#105+
+ #110#116#32#111#102#102#115#101#116#32#50#48#32#100#101#102#97#117#108#116+
+ #32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#101+
+ #102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#50#52#32#101#110#117#109#32#69#102#102#101#99#116#65#99+
+ #116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70#69#67#84#95#78#79+
+ #78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#109+
+ #97#120#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#50#54#32#100#101#102#97#117#108#116#32#49#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#100#101#108#97#121#34#32#116#121+
+ #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#56#32+
+ #100#101#102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#98#101#104#97#118#105#111#117#114#34#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#51#48+
+ #32#101#110#117#109#32#77#111#110#115#116#101#114#66#101#104#97#118#105#111+
+ #117#114#32#100#101#102#97#117#108#116#32#66#72#95#78#79#82#77#65#76#59#10+
+ #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
+ #73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10#32#32#34#112#111#115+
+ #105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102+
+ #102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105#97+
+ #115#32#115#112#97#119#110#73#116#101#109#84#121#112#101#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109+
+ #32#73#116#101#109#32#100#101#102#97#117#108#116#32#73#84#69#77#95#78#79#78+
+ #69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#103#114+
+ #97#118#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102+
+ #115#101#116#32#57#32#100#101#102#97#117#108#116#32#116#114#117#101#59#10#32+
+ #32#34#100#109#111#110#108#121#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#49#48#32#100#101#102#97#117#108#116#32#102#97+
+ #108#115#101#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32+
+ #105#116#101#109#67#111#117#110#116#32#116#121#112#101#32#105#110#116#32#111+
+ #102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#49#59#10#32+
+ #32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#49#54#32#101#110#117#109#32#69#102#102#101#99+
+ #116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70#69#67+
+ #84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
+ #102#102#115#101#116#32#49#56#32#100#101#102#97#117#108#116#32#49#59#10#32+
+ #32#34#100#101#108#97#121#34#32#116#121#112#101#32#117#115#104#111#114#116+
+ #32#111#102#102#115#101#116#32#50#48#32#100#101#102#97#117#108#116#32#49#48+
+ #48#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
- #95#84#69#76#69#80#79#82#84#32#123#10#32#32#84#97#114#103#101#116#80#111#105+
- #110#116#32#105#115#32#34#116#97#114#103#101#116#34#32#116#121#112#101#32+
- #112#111#105#110#116#32#111#102#102#115#101#116#32#48#59#10#32#32#100#50#100+
- #95#116#101#108#101#112#111#114#116#32#105#115#32#34#100#50#100#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#56#32#100#101+
- #102#97#117#108#116#32#102#97#108#115#101#32#111#109#105#116#100#101#102#97+
- #117#108#116#59#10#32#32#115#105#108#101#110#116#95#116#101#108#101#112#111+
- #114#116#32#105#115#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108+
- #116#32#102#97#108#115#101#32#111#109#105#116#100#101#102#97#117#108#116#59+
- #10#32#32#84#108#112#68#105#114#32#105#115#32#34#100#105#114#101#99#116#105+
- #111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#49#48#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102+
- #97#117#108#116#32#68#73#82#95#76#69#70#84#32#111#109#105#116#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32#84#82+
- #73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#84#82#73#71#71#69#82#95+
- #68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79#82#53#44#32#84#82#73#71+
- #71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82#73#71#71#69#82#95#84#82+
- #65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80#44#32#84#82#73#71#71+
- #69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71#71#69#82#95#76#73#70#84+
- #41#32#123#10#32#32#80#97#110#101#108#73#68#32#105#115#32#34#112#97#110#101+
- #108#105#100#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116+
- #32#48#32#112#97#110#101#108#59#10#32#32#78#111#83#111#117#110#100#32#105+
- #115#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#32#111#109#105#116#100#101#102#97#117#108#116#59#10#32#32#100+
- #50#100#95#100#111#111#114#115#32#105#115#32#34#100#50#100#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#53#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#32#111#109#105#116#100#101#102#97#117#108+
- #116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114+
- #32#40#84#82#73#71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71#69#82#95+
- #79#78#44#32#84#82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71#69#82#95+
- #79#78#79#70#70#41#32#123#10#32#32#47#47#116#88#32#105#115#32#34#116#120#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#59#10#32+
- #32#47#47#116#89#32#105#115#32#34#116#121#34#32#116#121#112#101#32#105#110+
- #116#32#111#102#102#115#101#116#32#52#59#10#32#32#80#111#115#32#105#115#32+
- #34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110+
- #116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#100#101+
- #102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#47#47#116#87#105#100#116+
- #104#32#105#115#32#34#119#105#100#116#104#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#56#59#10#32#32#47#47#116#72+
- #101#105#103#104#116#32#105#115#32#34#104#101#105#103#104#116#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#48#59+
- #10#32#32#83#105#122#101#32#105#115#32#34#115#105#122#101#34#32#116#121#112+
- #101#32#115#105#122#101#32#111#102#102#115#101#116#32#56#32#97#115#32#116+
- #119#104#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#87#97+
- #105#116#32#105#115#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
- #108#116#32#48#59#10#32#32#67#111#117#110#116#32#105#115#32#34#99#111#117+
- #110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
- #101#116#32#49#52#32#100#101#102#97#117#108#116#32#48#59#10#32#32#77#111#110+
- #115#116#101#114#73#68#32#105#115#32#34#109#111#110#115#116#101#114#105#100+
- #34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#54#32+
- #109#111#110#115#116#101#114#32#97#115#32#109#111#110#115#116#101#114#105+
- #100#32#100#101#102#97#117#108#116#32#110#117#108#108#59#10#32#32#69#120#116+
- #82#97#110#100#111#109#32#105#115#32#34#101#120#116#114#97#110#100#111#109+
- #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#50#48+
- #32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47#32+
- #116#104#105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118#105+
- #110#103#32#112#108#97#116#102#111#114#109#115#10#32#32#80#97#110#101#108#73+
- #100#32#105#115#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101#32+
- #105#110#116#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32#110#117+
- #108#108#32#111#109#105#116#100#101#102#97#117#108#116#59#10#125#10#10#84+
+ #95#77#85#83#73#67#32#123#10#32#32#34#110#97#109#101#34#32#97#108#105#97#115+
+ #32#109#117#115#105#99#78#97#109#101#32#116#121#112#101#32#99#104#97#114#91+
+ #54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105#97+
+ #115#32#109#117#115#105#99#65#99#116#105#111#110#32#116#121#112#101#32#117+
+ #98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#77#117#115#105#99#65#99#116#105#111#110#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103+
+ #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#80#85#83#72+
+ #32#123#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104+
+ #111#114#116#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#102#111#114#99#101#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#114#101#115#101#116#95#118+
+ #101#108#111#99#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#51#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
- #95#83#69#67#82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114#68#97+
- #116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69#32+
- #123#10#32#32#65#99#116#105#118#97#116#101#79#110#99#101#32#105#115#32#34#97+
- #99#116#105#118#97#116#101#111#110#99#101#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#48#59#10#32#32#65#110#105#109#79#110+
- #99#101#32#105#115#32#34#97#110#105#109#97#116#101#111#110#99#101#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#59#10#125#10+
- #10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71+
- #69#82#95#83#79#85#78#68#32#123#10#32#32#83#111#117#110#100#78#97#109#101#32+
- #105#115#32#34#115#111#117#110#100#110#97#109#101#34#32#116#121#112#101#32+
- #99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#59#10#32#32#86+
- #111#108#117#109#101#32#105#115#32#34#118#111#108#117#109#101#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#59#10#32+
- #32#80#97#110#32#105#115#32#34#112#97#110#34#32#116#121#112#101#32#117#98+
- #121#116#101#32#111#102#102#115#101#116#32#54#53#59#10#32#32#76#111#99#97+
- #108#32#105#115#32#34#108#111#99#97#108#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#54#54#59#10#32#32#80#108#97#121#67#111+
- #117#110#116#32#105#115#32#34#112#108#97#121#99#111#117#110#116#34#32#116+
- #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#55#59#10+
- #32#32#83#111#117#110#100#83#119#105#116#99#104#32#105#115#32#34#115#111#117+
- #110#100#115#119#105#116#99#104#34#32#116#121#112#101#32#98#111#111#108#32+
- #111#102#102#115#101#116#32#54#56#59#10#125#10#10#84#114#105#103#103#101#114+
- #68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79+
- #78#83#84#69#82#32#123#10#32#32#77#111#110#80#111#115#32#105#115#32#34#112+
- #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
- #111#102#102#115#101#116#32#48#59#10#32#32#77#111#110#84#121#112#101#32#105+
- #115#32#34#116#121#112#101#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#56#59#10#32#32#77#111#110#72#101#97#108#116#104+
- #32#105#115#32#34#104#101#97#108#116#104#34#32#116#121#112#101#32#105#110+
- #116#32#111#102#102#115#101#116#32#49#50#59#10#32#32#77#111#110#68#105#114+
- #32#105#115#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#101#110#117+
- #109#32#68#105#114#84#121#112#101#59#10#32#32#77#111#110#65#99#116#105#118+
- #101#32#105#115#32#34#97#99#116#105#118#101#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#49#55#59#10#32#32#77#111#110#67#111+
- #117#110#116#32#105#115#32#34#99#111#117#110#116#34#32#116#121#112#101#32+
- #105#110#116#32#111#102#102#115#101#116#32#50#48#59#10#32#32#77#111#110#69+
- #102#102#101#99#116#32#105#115#32#34#101#102#102#101#99#116#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#52#59#10#32+
- #32#77#111#110#77#97#120#32#105#115#32#34#109#97#120#34#32#116#121#112#101+
- #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54#59#10#32#32+
- #77#111#110#68#101#108#97#121#32#105#115#32#34#100#101#108#97#121#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#56+
- #59#10#32#32#77#111#110#66#101#104#97#118#32#105#115#32#34#98#101#104#97#118+
- #105#111#117#114#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#51#48#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32+
- #123#10#32#32#73#116#101#109#80#111#115#32#105#115#32#34#112#111#115#105#116+
- #105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115+
- #101#116#32#48#59#10#32#32#73#116#101#109#84#121#112#101#32#105#115#32#34+
- #116#121#112#101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#56#59#10#32#32#73#116#101#109#70#97#108#108#115#32#105#115+
- #32#34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32+
- #111#102#102#115#101#116#32#57#59#10#32#32#73#116#101#109#79#110#108#121#68+
- #77#32#105#115#32#34#100#109#111#110#108#121#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#49#48#59#10#32#32#73#116#101#109#67+
- #111#117#110#116#32#105#115#32#34#99#111#117#110#116#34#32#116#121#112#101+
- #32#105#110#116#32#111#102#102#115#101#116#32#49#50#59#10#32#32#73#116#101+
- #109#69#102#102#101#99#116#32#105#115#32#34#101#102#102#101#99#116#34#32#116+
- #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#59#10+
- #32#32#73#116#101#109#77#97#120#32#105#115#32#34#109#97#120#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#59+
- #10#32#32#73#116#101#109#68#101#108#97#121#32#105#115#32#34#100#101#108#97+
- #121#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#50#48#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#77#85#83#73#67#32#123#10#32#32#77#117+
- #115#105#99#78#97#109#101#32#105#115#32#34#110#97#109#101#34#32#116#121#112+
- #101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#59#10#32+
- #32#77#117#115#105#99#65#99#116#105#111#110#32#105#115#32#34#97#99#116#105+
- #111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#54#52#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#80#85#83#72#32#123#10#32#32#80#117#115+
- #104#65#110#103#108#101#32#105#115#32#34#97#110#103#108#101#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#59#10+
- #32#32#80#117#115#104#70#111#114#99#101#32#105#115#32#34#102#111#114#99#101+
- #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #50#59#10#32#32#82#101#115#101#116#86#101#108#32#105#115#32#34#114#101#115+
- #101#116#118#101#108#111#99#105#116#121#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#51#59#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#67#79#82#69+
- #32#123#10#32#32#83#99#111#114#101#65#99#116#105#111#110#32#105#115#32#34#97+
- #99#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
- #102#115#101#116#32#48#59#10#32#32#83#99#111#114#101#67#111#117#110#116#32+
- #105#115#32#34#99#111#117#110#116#34#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#49#59#10#32#32#83#99#111#114#101#84#101+
- #97#109#32#105#115#32#34#116#101#97#109#34#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#50#59#10#32#32#83#99#111#114#101#67+
- #111#110#32#105#115#32#34#99#111#110#115#111#108#101#34#32#116#121#112#101+
- #32#98#111#111#108#32#111#102#102#115#101#116#32#51#59#10#32#32#83#99#111+
- #114#101#77#115#103#32#105#115#32#34#109#101#115#115#97#103#101#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#52#59#10#125#10+
- #10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71+
- #69#82#95#77#69#83#83#65#71#69#32#123#10#32#32#77#101#115#115#97#103#101#75+
- #105#110#100#32#105#115#32#34#107#105#110#100#34#32#116#121#112#101#32#117+
- #98#121#116#101#32#111#102#102#115#101#116#32#48#59#10#32#32#77#101#115#115+
- #97#103#101#83#101#110#100#84#111#32#105#115#32#34#115#101#110#100#116#111+
- #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #49#59#10#32#32#77#101#115#115#97#103#101#84#101#120#116#32#105#115#32#34+
- #116#101#120#116#34#32#116#121#112#101#32#99#104#97#114#91#49#48#48#93#32+
- #111#102#102#115#101#116#32#50#59#10#32#32#77#101#115#115#97#103#101#84#105+
- #109#101#32#105#115#32#34#116#105#109#101#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#49#48#50#59#10#125#10#10#84+
+ #95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105+
+ #97#115#32#115#99#111#114#101#65#99#116#105#111#110#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#65#99#116#105#111#110#32#100+
+ #101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67+
+ #84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#115#99#111#114+
+ #101#67#111#117#110#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#49#32#100#101#102#97#117#108#116#32#49#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#101#97#109#34#32#97+
+ #108#105#97#115#32#115#99#111#114#101#84#101#97#109#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111#110#115#111#108+
+ #101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111#110#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32#97#108#105#97#115+
+ #32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#116#114#117+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
- #95#68#65#77#65#71#69#32#123#10#32#32#68#97#109#97#103#101#86#97#108#117#101+
- #32#105#115#32#34#97#109#111#117#110#116#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#48#59#10#32#32#68#97#109#97+
- #103#101#73#110#116#101#114#118#97#108#32#105#115#32#34#105#110#116#101#114+
- #118#97#108#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#50#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97+
- #32#102#111#114#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32+
- #72#101#97#108#86#97#108#117#101#32#105#115#32#34#97#109#111#117#110#116#34+
- #32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32+
- #48#59#10#32#32#72#101#97#108#73#110#116#101#114#118#97#108#32#105#115#32#34+
- #105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#59#10#32#32#72#101#97#108#77#97#120#32+
- #105#115#32#34#109#97#120#34#32#116#121#112#101#32#98#111#111#108#32#111#102+
- #102#115#101#116#32#52#59#10#32#32#72#101#97#108#83#105#108#101#110#116#32+
- #105#115#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#53#59#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#72#79#84#32+
- #123#10#32#32#83#104#111#116#80#111#115#32#105#115#32#34#112#111#115#105#116+
+ #95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100#34#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#75#105#110+
+ #100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#77#69#83#83#65+
+ #71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105#97#115#32#109+
+ #115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116#101#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#68#101#115+
+ #116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101#120#116#34#32+
+ #116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102#102#115#101#116+
+ #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
+ #105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105#109#101#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#48+
+ #50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114+
+ #105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95+
+ #68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110#116#34#32#116#121+
+ #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#105#110#116#101+
+ #114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84+
+ #82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97#109#111#117+
+ #110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111+
+ #114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97#115#32#104#101+
+ #97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111#115#105#116+
#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115+
- #101#116#32#48#59#10#32#32#83#104#111#116#84#121#112#101#32#105#115#32#34+
- #116#121#112#101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#56#32#101#110#117#109#32#84#114#105#103#103#101#114#83#104+
- #111#116#59#10#32#32#83#104#111#116#84#97#114#103#101#116#32#105#115#32#34+
- #116#97#114#103#101#116#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
- #102#102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103#103#101#114+
- #83#104#111#116#84#97#114#103#101#116#59#10#32#32#83#104#111#116#83#111#117+
- #110#100#32#105#115#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
- #110#101#103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32#47#47+
- #32#110#101#103#98#111#111#108#33#10#32#32#83#104#111#116#65#105#109#32#105+
- #115#32#34#97#105#109#34#32#116#121#112#101#32#98#121#116#101#32#111#102#102+
- #115#101#116#32#49#49#59#10#32#32#83#104#111#116#80#97#110#101#108#73#68#32+
- #105#115#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101#32#105#110+
- #116#32#111#102#102#115#101#116#32#49#50#59#10#32#32#83#104#111#116#73#110+
- #116#83#105#103#104#116#32#105#115#32#34#115#105#103#104#116#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54#59+
- #10#32#32#83#104#111#116#65#110#103#108#101#32#105#115#32#34#97#110#103#108+
- #101#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#49#56#59#10#32#32#83#104#111#116#87#97#105#116#32#105#115#32#34#119+
- #97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#50#48#59#10#32#32#83#104#111#116#65#99#99#117#114#97#99#121+
- #32#105#115#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#83#104+
- #111#116#65#109#109#111#32#105#115#32#34#97#109#109#111#34#32#116#121#112+
- #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#52#59#10#32+
- #32#83#104#111#116#73#110#116#82#101#108#111#97#100#32#105#115#32#34#114#101+
- #108#111#97#100#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
- #102#115#101#116#32#50#54#59#10#125#10#10#84#114#105#103#103#101#114#68#97+
- #116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#32#123+
- #10#32#32#70#88#67#111#117#110#116#32#105#115#32#34#99#111#117#110#116#34#32+
- #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#59+
- #10#32#32#70#88#84#121#112#101#32#105#115#32#34#116#121#112#101#34#32#116+
- #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#59#10#32+
- #32#70#88#83#117#98#84#121#112#101#32#105#115#32#34#115#117#98#116#121#112+
- #101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
- #32#50#59#10#32#32#70#88#67#111#108#111#114#82#32#105#115#32#34#99#111#108+
- #111#114#114#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115+
- #101#116#32#51#59#10#32#32#70#88#67#111#108#111#114#71#32#105#115#32#34#99+
- #111#108#111#114#103#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
- #102#115#101#116#32#52#59#10#32#32#70#88#67#111#108#111#114#66#32#105#115#32+
- #34#99#111#108#111#114#98#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
- #102#102#115#101#116#32#53#59#10#32#32#70#88#80#111#115#32#105#115#32#34#112+
- #111#115#105#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#54#59#10#32#32#70#88#87#97#105#116#32#105#115#32+
- #34#119#97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
- #102#102#115#101#116#32#56#59#10#32#32#70#88#86#101#108#88#32#105#115#32#34+
- #118#101#108#120#34#32#116#121#112#101#32#98#121#116#101#32#111#102#102#115+
- #101#116#32#49#48#59#10#32#32#70#88#86#101#108#89#32#105#115#32#34#118#101+
- #108#121#34#32#116#121#112#101#32#98#121#116#101#32#111#102#102#115#101#116+
- #32#49#49#59#10#32#32#70#88#83#112#114#101#97#100#76#32#105#115#32#34#115+
- #112#114#101#97#100#108#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
- #102#102#115#101#116#32#49#50#59#10#32#32#70#88#83#112#114#101#97#100#82#32+
- #105#115#32#34#115#112#114#101#97#100#114#34#32#116#121#112#101#32#117#98+
- #121#116#101#32#111#102#102#115#101#116#32#49#51#59#10#32#32#70#88#83#112+
- #114#101#97#100#85#32#105#115#32#34#115#112#114#101#97#100#117#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#52#59#10#32+
- #32#70#88#83#112#114#101#97#100#68#32#105#115#32#34#115#112#114#101#97#100+
- #100#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
- #32#49#53#59#10#125#10
+ #101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105#97#115#32+
+ #115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32#115#104#111#116+
+ #84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103#103#101#114#83+
+ #104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112#101#32#110#101+
+ #103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32#47#47#32#110+
+ #101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121#112#101#32+
+ #98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101#102#97#117#108+
+ #116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68#69#70#65#85#76+
+ #84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101#32#105+
+ #110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110#101#108#32#100+
+ #101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116#121#112#101+
+ #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54#59#10#32#32+
+ #34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111#114#116#32+
+ #111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116#34#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48+
+ #59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32#117#115+
+ #104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34#97#109+
+ #109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116#121#112+
+ #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54#59#10+
+ #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
+ #73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110#116+
+ #34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105+
+ #97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71#71+
+ #69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#117#98#116#121#112#101#34+
+ #32#97#108#105#97#115#32#70#88#83#117#98#84#121#112#101#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109+
+ #32#84#114#105#103#103#101#114#69#102#102#101#99#116#84#121#112#101#32#100+
+ #101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83+
+ #80#65#82#75#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#114#101#100#34#32#97#108#105#97#115#32#70#88#82#101#100#32#116#121#112+
+ #101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#51#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#103#114#101#101#110#34#32+
+ #97#108#105#97#115#32#70#88#71#114#101#101#110#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#52#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#98#108#117#101#34#32#97#108#105#97#115#32+
+ #70#88#66#108#117#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#112#111#115#34#32#97#108#105#97#115#32#70#88#80#111#115#32#116+
+ #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#32#101+
+ #110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#80#111#115+
+ #32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84+
+ #95#80#79#83#95#67#69#78#84#69#82#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115#104+
+ #111#114#116#32#111#102#102#115#101#116#32#56#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#118#101#108#95#120#34#32#116#121#112#101+
+ #32#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#118#101#108#95#121#34#32#116+
+ #121#112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#112#114#101+
+ #97#100#95#108#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#49#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#115#112#114#101#97#100#95#114#34#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#49#51#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#115#112#114#101#97#100#95#117#34#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#52+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#112+
+ #114#101#97#100#95#100#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
+ #102#102#115#101#116#32#49#53#32#119#114#105#116#101#100#101#102#97#117#108+
+ #116#59#10#125#10
;
\ No newline at end of file
index efd7623fb842b3d8eca2bcb4756d9a9878ba418d..3e8dfecb92e18678c0d4ecf44e8ce630f685d0c6 100644 (file)
// *** WARNING! ***
// regenerate this part directly from "mapdef.txt" with 'mapgen', NEVER manually change anything here!
-function trigMapName (): AnsiString; inline;
-function trigTargetPoint (): TDFPoint; inline;
-function trigd2d_teleport (): Boolean; inline;
-function trigsilent_teleport (): Boolean; inline;
-function trigTlpDir (): Byte; inline;
-function trigNoSound (): Boolean; inline;
-function trigd2d_doors (): Boolean; inline;
+
+// TRIGGER_EXIT
+function trigMap (): AnsiString; inline;
+
+// TRIGGER_TELEPORT
+function trigTarget (): TDFPoint; inline;
+function trigD2d (): Boolean; inline;
+function trigSilent (): Boolean; inline;
+function trigDirection (): Byte; inline;
+
+// TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR, TRIGGER_DOOR, TRIGGER_DOOR5, TRIGGER_CLOSETRAP, TRIGGER_TRAP, TRIGGER_LIFTUP, TRIGGER_LIFTDOWN, TRIGGER_LIFT
+
+// TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF
function trigTX (): LongInt; inline;
function trigTY (): LongInt; inline;
function trigTWidth (): Word; inline;
function trigTHeight (): Word; inline;
function trigWait (): Word; inline;
-function trigCount (): Word; inline;
+function trigPressCount (): Word; inline;
function trigExtRandom (): Boolean; inline;
+
+// TRIGGER_SECRET
+
+// TRIGGER_TEXTURE
function trigActivateOnce (): Boolean; inline;
-function trigAnimOnce (): Boolean; inline;
+function trigAnimateOnce (): Boolean; inline;
+
+// TRIGGER_SOUND
function trigSoundName (): AnsiString; inline;
function trigVolume (): Byte; inline;
function trigPan (): Byte; inline;
function trigLocal (): Boolean; inline;
function trigPlayCount (): Byte; inline;
function trigSoundSwitch (): Boolean; inline;
-function trigMonPos (): TDFPoint; inline;
-function trigMonType (): Byte; inline;
-function trigMonHealth (): LongInt; inline;
-function trigMonDir (): Byte; inline;
-function trigMonActive (): Boolean; inline;
-function trigMonCount (): LongInt; inline;
-function trigMonEffect (): Byte; inline;
-function trigMonMax (): Word; inline;
-function trigMonDelay (): Word; inline;
-function trigMonBehav (): Byte; inline;
-function trigItemPos (): TDFPoint; inline;
-function trigItemType (): Byte; inline;
-function trigItemFalls (): Boolean; inline;
-function trigItemOnlyDM (): Boolean; inline;
+
+// TRIGGER_SPAWNMONSTER
+function trigSpawnMonsType (): Byte; inline;
+function trigHealth (): LongInt; inline;
+function trigActive (): Boolean; inline;
+function trigMonsCount (): LongInt; inline;
+function trigEffect (): Byte; inline;
+function trigMax (): Word; inline;
+function trigDelay (): Word; inline;
+function trigBehaviour (): Byte; inline;
+
+// TRIGGER_SPAWNITEM
+function trigSpawnItemType (): Byte; inline;
+function trigGravity (): Boolean; inline;
+function trigDmonly (): Boolean; inline;
function trigItemCount (): LongInt; inline;
-function trigItemEffect (): Byte; inline;
-function trigItemMax (): Word; inline;
-function trigItemDelay (): Word; inline;
+
+// TRIGGER_MUSIC
function trigMusicName (): AnsiString; inline;
function trigMusicAction (): Byte; inline;
-function trigPushAngle (): Word; inline;
-function trigPushForce (): Byte; inline;
-function trigResetVel (): Boolean; inline;
+
+// TRIGGER_PUSH
+function trigAngle (): Word; inline;
+function trigForce (): Byte; inline;
+function trigResetVelocity (): Boolean; inline;
+
+// TRIGGER_SCORE
function trigScoreAction (): Byte; inline;
function trigScoreCount (): Byte; inline;
function trigScoreTeam (): Byte; inline;
function trigScoreCon (): Boolean; inline;
function trigScoreMsg (): Boolean; inline;
-function trigMessageKind (): Byte; inline;
-function trigMessageSendTo (): Byte; inline;
-function trigMessageText (): AnsiString; inline;
-function trigMessageTime (): Word; inline;
-function trigDamageValue (): Word; inline;
-function trigDamageInterval (): Word; inline;
-function trigHealValue (): Word; inline;
-function trigHealInterval (): Word; inline;
+
+// TRIGGER_MESSAGE
+function trigKind (): Byte; inline;
+function trigMsgDest (): Byte; inline;
+function trigText (): AnsiString; inline;
+function trigMsgTime (): Word; inline;
+
+// TRIGGER_DAMAGE
+function trigAmount (): Word; inline;
+function trigInterval (): Word; inline;
+
+// TRIGGER_HEALTH
function trigHealMax (): Boolean; inline;
-function trigHealSilent (): Boolean; inline;
-function trigShotPos (): TDFPoint; inline;
+
+// TRIGGER_SHOT
function trigShotType (): Byte; inline;
function trigShotTarget (): Byte; inline;
-function trigShotSound (): Boolean; inline;
-function trigShotAim (): SmallInt; inline;
-function trigShotIntSight (): Word; inline;
-function trigShotAngle (): Word; inline;
-function trigShotWait (): Word; inline;
-function trigShotAccuracy (): Word; inline;
-function trigShotAmmo (): Word; inline;
-function trigShotIntReload (): Word; inline;
+function trigQuiet (): Boolean; inline;
+function trigAim (): SmallInt; inline;
+function trigSight (): Word; inline;
+function trigAccuracy (): Word; inline;
+function trigAmmo (): Word; inline;
+function trigReload (): Word; inline;
+
+// TRIGGER_EFFECT
function trigFXCount (): Byte; inline;
function trigFXType (): Byte; inline;
function trigFXSubType (): Byte; inline;
-function trigFXColorR (): Byte; inline;
-function trigFXColorG (): Byte; inline;
-function trigFXColorB (): Byte; inline;
+function trigFXRed (): Byte; inline;
+function trigFXGreen (): Byte; inline;
+function trigFXBlue (): Byte; inline;
function trigFXPos (): Byte; inline;
-function trigFXWait (): Word; inline;
-function trigFXVelX (): SmallInt; inline;
-function trigFXVelY (): SmallInt; inline;
-function trigFXSpreadL (): Byte; inline;
-function trigFXSpreadR (): Byte; inline;
-function trigFXSpreadU (): Byte; inline;
-function trigFXSpreadD (): Byte; inline;
+function trigVelX (): SmallInt; inline;
+function trigVelY (): SmallInt; inline;
+function trigSpreadL (): Byte; inline;
+function trigSpreadR (): Byte; inline;
+function trigSpreadU (): Byte; inline;
+function trigSpreadD (): Byte; inline;
index f491dbf3686c71e138fcc8ac56b40e36e3746189..25281132013dedf705dcb5e17e123749fd983254 100644 (file)
// trigger helpers
// TRIGGER_EXIT
-function TDynRecordHelper.trigMapName (): AnsiString; inline; begin result := utf2win(getFieldWithType('map', TDynField.TType.TChar).sval); end;
+function TDynRecordHelper.trigMap (): AnsiString; inline; begin result := utf2win(getFieldWithType('map', TDynField.TType.TChar).sval); end;
// TRIGGER_TELEPORT
-function TDynRecordHelper.trigTargetPoint (): TDFPoint; inline; begin result := getPointField('target'); end;
-function TDynRecordHelper.trigd2d_teleport (): Boolean; inline; begin result := (getFieldWithType('d2d', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigsilent_teleport (): Boolean; inline; begin result := (getFieldWithType('silent', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigTlpDir (): Byte; inline; begin result := Byte(getFieldWithType('direction', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigTarget (): TDFPoint; inline; begin result := getPointField('target'); end;
+function TDynRecordHelper.trigD2d (): Boolean; inline; begin result := (getFieldWithType('d2d', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigSilent (): Boolean; inline; begin result := (getFieldWithType('silent', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigDirection (): Byte; inline; begin result := Byte(getFieldWithType('direction', TDynField.TType.TUByte).ival); end;
// TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR, TRIGGER_DOOR, TRIGGER_DOOR5, TRIGGER_CLOSETRAP, TRIGGER_TRAP, TRIGGER_LIFTUP, TRIGGER_LIFTDOWN, TRIGGER_LIFT
-function TDynRecordHelper.trigNoSound (): Boolean; inline; begin result := (getFieldWithType('silent', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigd2d_doors (): Boolean; inline; begin result := (getFieldWithType('d2d', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF
function TDynRecordHelper.trigTX (): LongInt; inline; begin result := LongInt(getFieldWithType('position', TDynField.TType.TPoint).ival); end;
@@ -22,53 +20,47 @@ function TDynRecordHelper.trigTY (): LongInt; inline; begin result := LongInt(ge
function TDynRecordHelper.trigTWidth (): Word; inline; begin result := Word(getFieldWithType('size', TDynField.TType.TSize).ival); end;
function TDynRecordHelper.trigTHeight (): Word; inline; begin result := Word(getFieldWithType('size', TDynField.TType.TSize).ival2); end;
function TDynRecordHelper.trigWait (): Word; inline; begin result := Word(getFieldWithType('wait', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigCount (): Word; inline; begin result := Word(getFieldWithType('count', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigExtRandom (): Boolean; inline; begin result := (getFieldWithType('extrandom', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigPressCount (): Word; inline; begin result := Word(getFieldWithType('count', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigExtRandom (): Boolean; inline; begin result := (getFieldWithType('ext_random', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_SECRET
// TRIGGER_TEXTURE
-function TDynRecordHelper.trigActivateOnce (): Boolean; inline; begin result := (getFieldWithType('activateonce', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigAnimOnce (): Boolean; inline; begin result := (getFieldWithType('animateonce', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigActivateOnce (): Boolean; inline; begin result := (getFieldWithType('activate_once', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigAnimateOnce (): Boolean; inline; begin result := (getFieldWithType('animate_once', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_SOUND
-function TDynRecordHelper.trigSoundName (): AnsiString; inline; begin result := utf2win(getFieldWithType('soundname', TDynField.TType.TChar).sval); end;
+function TDynRecordHelper.trigSoundName (): AnsiString; inline; begin result := utf2win(getFieldWithType('sound_name', TDynField.TType.TChar).sval); end;
function TDynRecordHelper.trigVolume (): Byte; inline; begin result := Byte(getFieldWithType('volume', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.trigPan (): Byte; inline; begin result := Byte(getFieldWithType('pan', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.trigLocal (): Boolean; inline; begin result := (getFieldWithType('local', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigPlayCount (): Byte; inline; begin result := Byte(getFieldWithType('playcount', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigSoundSwitch (): Boolean; inline; begin result := (getFieldWithType('soundswitch', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigPlayCount (): Byte; inline; begin result := Byte(getFieldWithType('play_count', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigSoundSwitch (): Boolean; inline; begin result := (getFieldWithType('sound_switch', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_SPAWNMONSTER
-function TDynRecordHelper.trigMonPos (): TDFPoint; inline; begin result := getPointField('position'); end;
-function TDynRecordHelper.trigMonType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigMonHealth (): LongInt; inline; begin result := LongInt(getFieldWithType('health', TDynField.TType.TInt).ival); end;
-function TDynRecordHelper.trigMonDir (): Byte; inline; begin result := Byte(getFieldWithType('direction', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigMonActive (): Boolean; inline; begin result := (getFieldWithType('active', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigMonCount (): LongInt; inline; begin result := LongInt(getFieldWithType('count', TDynField.TType.TInt).ival); end;
-function TDynRecordHelper.trigMonEffect (): Byte; inline; begin result := Byte(getFieldWithType('effect', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigMonMax (): Word; inline; begin result := Word(getFieldWithType('max', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigMonDelay (): Word; inline; begin result := Word(getFieldWithType('delay', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigMonBehav (): Byte; inline; begin result := Byte(getFieldWithType('behaviour', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigSpawnMonsType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigHealth (): LongInt; inline; begin result := LongInt(getFieldWithType('health', TDynField.TType.TInt).ival); end;
+function TDynRecordHelper.trigActive (): Boolean; inline; begin result := (getFieldWithType('active', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigMonsCount (): LongInt; inline; begin result := LongInt(getFieldWithType('count', TDynField.TType.TInt).ival); end;
+function TDynRecordHelper.trigEffect (): Byte; inline; begin result := Byte(getFieldWithType('effect', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigMax (): Word; inline; begin result := Word(getFieldWithType('max', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigDelay (): Word; inline; begin result := Word(getFieldWithType('delay', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigBehaviour (): Byte; inline; begin result := Byte(getFieldWithType('behaviour', TDynField.TType.TUByte).ival); end;
// TRIGGER_SPAWNITEM
-function TDynRecordHelper.trigItemPos (): TDFPoint; inline; begin result := getPointField('position'); end;
-function TDynRecordHelper.trigItemType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigItemFalls (): Boolean; inline; begin result := (getFieldWithType('gravity', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigItemOnlyDM (): Boolean; inline; begin result := (getFieldWithType('dmonly', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigSpawnItemType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigGravity (): Boolean; inline; begin result := (getFieldWithType('gravity', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigDmonly (): Boolean; inline; begin result := (getFieldWithType('dmonly', TDynField.TType.TBool).ival <> 0); end;
function TDynRecordHelper.trigItemCount (): LongInt; inline; begin result := LongInt(getFieldWithType('count', TDynField.TType.TInt).ival); end;
-function TDynRecordHelper.trigItemEffect (): Byte; inline; begin result := Byte(getFieldWithType('effect', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigItemMax (): Word; inline; begin result := Word(getFieldWithType('max', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigItemDelay (): Word; inline; begin result := Word(getFieldWithType('delay', TDynField.TType.TUShort).ival); end;
// TRIGGER_MUSIC
function TDynRecordHelper.trigMusicName (): AnsiString; inline; begin result := utf2win(getFieldWithType('name', TDynField.TType.TChar).sval); end;
function TDynRecordHelper.trigMusicAction (): Byte; inline; begin result := Byte(getFieldWithType('action', TDynField.TType.TUByte).ival); end;
// TRIGGER_PUSH
-function TDynRecordHelper.trigPushAngle (): Word; inline; begin result := Word(getFieldWithType('angle', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigPushForce (): Byte; inline; begin result := Byte(getFieldWithType('force', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigResetVel (): Boolean; inline; begin result := (getFieldWithType('resetvelocity', TDynField.TType.TBool).ival <> 0); end;
+function TDynRecordHelper.trigAngle (): Word; inline; begin result := Word(getFieldWithType('angle', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigForce (): Byte; inline; begin result := Byte(getFieldWithType('force', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigResetVelocity (): Boolean; inline; begin result := (getFieldWithType('reset_velocity', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_SCORE
function TDynRecordHelper.trigScoreAction (): Byte; inline; begin result := Byte(getFieldWithType('action', TDynField.TType.TUByte).ival); end;
@@ -78,46 +70,39 @@ function TDynRecordHelper.trigScoreCon (): Boolean; inline; begin result := (get
function TDynRecordHelper.trigScoreMsg (): Boolean; inline; begin result := (getFieldWithType('message', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_MESSAGE
-function TDynRecordHelper.trigMessageKind (): Byte; inline; begin result := Byte(getFieldWithType('kind', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigMessageSendTo (): Byte; inline; begin result := Byte(getFieldWithType('sendto', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigMessageText (): AnsiString; inline; begin result := utf2win(getFieldWithType('text', TDynField.TType.TChar).sval); end;
-function TDynRecordHelper.trigMessageTime (): Word; inline; begin result := Word(getFieldWithType('time', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigKind (): Byte; inline; begin result := Byte(getFieldWithType('kind', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigMsgDest (): Byte; inline; begin result := Byte(getFieldWithType('dest', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigText (): AnsiString; inline; begin result := utf2win(getFieldWithType('text', TDynField.TType.TChar).sval); end;
+function TDynRecordHelper.trigMsgTime (): Word; inline; begin result := Word(getFieldWithType('time', TDynField.TType.TUShort).ival); end;
// TRIGGER_DAMAGE
-function TDynRecordHelper.trigDamageValue (): Word; inline; begin result := Word(getFieldWithType('amount', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigDamageInterval (): Word; inline; begin result := Word(getFieldWithType('interval', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigAmount (): Word; inline; begin result := Word(getFieldWithType('amount', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigInterval (): Word; inline; begin result := Word(getFieldWithType('interval', TDynField.TType.TUShort).ival); end;
// TRIGGER_HEALTH
-function TDynRecordHelper.trigHealValue (): Word; inline; begin result := Word(getFieldWithType('amount', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigHealInterval (): Word; inline; begin result := Word(getFieldWithType('interval', TDynField.TType.TUShort).ival); end;
function TDynRecordHelper.trigHealMax (): Boolean; inline; begin result := (getFieldWithType('max', TDynField.TType.TBool).ival <> 0); end;
-function TDynRecordHelper.trigHealSilent (): Boolean; inline; begin result := (getFieldWithType('silent', TDynField.TType.TBool).ival <> 0); end;
// TRIGGER_SHOT
-function TDynRecordHelper.trigShotPos (): TDFPoint; inline; begin result := getPointField('position'); end;
function TDynRecordHelper.trigShotType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.trigShotTarget (): Byte; inline; begin result := Byte(getFieldWithType('target', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigShotSound (): Boolean; inline; begin result := (getFieldWithType('silent', TDynField.TType.TBool).ival = 0); end;
-function TDynRecordHelper.trigShotAim (): SmallInt; inline; begin result := ShortInt(getFieldWithType('aim', TDynField.TType.TByte).ival); end;
-function TDynRecordHelper.trigShotIntSight (): Word; inline; begin result := Word(getFieldWithType('sight', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigShotAngle (): Word; inline; begin result := Word(getFieldWithType('angle', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigShotWait (): Word; inline; begin result := Word(getFieldWithType('wait', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigShotAccuracy (): Word; inline; begin result := Word(getFieldWithType('accuracy', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigShotAmmo (): Word; inline; begin result := Word(getFieldWithType('ammo', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigShotIntReload (): Word; inline; begin result := Word(getFieldWithType('reload', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigQuiet (): Boolean; inline; begin result := (getFieldWithType('quiet', TDynField.TType.TBool).ival = 0); end;
+function TDynRecordHelper.trigAim (): SmallInt; inline; begin result := ShortInt(getFieldWithType('aim', TDynField.TType.TByte).ival); end;
+function TDynRecordHelper.trigSight (): Word; inline; begin result := Word(getFieldWithType('sight', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigAccuracy (): Word; inline; begin result := Word(getFieldWithType('accuracy', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigAmmo (): Word; inline; begin result := Word(getFieldWithType('ammo', TDynField.TType.TUShort).ival); end;
+function TDynRecordHelper.trigReload (): Word; inline; begin result := Word(getFieldWithType('reload', TDynField.TType.TUShort).ival); end;
// TRIGGER_EFFECT
function TDynRecordHelper.trigFXCount (): Byte; inline; begin result := Byte(getFieldWithType('count', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.trigFXType (): Byte; inline; begin result := Byte(getFieldWithType('type', TDynField.TType.TUByte).ival); end;
function TDynRecordHelper.trigFXSubType (): Byte; inline; begin result := Byte(getFieldWithType('subtype', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXColorR (): Byte; inline; begin result := Byte(getFieldWithType('colorr', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXColorG (): Byte; inline; begin result := Byte(getFieldWithType('colorg', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXColorB (): Byte; inline; begin result := Byte(getFieldWithType('colorb', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXPos (): Byte; inline; begin result := Byte(getFieldWithType('position', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXWait (): Word; inline; begin result := Word(getFieldWithType('wait', TDynField.TType.TUShort).ival); end;
-function TDynRecordHelper.trigFXVelX (): SmallInt; inline; begin result := ShortInt(getFieldWithType('velx', TDynField.TType.TByte).ival); end;
-function TDynRecordHelper.trigFXVelY (): SmallInt; inline; begin result := ShortInt(getFieldWithType('vely', TDynField.TType.TByte).ival); end;
-function TDynRecordHelper.trigFXSpreadL (): Byte; inline; begin result := Byte(getFieldWithType('spreadl', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXSpreadR (): Byte; inline; begin result := Byte(getFieldWithType('spreadr', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXSpreadU (): Byte; inline; begin result := Byte(getFieldWithType('spreadu', TDynField.TType.TUByte).ival); end;
-function TDynRecordHelper.trigFXSpreadD (): Byte; inline; begin result := Byte(getFieldWithType('spreadd', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigFXRed (): Byte; inline; begin result := Byte(getFieldWithType('red', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigFXGreen (): Byte; inline; begin result := Byte(getFieldWithType('green', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigFXBlue (): Byte; inline; begin result := Byte(getFieldWithType('blue', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigFXPos (): Byte; inline; begin result := Byte(getFieldWithType('pos', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigVelX (): SmallInt; inline; begin result := ShortInt(getFieldWithType('vel_x', TDynField.TType.TByte).ival); end;
+function TDynRecordHelper.trigVelY (): SmallInt; inline; begin result := ShortInt(getFieldWithType('vel_y', TDynField.TType.TByte).ival); end;
+function TDynRecordHelper.trigSpreadL (): Byte; inline; begin result := Byte(getFieldWithType('spread_l', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigSpreadR (): Byte; inline; begin result := Byte(getFieldWithType('spread_r', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigSpreadU (): Byte; inline; begin result := Byte(getFieldWithType('spread_u', TDynField.TType.TUByte).ival); end;
+function TDynRecordHelper.trigSpreadD (): Byte; inline; begin result := Byte(getFieldWithType('spread_d', TDynField.TType.TUByte).ival); end;
diff --git a/src/shared/xdynrec.pas b/src/shared/xdynrec.pas
index fe9c5616f346c30fe79c9ba24b19193763a9e9c2..3bce723917354b4ad0e119cf92edcba521f42e2d 100644 (file)
--- a/src/shared/xdynrec.pas
+++ b/src/shared/xdynrec.pas
// TSize: pair of UShorts
// TList: actually, array of records
// TTrigData: array of mMaxDim bytes, but internally a record (mRecRef)
- // arrays of chars are pascal shortstrings (with counter in the first byte)
+ // in binary: arrays of chars are pascal shortstrings (with counter in the first byte)
private
type
TEBS = (TNone, TRec, TEnum, TBitSet);
private
- mOwner: TDynRecord;
- mPasName: AnsiString;
- mName: AnsiString;
- mType: TType;
+ mOwner: TDynRecord; // owner record
+ mName: AnsiString; // field name
+ mType: TType; // field type
mIVal: Integer; // for all integer types
mIVal2: Integer; // for point and size
mSVal: AnsiString; // string; for byte and char arrays
mAsT: Boolean; // for points and sizes, use separate fields, names starts with `t`
mDefined: Boolean;
mHasDefault: Boolean;
- mOmitDef: Boolean;
+ mWriteDef: Boolean;
mInternal: Boolean;
mNegBool: Boolean;
mBitSetUnique: Boolean; // bitset can contain only one value
mTagInt: Integer;
mTagPtr: Pointer;
+ // for pasgen
+ mAlias: AnsiString;
+
private
procedure cleanup ();
class function getTypeName (t: TType): AnsiString;
+ // build "alias name" for pascal code
+ function palias (firstUp: Boolean=false): AnsiString;
+
function definition (): AnsiString;
- function pasdef (): AnsiString;
function clone (newOwner: TDynRecord=nil; registerIn: TDynRecord=nil): TDynField;
function GetEnumerator (): TDynRecList.TEnumerator; inline;
public
- property pasname: AnsiString read mPasName;
property name: AnsiString read mName;
property baseType: TType read mType;
property negbool: Boolean read mNegBool;
private
mOwner: TDynMapDef;
mId: AnsiString;
- mPasName: AnsiString;
mName: AnsiString;
mSize: Integer;
mFields: TDynFieldList;
destructor Destroy (); override;
function definition (): AnsiString;
- function pasdef (): AnsiString;
function clone (registerIn: TDynRecord): TDynRecord;
// number of records of the given instance
function instanceCount (const typename: AnsiString): Integer;
- //procedure setUserField (const fldname: AnsiString; v: LongInt);
- //procedure setUserField (const fldname: AnsiString; v: AnsiString);
- //procedure setUserField (const fldname: AnsiString; v: Boolean);
-
function getUserVar (const aname: AnsiString): Variant;
procedure setUserVar (const aname: AnsiString; val: Variant);
public
property id: AnsiString read mId; // for map parser
- property pasname: AnsiString read mPasName;
property name: AnsiString read mName; // record name
property size: Integer read mSize; // size in bytes
//property fields: TDynFieldList read mFields;
function findTrigFor (const aname: AnsiString): TDynRecord;
function findEBSType (const aname: AnsiString): TDynEBS;
- function pasdef (): AnsiString;
function pasdefconst (): AnsiString;
// creates new header record
mAsT := false;
mHasDefault := false;
mDefined := false;
- mOmitDef := false;
+ mWriteDef := false;
mInternal := true;
mDefUnparsed := '';
mDefSVal := '';
mRecRefId := '';
mTagInt := 0;
mTagPtr := nil;
+ mAlias := '';
end;
result := TDynField.Create(mName, mType);
result.mOwner := mOwner;
if (newOwner <> nil) then result.mOwner := newOwner else result.mOwner := mOwner;
- result.mPasName := mPasName;
result.mName := mName;
result.mType := mType;
result.mIVal := mIVal;
result.mAsT := mAsT;
result.mDefined := mDefined;
result.mHasDefault := mHasDefault;
- result.mOmitDef := mOmitDef;
+ result.mWriteDef := mWriteDef;
result.mInternal := mInternal;
result.mNegBool := mNegBool;
result.mBitSetUnique := mBitSetUnique;
result.mRecRefId := mRecRefId;
result.mTagInt := mTagInt;
result.mTagPtr := mTagPtr;
+ result.mAlias := mAlias;
+end;
+
+
+function TDynField.palias (firstUp: Boolean=false): AnsiString;
+var
+ nextUp: Boolean;
+ ch: AnsiChar;
+begin
+ if (Length(mAlias) > 0) then
+ begin
+ if firstUp then result := UpCase1251(mAlias[1])+Copy(mAlias, 2, Length(mAlias)-1) else result := mAlias;
+ end
+ else
+ begin
+ result := '';
+ nextUp := firstUp;
+ for ch in mName do
+ begin
+ if (ch = '_') then begin nextUp := true; continue; end;
+ if nextUp then result += UpCase1251(ch) else result += ch;
+ nextUp := false;
+ end;
+ end;
end;
function TDynField.definition (): AnsiString;
begin
- result := mPasName+' is '+quoteStr(mName)+' type ';
+ result := quoteStr(mName)+' type ';
result += getTypeName(mType);
+ if (Length(mAlias) > 0) then result += ' alias '+mAlias;
if (mMaxDim >= 0) then result += Format('[%d]', [mMaxDim]);
if (mBinOfs >= 0) then result += Format(' offset %d', [mBinOfs]);
case mEBS of
if (mType = TType.TPoint) then begin if (mAsT) then result += ' as txy' else result += ' as xy'; end
else if (mType = TType.TSize) then begin if (mAsT) then result += ' as twh' else result += ' as wh'; end;
end;
- if mOmitDef then result += ' omitdefault';
+ if mWriteDef then result += ' writedefault';
if mInternal then result += ' internal';
end;
-function TDynField.pasdef (): AnsiString;
-begin
- result := mPasName+': ';
- case mType of
- TType.TBool: result += 'Boolean;';
- TType.TChar: if (mMaxDim > 0) then result += formatstrf('Char%d;', [mMaxDim]) else result += 'Char;';
- TType.TByte: result += 'ShortInt;';
- TType.TUByte: result += 'Byte;';
- TType.TShort: result += 'SmallInt;';
- TType.TUShort: result += 'Word;';
- TType.TInt: result += 'LongInt;';
- TType.TUInt: result += 'LongWord;';
- TType.TString: result += 'AnsiString;';
- TType.TPoint:
- if mAsT then result := 'tX, tY: Integer;'
- else if mSepPosSize then result := 'X, Y: Integer;'
- else result += 'TDFPoint;';
- TType.TSize:
- if mAsT then result := 'tWidth, tHeight: Word;'
- else if mSepPosSize then result := 'Width, Height: Word;'
- else result += 'TSize;';
- TType.TList: assert(false);
- TType.TTrigData: result += formatstrf('Byte%d;', [mMaxDim]);
- else raise Exception.Create('ketmar forgot to handle some field type');
- end;
-end;
-
-
procedure TDynField.parseDef (pr: TTextParser);
var
fldname: AnsiString;
fldtype: AnsiString;
fldofs: Integer;
fldrecname: AnsiString;
- fldpasname: AnsiString;
asxy, aswh, ast: Boolean;
ainternal: Boolean;
- omitdef: Boolean;
+ writedef: Boolean;
defstr: AnsiString;
defint, defint2: Integer;
hasdefStr: Boolean;
unique: Boolean;
asmonid: Boolean;
defech: AnsiChar;
+ xalias: AnsiString;
begin
- fldpasname := '';
fldname := '';
fldtype := '';
fldofs := -1;
aswh := false;
ast := false;
ainternal := false;
- omitdef := false;
+ writedef := false;
defstr := '';
defint := 0;
defint2 := 0;
asmonid := false;
lmaxdim := -1;
lebs := TDynField.TEBS.TNone;
+ xalias := '';
- fldpasname := pr.expectId(); // pascal field name
// field name
- pr.expectId('is');
- fldname := pr.expectStr();
- // field type
- pr.expectId('type');
- fldtype := pr.expectId();
-
- // fixed-size array?
- if pr.eatDelim('[') then
- begin
- lmaxdim := pr.expectInt();
- if (lmaxdim < 1) then raise Exception.Create(Format('invalid field ''%s'' array size', [fldname]));
- pr.expectDelim(']');
- end;
+ fldname := pr.expectStrOrId();
while (pr.tokType <> pr.TTSemi) do
begin
+ if pr.eatId('type') then
+ begin
+ if (Length(fldtype) > 0) then raise Exception.Create(Format('duplicate type definition for field ''%s''', [fldname]));
+ // field type
+ fldtype := pr.expectId();
+ // fixed-size array?
+ if pr.eatDelim('[') then
+ begin
+ lmaxdim := pr.expectInt();
+ // arbitrary limits
+ if (lmaxdim < 1) or (lmaxdim > 32768) then raise Exception.Create(Format('invalid field ''%s'' array size', [fldname]));
+ pr.expectDelim(']');
+ end;
+ continue;
+ end;
+
+ if pr.eatId('alias') then
+ begin
+ if (Length(xalias) > 0) then raise Exception.Create(Format('duplicate alias definition for field ''%s''', [fldname]));
+ xalias := pr.expectId();
+ continue;
+ end;
+
if pr.eatId('offset') then
begin
if (fldofs >= 0) then raise Exception.Create(Format('duplicate field ''%s'' offset', [fldname]));
continue;
end;
- if pr.eatId('omitdefault') then
+ if pr.eatId('writedefault') then
begin
- omitdef := true;
+ writedef := true;
continue;
end;
continue;
end;
+ // record type, no special modifiers
if (pr.tokType <> pr.TTId) then raise Exception.Create(Format('field ''%s'' has something unexpected in definition', [fldname]));
if (Length(fldrecname) <> 0) then raise Exception.Create(Format('field ''%s'' already typed as ''%s''', [fldname, fldrecname]));
else if (fldtype = 'point') then mType := TType.TPoint
else if (fldtype = 'size') then mType := TType.TSize
else if (fldtype = 'trigdata') then mType := TType.TTrigData
- else raise Exception.Create(Format('field ''%s'' has invalid type ''%s''', [fldname, fldtype]));
+ else
+ begin
+ // record types defaults to int
+ if (Length(fldrecname) > 0) then
+ begin
+ mType := TType.TInt;
+ end
+ else
+ begin
+ if (Length(fldtype) = 0) then raise Exception.Create(Format('field ''%s'' has no type', [fldname]))
+ else raise Exception.Create(Format('field ''%s'' has invalid type ''%s''', [fldname, fldtype]));
+ end;
+ end;
+ // check for valid arrays
if (lmaxdim > 0) and (mType <> TType.TChar) and (mType <> TType.TTrigData) then raise Exception.Create(Format('field ''%s'' of type ''%s'' cannot be array', [fldname, fldtype]));
+
+ // check for valid trigdata or record type
if (mType = TType.TTrigData) then
begin
- if (lmaxdim < 1) then raise Exception.Create(Format('field ''%s'' of type ''%s'' cannot be array', [fldname, fldtype]));
- if (Length(fldrecname) > 0) then raise Exception.Create(Format('field ''%s'' of type ''%s'' cannot have another type', [fldname, fldtype]));
+ // trigdata
+ if (lmaxdim < 1) then raise Exception.Create(Format('field ''%s'' of type ''%s'' cannot be non-array', [fldname, 'trigdata']));
+ if (Length(fldrecname) > 0) then raise Exception.Create(Format('field ''%s'' of type ''%s'' cannot have another type', [fldname, 'trigdata']));
lebs := TDynField.TEBS.TRec;
+ end
+ else if (Length(fldrecname) > 0) then
+ begin
+ // record
+ if not (mType in [TType.TByte, TType.TUByte, TType.TShort, TType.TUShort, TType.TInt, TType.TUInt]) then
+ begin
+ raise Exception.Create(Format('field ''%s'' of record type ''%s'' cannot have type ''%s''', [fldname, fldrecname, fldtype]));
+ end;
end;
+ // setup default value
if hasdefStr then self.mDefUnparsed := quoteStr(defstr)
else if hasdefId then self.mDefUnparsed := defstr
else if hasdefInt then
end;
self.mHasDefault := (hasdefStr or hasdefId or hasdefInt);
- self.mPasName := fldpasname;
self.mEBS := lebs;
self.mEBSTypeName := fldrecname;
self.mBitSetUnique := unique;
self.mBinOfs := fldofs;
self.mSepPosSize := (asxy or aswh);
self.mAsT := ast;
- self.mOmitDef := omitdef;
+ self.mWriteDef := writedef;
self.mInternal := ainternal;
+ self.mAlias := xalias;
end;
result := TDynRecord.Create();
result.mOwner := mOwner;
result.mId := mId;
- result.mPasName := mPasName;
result.mName := mName;
result.mSize := mSize;
result.mHeader := mHeader;
end
else
begin
- mPasName := pr.expectId(); // pascal record name
- pr.expectId('is');
- mName := pr.expectStr();
+ mName := pr.expectStrOrId();
while (pr.tokType <> pr.TTBegin) do
begin
if pr.eatId('header') then begin mHeader := true; continue; end;
end;
-function TDynRecord.pasdef (): AnsiString;
-var
- fld: TDynField;
-begin
- if isTrigData then
- begin
- assert(false);
- result := '';
- end
- else
- begin
- // record
- result := ' '+mPasName+' = packed record'#10;
- end;
- for fld in mFields do
- begin
- if fld.mInternal then continue;
- if (fld.mBinOfs < 0) then continue;
- result += ' '+fld.pasdef+#10;
- end;
- result += ' end;'#10;
-end;
-
-
function TDynRecord.definition (): AnsiString;
var
f: Integer;
else
begin
// record
- result := mPasName+' is '+quoteStr(mName);
+ result := quoteStr(mName);
if (mSize >= 0) then result += Format(' size %d bytes', [mSize]);
if mHeader then result += ' header';
end;
continue;
end;
if fld.mInternal then continue;
- if fld.mOmitDef and fld.isDefaultValue then continue;
+ if (not fld.mWriteDef) and fld.isDefaultValue then continue;
wr.putIndent();
fld.writeTo(wr);
end;
while true do
begin
if not pr.skipBlanks() then break;
- if (pr.tokType <> pr.TTId) then raise Exception.Create('identifier expected');
- if (pr.tokStr = 'enum') or (pr.tokStr = 'bitset') then
+ if (pr.tokType = pr.TTId) then
begin
- eb := TDynEBS.Create(pr);
- if (findEBSType(eb.name) <> nil) then
+ // enum or bitset
+ if (pr.tokStr = 'enum') or (pr.tokStr = 'bitset') then
begin
- eb.Free();
- raise Exception.Create(Format('duplicate enum/bitset ''%s''', [eb.name]));
+ eb := TDynEBS.Create(pr);
+ if (findEBSType(eb.name) <> nil) then
+ begin
+ eb.Free();
+ raise Exception.Create(Format('duplicate enum/bitset ''%s''', [eb.name]));
+ end;
+ eb.mOwner := self;
+ ebsTypes.append(eb);
+ //writeln(eb.definition); writeln;
+ continue;
end;
- eb.mOwner := self;
- ebsTypes.append(eb);
- //writeln(eb.definition); writeln;
- continue;
- end;
- if (pr.tokStr = 'TriggerData') then
- begin
- rec := TDynRecord.Create(pr);
- for f := 0 to High(rec.mTrigTypes) do
+ // triggerdata
+ if (pr.tokStr = 'TriggerData') then
begin
- if (findTrigFor(rec.mTrigTypes[f]) <> nil) then
+ rec := TDynRecord.Create(pr);
+ for f := 0 to High(rec.mTrigTypes) do
begin
- rec.Free();
- raise Exception.Create(Format('duplicate trigdata ''%s''', [rec.mTrigTypes[f]]));
+ if (findTrigFor(rec.mTrigTypes[f]) <> nil) then
+ begin
+ rec.Free();
+ raise Exception.Create(Format('duplicate trigdata ''%s''', [rec.mTrigTypes[f]]));
+ end;
end;
+ rec.mOwner := self;
+ trigTypes.append(rec);
+ //writeln(dr.definition); writeln;
+ continue;
end;
- rec.mOwner := self;
- trigTypes.append(rec);
- //writeln(dr.definition); writeln;
- continue;
end;
rec := TDynRecord.Create(pr);
function TDynMapDef.parseMap (pr: TTextParser): TDynRecord;
var
res: TDynRecord = nil;
- //fo: TextFile;
begin
result := nil;
try
res := nil;
finally
res.Free();
- {
- except on e: Exception do
- begin
- //TMP:segfaults!
- AssignFile(fo, 'z.log');
- Rewrite(fo);
- DumpExceptionBackTrace(fo);
- CloseFile(fo);
- res.Free();
- end;
- }
end;
end;
end;
-function TDynMapDef.pasdef (): AnsiString;
-var
- ebs: TDynEBS;
- rec: TDynRecord;
- fld: TDynField;
- needComma: Boolean;
- tn: AnsiString;
-begin
- result := '';
- result += '// ////////////////////////////////////////////////////////////////////////// //'#10;
- result += '// enums and bitsets'#10;
- for ebs in ebsTypes do result += #10+ebs.pasdef();
- result += #10#10'// ////////////////////////////////////////////////////////////////////////// //'#10;
- result += '// records'#10'type'#10;
- for rec in recTypes do
- begin
- if (rec.mSize < 1) then continue;
- result += rec.pasdef();
- result += #10;
- end;
- result += #10#10'// ////////////////////////////////////////////////////////////////////////// //'#10;
- result += '// triggerdata'#10'type'#10;
- result += ' TTriggerData = record'#10;
- result += ' case Byte of'#10;
- result += ' 0: (Default: Byte128);'#10;
- for rec in trigTypes do
- begin
- result += ' ';
- needComma := false;
- for tn in rec.mTrigTypes do
- begin
- if needComma then result += ', ' else needComma := true;
- result += tn;
- end;
- result += ': ('#10;
- for fld in rec.mFields do
- begin
- if fld.mInternal then continue;
- if (fld.mBinOfs < 0) then continue;
- result += ' '+fld.pasdef+#10;
- end;
- result += ' );'#10;
- end;
- result += ' end;'#10;
-end;
-
-
function TDynMapDef.pasdefconst (): AnsiString;
var
ebs: TDynEBS;
diff --git a/src/shared/xparser.pas b/src/shared/xparser.pas
index 76ac3c0165483ef90d4066904540d1eef5b7a2dd..01c49b4bb1bb4e4360dd8e4c1057686e15b7c5ff 100644 (file)
--- a/src/shared/xparser.pas
+++ b/src/shared/xparser.pas
function expectStr (allowEmpty: Boolean=false): AnsiString;
function expectInt (): Integer;
+ function expectStrOrId (allowEmpty: Boolean=false): AnsiString;
+
procedure expectTT (ttype: Integer);
function eatTT (ttype: Integer): Boolean;
end;
+function TTextParser.expectStrOrId (allowEmpty: Boolean=false): AnsiString;
+begin
+ case mTokType of
+ TTStr:
+ if (not allowEmpty) and (Length(mTokStr) = 0) then raise Exception.Create('non-empty string expected');
+ TTId:
+ begin end;
+ else
+ raise Exception.Create('string or identifier expected');
+ end;
+ result := mTokStr;
+ skipToken();
+end;
+
+
function TTextParser.expectInt (): Integer;
begin
if (mTokType <> TTInt) then raise Exception.Create('string expected');
diff --git a/src/tools/mapgen.dpr b/src/tools/mapgen.dpr
index c53aa4eb9ee22b74608b8e0d873f53c3d7df9db3..27c718306e114e612f526d1aa0831983a32952bb 100644 (file)
--- a/src/tools/mapgen.dpr
+++ b/src/tools/mapgen.dpr
// ////////////////////////////////////////////////////////////////////////// //
+type
+ THashStrFld = specialize THashBase<AnsiString, TDynField>;
+
var
pr: TTextParser;
dfmapdef: TDynMapDef;
needComma: Boolean;
trec: TDynRecord;
fld: TDynField;
+ palias: AnsiString;
+ fldknown: THashStrFld = nil; // key: palias; value: prev field
+ knownfld: TDynField;
begin
+ fldknown := THashStrFld.Create(hsihash, hsiequ);
//writeln(getFilenamePath(ParamStr(0)), '|');
e_InitWritelnDriver();
dfmapdef := TDynMapDef.Create(pr);
except on e: Exception do
begin
- writeln('ERROR at (', pr.line, ',', pr.col, '): ', e.message);
+ writeln('ERROR at (', pr.tokLine, ',', pr.tokCol, '): ', e.message);
Halt(1);
end;
end;
@@ -92,14 +99,18 @@ function TDynRecordHelper.trigTlpDir (): Byte; inline; begin result := Byte(getF
begin
// header comment
write(foimpl, #10'// ');
+ write(fohlp, #10'// ');
needComma := false;
trec := dfmapdef.trigType[tidx];
for nidx := 0 to trec.forTrigCount-1 do
begin
+ if needComma then write(fohlp, ', ');
if needComma then write(foimpl, ', ') else needComma := true;
+ write(fohlp, trec.forTrigAt[nidx]);
write(foimpl, trec.forTrigAt[nidx]);
end;
write(foimpl, #10);
+ write(fohlp, #10);
// fields
for fidx := 0 to trec.count-1 do
begin
@@ -109,13 +120,26 @@ function TDynRecordHelper.trigTlpDir (): Byte; inline; begin result := Byte(getF
// HACK!
if (fld.name = 'panelid') or (fld.name = 'monsterid') then
begin
- writeln('skipping ', fld.pasname, ' <', fld.name, '>');
+ writeln('skipping <', fld.name, '>');
+ continue;
+ end;
+ palias := fld.palias(true);
+ // check for known aliases
+ //writeln('<', palias, '> : <', toLowerCase1251(palias), '>');
+ knownfld := nil;
+ if fldknown.get(toLowerCase1251(palias), knownfld) then
+ begin
+ if (fld.name <> knownfld.name) then raise Exception.Create(formatstrf('field ''%s'' of record ''%s'' conflicts with other field ''%s''', [fld.name, trec.name, knownfld.name]));
+ if (fld.baseType <> knownfld.baseType) then raise Exception.Create(formatstrf('field ''%s'' of record ''%s'' conflicts with other field ''%s'' by type', [fld.name, trec.name, knownfld.name]));
+ writeln('skipped duplicate field ''', fld.name, '''');
continue;
end;
+ fldknown.put(toLowerCase1251(palias), fld);
+ // write it
if (fld.baseType <> TDynField.TType.TPoint) and (fld.baseType <> TDynField.TType.TSize) then
begin
- write(foimpl, 'function TDynRecordHelper.trig', fld.pasname, ' (): ');
- write(fohlp, 'function trig', fld.pasname, ' (): ');
+ write(foimpl, 'function TDynRecordHelper.trig', palias, ' (): ');
+ write(fohlp, 'function trig', palias, ' (): ');
end;
case fld.baseType of
TDynField.TType.TBool:
@@ -182,8 +206,8 @@ function TDynRecordHelper.trigTlpDir (): Byte; inline; begin result := Byte(getF
end
else
begin
- write(fohlp, 'function trig', fld.pasname, ' (): TDFPoint; inline;'#10);
- write(foimpl, 'function TDynRecordHelper.trig', fld.pasname, ' (): TDFPoint; inline; begin result := getPointField(''', fld.name, '''); end;'#10);
+ write(fohlp, 'function trig', palias, ' (): TDFPoint; inline;'#10);
+ write(foimpl, 'function TDynRecordHelper.trig', palias, ' (): TDFPoint; inline; begin result := getPointField(''', fld.name, '''); end;'#10);
end;
end;
TDynField.TType.TSize: