{ "version": 3, "sources": ["../../source/utility/Resize.js", "../../source/data/sizes.js", "../../node_modules/vkey/index.js", "../../node_modules/keyb/index.js", "../../node_modules/afloop/index.js", "../../node_modules/joyp/index.js", "../../node_modules/screenfull/index.js", "../../node_modules/poin/index.js", "../../source/utility/UserError.js", "../../source/utility/NavigationRouter.js", "../../source/data/games/pirates/player.js", "../../node_modules/shortid/lib/random/random-from-seed.js", "../../node_modules/shortid/lib/alphabet.js", "../../node_modules/shortid/lib/random/random-byte-browser.js", "../../node_modules/shortid/node_modules/nanoid/format.browser.js", "../../node_modules/shortid/lib/generate.js", "../../node_modules/shortid/lib/build.js", "../../node_modules/shortid/lib/is-valid.js", "../../node_modules/shortid/lib/util/cluster-worker-id-browser.js", "../../node_modules/shortid/lib/index.js", "../../node_modules/shortid/index.js", "../../node_modules/objdict/main.js", "../../source/utility/Geometry.js", "../../source/utility/integration/Tiled.js", "../../node_modules/nanoid/url-alphabet/index.js", "../../node_modules/nanoid/index.browser.js", "../../node_modules/seedrandom/lib/alea.js", "../../node_modules/seedrandom/lib/xor128.js", "../../node_modules/seedrandom/lib/xorwow.js", "../../node_modules/seedrandom/lib/xorshift7.js", "../../node_modules/seedrandom/lib/xor4096.js", "../../node_modules/seedrandom/lib/tychei.js", "../../node_modules/seedrandom/seedrandom.js", "../../node_modules/seedrandom/index.js", "../../node_modules/strict-uri-encode/index.js", "../../node_modules/decode-uri-component/index.js", "../../node_modules/split-on-first/index.js", "../../node_modules/filter-obj/index.js", "../../node_modules/query-string/index.js", "../../source/utility/isString.js", "../../source/utility/Random.js", "../../node_modules/local-storage-json/index.js", "../../source/data/audiotriggers.js", "../../source/juice/Audiomix.js", "../../node_modules/lodash.merge/index.js", "../../source/tests/utility/Speedtest.js", "../../node_modules/lodash.clonedeep/index.js", "../../source/models/Delta.js", "../../source/models/Step.js", "../../node_modules/point-in-polygon/flat.js", "../../node_modules/point-in-polygon/nested.js", "../../node_modules/point-in-polygon/index.js", "../../source/models/Zone.js", "../../source/models/World.js", "../../node_modules/inkjs/src/engine/Path.ts", "../../node_modules/inkjs/src/engine/Debug.ts", "../../node_modules/inkjs/src/engine/Value.ts", "../../node_modules/inkjs/src/engine/PushPop.ts", "../../node_modules/inkjs/src/engine/Error.ts", "../../node_modules/inkjs/src/engine/TypeAssertion.ts", "../../node_modules/inkjs/src/engine/NullException.ts", "../../node_modules/inkjs/src/engine/Object.ts", "../../node_modules/inkjs/src/engine/StringBuilder.ts", "../../node_modules/inkjs/src/engine/InkList.ts", "../../node_modules/inkjs/src/engine/StoryException.ts", "../../node_modules/inkjs/src/engine/TryGetResult.ts", "../../node_modules/inkjs/src/engine/SearchResult.ts", "../../node_modules/inkjs/src/engine/Container.ts", "../../node_modules/inkjs/src/engine/Glue.ts", "../../node_modules/inkjs/src/engine/ControlCommand.ts", "../../node_modules/inkjs/src/engine/Pointer.ts", "../../node_modules/inkjs/src/engine/Divert.ts", "../../node_modules/inkjs/src/engine/ChoicePoint.ts", "../../node_modules/inkjs/src/engine/VariableReference.ts", "../../node_modules/inkjs/src/engine/VariableAssignment.ts", "../../node_modules/inkjs/src/engine/Void.ts", "../../node_modules/inkjs/src/engine/NativeFunctionCall.ts", "../../node_modules/inkjs/src/engine/Tag.ts", "../../node_modules/inkjs/src/engine/Choice.ts", "../../node_modules/inkjs/src/engine/ListDefinition.ts", "../../node_modules/inkjs/src/engine/ListDefinitionsOrigin.ts", "../../node_modules/inkjs/src/engine/JsonSerialisation.ts", "../../node_modules/inkjs/src/engine/CallStack.ts", "../../node_modules/inkjs/src/engine/VariablesState.ts", "../../node_modules/inkjs/src/engine/PRNG.ts", "../../node_modules/inkjs/src/engine/StatePatch.ts", "../../node_modules/inkjs/src/engine/SimpleJson.ts", "../../node_modules/inkjs/src/engine/Flow.ts", "../../node_modules/inkjs/src/engine/StoryState.ts", "../../node_modules/inkjs/src/engine/StopWatch.ts", "../../node_modules/inkjs/src/engine/Story.ts", "../../node_modules/stats.js/build/stats.min.js", "../../source/utility/Loop.js", "../../source/models/admin/Dev.js", "../../source/data/games/pirates/script.ink.json", "../../source/utility/integration/Ink.js", "../../source/utility/integration/InkDialogue.js", "../../source/models/Reactions.js", "../../source/models/Action.js", "../../source/data/games/pirates/unit-jobs.js", "../../source/utility/Frames.js", "../../source/assets/images/hero-tactics-ii/units/enemy/lord/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/bladesinger/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/mage/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/sniper/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/ranger/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/knight/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/general/index.js", "../../source/assets/images/hero-tactics-ii/units/enemy/paladin/index.js", "../../source/data/games/hero/unit-jobs.js", "../../source/data/unit-jobs.js", "../../source/models/Unit.js", "../../node_modules/toggle-selection/index.js", "../../node_modules/copy-to-clipboard/index.js", "../../node_modules/rgb-hsv/index.js", "../../node_modules/hsv-rgb/index.js", "../../node_modules/colornames/colors.js", "../../node_modules/colornames/index.js", "../../source/juice/utility/translateColor.js", "../../source/juice/utility/Tweens.js", "../../source/juice/utility/Motions.js", "../../node_modules/bezier-easing/src/index.js", "../../source/juice/utility/Timings.js", "../../source/juice/animations.js", "../../source/juice/Director.js", "../../source/models/admin/DevSelection.js", "../../source/juice/utility/Time.js", "../../source/models/Selection.js", "../../source/models/Stage.js", "../../source/data/elements.js", "../../source/data/skills.js", "../../source/data/plotscripts.js", "../../source/data/games/pirates/ship/units.json", "../../source/data/games/pirates/ship/tiles.json", "../../source/data/levels/tileset.json", "../../source/data/games/pirates/ship/index.js", "../../source/data/games/pirates/prison/units.json", "../../source/data/games/pirates/prison/tiles.json", "../../source/data/games/pirates/prison/index.js", "../../source/data/games/pirates/wild/units.json", "../../source/data/games/pirates/wild/tiles.json", "../../source/data/games/pirates/wild/index.js", "../../source/data/games/pirates/tavern/units.json", "../../source/data/games/pirates/tavern/tiles.json", "../../source/data/games/pirates/tavern/index.js", "../../source/data/games/pirates/index.js", "../../source/data/unitTemplates.js", "../../source/juice/utility/PaletteSwap.js", "../../source/utility/Preload.js", "../../source/data/games/dungeon/preload.js", "../../source/data/games/dungeon/dungeon.js", "../../node_modules/preact/src/constants.js", "../../node_modules/preact/src/util.js", "../../node_modules/preact/src/options.js", "../../node_modules/preact/src/create-element.js", "../../node_modules/preact/src/component.js", "../../node_modules/preact/src/diff/props.js", "../../node_modules/preact/src/create-context.js", "../../node_modules/preact/src/diff/children.js", "../../node_modules/preact/src/diff/index.js", "../../node_modules/preact/src/render.js", "../../node_modules/preact/src/clone-element.js", "../../node_modules/preact/src/diff/catch-error.js", "../../source/data/games/dungeon/0/tiles.json", "../../source/data/games/dungeon/0/units.json", "../../source/data/games/dungeon/0/index.jsx", "../../source/data/games/dungeon/chapters.js", "../../source/data/games/dungeon/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/lord/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/bladesinger/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/archer/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/ranger/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/knight/index.js", "../../source/assets/images/hero-tactics-ii/units/ally/general/index.js", "../../source/data/games/hero/player.js", "../../source/data/games/hero/chapters.js", "../../source/data/games/hero/index.js", "../../source/data/games/war/player.js", "../../source/data/games/war/y1/units.json", "../../source/data/games/war/y1/tiles.json", "../../source/data/games/war/y1/index.js", "../../source/data/games/war/y2/units.json", "../../source/data/games/war/y2/tiles.json", "../../source/data/games/war/y2/encounters.json", "../../source/data/games/war/y2/index.js", "../../source/data/games/war/y3/units.json", "../../source/data/games/war/y3/tiles.json", "../../source/data/games/war/y3/index.js", "../../source/data/games/war/y4/units.json", "../../source/data/games/war/y4/tiles.json", "../../source/data/games/war/y4/index.js", "../../source/data/games/war/y5/units.json", "../../source/data/games/war/y5/tiles.json", "../../source/data/games/war/y5/index.js", "../../source/data/games/war/g4/units.json", "../../source/data/games/war/g4/tiles.json", "../../source/data/games/war/g4/index.js", "../../source/data/games/war/index.js", "../../source/data/games/index.js", "../../node_modules/assertion-error/index.js", "../../node_modules/pathval/index.js", "../../node_modules/chai/lib/chai/utils/flag.js", "../../node_modules/chai/lib/chai/utils/test.js", "../../node_modules/type-detect/type-detect.js", "../../node_modules/chai/lib/chai/utils/expectTypes.js", "../../node_modules/chai/lib/chai/utils/getActual.js", "../../node_modules/get-func-name/index.js", "../../node_modules/loupe/loupe.js", "../../node_modules/chai/lib/chai/config.js", "../../node_modules/chai/lib/chai/utils/inspect.js", "../../node_modules/chai/lib/chai/utils/objDisplay.js", "../../node_modules/chai/lib/chai/utils/getMessage.js", "../../node_modules/chai/lib/chai/utils/transferFlags.js", "../../node_modules/deep-eql/index.js", "../../node_modules/chai/lib/chai/utils/isProxyEnabled.js", "../../node_modules/chai/lib/chai/utils/addProperty.js", "../../node_modules/chai/lib/chai/utils/addLengthGuard.js", "../../node_modules/chai/lib/chai/utils/getProperties.js", "../../node_modules/chai/lib/chai/utils/proxify.js", "../../node_modules/chai/lib/chai/utils/addMethod.js", "../../node_modules/chai/lib/chai/utils/overwriteProperty.js", "../../node_modules/chai/lib/chai/utils/overwriteMethod.js", "../../node_modules/chai/lib/chai/utils/addChainableMethod.js", "../../node_modules/chai/lib/chai/utils/overwriteChainableMethod.js", "../../node_modules/chai/lib/chai/utils/compareByInspect.js", "../../node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js", "../../node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js", "../../node_modules/check-error/index.js", "../../node_modules/chai/lib/chai/utils/isNaN.js", "../../node_modules/chai/lib/chai/utils/getOperator.js", "../../node_modules/chai/lib/chai/utils/index.js", "../../node_modules/chai/lib/chai/assertion.js", "../../node_modules/chai/lib/chai/core/assertions.js", "../../node_modules/chai/lib/chai/interface/expect.js", "../../node_modules/chai/lib/chai/interface/should.js", "../../node_modules/chai/lib/chai/interface/assert.js", "../../node_modules/chai/lib/chai.js", "../../node_modules/chai/index.js", "../../node_modules/chai/index.mjs", "../../source/tests/testlist.js", "../../node_modules/chalk/source/vendor/ansi-styles/index.js", "../../node_modules/chalk/source/vendor/supports-color/browser.js", "../../node_modules/chalk/source/utilities.js", "../../node_modules/chalk/source/index.js", "../../source/tests/utility/Prettylog.js", "../../node_modules/parse-ms/index.js", "../../node_modules/pretty-ms/index.js", "../../node_modules/deep-diff/index.js", "../../source/tests/utility/Testlaunch.js", "../../source/models/Navigation.js", "../../source/juice/Step.js", "../../source/models/Sequence.js", "../../source/models/logic/getLevelStatus.js", "../../source/models/Chapter.js", "../../source/models/Game.js", "../../source/models/App.js", "../../node_modules/polygon-clipping/dist/polygon-clipping.umd.js", "../../source/index.js", "../../source/utility/Render.js", "../../source/views/Mount.jsx", "../../source/views/Stage.jsx", "../../source/views/components/UnitSprite.jsx", "../../source/juice/utility/SpriteAnimation.js", "../../source/data/unitsprites.js", "../../source/views/components/UnitTemplateSprite.jsx", "../../source/views/components/UnitHealthBar.jsx", "../../source/views/components/UnitExperienceBar.jsx", "../../source/views/DevPanes.jsx", "../../source/views/DevInspectorUI.jsx", "../../source/views/DevNavigatorUI.jsx", "../../source/views/ChapterUI.jsx", "../../source/views/components/Snow.jsx", "../../source/data/preload.js"], "sourcesContent": ["let width = undefined\nlet height = undefined\nlet domId = undefined\n\nexport default function(parameters = {}) {\n width = parameters.width || width\n height = parameters.height || height\n domId = parameters.domId || domId\n resize()\n}\n\nfunction resize() {\n if(width == undefined) return\n if(height == undefined) return\n if(domId == undefined) return\n\n const dom = document.getElementById(domId)\n if(dom == undefined) return\n\n const x = Math.floor(dom.parentElement.clientWidth / width)\n const y = Math.floor(dom.parentElement.clientHeight / height)\n dom.style.fontSize = Math.min(x, y) + \"px\"\n}\n\nwindow.addEventListener(\"resize\", resize)\n", "export default {\n // Chess Tactics\n \"frame\": {\n \"width\": 16,\n \"height\": 9,\n },\n \"grid\": {\n \"width\": 1,\n \"height\": 1,\n },\n \"camera\": {\n \"type\": \"top-down\",\n \"position\": {\n \"x\": 0,\n \"y\": 0,\n }\n },\n \"defaultAnchor\": {\n \"x\": 0.5,\n \"y\": 1,\n },\n}\n", "'use strict'\n\nvar ua = typeof window !== 'undefined' ? window.navigator.userAgent : ''\n , isOSX = /OS X/.test(ua)\n , isOpera = /Opera/.test(ua)\n , maybeFirefox = !/like Gecko/.test(ua) && !isOpera\n\nvar i, output = module.exports = {\n 0: isOSX ? '<menu>' : '<UNK>'\n, 1: '<mouse 1>'\n, 2: '<mouse 2>'\n, 3: '<break>'\n, 4: '<mouse 3>'\n, 5: '<mouse 4>'\n, 6: '<mouse 5>'\n, 8: '<backspace>'\n, 9: '<tab>'\n, 12: '<clear>'\n, 13: '<enter>'\n, 16: '<shift>'\n, 17: '<control>'\n, 18: '<alt>'\n, 19: '<pause>'\n, 20: '<caps-lock>'\n, 21: '<ime-hangul>'\n, 23: '<ime-junja>'\n, 24: '<ime-final>'\n, 25: '<ime-kanji>'\n, 27: '<escape>'\n, 28: '<ime-convert>'\n, 29: '<ime-nonconvert>'\n, 30: '<ime-accept>'\n, 31: '<ime-mode-change>'\n, 32: '<space>'\n, 33: '<page-up>'\n, 34: '<page-down>'\n, 35: '<end>'\n, 36: '<home>'\n, 37: '<left>'\n, 38: '<up>'\n, 39: '<right>'\n, 40: '<down>'\n, 41: '<select>'\n, 42: '<print>'\n, 43: '<execute>'\n, 44: '<snapshot>'\n, 45: '<insert>'\n, 46: '<delete>'\n, 47: '<help>'\n, 91: '<meta>' // meta-left -- no one handles left and right properly, so we coerce into one.\n, 92: '<meta>' // meta-right\n, 93: isOSX ? '<meta>' : '<menu>' // chrome,opera,safari all report this for meta-right (osx mbp).\n, 95: '<sleep>'\n, 106: '<num-*>'\n, 107: '<num-+>'\n, 108: '<num-enter>'\n, 109: '<num-->'\n, 110: '<num-.>'\n, 111: '<num-/>'\n, 144: '<num-lock>'\n, 145: '<scroll-lock>'\n, 160: '<shift-left>'\n, 161: '<shift-right>'\n, 162: '<control-left>'\n, 163: '<control-right>'\n, 164: '<alt-left>'\n, 165: '<alt-right>'\n, 166: '<browser-back>'\n, 167: '<browser-forward>'\n, 168: '<browser-refresh>'\n, 169: '<browser-stop>'\n, 170: '<browser-search>'\n, 171: '<browser-favorites>'\n, 172: '<browser-home>'\n\n // ff/osx reports '<volume-mute>' for '-'\n, 173: isOSX && maybeFirefox ? '-' : '<volume-mute>'\n, 174: '<volume-down>'\n, 175: '<volume-up>'\n, 176: '<next-track>'\n, 177: '<prev-track>'\n, 178: '<stop>'\n, 179: '<play-pause>'\n, 180: '<launch-mail>'\n, 181: '<launch-media-select>'\n, 182: '<launch-app 1>'\n, 183: '<launch-app 2>'\n, 186: ';'\n, 187: '='\n, 188: ','\n, 189: '-'\n, 190: '.'\n, 191: '/'\n, 192: '`'\n, 219: '['\n, 220: '\\\\'\n, 221: ']'\n, 222: \"'\"\n, 223: '<meta>'\n, 224: '<meta>' // firefox reports meta here.\n, 226: '<alt-gr>'\n, 229: '<ime-process>'\n, 231: isOpera ? '`' : '<unicode>'\n, 246: '<attention>'\n, 247: '<crsel>'\n, 248: '<exsel>'\n, 249: '<erase-eof>'\n, 250: '<play>'\n, 251: '<zoom>'\n, 252: '<no-name>'\n, 253: '<pa-1>'\n, 254: '<clear>'\n}\n\nfor(i = 58; i < 65; ++i) {\n output[i] = String.fromCharCode(i)\n}\n\n// 0-9\nfor(i = 48; i < 58; ++i) {\n output[i] = (i - 48)+''\n}\n\n// A-Z\nfor(i = 65; i < 91; ++i) {\n output[i] = String.fromCharCode(i)\n}\n\n// num0-9\nfor(i = 96; i < 106; ++i) {\n output[i] = '<num-'+(i - 96)+'>'\n}\n\n// F1-F24\nfor(i = 112; i < 136; ++i) {\n output[i] = 'F'+(i-111)\n}\n", "const vkey = require(\"vkey\")\n\nconst DEFAULT_DELTA = 1000 / 60\n\nconst Keyb = {\"data\": {}}\n\nKeyb.isPressed = function(key) {\n return this.data[key] != undefined\n && this.data[key].state == \"pressed\"\n}\n\nKeyb.isUnpressed = function(key) {\n return this.data[key] == undefined\n || this.data[key].state == \"unpressed\"\n}\n\nKeyb.wasJustPressed = function(key, delta) {\n return this.data[key] != undefined\n && this.data[key].state == \"pressed\"\n && window.performance.now() - this.data[key].time < (delta || Keyb.delta || DEFAULT_DELTA)\n}\n\nKeyb.wasJustUnpressed = function(key, delta) {\n return this.data[key] != undefined\n && this.data[key].state == \"unpressed\"\n && window.performance.now() - this.data[key].time < (delta || Keyb.delta || DEFAULT_DELTA)\n}\n\nKeyb.setPressed = function(keycode) {\n const key = vkey[keycode]\n if(Keyb.isPressed(key)) return\n this.data[key] = {\"time\": window.performance.now(), \"state\": \"pressed\"}\n\n if(key == \"<meta>\") {\n Object.values(this.data).forEach((data) => {\n if(data.state == \"pressed\") {\n data.state == \"unpressed\"\n }\n })\n }\n}\n\nKeyb.setNotPressed = function(keycode) {\n const key = vkey[keycode]\n this.data[key] = {\"time\": window.performance.now(), \"state\": \"unpressed\"}\n}\n\nKeyb.isDown = Keyb.isPressed\nKeyb.isJustDown = Keyb.wasJustPressed\nKeyb.isUp = Keyb.isNotPressed\nKeyb.isNotPressed = Keyb.isUnpressed\n\ndocument.addEventListener(\"keydown\", (event) => Keyb.setPressed(event.keyCode))\ndocument.addEventListener(\"keyup\", (event) => Keyb.setNotPressed(event.keyCode))\n\nmodule.exports = Keyb\n", "function Afloop(func) {\n (function loop(delta) {\n func(Math.min(window.performance.now() - delta, 1000))\n window.requestAnimationFrame(loop.bind(this, window.performance.now()))\n })(window.performance.now())\n}\n\nmodule.exports = Afloop\n", "const afloop = require(\"afloop\")\n\nconst AXIS_NAMES = {\n \"left-stick-x\": 0,\n \"left-stick-y\": 1,\n \"right-stick-x\": 2,\n \"right-stick-y\": 3,\n}\n\nconst BUTTON_NAMES = {\n \"south-button\": 0,\n \"east-button\": 1,\n \"west-button\": 2,\n \"north-button\": 3,\n \"left-bumper\": 4,\n \"right-bumper\": 5,\n \"left-shoulder\": 4,\n \"right-shoulder\": 5,\n \"left-trigger\": 6,\n \"right-trigger\": 7,\n \"select-button\": 8,\n \"back-button\": 8,\n \"start-button\": 9,\n \"left-stick\": 10,\n \"right-stick\": 11,\n \"north-dbutton\": 12,\n \"south-dbutton\": 13,\n \"west-dbutton\": 14,\n \"east-dbutton\": 15,\n \"home-button\": 16,\n \"capture-button\": 17,\n \"screenshot-button\": 17,\n}\n\nconst Joyp = {\n \"isPressed\": function(gamepadIndex, buttonIndex) {\n if(BUTTON_NAMES[buttonIndex] != undefined) {\n buttonIndex = BUTTON_NAMES[buttonIndex]\n }\n const key = \"gamepad\" + gamepadIndex + \"/\" + \"button\" + buttonIndex\n if(this.data[key] != undefined) {\n return this.data[key].value > 0\n }\n return false\n },\n \"wasJustPressed\": function(gamepadIndex, buttonIndex, delta = 1000/60) {\n if(BUTTON_NAMES[buttonIndex] != undefined) {\n buttonIndex = BUTTON_NAMES[buttonIndex]\n }\n const key = \"gamepad\" + gamepadIndex + \"/\" + \"button\" + buttonIndex\n if(this.data[key] != undefined) {\n return this.data[key].value > 0\n && window.performance.now() - this.data[key].time < delta\n }\n return false\n },\n \"getAxis\": function(gamepadIndex, axisIndex) {\n if(AXIS_NAMES[axisIndex] != undefined) {\n axisIndex = AXIS_NAMES[axisIndex]\n }\n const key = \"gamepad\" + gamepadIndex + \"/\" + \"axis\" + axisIndex\n if(this.data[key] != undefined) {\n return this.data[key].value\n }\n return 0\n },\n \"set\": function(key, value) {\n this.data[key] = this.data[key] || {}\n if(this.data[key].value != value) {\n this.data[key].value = value\n this.data[key].time = window.performance.now()\n }\n },\n \"get\": function(key) {\n if(this.data[key] != undefined) {\n return this.data[key].value\n } else {\n return false\n }\n },\n \"vibrate\": function(gamepadIndex, options) {\n options = options || {\n \"duration\": 100,\n \"weakMagnitude\": 0.5,\n \"strongMagnitude\": 0.5,\n }\n const gamepad = this.references[gamepadIndex] || {}\n if(gamepad.vibrationActuator instanceof GamepadHapticActuator) {\n gamepad.vibrationActuator.playEffect(\"dual-rumble\", options)\n }\n },\n \"data\": {},\n \"references\": {},\n}\n\nafloop(function() {\n const gamepads = navigator.getGamepads()\n\n for(let gamepadIndex = 0; gamepadIndex < gamepads.length; gamepadIndex += 1) {\n const gamepad = gamepads[gamepadIndex]\n if(gamepad != undefined) {\n gamepad.axes.forEach((axisValue, axisIndex) => {\n Joyp.set(\"gamepad\" + gamepadIndex + \"/\" + \"axis\" + axisIndex, axisValue)\n })\n gamepad.buttons.forEach((button, buttonIndex) => {\n Joyp.set(\"gamepad\" + gamepadIndex + \"/\" + \"button\" + buttonIndex, button.value)\n })\n\n Joyp.references[\"gamepad\" + gamepadIndex] = gamepad\n }\n }\n})\n\nmodule.exports = Joyp\n", "/* eslint-disable promise/prefer-await-to-then */\n\nconst methodMap = [\n\t[\n\t\t'requestFullscreen',\n\t\t'exitFullscreen',\n\t\t'fullscreenElement',\n\t\t'fullscreenEnabled',\n\t\t'fullscreenchange',\n\t\t'fullscreenerror',\n\t],\n\t// New WebKit\n\t[\n\t\t'webkitRequestFullscreen',\n\t\t'webkitExitFullscreen',\n\t\t'webkitFullscreenElement',\n\t\t'webkitFullscreenEnabled',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t// Old WebKit\n\t[\n\t\t'webkitRequestFullScreen',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitCurrentFullScreenElement',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t[\n\t\t'mozRequestFullScreen',\n\t\t'mozCancelFullScreen',\n\t\t'mozFullScreenElement',\n\t\t'mozFullScreenEnabled',\n\t\t'mozfullscreenchange',\n\t\t'mozfullscreenerror',\n\t],\n\t[\n\t\t'msRequestFullscreen',\n\t\t'msExitFullscreen',\n\t\t'msFullscreenElement',\n\t\t'msFullscreenEnabled',\n\t\t'MSFullscreenChange',\n\t\t'MSFullscreenError',\n\t],\n];\n\nconst nativeAPI = (() => {\n\tif (typeof document === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst unprefixedMethods = methodMap[0];\n\tconst returnValue = {};\n\n\tfor (const methodList of methodMap) {\n\t\tconst exitFullscreenMethod = methodList?.[1];\n\t\tif (exitFullscreenMethod in document) {\n\t\t\tfor (const [index, method] of methodList.entries()) {\n\t\t\t\treturnValue[unprefixedMethods[index]] = method;\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t}\n\t}\n\n\treturn false;\n})();\n\nconst eventNameMap = {\n\tchange: nativeAPI.fullscreenchange,\n\terror: nativeAPI.fullscreenerror,\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nlet screenfull = {\n\t// eslint-disable-next-line default-param-last\n\trequest(element = document.documentElement, options) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onFullScreenEntered = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenEntered);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenEntered);\n\n\t\t\tconst returnPromise = element[nativeAPI.requestFullscreen](options);\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\texit() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!screenfull.isFullscreen) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onFullScreenExit = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenExit);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenExit);\n\n\t\t\tconst returnPromise = document[nativeAPI.exitFullscreen]();\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\ttoggle(element, options) {\n\t\treturn screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);\n\t},\n\tonchange(callback) {\n\t\tscreenfull.on('change', callback);\n\t},\n\tonerror(callback) {\n\t\tscreenfull.on('error', callback);\n\t},\n\ton(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t}\n\t},\n\toff(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t}\n\t},\n\traw: nativeAPI,\n};\n\nObject.defineProperties(screenfull, {\n\tisFullscreen: {\n\t\tget: () => Boolean(document[nativeAPI.fullscreenElement]),\n\t},\n\telement: {\n\t\tenumerable: true,\n\t\tget: () => document[nativeAPI.fullscreenElement] ?? undefined,\n\t},\n\tisEnabled: {\n\t\tenumerable: true,\n\t\t// Coerce to boolean in case of old WebKit.\n\t\tget: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n\t},\n});\n\nif (!nativeAPI) {\n\tscreenfull = {isEnabled: false};\n}\n\nexport default screenfull;\n", "const BUTTON_NAMES = {\n \"primary\": 0, // usually left button\n \"secondary\": 2, // usually right button\n \"auxiliary\": 1, // usually mouse wheel middle button\n}\n\nconst Poin = {\n \"position\": {\"x\": 0, \"y\": 0},\n \"pressed\": {0: undefined, 1: undefined, 2: undefined},\n \"isPressed\": function(button = \"primary\") {\n const pressed = this.getPressed(button)\n if(pressed == undefined) return false\n return pressed.state\n },\n \"wasJustPressed\": function(button = \"primary\", state = true, delta = 1000/60) {\n const pressed = this.getPressed(button)\n if(pressed == undefined) return false\n return window.performance.now() - pressed.time < delta\n && pressed.state == state\n },\n \"getPressed\": function(button) {\n return this.pressed[button] || this.pressed[BUTTON_NAMES[button]]\n },\n \"setPressed\": function(button, state) {\n this.pressed[button] = {\n \"time\": window.performance.now(),\n \"state\": state\n }\n },\n \"setPosition\": function(position) {\n this.position.x = position.x\n this.position.y = position.y\n },\n \"listen\": function(element) {\n if(element == undefined) return\n\n element.addEventListener(\"mousedown\", (event) => Poin.setPressed(event.button, true))\n element.addEventListener(\"mouseup\", (event) => Poin.setPressed(event.button, false))\n element.addEventListener(\"mousemove\", (event) => Poin.setPosition({\"x\": event.clientX, \"y\": event.clientY}))\n element.addEventListener(\"pointerdown\", (event) => Poin.setPressed(event.button || 0, true))\n element.addEventListener(\"pointerup\", (event) => Poin.setPressed(event.button || 0, false))\n element.addEventListener(\"pointermove\", (event) => Poin.setPosition({\"x\": event.clientX, \"y\": event.clientY}))\n element.addEventListener(\"touchstart\", (event) => Poin.setPressed(0, true))\n element.addEventListener(\"touchend\", (event) => Poin.setPressed(0, false))\n element.addEventListener(\"touchstart\", (event) => Poin.setPosition({\"x\": event.touches[0].clientX, \"y\": event.touches[0].clientY}))\n element.addEventListener(\"touchend\", (event) => Poin.setPosition({\"x\": event.touches[0].clientX, \"y\": event.touches[0].clientY}))\n element.addEventListener(\"touchmove\", (event) => Poin.setPosition({\"x\": event.touches[0].clientX, \"y\": event.touches[0].clientY}))\n }\n}\n\ndocument.addEventListener(\"contextmenu\", (event) => {\n if(Poin.isIgnoringContextMenu == true) {\n event.preventDefault()\n }\n})\n\ndocument.addEventListener(\"touchstart\", (event) => {\n if(Poin.isIgnoringTouchHover) {\n event.preventDefault()\n }\n})\n\nmodule.exports = Poin\n", "export default class UserError extends Error {}\n", "import UserError from \"@frog/source/utility/UserError.js\"\n\nexport default class Navigation {\n constructor(state = {}) {\n this.routes = []\n this.state = state\n\n this.lastTouchedTime = Date.now()\n\n // if(window.location.hash == \"\") {\n // window.location.hash = DEFUALT_HASH\n // }\n\n if(typeof window != \"undefined\") {\n window.addEventListener(\"load\", (event) => {\n this.load(window.location.hash)\n })\n window.addEventListener(\"hashchange\", (event) => {\n this.load(window.location.hash)\n })\n }\n }\n go(path = \"\", data = {}) {\n window.location.hash = path\n // data.path = data.path || path\n // window.location.hash = JSON.stringify(data)\n\n // window.history.replaceState(data, \"Frog \" + Math.floor(Math.random() * 1000), \"#\" + path)\n\n // this.load(path, data)\n }\n load(path) { //, data) {\n this.lastTouchedTime = Date.now()\n\n path = decodeURIComponent(path)\n path = path[0] == \"#\" ? path.substring(1) : path\n\n let data\n // try {\n // data = JSON.parse(path)\n // } catch {\n // // console.log(\"could not parse hash as json\", path)\n // return\n // }\n // if(data.path != undefined) {\n // path = data.path\n // }\n this.path = path\n\n if(path.charAt(path.length - 1) == \"/\") {\n path = path.substring(0, path.length - 1)\n }\n this.request = {\n \"path\": path,\n \"data\": data\n }\n for(let index in this.routes) {\n const route = this.routes[index]\n const match = this.request.path.match(route.path)\n if(match != undefined) {\n this.request.wildcards = match.groups\n try {\n this.response = route.func(this.request)\n if(this.response != undefined) {\n this.state = this.response\n }\n return\n } catch(error) {\n this.request.error = error\n if(error instanceof UserError) {\n this.state = this.onUserError(this.request) || this.state\n } else {\n this.state = this.onError(this.request) || this.state\n throw error\n }\n }\n }\n }\n }\n on(path, func) {\n if(path instanceof Error) {\n this.routes[path] = {path, func}\n return\n }\n if(path instanceof RegExp != true) {\n path = path.replace(/\\*/g, \"(.*)\")\n\n const WILDCARDS = /\\:[a-zA-Z]+/g\n const wildcards = path.match(WILDCARDS)\n if(wildcards != undefined) {\n wildcards.forEach((wildcard) => {\n path = path.replace(wildcard, \"(?<\" + wildcard.substring(1) + \">.*)\")\n })\n }\n\n path = new RegExp(\"^\" + path + \"$\", \"i\")\n }\n this.routes.push({path, func})\n }\n}\n", "export default {\n \"affiliation\": \"good\",\n \"inventory\": {\n \"gold\": 0,\n },\n \"party\": {\n \"units\": {\n \"swashbuckler\": {\n \"key\": \"swashbuckler\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"good\",\n \n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"recruit\",\n \"restore-health\",\n ],\n \"properties\": [\"mutually-healing\"],\n\n \"name\": \"Oriana\",\n \"subtitle\": \"Sorcerer Lv3\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/oriana.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/oriana.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/oriana-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/oriana-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/oriana-angry.png\"),\n \"flavor\": require(\"@frog/source/assets/images/pirate-tactics/portraits/oriana-flavor.png\"),\n },\n\n \"dialogue\": {\n \"death\": \"Damn, that's it for me.\",\n \"betrayed\": \"Fuck.\"\n },\n },\n \"castaway\": {\n \"key\": \"castaway\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n ],\n\n \"name\": \"Smee\",\n \"subtitle\": \"Ranger Lv5\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.png\"),\n \"orange\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.viking.png\"),\n \"red\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.yakuza.png\"),\n \"blue\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.knight.png\"),\n \"purple\": require(\"@frog/source/assets/images/frog-tactics/stage/units/smee.swashbuckler.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/smee-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/smee-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/smee-angry.png\"),\n \"flavor\": require(\"@frog/source/assets/images/pirate-tactics/portraits/smee-wearied.png\"),\n },\n\n \"dialogue\": {\n \"death\": \"Finally, it's over.\",\n \"betrayed\": \"Fuck.\"\n },\n\n \"facts\": [\n \"Can not die?\",\n ]\n },\n \"mercenary\": {\n \"key\": \"mercenary\",\n \"jobKey\": \"pirates/gun\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n \"isRecruited\": true,\n\n \"attackrange\": {\n \"min\": 2,\n \"max\": 5,\n \"directions\": [\n {\"x\": -1, \"y\": 0},\n {\"x\": +1, \"y\": 0},\n {\"x\": 0, \"y\": -1},\n {\"x\": 0, \"y\": +1},\n ]\n },\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"pull\",\n ],\n\n \"facts\": [\n \"Can attack in horizontal lines.\",\n ],\n\n \"name\": \"Joe Boots\",\n \"subtitle\": \"Rogue Lv5\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n \"weaponImageKey\": null,\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.png\"),\n \"orange\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.viking.png\"),\n \"red\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.yakuza.png\"),\n \"blue\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.knight.png\"),\n \"purple\": require(\"@frog/source/assets/images/frog-tactics/stage/units/joe.swashbuckler.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/joe-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/joe-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/joe-angry.png\"),\n \"flavor\": require(\"@frog/source/assets/images/pirate-tactics/portraits/joe-flavor.png\"),\n },\n\n \"dialogue\": {\n \"death\": [\n \"Out of luck.\",\n \"Coin wasn't good enough, anyways.\"\n ],\n \"betrayed\": \"Fuck.\"\n },\n },\n \"bard\": {\n \"key\": \"bard\",\n \"jobKey\": \"pirates/dagger\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n // \"isRecruited\": true,\n\n \"maxhealth\": 30,\n \"skills\": [\n \"inflict-damage\",\n \"rally\",\n \"recruit\",\n ],\n\n \"facts\": [\n \"Can rally an ally to take another turn.\",\n ],\n\n \"name\": \"Robin\",\n \"subtitle\": \"Bard Lv5\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.png\"),\n \"orange\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.viking.png\"),\n \"red\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.yakuza.png\"),\n \"blue\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.knight.png\"),\n \"purple\": require(\"@frog/source/assets/images/frog-tactics/stage/units/robin.swashbuckler.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/robin-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/robin-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/robin-angry.png\"),\n \"flavor\": require(\"@frog/source/assets/images/pirate-tactics/portraits/robin-tongue.png\"),\n },\n\n \"dialogue\": {\n \"death\": [\n \"Damn, that smarts.\",\n \"I'll be back - just you wait and see.\",\n ],\n \"betrayed\": \"Fuck.\"\n },\n },\n\n \"viking\": {\n \"key\": \"viking\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n \"preferredAffilation\": \"orange\",\n\n \"maxhealth\": 50,\n \"skills\": [\n \"inflict-damage\",\n \"smite\",\n ],\n\n \"facts\": [\n \"Can push a unit up to 2 tiles.\",\n ],\n\n \"name\": \"Flint\",\n \"subtitle\": \"Barbarian Lv9\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.png\"),\n \"orange\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.png\"),\n \"red\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.yakuza.png\"),\n \"blue\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.knight.png\"),\n \"purple\": require(\"@frog/source/assets/images/frog-tactics/stage/units/flint.swashbuckler.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/flint-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/flint-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/flint-angry.png\"),\n },\n\n \"dialogue\": {\n \"death\": \"Bah, the winds have failed me.\",\n \"betrayed\": \"Fuck.\"\n },\n },\n \"yakuza\": {\n \"key\": \"yakuza\",\n \"jobKey\": \"pirates/dagger\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n \"preferredAffilation\": \"red\",\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n ],\n\n \"name\": \"Zheng\",\n \"subtitle\": \"Sorcerer Lv9\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/zheng.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/zheng.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/zheng-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/zheng-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/zheng-angry.png\"),\n },\n\n \"dialogue\": {\n \"death\": [\n \"This means nothing.\",\n \"This is not the last you've heard of me.\",\n ],\n \"betrayed\": \"Fuck.\"\n },\n },\n \"knight\": {\n \"key\": \"knight\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"good\",\n \n\n \"canBetray\": true,\n \"preferredAffilation\": \"blue\",\n\n \"maxhealth\": 40,\n \"moverange\": 3,\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n ],\n\n \"facts\": [\n \"Can move 3(!) squares a turn!\",\n ],\n\n \"name\": \"Beckett\",\n \"subtitle\": \"Paladin Lv9\",\n \"bodyKey\": \"good\",\n \"imageUrl\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.png\"),\n\n \"sprites\": {\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.png\"),\n \"orange\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.viking.png\"),\n \"red\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.yakuza.png\"),\n \"blue\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.png\"),\n \"purple\": require(\"@frog/source/assets/images/frog-tactics/stage/units/beck.swashbuckler.png\"),\n },\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/pirate-tactics/portraits/beck-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/pirate-tactics/portraits/beck-happy.png\"),\n \"angry\": require(\"@frog/source/assets/images/pirate-tactics/portraits/beck-angry.png\"),\n \"flavor\": require(\"@frog/source/assets/images/pirate-tactics/portraits/beck-flavor.png\"),\n },\n\n \"dialogue\": {\n \"death\": [\n \"I have failed you, my king.\",\n \"I must retreat.\"\n ],\n \"betrayed\": \"Fuck.\"\n },\n },\n }\n },\n}\n", "'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n", "'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n", "'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n", "// This file replaces `format.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nmodule.exports = function (random, alphabet, size) {\n // We can\u2019t use bytes bigger than the alphabet. To make bytes values closer\n // to the alphabet, we apply bitmask on them. We look for the closest\n // `2 ** x - 1` number, which will be bigger than alphabet size. If we have\n // 30 symbols in the alphabet, we will take 31 (00011111).\n // We do not use faster Math.clz32, because it is not available in browsers.\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n // Bitmask is not a perfect solution (in our example it will pass 31 bytes,\n // which is bigger than the alphabet). As a result, we will need more bytes,\n // than ID size, because we will refuse bytes bigger than the alphabet.\n\n // Every hardware random generator call is costly,\n // because we need to wait for entropy collection. This is why often it will\n // be faster to ask for few extra bytes in advance, to avoid additional calls.\n\n // Here we calculate how many random bytes should we call in advance.\n // It depends on ID length, mask / alphabet size and magic number 1.6\n // (which was selected according benchmarks).\n\n // -~f => Math.ceil(f) if n is float number\n // -~i => i + 1 if n is integer number\n var step = -~(1.6 * mask * size / alphabet.length)\n var id = ''\n\n while (true) {\n var bytes = random(step)\n // Compact alternative for `for (var i = 0; i < step; i++)`\n var i = step\n while (i--) {\n // If random byte is bigger than alphabet even after bitmask,\n // we refuse it by `|| ''`.\n id += alphabet[bytes[i] & mask] || ''\n // More compact than `id.length + 1 === size`\n if (id.length === +size) return id\n }\n }\n}\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n", "'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1567752802062;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 7;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n", "'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n", "'use strict';\n\nmodule.exports = 0;\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n", "'use strict';\nmodule.exports = require('./lib/index');\n", "// What is an object-based dictionary? It's any object with key-value pairs!\n// This is just a more primitive version of the ES2015 Maps.\n\nimport shortid from \"shortid\"\n\nconst Objdict = {}\nexport default Objdict\n\n// Objdict.merge\n// When merging, deletes any values of undefined.\n// When merging, the later arguments will overwrite previous arguments.\n// When merging, will assign a unique identifier to any units missing a key.\n// This is a shallow merge.\n// Returns a new untouched dict.\n// Does not touch the passed in dicts.\nObjdict.merge = function() {\n const omegadict = {}\n Array.from(arguments).forEach((alphadict) => {\n if(alphadict instanceof Array) {\n alphadict = Objdict.from(alphadict)\n }\n Object.keys(alphadict).forEach((key) => {\n omegadict[key] = alphadict[key]\n if(omegadict[key] === undefined) {\n delete omegadict[key]\n }\n })\n })\n return omegadict\n}\n\n// Objdict.map\n// Assumes the \"order\" from Object.keys, which honestly isn't supposed to have order.\n// For the iterator function, we pass the (value, key) => {}\n// Returns a new untouched dict.\n// In the current design, if you change the key in the iterator, it will still be saved in the dict by the old key.\nObjdict.map = function(alphadict, iterator) {\n if(alphadict == undefined) {\n return {}\n }\n const omegadict = {}\n Object.keys(alphadict).forEach((key) => {\n omegadict[key] = iterator(alphadict[key], key)\n })\n return omegadict\n}\n\n// Objdict.find\n// Assumes the \"order\" from Object.keys, which honestly isn't supposed to have order.\n// For the iterator function, we pass the (value, key) => {}\nObjdict.find = function(dict, iterator) {\n if(dict == undefined) {\n return undefined\n }\n const keys = Object.keys(dict)\n for(let index in keys) {\n const key = keys[index]\n const value = dict[key]\n if(iterator(value, key)) {\n return value\n }\n }\n}\n\n// Objdict.convert\nObjdict.convert = function(alphalist, key = \"key\") {\n if(alphalist == undefined) {\n return {}\n }\n if(alphalist instanceof Array) {\n const omegadict = {}\n alphalist.forEach((value) => {\n value[key] = value[key] || shortid.generate()\n omegadict[value[key]] = value\n })\n return omegadict\n }\n return alphalist\n}\nObjdict.from = Objdict.convert\n\n// Objdict.forEach\n// Assumes the \"order\" from Object.keys, which honestly isn't supposed to have order.\n// For the iterator function, we pass the (value, key) => {}\nObjdict.forEach = function(dict, iterator) {\n dict = dict || []\n Object.keys(dict).forEach((key) => {\n const value = dict[key]\n iterator(value, key)\n })\n}\n\n// TODO: Support objdicts that use a different property as the key, like name or id.\n", "const Geometry = {}\n\nGeometry.vector = function(a, b) {\n a = Geometry.default(a)\n b = Geometry.default(b)\n return {\n \"x\": Math.sign(a.x - b.x),\n \"y\": Math.sign(a.y - b.y),\n \"z\": Math.sign(a.z - b.z),\n }\n}\n\nGeometry.direction = function(a, b) {\n return Geometry.normalize(Geometry.vector(a, b))\n}\n\nGeometry.orthodistance = function(a, b) {\n a = Geometry.default(a)\n b = Geometry.default(b)\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y)\n}\n\nGeometry.distance = function(a, b) {\n a = Geometry.default(a)\n b = Geometry.default(b)\n let x = a.x - b.x\n let y = a.y - b.y\n return Math.sqrt(x * x + y * y)\n}\n\nGeometry.length = function(a) {\n return Math.sqrt(a.x * a.x + a.y * a.y)\n}\n\nGeometry.normalize = function(a) {\n const x = a.x / Geometry.length(a)\n const y = a.y / Geometry.length(a)\n return { \"x\": x, \"y\": y }\n}\n\nGeometry.multiply = function(a, b) {\n a = Geometry.default(a)\n b = Geometry.default(b)\n return {\n \"x\": a.x * b.x,\n \"y\": a.y * b.y,\n \"z\": a.z * b.z,\n }\n}\n\nGeometry.add = function() {\n return Array.from(arguments).reduce((a, b) => {\n b = Geometry.default(b)\n return {\n \"x\": a.x + b.x,\n \"y\": a.y + b.y,\n \"z\": a.z + b.z,\n }\n }, {\n \"x\": 0, \"y\": 0, \"z\": 0,\n })\n}\n\nGeometry.difference = function(a, b) {\n a = Geometry.default(a)\n b = Geometry.default(b)\n return {\n \"x\": a.x - b.x,\n \"y\": a.y - b.y,\n \"z\": a.z - b.z,\n }\n}\n\nGeometry.unit = function(p) {\n return {\n \"x\": p.x == 0 ? 0 : 1,\n \"y\": p.y == 0 ? 0 : 1,\n }\n}\n\nGeometry.perpendicular = function(p) {\n return {\n \"x\": p.x == 0 ? 1 : 0,\n \"y\": p.y == 0 ? 1 : 0,\n // \"z\": // ??\n }\n}\n\nGeometry.flip = function(p) {\n return Geometry.multiply(p, {\"x\": -1, \"y\": -1})\n}\n\nGeometry.rotate = function(p, degrees) {\n const radians = degrees * (Math.PI / 180)\n return {\n \"x\": (p.x * Math.cos(radians)) - (p.y * Math.sin(radians)),\n \"y\": (p.x * Math.sin(radians)) + (p.y * Math.cos(radians)),\n \"z\": p.z,\n }\n}\n\nGeometry.default = function(p) {\n if(p == undefined) {\n return {\"x\": 0, \"y\": 0, \"z\": 0}\n }\n if(isNaN(p) == false) {\n return {\n \"x\": p,\n \"y\": p,\n \"z\": p,\n }\n }\n return {\n \"x\": p.x || 0,\n \"y\": p.y || 0,\n \"z\": p.z || 0,\n }\n}\n\n// Geometry.toString()\n// @returns: a string representation of the point.\n// @example:\n// > const point = {\"x\": 5, \"y\": 3, \"z\": 1}\n// > assert(Geometry.toString(point) === \"5x3x1\")\nGeometry.toString = function(point) {\n return point.x + \"x\" + point.y + \"x\" + point.z\n}\n\nGeometry.getNeighborPoints = function(point, range) {\n if(Number.isInteger(range)) {\n range = {\"min\": range, \"max\": range, \"orthogonal\": true, \"diagonal\": range >= 2}\n }\n if(range == undefined) {\n range = {\"min\": 1, \"max\": 1, \"orthogonal\": true, \"diagonal\": false}\n }\n let points = []\n if(range.directions != undefined) {\n range.directions.forEach((direction) => {\n for(let i = range.min; i <= range.max; i += 1) {\n points.push({\n \"x\": point.x + ((direction.x || 0) * i),\n \"y\": point.y + ((direction.y || 0) * i),\n \"z\": point.z,\n \"order\": direction.order\n })\n }\n })\n }\n if(range.orthogonal == true) {\n for(let i = range.min; i <= range.max; i += 1) {\n points.push({\"x\": point.x + i, \"y\": point.y, \"z\": point.z})\n points.push({\"x\": point.x - i, \"y\": point.y, \"z\": point.z})\n points.push({\"x\": point.x, \"y\": point.y + i, \"z\": point.z})\n points.push({\"x\": point.x, \"y\": point.y - i, \"z\": point.z})\n }\n }\n if(range.diagonal == true) {\n for(let i = range.min; i <= range.max; i += 1) {\n for(let j = 0; j < i; j += 1) {\n // if(i == 0) continue\n const x = j\n const y = i - j\n\n points.push({\"x\": point.x + x, \"y\": point.y + y, \"z\": point.z})\n points.push({\"x\": point.x - x, \"y\": point.y + y, \"z\": point.z})\n points.push({\"x\": point.x + x, \"y\": point.y - y, \"z\": point.z})\n points.push({\"x\": point.x - x, \"y\": point.y - y, \"z\": point.z})\n }\n }\n }\n return points\n}\n\nGeometry.directions = {\n \"north\": {\"x\": 0, \"y\": -1},\n \"south\": {\"x\": 0, \"y\": +1},\n \"east\": {\"x\": +1, \"y\": 0},\n \"west\": {\"x\": -1, \"y\": 0},\n \"southeast\": {\"x\": +1, \"y\": +1},\n \"northeast\": {\"x\": +1, \"y\": -1},\n \"southwest\": {\"x\": -1, \"y\": +1},\n \"northwest\": {\"x\": -1, \"y\": -1},\n}\n\nGeometry.orthodirections = {\n \"north\": {\"x\": 0, \"y\": -1},\n \"south\": {\"x\": 0, \"y\": +1},\n \"east\": {\"x\": +1, \"y\": 0},\n \"west\": {\"x\": -1, \"y\": 0},\n}\n\nGeometry.name = function(direction) {\n return Object.keys(Geometry.directions).find((directionKey) => {\n return Geometry.directions[directionKey].x == direction.x\n && Geometry.directions[directionKey].y == direction.y\n })\n}\n\nGeometry.isWithinRange = function(a, b, range) {\n const distance = Geometry.distance(a, b)\n if(Number.isInteger(range)) {\n return distance <= range && distance > range - 1\n }\n if(range == undefined) {\n return false\n }\n const vector = Geometry.difference(a, b)\n vector.x = Math.abs(vector.x)\n vector.y = Math.abs(vector.y)\n if(range.orthogonal == true) {\n if(vector.x <= range.max && vector.x >= range.min && vector.y == 0) return true\n if(vector.y <= range.max && vector.y >= range.min && vector.x == 0) return true\n }\n const diagonal = vector.x + vector.y\n if(range.diagonal == true) {\n if(diagonal >= range.max\n && diagonal >= range.min) {\n return true\n }\n }\n return false\n}\n\nGeometry.equals = function(a = {}, b = {}) {\n return (a.x || 0) == (b.x || 0)\n && (a.y || 0) == (b.y || 0)\n && (a.z || 0) == (b.z || 0)\n}\n\nGeometry.equals2d = function(a = {}, b = {}) {\n return a.x == b.x\n && a.y == b.y\n}\n\nGeometry.copy = function(point) {\n return {\n \"x\": point.x,\n \"y\": point.y,\n \"z\": point.z,\n }\n}\n\nGeometry.zero = function() {\n return {\n \"x\": 0,\n \"y\": 0,\n \"z\": 0,\n }\n}\n\nGeometry.isBounded = function(bounds, point) {\n return bounds != undefined\n && point != undefined\n && bounds.x1 <= point.x\n && bounds.x2 >= point.x\n && bounds.y1 <= point.y\n && bounds.y2 >= point.y\n}\n\nGeometry.area = function(points) {\n let area = 0\n for (var i = 0; i < points.length; i++) {\n const j = (i + 1) % points.length\n area += points[i].x * points[j].y\n area -= points[j].x * points[i].y\n }\n return area / 2\n}\n\nexport default Geometry\n", "import Objdict from \"objdict\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\n\n// const shapes = {\n// \"block\": {\"size\": 1},\n// \"south-ramp\": {\"size\": 0.5},\n// \"east-ramp\": {\"size\": 0.5},\n// }\n\n// ALWAYS ASSUMES LAYERS ARE LOWERCASE\n// ALWAYS ASSUMES THE TILESET IS COLLECTION OF IMAGES\n// ALWAYS ASSUMES JSON NOT TMX\n// ALWAYS ASSUMES ALL IMAGES ARE IN THE SAME DIRECTORY AS THE TILESET.\n\nconst FIRST_TILEGID = 1\n\n// import {TILE_ANIMATIONS} from \"@frog/source/data/tiles.js\"\n\nfunction processEncounterPolygon({slug, zoomout, points, encounterZ}) {\n const encounter = {\n \"slug\": slug,\n \"key\": slug, // to be deprecated\n \"zoomout\": zoomout,\n \"points\": points\n }\n\n // We expect all points to be defined in clockwise\n // order, particularly for rendering the polygon.\n // If the encounter was defined counterclockwise,\n // go ahead and reverse the order of the points.\n // We can check if the encounter was defined in\n // counterclockwise order by computing the area.\n // If its area is negative, it is counterclockwise.\n\n encounter.area = Geometry.area(encounter.points)\n if(encounter.area < 0) encounter.points.reverse()\n\n encounter.points.forEach((point, index) => {\n const a = encounter.points[(index + 0) % encounter.points.length]\n const b = encounter.points[(index + 1) % encounter.points.length]\n const c = encounter.points[(index + 2) % encounter.points.length]\n b.internalAngle = Geometry.direction(a, c)\n b.internalAngle = Geometry.rotate(b.internalAngle, 90)\n })\n\n encounter.x1 = Math.min(...encounter.points.map((point) => point.x))\n encounter.x2 = Math.max(...encounter.points.map((point) => point.x))\n encounter.y1 = Math.min(...encounter.points.map((point) => point.y))\n encounter.y2 = Math.max(...encounter.points.map((point) => point.y))\n encounter.x = encounter.x1\n encounter.y = encounter.y1\n encounter.width = encounter.x2 - encounter.x1\n encounter.height = encounter.y2 - encounter.y1\n encounter.center = {\n \"x\": encounter.x + ((encounter.x2 - encounter.x1) / 2) + 0.5,\n \"y\": encounter.y + ((encounter.y2 - encounter.y1) / 2) + 0.5\n }\n encounter.zone = encounter\n\n encounter.z = encounterZ\n\n return encounter\n}\n\nexport default class Tiled {\n static parse({tilemap, tileset, page, layers, encounters}) {\n if(tilemap == undefined) {\n return undefined\n }\n\n if(tilemap[\"compressionlevel\"] != -1) {\n return console.error(\"Tiled.parse does not yet support this compression level:\", tilemap)\n }\n // if(tilemap.tilesets.length != 1) {\n // return console.error(\"Tiled.parse does not yet support multile tilesets:\", tilemap)\n // }\n\n layers = layers || tilemap.layers\n\n if(page != undefined) {\n const pageLayer = tilemap.layers.find((layer) => {\n return layer.type == \"group\"\n && layer.name == \"page:\" + page\n // && layer.visible == true (still loads invisible pages)\n })\n if(pageLayer == undefined) {\n throw new Error(\"Could not find tilemap page: \" + page)\n }\n // DISCARDING EVERYHING ABOUT THE GROUP LAYER: X Y Z, ID, OPACITY, VISIBLE\n layers = pageLayer.layers\n }\n\n const world = {\n \"width\": tilemap.width,\n \"height\": tilemap.height,\n\n \"blocks\": {},\n \"terrain\": {},\n \"units\": {},\n // \"collision\": {},\n \"edges\": {},\n\n \"spots\": {},\n }\n\n if(encounters != undefined) {\n world.zones = {}\n encounters.forEach((encounter) => {\n world.zones[encounter.slug] = processEncounterPolygon({\n \"slug\": encounter.slug,\n \"zoomout\": encounter.zoomout,\n \"points\": encounter.points,\n \"encounterZ\": encounter.z\n })\n return\n })\n }\n\n world.tileset = Tiled.parseTileset(tileset)\n\n layers.forEach((layer) => {\n layer.z = Tiled.findPropertyValue(layer.properties, \"z\") || 0\n\n if(layer.type == \"objectgroup\"\n && layer.name == \"data:spots\") {\n world.spots = world.spots || {}\n\n return layer.objects.forEach((object) => {\n if(object.visible == false) return\n\n const spot = {\n \"key\": Tiled.findPropertyValue(object.properties, \"key\") || object.name,\n \"position\": {\n \"x\": object.x / tilemap.tileheight,\n \"y\": object.y / tilemap.tileheight,\n \"z\": Number.parseFloat(Tiled.findPropertyValue(object.properties, \"z\")) || layer.z || 1,\n }\n }\n\n world.spots[spot.key] = world.spots[spot.key] || []\n world.spots[spot.key].push(spot)\n })\n\n }\n\n if((layer.name == \"data:zones\" || layer.name == \"data:encounters\")\n && layer.type == \"objectgroup\"\n && world.zones == undefined) {\n world.zones = world.zones || {}\n\n return layer.objects.forEach((object) => {\n if(object.visible == false) return\n\n if(object.polygon != undefined) {\n const encounter = processEncounterPolygon({\n \"slug\": Tiled.findPropertyValue(object.properties, \"slug\") || Tiled.findPropertyValue(object.properties, \"key\") || object.name,\n \"zoomout\": parseFloat(Tiled.findPropertyValue(object.properties, \"zoomout\")) || 1,\n \"points\": object.polygon.map((point) => {\n return {\n \"x\": Math.floor((object.x + point.x) / tilemap.tileheight),\n \"y\": Math.floor((object.y + point.y) / tilemap.tilewidth),\n }\n }),\n \"encounterZ\": parseFloat(Tiled.findPropertyValue(object.properties, \"z\")) || layer.z || 1\n })\n encounter.name = Tiled.findPropertyValue(object.properties, \"name\"),\n encounter.color = Tiled.findPropertyValue(object.properties, \"color\"),\n\n world.zones[encounter.key] = encounter\n return\n }\n\n const encounter = {\n \"key\": Tiled.findPropertyValue(object.properties, \"slug\") || Tiled.findPropertyValue(object.properties, \"key\") || object.name,\n \"slug\": Tiled.findPropertyValue(object.properties, \"slug\") || Tiled.findPropertyValue(object.properties, \"key\") || object.name, // to be deprecated\n \"name\": Tiled.findPropertyValue(object.properties, \"name\"),\n \"color\": Tiled.findPropertyValue(object.properties, \"color\"),\n \"zoomout\": parseFloat(Tiled.findPropertyValue(object.properties, \"zoomout\")) || 1,\n \"x\": object.x / tilemap.tileheight,\n \"y\": object.y / tilemap.tileheight,\n \"z\": parseFloat(Tiled.findPropertyValue(object.properties, \"z\")) || layer.z || 1,\n \"width\": Math.floor(object.width / tilemap.tileheight),\n \"height\": Math.floor(object.height / tilemap.tileheight),\n \"events\": {},\n \"conditions\": [],\n }\n encounter.zone = encounter\n\n world.zones[encounter.key] = encounter\n })\n }\n\n if(layer.name == \"data:units\"\n && layer.type == \"objectgroup\") {\n return layer.objects.forEach((object) => {\n if(object.visible == false) return\n\n // object.type = object.type || Tiled.findPropertyValue(object.properties, \"UnitType\")\n // object.type = object.type || Tiled.findPropertyValue(object.properties, \"UnitReference\")\n // object.type = object.type || object.tile.type\n // object.type = object.type || Tiled.findPropertyValue(object.tile.properties, \"DefaultUnitType\")\n // object.type = object.type || Tiled.findPropertyValue(object.tile.properties, \"UnitReference\")\n // if(object.type == undefined || object.type == \"\") {\n // return console.error(\"Tiled.parse could not find object type:\", object)\n // }\n\n const unit = {}\n\n if(object.properties != undefined) {\n object.properties.forEach((property) => {\n const name = property.name\n unit[name] = unit[name] ?? Tiled.findPropertyValue(object.properties, name)\n unit[name] = unit[name] ?? Tiled.findPropertyValue(object.tile.properties, name)\n })\n }\n\n unit.key = unit.key ?? object.id\n unit.position = {\n \"x\": Math.floor(object.x / tilemap.tileheight), // - 1, // WHY IS THIS ALWAYS TILE_HEIGHT? ESPECIALLY FOR ISOMETRIC\n \"y\": Math.floor(object.y / tilemap.tileheight) - 1, // AND WHY ARE WE -1??\n \"z\": (layer.z || 1)\n }\n\n unit.level = unit.level ?? 1\n unit.level = parseInt(unit.level)\n // unit.affiliation = unit.affiliation ?? \"none\" // it is bad to default this so soon\n // object.class = Tiled.findPropertyValue(object.properties, \"Class\")\n // object.class = object.class || Tiled.findPropertyValue(object.tile.properties, \"Class\")\n // object.class = object.class || undefined\n //\n // object.level = Tiled.findPropertyValue(object.properties, \"Level\")\n // object.level = object.level || Tiled.findPropertyValue(object.tile.properties, \"Level\")\n // object.level = object.level || 0\n //\n // object.affiliation = Tiled.findPropertyValue(object.properties, \"affiliation\")\n // object.affiliation = object.affiliation || Tiled.findPropertyValue(object.tile.properties, \"affiliation\")\n // object.affiliation = object.affiliation || \"none\"\n //\n // object.moverange = Tiled.findPropertyValue(object.properties, \"moverange\")\n // if(object.moverange === undefined) {\n // object.moverange = Tiled.findPropertyValue(object.tile.properties, \"moverange\")\n // }\n //\n // object.maxarmor = Tiled.findPropertyValue(object.properties, \"maxarmor\")\n // if(object.maxarmor === undefined) {\n // object.maxarmor = Tiled.findPropertyValue(object.tile.properties, \"maxarmor\")\n // }\n //\n // object.element = Tiled.findPropertyValue(object.properties, \"element\")\n // object.element = object.element || Tiled.findPropertyValue(object.tile.properties, \"element\")\n // object.element = object.element || undefined\n //\n // object.state = Tiled.findPropertyValue(object.properties, \"state\")\n\n // unit.reference = object.type\n\n if(Geometry.directions[unit.direction] != undefined) {\n unit.direction = Geometry.directions[unit.direction]\n }\n\n Object.keys(unit).forEach((key) => {\n if(unit[key] === undefined) {\n delete unit[key]\n }\n })\n world.units[unit.key] = unit\n })\n }\n\n if(layer.name == \"data:collision\"\n && layer.type == \"tilelayer\") {\n return Tiled.iterateTileLayer(layer, ({tilegid, position}) => {\n tilegid -= FIRST_TILEGID\n if(tilegid > -1) {\n world.terrain[position.x + \"x\" + position.y] = world.terrain[position.xy] || {\n \"position\": {\"x\": position.x, \"y\": position.y, \"z\": 0},\n \"size\": {\"x\": 1, \"y\": 1, \"z\": 0},\n }\n world.terrain[position.x + \"x\" + position.y].hasCollision = true\n }\n })\n }\n\n if(layer.type == \"tilelayer\"\n && layer.name == \"tiles\") {\n Tiled.iterateTileLayer(layer, ({position, tilegid}) => {\n tilegid -= FIRST_TILEGID\n // if(tilegid == -1) return\n const tile = world.tileset.tiles[tilegid] || {}\n // if(tile === undefined) return\n\n position.z = layer.z || 1 // DEBUG\n position.xy = position.x + \"x\" + position.y\n position.xyz = position.xy + \"x\" + position.z\n\n world.blocks[position.xyz] = world.blocks[position.xyz] || {}\n world.blocks[position.xyz].position = world.blocks[position.xyz].position || position\n\n world.blocks[position.xyz].tilegid = tilegid\n // if(TILE_ANIMATIONS[tilegid] != undefined) {\n // world.blocks[position.xyz].animation = TILE_ANIMATIONS[tilegid]\n // }\n\n // world.blocks[position.xyz].image = tile.imageSource\n // world.blocks[position.xyz].images = world.blocks[position.xyz].images || []\n // world.blocks[position.xyz].images.push(tile.imageSource)\n // if(tilegid > 0) {\n // world.blocks[position.xyz].imageVariants = [\n // world.tileset.tiles[tilegid]?.imageSource,\n // world.tileset.tiles[tilegid+1]?.imageSource,\n // world.tileset.tiles[tilegid+2]?.imageSource,\n // ]\n // } else {\n // world.blocks[position.xyz].imageVariants = []\n // }\n if(Tiled.findPropertyValue(tile.properties, \"type\") != undefined) {\n world.blocks[position.xyz].type = Tiled.findPropertyValue(tile.properties, \"type\")\n }\n\n const shape = Tiled.findPropertyValue(tile.properties, \"shape\") || \"block\"\n if(shape == \"north-edge\" || shape == \"west-edge\") {\n world.blocks[position.xyz].layer = \"background\"\n } else if(shape == \"south-edge\" || shape == \"east-edge\") {\n world.blocks[position.xyz].layer = \"foreground\"\n // TODO: Build this out more?\n // Can a tile declare both foreground and\n // background elements? Or is this something\n // that establish that tiles can be for both\n // foreground and background but not both?\n }\n\n // TERRAIN //\n\n world.terrain[position.xy] = world.terrain[position.xy] || {\n \"position\": {\"x\": position.x, \"y\": position.y, \"z\": 0},\n \"size\": {\"x\": 1, \"y\": 1, \"z\": 0},\n }\n // if(Tiled.findPropertyValue(tile.properties, \"hasCollision\") == true) {\n // world.terrain[position.xy].hasCollision = true\n // }\n // if(Tiled.findPropertyValue(tile.properties, \"isTree\") == true) {\n // world.terrain[position.xy].isTree = true\n // }\n // if(Tiled.findPropertyValue(tile.properties, \"isWater\") == true) {\n // world.terrain[position.xy].isWater = true\n // }\n\n // I think we have fully deprecated shapes? In favor of a depth variable in the tileset.\n // if(shape == \"block\") {\n // const size = layer.z + 1\n // if(world.terrain[position.xy].size.z < size) {\n // world.terrain[position.xy].size.z = size\n // }\n // }\n // if(shape == \"plane\") {\n // const size = layer.z\n // if(world.terrain[position.xy].size.z < size) {\n // world.terrain[position.xy].size.z = size\n // }\n // }\n\n const peak = (layer.z || 1) + (Tiled.findPropertyValue(tile.properties, \"depth\") || 0) // DEBUG FOR Z 1\n world.terrain[position.xy].size.z = Math.max(world.terrain[position.xy].size.z, peak)\n\n // EDGES //\n\n const edges = {\n \"north-edge\": {\"x\": 0, \"y\": -1},\n \"south-edge\": {\"x\": 0, \"y\": +1},\n \"east-edge\": {\"x\": +1, \"y\": 0},\n \"west-edge\": {\"x\": -1, \"y\": 0},\n }\n if(edges[shape] != undefined) {\n const edgeDirection = edges[shape]\n const edgeKey = (edgeDirection.x > 0 ? \"+\" : \"\") + edgeDirection.x + \"x\" + (edgeDirection.y > 0 ? \"+\" : \"\") + edgeDirection.y\n world.edges[position.xyz + \"/\" + edgeKey] = true\n }\n })\n }\n\n if(layer.type == \"tilelayer\"\n && layer.name == \"data:edges\") {\n Tiled.iterateTileLayer(layer, ({position, tilegid}) => {\n tilegid -= FIRST_TILEGID\n const tile = world.tileset.tiles[tilegid] || {}\n\n position.z = layer.z || 1\n position.xy = position.x + \"x\" + position.y\n position.xyz = position.xy + \"x\" + position.z\n\n const shape = Tiled.findPropertyValue(tile.properties, \"shape\") || \"block\"\n\n // EDGES //\n const edges = {\n \"north-edge\": {\"x\": 0, \"y\": -1},\n \"south-edge\": {\"x\": 0, \"y\": +1},\n \"east-edge\": {\"x\": +1, \"y\": 0},\n \"west-edge\": {\"x\": -1, \"y\": 0},\n }\n if(edges[shape] != undefined) {\n const edgeDirection = edges[shape]\n const edgeKey = (edgeDirection.x > 0 ? \"+\" : \"\") + edgeDirection.x + \"x\" + (edgeDirection.y > 0 ? \"+\" : \"\") + edgeDirection.y\n world.edges[position.xyz + \"/\" + edgeKey] = {\n \"key\": edgeKey,\n \"position\": position,\n \"direction\": edgeDirection,\n \"tilegid\": tilegid,\n }\n }\n })\n }\n })\n\n // layers.forEach((layer, layerName) => {\n // const type = layer.type\n // const zlayer = layer?.properties?.find(element => element.name == \"zlayer\")?.value ?? 0\n // const isCollisionLayer = (layer?.properties?.find(element => element.name == \"collision\")?.value ?? false) === true\n // const isUnitsLayer = (layer?.properties?.find(element => element.name == \"units\")?.value ?? false) === true\n //\n // if(type == \"tilelayer\") {\n // layer.data.forEach((value, index) => {\n // const x = index % protoworld.width\n // const y = Math.floor(index / protoworld.width)\n // const z = Number.parseInt(zlayer)\n // if(isCollisionLayer) {\n // if(value != 0) {\n // world.collision[x + \"x\" + y] = world.collision[x + \"x\" + y] || {}\n // world.collision[x + \"x\" + y].hasCollision = true\n // }\n // } else if(isUnitsLayer) {\n // if(value != 0) {\n // world.units[x + \"x\" + y] = world.units[x + \"x\" + y] || {}\n // world.units[x + \"x\" + y] = {\"tilesetGID\": value, \"position\": {x, y, z}}\n // }\n // } else {\n // if(value != 0) {\n // world.display[z] = world.display[z] || {}\n // world.display[z][x + \"x\" + y] = {\n // \"position\": {x, y, z},\n // \"tilesetGID\": value,\n // }\n // }\n // }\n // })\n // }\n // })\n\n // // console.log(protoworld)\n //\n // // for(let x = 0; x < protoworld.width; x += 1) {\n // // for(let y = 0; y < protoworld.height; y += 1) {\n // // const tileKey = x + \"x\" + y\n // // protoworld.terrain[tileKey] = protoworld.terrain[tileKey] || {\n // // \"position\": {\"x\": x, \"y\": y, \"z\": 0},\n // // \"size\": { \"x\": 1, \"y\": 1, \"z\": 0 },\n // // }\n // // }\n // // }\n //\n // Objdict.forEach(protoworld.display, (layer, layerIndex) => {\n // Objdict.forEach(layer, (tile, tileKey) => {\n // const tilesetId = tile.tilesetGID - tileset.firstgid\n // const tilesetTile = tileset.source.tiles[tilesetId]\n // tile.image = tilesetTile.image\n //\n // if(tilesetTile.sequentialId >= firstDayTile && tilesetTile.sequentialId < firstNightTile) {\n // const nightTileSequentialId = firstNightTile + (tilesetTile.sequentialId - firstDayTile)\n // Objdict.forEach(tileset.source.tiles, nightTile => {\n // if(nightTile.sequentialId == nightTileSequentialId) {\n // tile.nightImage = nightTile.image\n // }\n // })\n // }\n //\n // const x = tile.position.x\n // const y = tile.position.y\n // protoworld.terrain[tileKey] = protoworld.terrain[tileKey] || {\n // \"position\": {\"x\": x, \"y\": y, \"z\": 0},\n // \"size\": { \"x\": 1, \"y\": 1, \"z\": 0 },\n // }\n // const terrainData = protoworld.terrain[tileKey]\n //\n // const zindex = parseInt(layerIndex)\n // // If the highest terrain block is a\n // // ramp, it should be considered a half-block.\n // if(terrainData.size.z < zindex + 1) {\n // const shape = tilesetTile.shape || \"block\"\n // const shapeData = shapes[shape]\n // const tileIsCollidable = tilesetTile.hasCollision === undefined ? true : tilesetTile.hasCollision\n // const isWalkable = tilesetTile.walkable === undefined ? true : tilesetTile.walkable\n // const hasCollision = protoworld.collision[tileKey] != undefined\n //\n // // terrainData.shape = shape\n // terrainData.hasCollision = hasCollision // !isWalkable ||\n //\n // // terrainData.isPath = tilesetTile.isPath\n // // terrainData.isTree = tilesetTile.isTree\n //\n // if(tileIsCollidable === false) {\n // // Ignore the shape, don't add any height\n // terrainData.size.z = zindex\n // } else if(shapeData != undefined) {\n // // Use the shape to determine the tile's height\n // terrainData.size.z = zindex + shapeData.size\n // } else {\n // // Assume block\n // terrainData.size.z = zindex + 1\n // }\n // }\n // // protoworld.terrain[tileKey] = protoworld.terrain[tileKey] || {\n // // \"position\": {\"x\": x, \"y\": y, \"z\": 0},\n // // \"size\": { \"x\": 1, \"y\": 1, \"z\": 0 },\n // // }\n //\n // protoworld.terrain[tileKey] = terrainData\n // })\n // })\n\n return world\n }\n static parseTileset(tileset) {\n // const context = require.context(\"@frog/source/data/levels/tiles/\", true, /\\.png$/)\n // context.keys().forEach((key) => {\n // console.log(key)\n // console.log(context(key))\n // })\n\n return {\n \"tiles\": Objdict.convert(tileset.tiles.map((tile) => {\n if(tile.image == \"null.png\") return\n return {\n \"key\": tile.id + \"\",\n \"id\": tile.id,\n \"type\": tile.type,\n \"imageWidth\": tile.imagewidth,\n \"imageHeight\": tile.imageheight,\n // \"imageSource\": context(tile.image.replace(\"tiles/\", \"./\")),\n // \"imageSource\": require(\"@frog/source/data/levels/tiles/\" + (tile.image.replace(\".png\", \"\").replace(\"./tiles/\", \"\")) + \".png\"),\n // \"imageSource\": require(TILE_DIRECTORY + (tile.image.replace(\".png\", \"\")) + \".png\"),\n // \"imageSource\": require(TILE_DIRECTORY + tile.image),\n \"properties\": tile.properties,\n }\n }))\n }\n }\n static iterateTileLayer(layer, func) {\n layer.data.forEach((tilegid, index) => {\n const position = {}\n position.x = index % layer.width\n position.y = Math.floor(index / layer.width)\n func({position, tilegid, index})\n })\n }\n static findPropertyValue(properties, name) {\n if(name == undefined) return\n if(properties == undefined) return\n const property = properties.find((property) => {\n if(property == undefined) return false\n if(property.name == undefined) return false\n if(property.name.toLowerCase() == name.toLowerCase()) return true\n })\n if(property != undefined) {\n return property.value\n }\n }\n}\n", "export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n", "// A port of an algorithm by Johannes Baag\u00F8e <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n", "/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n", "'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n", "'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n", "'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n", "'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n", "export default function isString(value) {\n return typeof value == \"string\" || value instanceof String\n}\n", "import {nanoid} from \"nanoid\"\nimport seedrandom from \"seedrandom\"\nimport querystring from \"query-string\"\nimport isString from \"./isString\"\n\nexport default new class Random {\n sign() {\n return Math.random() < 0.5 ? -1 : +1\n }\n range(a, b) {\n const min = Math.min(a, b)\n const max = Math.max(a, b)\n return min + (Math.random() * (max - min))\n }\n element(array) {\n return array[Math.floor(Math.random() * array.length)]\n }\n elementFromSeededKey(array, key) {\n const seedValue = convertURLFriendlyBase64ToInt(this.seed.slice(0,5))\n const keyValue = convertURLFriendlyBase64ToInt(key.slice(0,5))\n const seededKeyedRandom = seedValue + keyValue\n return array[seededKeyedRandom % array.length]\n }\n shuffle(array) {\n const superarray = array.slice()\n for(let i = superarray.length - 1; i > 0; i -= 1) {\n let j = Math.floor(Math.random() * (i + 1))\n let temp = superarray[i]\n superarray[i] = superarray[j]\n superarray[j] = temp\n }\n return superarray\n }\n setSeed(seed) {\n this.seed = seedrandom(seed, {\"global\": true})\n }\n}\n\nfunction convertURLFriendlyBase64ToInt(input) {\n let result = 0\n if(isString(input) == true) {\n input.split('').forEach(character => {\n result *= 64\n let decimalValue = undefined\n if (character >= 'a' && character <= 'z') decimalValue = character.charCodeAt(0) - 'a'.charCodeAt(0)\n if (character >= 'A' && character <= 'Z') decimalValue = character.charCodeAt(0) - 'A'.charCodeAt(0) + 26\n if (character >= '0' && character <= '9') decimalValue = character.charCodeAt(0) - '0'.charCodeAt(0) + 52\n if (character == '-') decimalValue = 62\n if (character == '_') decimalValue = 63\n result += decimalValue\n })\n return result\n } else {\n console.warn(\"unit has key that is not random string. This should be deprecated\")\n if(typeof input === \"number\") {\n return input\n }\n }\n}\n", "module.exports.get = function(key){\n if (localStorage) {\n try {\n return JSON.parse(localStorage.getItem(key));\n } catch (err) {\n return null;\n }\n } else {\n return null;\n }\n};\n\nmodule.exports.set = function(key, value){\n if (localStorage) {\n try {\n var val = JSON.stringify(value);\n localStorage.setItem(key, val);\n return val;\n } catch (err) {\n return null;\n }\n } else {\n return null;\n }\n};\n\nmodule.exports.remove = function(key){\n if (localStorage) {\n try {\n localStorage.removeItem(key);\n return true;\n } catch (err) {\n return null;\n }\n } else {\n return null;\n }\n};\n\nmodule.exports.clear = function(){\n if (localStorage) {\n try {\n localStorage.clear();\n return true;\n } catch (err) {\n return null;\n }\n } else {\n return null;\n }\n};", "const audiotriggers = {\n \"Start\": {\n \"volume\": 0.37,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX TITLE SCREEN GAME START.wav\")),\n },\n \"Music\": {\n \"volume\": 0.3,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/Hall of the Mountain King.mp3\"))\n },\n // \"xMusic:Title\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DAWN + INTRO FINAL.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DAWN LOOPED.wav\")),\n // ],\n // },\n // \"Pirate:Music:Combat:1\": {\n // \"volume\": 0.2,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/asscreed4-highseas.mp3\")),\n //\n // },\n // \"Pirate:Music:Combat:2\": {\n // \"volume\": 0.2,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/asscreed4-piratesbeware.mp3\")),\n // },\n // \"Pirate:Music:Combat:3\": {\n // \"volume\": 0.2,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/sot-piratelife.mp3\")),\n // },\n // \"Music:Combat:stealth-summer\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/loz-sooga-phase1.mp3\")),\n // },\n // \"Music:Combat:stealth-summer-boss\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/loz-sooga-phase2.mp3\")),\n // },\n // \"Music:Combat:stealth-autumn\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/papermario-autumn-mountain.mp3\")),\n // },\n // \"Music:Combat:stealth-autumn-boss\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/papermario-autumn-mountain-battle.mp3\")),\n // },\n // \"Music:Combat:stealth-winter\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/fe-alight-calm.mp3\")),\n // },\n // \"Music:Combat:stealth-winter-boss\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/fe-alight-storm.mp3\")),\n // },\n // \"Music:Combat:LD54a\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DAWN + INTRO FINAL.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DAWN LOOPED.wav\")),\n // ],\n // },\n // \"Music:Combat:LD54b\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DUSK + INTRO FINAL.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM DUSK LOOPED.wav\")),\n // ],\n // },\n // \"Music:Combat:LD54c\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n //\n // \"type\": \"sequence:march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM NIGHT + INTRO FINAL.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/good-music/FARM NIGHT LOOPED.wav\")),\n // ],\n // },\n // \"Music:Combat:Done\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/onepiece-overtaken.mp3\")),\n // },\n // \"Ember:Music:Combat\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/httyd - forbidden friendship.mp3\")),\n // \"loop\": true,\n // },\n // \"Ember:Music:Victory\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"kill\": {\"label\": \"music\"},\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/borrowed/httyd - romantic flight.mp3\")),\n // },\n\n \"Unit:Attack:Melee\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Attack_Melee.ogg\")), // bad\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Attack_Melee.ogg\")),\n \"type\": \"once:rotation\",\n \"audio\": [\n new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 1.wav\")),\n new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 2.wav\")),\n new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 3.wav\")),\n ]\n },\n \"Unit:Attack:Ranged\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Attack_Ranged.ogg\")), // bad\n \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Bo Staff Flip.wav\")),\n },\n // \"Unit:Garden\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Garden.ogg\")),\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Garden_FInal.ogg\")), // bad\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Throw.wav\")),\n // },\n // \"Unit:Harvest\": {\n // \"volume\": 0.2,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Crop_Harvest.ogg\")),\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Harvest.ogg\")), // bad\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CONFIRM (Generic).wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/powerup.wav\")),\n // },\n \"Unit:Death\": {\n \"volume\": 0.33,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Death.ogg\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CANNOT CONFIRM.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Pull In.wav\")),\n },\n \"Unit:Move\": {\n \"volume\": 0.33,\n \"type\": \"once:randomly\",\n \"audio\": [\n new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 1.wav\")),\n new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 2.wav\")),\n new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 3.wav\")),\n ]\n },\n // \"Unit:Pig\": {\n // \"volume\": 0.1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry1.wav\")),\n // },\n // \"Unit:Chicken\": {\n // \"volume\": 0.1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry3.wav\")),\n // },\n // \"Unit:Sheep\": {\n // \"volume\": 0.1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry2.wav\")),\n // },\n\n \"Selection:Start\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/map_4.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Select.wav\")),\n \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/SELECT UNIT.wav\")),\n },\n \"Selection:Finish\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Finish.ogg\")), // bad\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/PerformAction.wav\")),\n \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CONFIRM.wav\")),\n },\n \"Selection:Move\": {\n \"volume\": 0.33,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/map_5.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CURSOR MOVEMENT.wav\")),\n },\n \"Selection:Cancel\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_6.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UnSelect.wav\")),\n \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CANCEL.wav\")),\n },\n \"EndTurn\": {\n \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_5.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Player_EndTurn.ogg\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CONFIRM (Generic).wav\"))\n \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/END TURN.wav\")),\n },\n \"UndoAction\": {\n \"volume\": 0.2,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_4.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX TEXT WINDOW CLOSE 2.wav\"))\n \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UndoAction.wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/UNDO.wav\")),\n },\n\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/PUSH GUN.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/PULL GUN.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/BOMB THROW.wav\")),\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 3.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 4.wav\")),\n // ]\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Falling Off Map.wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Escape Map Zipline.wav\"))\n //\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Fire.wav\"))\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // ]\n // \"Victory:Final\": {\n // \"volume\": 1,\n // \"type\": \"march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Victory Theme ENDGAME.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Full.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Loop.wav\")),\n // ],\n // \"killTrigger\": \"Music:Final\",\n // }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // \"Music:Title\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Main_Menu_MX.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Chill\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Intro.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n\n // \"Ambience:General\": {\n // \"volume\": 0.37,\n // \"label\": \"ambience\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Wasteland_Ambience_Final.ogg\")),\n // \"kill\": {\"label\": \"ambience\"},\n // },\n // \"Ambience:Town\": {\n // \"volume\": 0.37,\n // \"label\": \"ambience\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Town_Ambience.ogg\")),\n // \"kill\": {\"label\": \"ambience\"},\n // },\n\n // \"Unit:Death\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CANNOT CONFIRM.wav\"))\n // },\n // \"Unit:Death:Falling\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Falling Off Map.wav\"))\n // },\n // \"Unit:Escape\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Escape Map Zipline.wav\"))\n // },\n // \"Flipper:Swing\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Bo Staff Flip.wav\"))\n // ]\n // },\n // \"Pusher:Swing\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 3.wav\")),\n // ]\n // },\n // \"Robot:Swing\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Robot Sounds.wav\"))\n // ]\n // },\n // \"Puller:Throw\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Throw.wav\"))\n // },\n // \"Puller:Pull\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Pull In.wav\"))\n // },\n // \"Aoe-er:Shoot\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Fire.wav\"))\n // },\n // \"Aoe-er:Explosion\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // ]\n // },\n // \"Victory\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Victory Theme 1.wav\"))\n // ],\n // },\n // \"Victory:Final\": {\n // \"volume\": 1,\n // \"type\": \"march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Victory Theme ENDGAME.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Full.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Loop.wav\")),\n // ],\n // \"killTrigger\": \"Music:Final\",\n // }\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Select.wav\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UnSelect.wav\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.85,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/PerformAction.wav\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Hover.wav\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.85,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CONFIRM (Generic).wav\"))\n // },\n // \"UndoAction\": {\n // \"volume\": 0.85,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX TEXT WINDOW CLOSE 2.wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UndoAction.wav\"))\n // },\n\n\n\n\n\n // \"Music:Town\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Sewer_Town_Master.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Combat:A\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"simultaneously\",\n // \"hasIntensity\": true,\n // \"loop\": true,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop1_L1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop1_L2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop1_L3.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop1_L4.ogg\")),\n // ],\n // \"kill\": {\"label\": \"music\"},\n // \"volume\": 0,\n // },\n // \"Music:Combat:B\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"simultaneously\",\n // \"hasIntensity\": true,\n // \"loop\": true,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop2_L1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop2_L2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop2_L3.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop2_L4.ogg\")),\n // ],\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Combat:C\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"simultaneously\",\n // \"hasIntensity\": true,\n // \"loop\": true,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop3_L1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop3_L2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop3_L3.ogg\")),\n // ],\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Combat:D\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"loop\": true,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop3_Transition.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Combat:E\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"simultaneously\",\n // \"hasIntensity\": true,\n // \"loop\": true,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop4_L1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop4_L2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Loop4_L3.ogg\")),\n // ],\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Combat:Done\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/LD50_MX_Outro.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Town\": {\n // \"volume\": 0.37,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Sewer_Town_Master.ogg\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Ambience:General\": {\n // \"volume\": 0.37,\n // \"label\": \"ambience\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Wasteland_Ambience_Final.ogg\")),\n // \"kill\": {\"label\": \"ambience\"},\n // },\n // \"Ambience:Town\": {\n // \"volume\": 0.37,\n // \"label\": \"ambience\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/Town_Ambience.ogg\")),\n // \"kill\": {\"label\": \"ambience\"},\n // },\n //\n // // \"Unit:Attacked\": { // not currently used\n // // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Defend.ogg\")), // bad\n // // },\n // \"Unit:Attack:Melee\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Attack_Melee.ogg\")), // bad\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Attack_Melee.ogg\")),\n // },\n // \"Unit:Attack:Ranged\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Attack_Ranged.ogg\")), // bad\n // },\n // \"Unit:Garden\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Farmer_Garden.ogg\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Garden_FInal.ogg\")), // bad\n // },\n // \"Unit:Harvest\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Crop_Harvest.ogg\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Unit_Harvest.ogg\")), // bad\n // },\n // \"Unit:Pig\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry1.wav\")),\n // },\n // \"Unit:Chicken\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry3.wav\")),\n // },\n // \"Unit:Sheep\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/cry2.wav\")),\n // },\n // \"Unit:Death\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Death.ogg\")),\n // },\n\n\n // given, but not needed lol\n // source/assets/audio/apocalypse-tactics/fmod/Assets/UI_Text.ogg\n // source/assets/audio/apocalypse-tactics/fmod/Assets/UI_Select.ogg\n\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Start.ogg\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Hover_1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Hover_2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Hover_3.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Hover_4.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Hover_5.ogg\")),\n // ]\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Selection_Cancel.ogg\")),\n // },\n // \"UndoAction\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Player_Undo.ogg\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.5,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/apocalypse-tactics/fmod/Assets/Player_EndTurn.ogg\")),\n // },\n\n\n\n // // LEVIATHAN TACTICS\n // \"Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Player_Start.mp3\")),\n // },\n // \"Music:Opening\": {\n // \"volume\": 0.33,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/music/title.mp3\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Battle\": {\n // \"volume\": 0.33,\n // \"label\": \"music\",\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/music/battle.mp3\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Success\": {\n // \"volume\": 0.33,\n // \"label\": \"music\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/music/success.mp3\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Music:Failure\": {\n // \"volume\": 0.33,\n // \"label\": \"music\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/music/failure.mp3\")),\n // \"kill\": {\"label\": \"music\"},\n // },\n // \"Ambience:General\": {\n // \"volume\": 0.5,\n // \"type\": \"sequence:loop\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Ambience_General.mp3\")),\n // },\n // \"Unit:Move:Infantry\": {\n // \"volume\": 0.25,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Move_01.mp3\")),\n // new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Move_02.mp3\")),\n // new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Move_03.mp3\")),\n // new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Move_04.mp3\")),\n // ]\n // },\n // \"Unit:Death\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Death_Enemy.mp3\")),\n // },\n // \"Unit:Death:Player\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Death_Player.mp3\")),\n // },\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Selection_Start.mp3\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Selection_Move.mp3\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Selection_Cancel.mp3\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Selection_Finish.mp3\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_end_Turn.mp3\")),\n // },\n // \"UndoAction\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Player_Undo.mp3\")),\n // },\n // \"Unit:Dragoon:Jump\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Dragoon_Jump.mp3\")),\n // },\n // \"Unit:Dragoon:Land\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Dragoon_Land.mp3\")),\n // },\n // \"Unit:Dragoon:Stab\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Dragoon_Stab.mp3\")),\n // },\n // \"Unit:Samurai:Attack\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Fiego_Attack.mp3\")),\n // },\n // \"Unit:Samurai:Sheath\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Fiego_Sheath.mp3\")),\n // },\n // \"Unit:Samurai:Reel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Fiego_Reel_Attack.mp3\")),\n // },\n // \"Unit:Smallfry:Attack\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/leviathan-tactics/sounds/LD_Unit_Enemy_Hit.mp3\")),\n // },\n // // FIRE EMBLEM GBA\n \"Music:Menu\": {\n \"volume\": 0.37,\n \"label\": \"music\",\n \"type\": \"sequence:loop\",\n \"audio\": new Audio(require(\"@frog/source/assets/audio/pirate-tactics/menu.wav\")),\n \"kill\": {\"label\": \"music\"},\n },\n \"Music:Combat:Normal\": {\n \"volume\": 0.37,\n \"label\": \"music\",\n \"type\": \"sequence:loop\",\n \"audio\": new Audio(require(\"@frog/source/assets/audio/pirate-tactics/combat1.wav\")),\n \"kill\": {\"label\": \"music\"},\n },\n \"Music:Combat:Epic\": {\n \"volume\": 0.37,\n \"label\": \"music\",\n \"type\": \"sequence:loop\",\n \"audio\": new Audio(require(\"@frog/source/assets/audio/pirate-tactics/combat2.wav\")),\n \"kill\": {\"label\": \"music\"},\n },\n // // FIRE EMBLEM GBA\n // \"Unit:Move:Armored\": {\n // \"volume\": 0.33,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Armor1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Armor2.ogg\")),\n // ]\n // },\n // \"Unit:Move:Horse\": {\n // \"volume\": 0.33,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Mounted1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Mounted2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Mounted3.ogg\")),\n // ]\n // },\n // \"Unit:Move:Infantry\": {\n // \"volume\": 0.33,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Infantry1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Infantry2.ogg\")),\n // ]\n // },\n // \"Unit:Move:Pegasus\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_Flier.ogg\")),\n // },\n // \"Unit:Move:Wyvern\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Map_Step_FDragon.ogg\")),\n // },\n // \"Unit:Attack\": {\n // \"volume\": 0.33,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing3.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing4.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing5.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Swing6.ogg\")),\n // ]\n // },\n // \"Unit:Attack:Hit\": {\n // \"volume\": 0.33,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Hit1.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Hit2.ogg\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Hit3.ogg\")),\n // ]\n // },\n // \"Unit:Attack:Miss\": {\n // \"volume\": 0.33,\n // \"type\": \"once:randomly\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Miss.ogg\")),\n // },\n \"Unit:Heal\": {\n \"volume\": 0.33,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Heal.ogg\")),\n },\n \"Unit:Attack:FinalHit\": {\n \"volume\": 0.33,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Hit_Kill.ogg\")),\n },\n \"Unit:Attack:NoDamage\": {\n \"volume\": 0.33,\n \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Hit_NoDamage.ogg\")),\n },\n // \"Unit:Attack:Utility\": {\n // \"volume\": 0.33,\n // \"type\": \"once:randomly\",\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Sword_Draw.ogg\")),\n // },\n // \"Unit:Death\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Death.ogg\")),\n // },\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Open.ogg\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Cursor_Move.ogg\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Cancel.ogg\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Unit_Select.ogg\")),\n // },\n // \"UndoAction\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/from-fexna/Confirm.ogg\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.5,\n // },\n\n // If you're looking for good sounds, start here.\n // // FIRE EMBLEM HEROES\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/map_4.wav\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/map_5.wav\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_6.wav\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/map_3.wav\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_5.wav\")),\n // },\n // \"UndoAction\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/embedded_4.wav\")),\n // },\n // \"Unit:Attack:Hit\": {\n // \"volume\": 0.5,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/btl_blow1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/btl_blow2.wav\")),\n // ]\n // },\n // \"Unit:Attack:Miss\": {\n // \"volume\": 0.5,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/Attack Miss 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/Attack Miss 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/Attack Miss 3.wav\")),\n // ]\n // },\n // \"Unit:Heal\": {\n // \"volume\": 0.5,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/btl_cure1.wav\")),\n // },\n // \"Unit:Death\": {\n // \"volume\": 0.5,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/btl_dead1.wav\")),\n // },\n // \"Unit:Move\": {\n // \"volume\": 0.5,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/fs_normal_sand_1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/fs_normal_sand_2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-heroes/fs_normal_sand_3.wav\")),\n // ]\n // },\n\n\n // BOMBER SFXR\n // \"Unit:Move\": {\n // \"volume\": 0.5,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // // new Audio(require(\"@frog/source/assets/audio/dragon-tactics/fe-gba/Attack Hit 4.wav\")),\n // ]\n // },\n // \"Unit:Shotgun:Load\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/archive/chkchk.wav\"))\n // },\n // \"Unit:PushGun:Shoot\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/PUSH GUN.wav\")),\n // },\n // \"Unit:PullGun:Shoot\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/PULL GUN.wav\")),\n // },\n // \"Unit:Shotgun:Shoot\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/BURST GUN 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/BURST GUN 2.wav\")),\n // ]\n // },\n // \"Unit:Throw\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/BOMB THROW.wav\")),\n // },\n // \"Unit:Move\": {\n // \"volume\": 1,\n // \"type\": \"once:randomly\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/MOVEMENT BOUNCE 3.wav\")),\n // ]\n // },\n // \"Bomb:Explode\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 3.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/EXPLOSION 4.wav\")),\n // ]\n // },\n // \"Music:1\": {\n // \"type\": \"march\",\n // \"volume\": 0.37,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN1 LOOP.wav\")),\n // ]\n // },\n // \"Music:2\": {\n // \"type\": \"march\",\n // \"volume\": 0.7,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN2 LOOP.wav\")),\n // ],\n // // \"killTrigger\": \"Music:1\",\n // },\n // \"Music:3\": {\n // \"type\": \"march\",\n // \"volume\": 0.7,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN3.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/bomber-tactics/GJ5 MAIN3 LOOP.wav\")),\n // ],\n // // \"killTrigger\": \"Music:1\",\n // },\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Select.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/SELECT UNIT.wav\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UnSelect.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CANCEL.wav\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.85,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/PerformAction.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CONFIRM.wav\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Hover.wav\")),\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/CURSOR MOVEMENT.wav\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.85,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CONFIRM (Generic).wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/END TURN.wav\")),\n // },\n // \"UndoAction\": {\n // \"volume\": 0.85,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX TEXT WINDOW CLOSE 2.wav\"))\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UndoAction.wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/bomber-tactics/UNDO.wav\")),\n // },\n\n\n // \"Unit:Death\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CANNOT CONFIRM.wav\"))\n // },\n // \"Unit:Death:Falling\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Falling Off Map.wav\"))\n // },\n // \"Unit:Escape\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Escape Map Zipline.wav\"))\n // },\n // \"Flipper:Swing\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Bo Staff Flip.wav\"))\n // ]\n // },\n // \"Pusher:Swing\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 1.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 2.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Push 3.wav\")),\n // ]\n // },\n // \"Robot:Swing\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Robot Sounds.wav\"))\n // ]\n // },\n // \"Puller:Throw\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Throw.wav\"))\n // },\n // \"Puller:Pull\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Frisbee Pull In.wav\"))\n // },\n // \"Aoe-er:Shoot\": {\n // \"volume\": 1,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Fire.wav\"))\n // },\n // \"Aoe-er:Explosion\": {\n // \"volume\": 1,\n // \"type\": \"once:rotation\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Cannon Explosion.wav\")),\n // ]\n // },\n // \"Victory\": {\n // \"volume\": 1,\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Victory Theme 1.wav\"))\n // ],\n // },\n // \"Victory:Final\": {\n // \"volume\": 1,\n // \"type\": \"march\",\n // \"audio\": [\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Victory Theme ENDGAME.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Full.wav\")),\n // new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 Main Theme Loop.wav\")),\n // ],\n // \"killTrigger\": \"Music:Final\",\n // }\n // \"Selection:Start\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Select.wav\")),\n // },\n // \"Selection:Cancel\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UnSelect.wav\")),\n // },\n // \"Selection:Finish\": {\n // \"volume\": 0.85,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/PerformAction.wav\")),\n // },\n // \"Selection:Move\": {\n // \"volume\": 0.33,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/Hover.wav\")),\n // },\n // \"EndTurn\": {\n // \"volume\": 0.85,\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX CONFIRM (Generic).wav\"))\n // },\n // \"UndoAction\": {\n // \"volume\": 0.85,\n // // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/LD47 SFX TEXT WINDOW CLOSE 2.wav\"))\n // \"audio\": new Audio(require(\"@frog/source/assets/audio/skyline-tactics/UndoAction.wav\"))\n // },\n}\n\nimport Objdict from \"objdict\"\nObjdict.forEach(audiotriggers, (audiotrigger, key) => {\n audiotrigger.key = key\n})\n\nexport default audiotriggers\n", "import LocalStorage from \"local-storage-json\"\nimport Objdict from \"objdict\"\nimport Random from \"@frog/source/utility/Random.js\"\n\n// https://frog-tactics.s3-us-west-2.amazonaws.com/assets/music/overworld.wav\n\nconst settings = {\n \"volume\": 0.5\n}\n\nimport TRIGGERS from \"@frog/source/data/audiotriggers.js\"\n\nconst audiomix = new class Audiomix {\n constructor() {\n this.userSoundVolume = LocalStorage.get(\"sound-volume\") // ?? 0.5\n this.userMusicVolume = LocalStorage.get(\"music-volume\") // ?? 0.5\n\n this.hasInteracted = false\n document.addEventListener(\"click\", () => {\n if(this.hasInteracted == false) {\n this.hasInteracted = true\n\n if(this.untriggeredRequests != undefined) {\n this.untriggeredRequests.forEach((audio) => {\n this.trigger(audio)\n })\n }\n }\n })\n\n window.audiomix = this\n }\n trigger(request) {\n if(isString(request)) {\n request = {\"key\": request}\n }\n\n if(this.hasInteracted == false) {\n this.untriggeredRequests = this.untriggeredRequests || []\n this.untriggeredRequests.push(request)\n return\n }\n const trigger = TRIGGERS[request.key]\n\n if(trigger == undefined) {\n // console.log(\"Could not find audio trigger:\", request)\n return\n }\n\n if(trigger.kill != undefined) {\n this.kill(trigger.kill)\n }\n\n if(trigger.audio == undefined) return\n trigger.audio = arrayify(trigger.audio)\n if(trigger.audio.length == 0) return\n\n if(trigger.type == \"sequence:loop\") {\n setupSequenceTrigger(trigger)\n playAudio(trigger.audio[0], trigger)\n } else if(trigger.type == \"sequence:march\") {\n setupSequenceTrigger(trigger)\n playAudio(trigger.audio[0], trigger)\n } else if(trigger.type == \"simultaneously\") {\n trigger.audio.forEach((sound) => playAudio(sound, trigger))\n } else if(trigger.type == \"once:rotation\") {\n playAudio(trigger.audio[0], trigger)\n trigger.audio.push(trigger.audio.shift())\n } else if(trigger.type == \"once:randomly\") {\n playAudio(Random.element(trigger.audio), trigger)\n } else {\n playAudio(trigger.audio[0], trigger)\n }\n\n if(trigger.hasIntensity == true\n && request.intensity != undefined) {\n trigger.audio.forEach((audio, index) => {\n if(index > request.intensity) {\n audio.volume = 0\n }\n })\n }\n }\n setSoundVolume(volume) {\n this.userSoundVolume = volume\n LocalStorage.set(\"sound-volume\", volume)\n }\n get musicVolume() {\n return this.userMusicVolume\n }\n update(delta) {\n if(this.music !== undefined) {\n this.music.volume -= (this.music.volume - this.musicVolume) / 25\n if(Math.abs(this.music.volume - this.musicVolume) < 0.001) {\n this.music.volume = this.musicVolume\n }\n }\n }\n kill(kill) {\n if(kill.key != undefined) {\n kill.key = arrayify(kill.key)\n kill.key.forEach((key) => {\n const trigger = TRIGGERS[key]\n if(trigger != undefined) {\n trigger.audio = arrayify(trigger.audio)\n trigger.audio.forEach((audio) => audio && audio.pause())\n }\n })\n }\n if(kill.label != undefined) {\n kill.label = arrayify(kill.label)\n kill.label.forEach((label) => {\n Object.values(TRIGGERS).forEach((trigger) => {\n trigger.label = arrayify(trigger.label)\n if(trigger.label.includes(label)) {\n trigger.audio = arrayify(trigger.audio)\n trigger.audio.forEach((audio) => audio && audio.pause())\n }\n })\n })\n }\n }\n killall() {\n Object.values(TRIGGERS).forEach((trigger) => {\n trigger.audio = arrayify(trigger.audio)\n trigger.audio.forEach((audio) => audio && audio.pause())\n })\n }\n}\n\nconst MASTER_VOLUME = 0.5\n\nfunction playAudio(sound, {volume = 1, loop = false, type = \"\"}) {\n if(sound == undefined) return\n sound.pause()\n sound.loop = loop\n sound.volume = volume * MASTER_VOLUME // * settings.volume\n sound.currentTime = 0\n sound.play()\n}\n\nfunction setupSequenceTrigger(trigger) {\n if(trigger == undefined) return\n if(trigger.hasBeenSetup == true) return\n trigger.hasBeenSetup = true\n\n const firstAudio = trigger.audio[0]\n\n trigger.audio.forEach((audio, index) => {\n const currentAudio = trigger.audio[index]\n const nextAudio = trigger.audio[index + 1]\n\n currentAudio.addEventListener(\"ended\", () => {\n if(nextAudio != undefined) {\n playAudio(nextAudio, trigger)\n } else {\n if(trigger.type == \"sequence:march\") {\n playAudio(currentAudio, trigger)\n }\n if(trigger.type == \"sequence:loop\") {\n playAudio(firstAudio, trigger)\n }\n }\n })\n })\n}\n\nfunction arrayify(array) {\n return array instanceof Array ? array : [array]\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String\n}\n\n\n// this.musicPlaying = LocalStorage.get(\"musicPlaying\")\n// if(this.musicPlaying == undefined) {\n// this.musicPlaying = {\"track\": \"debris\", \"time\": Date.now()}\n// LocalStorage.set(\"musicPlaying\", this.musicPlaying)\n// }\n// this.music = music[name]\n// this.music.volume = this.musicVolume\n// this.music.currentTime = params.currentTime || 0\n// this.music.loop = params.loop || false\n// this.music.play()\n// // this.music.volume = this.musicVolume * this.devMusicVolume\n// // if(__STAGE__ === \"DEVELOPMENT\") {\n// // this.music.currentTime = (Date.now() - this.musicPlaying.time) / 1000\n// // }\n// // this.music.addEventListener(\"ended\", () => {\n// // LocalStorage.set(\"musicPlaying\", {\n// // \"time\": Date.now(),\n// // \"track\": \"debris\"\n// // })\n// // this.music.currentTime = 0\n// // this.music.play()\n// // })\n\nexport default audiomix\n\nwindow.frog = window.frog || {}\nwindow.frog.audiomix = audiomix\n", "/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n", "// import present from \"present\"\n\nconst speedtest = new class Speedtest {\n constructor() {\n this.results = {}\n }\n report(collection) {\n if(this.results[collection] == undefined) {\n console.log(\"Could not find collection\", collection)\n return\n }\n console.table(\n Object.values(this.results[collection]).map((result) => {\n return {\n \"Key\": result.key,\n \"Total Duration\": result.totalDuration,\n \"Average Duration\": result.averageDuration,\n \"Count\": result.count,\n }\n })\n )\n }\n mark(collection, key) {\n return () => {} // DEBUG\n const startTime = present()\n return () => {\n const endTime = present()\n const duration = endTime - startTime\n\n if(this.results[collection] == undefined) {\n this.results[collection] = {}\n }\n\n if(this.results[collection][key] == undefined) {\n this.results[collection][key] = {\n \"key\": key,\n \"totalDuration\": 0,\n \"count\": 0,\n }\n }\n\n const results = this.results[collection][key]\n\n results.count += 1\n results.totalDuration += duration\n results.averageDuration = results.totalDuration / results.count\n\n let label = \"\"\n if(collection != undefined) {\n label += collection\n }\n if(key != undefined) {\n label += \":\" + key\n }\n if(label == \"\") {\n label = \"Speedtest\"\n }\n return {\n \"duration\": duration,\n \"log\": (options = {}) => {\n const maximum = options.maximum || Infinity\n const message = label + \" ran for \" + duration.toFixed(2) + \"ms\"\n if(duration > maximum) {\n console.log(\"%c\" + message, \"color:red\")\n } else {\n console.log(message)\n }\n }\n }\n }\n }\n markwrap(collection, key, func) {\n let unmark = this.mark(collection, key)\n func()\n unmark()\n }\n}\n\nexport default speedtest\n\nif(typeof window != \"undefined\") {\n window.frog = window.frog || {}\n window.frog.speedtests = speedtest\n}\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n", "import Objdict from \"objdict\"\nimport Unit from \"@frog/source/models/Unit.js\"\nimport {nanoid} from \"nanoid\"\n\nexport default class Delta {\n static editUnit(stage, unit, deltaunit, {isAbsolute} = {}) {\n if(isAbsolute == true) {\n if(deltaunit.health !== undefined) {\n unit.health = deltaunit.health\n unit.health = Math.max(unit.health, 0)\n }\n if(deltaunit.armor !== undefined) {\n unit.armor = deltaunit.armor\n unit.armor = Math.min(unit.armor, unit.maxarmor)\n unit.armor = Math.max(unit.armor, 0)\n }\n } else {\n if(deltaunit.health !== undefined) {\n unit.health += deltaunit.health\n unit.health = Math.max(unit.health, 0)\n }\n if(deltaunit.armor !== undefined) {\n unit.armor += deltaunit.armor\n unit.armor = Math.min(unit.armor, unit.maxhealth)\n unit.armor = Math.max(unit.armor, 0)\n }\n }\n if(deltaunit.experience != undefined) {\n unit.experience = deltaunit.experience\n }\n if(deltaunit.maxexperience != undefined) {\n unit.maxexperience = deltaunit.maxexperience\n }\n if(deltaunit.element != undefined) {\n unit.element = deltaunit.element\n }\n if(deltaunit.image != undefined) {\n unit.image = deltaunit.image\n }\n if(deltaunit.sprites != undefined) {\n unit.sprites = deltaunit.sprites\n }\n if(deltaunit.mode != undefined) {\n unit.mode = deltaunit.mode\n }\n if(deltaunit.maxhealth != undefined) {\n unit.maxhealth = deltaunit.maxhealth\n }\n if(deltaunit.moverange != undefined) {\n unit.moverange = deltaunit.moverange\n }\n if(deltaunit.defense != undefined) {\n unit.defense = deltaunit.defense\n }\n if(deltaunit.power != undefined) {\n unit.power = deltaunit.power\n }\n if(deltaunit.level != undefined) {\n unit.level = deltaunit.level\n }\n if(deltaunit.score != undefined) {\n unit.score = deltaunit.score\n }\n if(deltaunit.faceKey != undefined) {\n unit.faceKey = deltaunit.faceKey\n }\n if(deltaunit.bodyKey != undefined) {\n unit.bodyKey = deltaunit.bodyKey\n }\n if(deltaunit.decalImageKey != undefined) {\n unit.decalImageKey = deltaunit.decalImageKey\n }\n if(deltaunit.direction != undefined) {\n unit.direction = {}\n unit.direction.x = deltaunit.direction.x ?? 0\n unit.direction.y = deltaunit.direction.y ?? 0\n }\n if(deltaunit.state != undefined) {\n unit.state = deltaunit.state\n }\n if(deltaunit.isDead != undefined) {\n unit.isDead = deltaunit.isDead\n }\n if(deltaunit.deathTimer != undefined) {\n unit.deathTimer = deltaunit.deathTimer\n }\n if(deltaunit.hasBeenRemoved !== undefined) {\n unit.hasBeenRemoved = deltaunit.hasBeenRemoved\n }\n if(deltaunit.spriteKey != undefined) {\n unit.spriteKey = deltaunit.spriteKey\n }\n if(deltaunit.position != undefined) {\n if(isAbsolute == true\n || deltaunit.position.mode == \"absolute\") {\n if(deltaunit.position.x !== undefined) {\n unit.position.x = deltaunit.position.x\n }\n if(deltaunit.position.y !== undefined) {\n unit.position.y = deltaunit.position.y\n }\n if(deltaunit.position.z !== undefined) {\n unit.position.z = deltaunit.position.z\n }\n } else {\n unit.position.x += deltaunit.position.x || 0\n unit.position.y += deltaunit.position.y || 0\n unit.position.z += deltaunit.position.z || 0\n }\n // TODO: RE-CALCULATE TRAP ZONES?? OR CANCEL\n // POSITIONING-BASED EFFECTS LIKE BIND??\n }\n if(deltaunit.energy != undefined) {\n Object.keys(deltaunit.energy).forEach((key) => {\n if(deltaunit.energy[key] != undefined) {\n unit.energy[key] = deltaunit.energy[key]\n }\n })\n }\n if(deltaunit.effects != undefined) {\n Objdict.forEach(deltaunit.effects, (deltaunit, effectKey) => {\n if(deltaunit == undefined) {\n delete unit.effects[effectKey]\n } else if(unit.effects[effectKey] == undefined) {\n unit.effects[effectKey] = deltaunit\n } else {\n unit.effects[effectKey] = Objdict.merge(unit.effects[effectKey], deltaunit)\n }\n })\n }\n if(deltaunit.inventory != undefined) {\n if(deltaunit.inventory.count != undefined) {\n unit.inventory.count += deltaunit.inventory.count\n }\n if(deltaunit.inventory.items != undefined) {\n Objdict.forEach(deltaunit.inventory.items, (item, key) => {\n if(item == undefined) {\n delete unit.inventory.items[key]\n } else {\n unit.inventory.items[key] = item\n }\n })\n }\n }\n if(deltaunit.item !== undefined) {\n if(deltaunit.item == null) {\n delete unit.item\n }\n unit.item = deltaunit.item\n }\n if(deltaunit.affiliation != undefined) {\n unit.affiliation = deltaunit.affiliation\n }\n return unit\n }\n static editStage(stage, deltastages) {\n if(deltastages instanceof Array == false) {\n deltastages = [deltastages]\n }\n deltastages.forEach((deltastage) => {\n if(deltastage == undefined) {\n return\n }\n\n // DELTA SCHEMA v2 - now supports just .unit to shortcut .units[unitKey]\n if(deltastage.unit != undefined) {\n deltastage.stage = {\"unit\": deltastage.unit} // TODO DEPRECATE THIS!!\n }\n if(deltastage.stage != undefined) {\n let deltaunits = deltastage.stage.units\n if(deltaunits == undefined\n && deltastage.stage.unit) {\n deltaunits = [deltastage.stage.unit]\n }\n\n Objdict.forEach(deltaunits, (deltaunit, unitKey) => {\n if(deltaunit == undefined) {\n delete stage.units[unitKey]\n return\n }\n if(stage.units[deltaunit.key] == undefined) {\n deltaunit.key = deltaunit.key || nanoid()\n stage.units[deltaunit.key] = Unit.instantiate({\"unit\": deltaunit})\n return\n }\n Delta.editUnit(stage, stage.units[deltaunit.key], deltaunit, {\"isAbsolute\": true})\n })\n\n return\n }\n if(deltastage.phase !== undefined) {\n stage.phase = deltastage.phase\n }\n if(deltastage.player !== undefined) {\n if(deltastage.player.inventory !== undefined) {\n if(deltastage.player.inventory.items != undefined) {\n Objdict.forEach(deltastage.player.inventory.items, (item, key) => {\n if(item == undefined) {\n delete stage.player.inventory.items[key]\n } else {\n stage.player.inventory.items[key] = item\n }\n })\n }\n }\n // TODO: player.party\n // TODO: player.day?\n if(deltastage.player.score !== undefined) {\n stage.player.score = deltastage.player.score\n }\n }\n if(deltastage.dialogue !== undefined) {\n stage.dialogue = stage.dialogue || {}\n stage.dialogue.text = deltastage.dialogue.text\n stage.dialogue.index = deltastage.dialogue.index\n // stage.dialogue.speakingCharacter = deltastage.dialogue.speakingCharacter\n stage.dialogue.type = deltastage.dialogue.type\n stage.dialogue.data = deltastage.dialogue.data\n // stage.dialogue.tags = deltastage.dialogue.tags\n\n // stage.dialogue.characters = stage.dialogue.characters || {}\n // stage.dialogue.characters[stage.dialogue.speakingCharacter] = stage.dialogue.characters[stage.dialogue.speakingCharacter] || {}\n // stage.dialogue.characters[stage.dialogue.speakingCharacter].tags = stage.dialogue.characters[stage.dialogue.speakingCharacter].tags || {}\n // Objdict.forEach(deltastage.dialogue.tags, (value, key) => {\n // if(key == \"_\") return\n // stage.dialogue.characters[stage.dialogue.speakingCharacter].tags[key] = value\n // })\n }\n if(deltastage.dialogue === undefined) {\n delete stage.dialogue\n }\n if(deltastage.currentEncounterKey !== undefined) {\n stage.currentEncounterKey = deltastage.currentEncounterKey\n }\n\n if(deltastage.tag != undefined) {\n stage.tags[deltastage.tag.name] = deltastage.tag\n return\n }\n // DELTA SCHEMA v1 - a full stage object. only supported relative values.\n if(deltastage.actionMark != undefined) {\n stage.actionMark = deltastage.actionMark\n }\n // if(deltastage.light != undefined) {\n // stage.light = deltastage.light\n // }\n Objdict.forEach(deltastage.units, (deltaunit, key) => {\n const unit = stage.units[key]\n if(unit == undefined) {\n if(deltaunit.mode == \"create\") {\n stage.units[key] = Unit.instantiate({\"unit\": deltaunit})\n }\n return\n }\n if(deltaunit == undefined) {\n delete stage.units[key]\n return\n }\n Delta.editUnit(stage, unit, deltaunit)\n })\n if(deltastage.zone != undefined) {\n stage.zone = deltastage.zone\n }\n if(deltastage.turn != undefined) {\n if(deltastage.turn.number != undefined) {\n stage.turn.number = deltastage.turn.number\n }\n if(deltastage.turn.phase != undefined) {\n stage.turn.phase = deltastage.turn.phase\n }\n if(deltastage.turn.affiliation != undefined) {\n stage.turn.affiliation = deltastage.turn.affiliation\n }\n }\n })\n return stage\n }\n}\n\n\n// // TODO: also shadow the tiles\n// action.shadowtiles = clonedeep(action.shadowtiles)\n// if(action.results != undefined) {\n// Object.keys(action.results).forEach((key) => {\n// const result = action.results[key]\n// if(key.substring(0, 5) === \"tile:\") {\n// const tile = action.shadowtiles.find((tile) => tile.key == key.substring(5))\n// if(tile != undefined) {\n// return\n// }\n// tile.isBurning = result.isBurning\n// return\n// }\n// // else is unit!!\n// })\n// }\n\n// // USED TO BE IN THE ATTACK BEAT PERFORMANCE\n// if(key.substring(0, 5) == \"tile:\") {\n// let position = key.substring(5)\n// let tile = model.game.chapter.stage.map.tiles[position]\n// if(tile == undefined) {\n// return\n// }\n// tile.isBurning = result.isBurning || tile.isBurning\n// return\n// }\n// if(result.effects) {\n// unit.applyEffects(result.effects)\n// }\n// if(result.hasPerformedAction != undefined) {\n// if(result.hasPerformedAction == false) {\n// unit.hasPerformedMove = false\n// unit.hasPerformedAttack = false\n// unit.hasPerformedAction = false\n// }\n// }\n\n// if(key == \"performer\") {\n// unit = stage.findUnitByKey(action.performer.key)\n// } else if(key == \"target\") {\n// unit = stage.findUnitByKey(action.target.key)\n// }\n", "import Stage from \"@frog/source/models/Stage.js\"\nimport Delta from \"@frog/source/models/Delta.js\"\n\nexport default class Step {\n static instantiate(step) {\n if(step.alphastage == undefined) {\n throw new Error(\"Needs alphastage\")\n }\n\n step.deltastages = step.deltastages || []\n\n if(step.deltastage != undefined) {\n if(step.deltastage instanceof Array) {\n step.deltastages = step.deltastage\n } else {\n step.deltastages = [\n step.deltastage\n ]\n }\n }\n\n step.omegastage = Stage.copy(step.alphastage)\n step.deltastages.forEach((deltastage) => {\n step.omegastage = Delta.editStage(step.omegastage, deltastage)\n })\n\n // step.func is also supported! it'll be executed when it pops up in the queue.\n step.func = step.func || undefined\n\n // step.type is also supported! it'll tell which animation to use to run the deltastages.\n step.type = step.type || undefined\n\n return step\n }\n static add(step, deltastages) {\n if(deltastages == undefined) {\n return\n }\n if(deltastages instanceof Array) {\n deltastages.forEach((deltastage) => {\n step.deltastages.push(deltastage)\n step.omegastage = Delta.editStage(step.omegastage, deltastage)\n })\n } else {\n const deltastage = deltastages\n step.deltastages.push(deltastage)\n step.omegastage = Delta.editStage(step.omegastage, deltastage)\n }\n }\n static copy(step) {\n return {\n \"func\": step.func,\n \"type\": step.type,\n \"name\": step.name,\n \"alphastage\": step.alphastage,\n \"deltastages\": step.deltastages,\n \"omegastage\": step.omegastage,\n \"stage\": step.stage,\n\n \"savestateSlug\": step.savestateSlug,\n\n \"duration\": step.duration,\n \"path\": step.path,\n \"data\": step.data,\n }\n }\n static deltastage(deltastages) {\n if(deltastages instanceof Array == false) {\n deltastages = [deltastages]\n }\n return {\n \"deltastages\": deltastages\n }\n }\n}\n\n// steps are instantiated in:\n// - unit.calculateAction (move/turn/die/exhaust)\n// - skills.getStep\n// - reactions\n// - chapter events\n// - where else?\n// different parts:\n// - action/turn has steps\n// - steps aka events aka beats. has deltastages. LOTS of them. 1 deltastage 1 pr operty.\n// \t - delta stage is misnomer for just 1 property.\n", "module.exports = function pointInPolygonFlat (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = (end-start)/2;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[start+i*2+0], yi = vs[start+i*2+1];\n var xj = vs[start+j*2+0], yj = vs[start+j*2+1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n", "// ray-casting algorithm based on\n// https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\nmodule.exports = function pointInPolygonNested (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = end - start;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[i+start][0], yi = vs[i+start][1];\n var xj = vs[j+start][0], yj = vs[j+start][1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n", "var pointInPolygonFlat = require('./flat.js')\nvar pointInPolygonNested = require('./nested.js')\n\nmodule.exports = function pointInPolygon (point, vs, start, end) {\n if (vs.length > 0 && Array.isArray(vs[0])) {\n return pointInPolygonNested(point, vs, start, end);\n } else {\n return pointInPolygonFlat(point, vs, start, end);\n }\n}\nmodule.exports.nested = pointInPolygonNested\nmodule.exports.flat = pointInPolygonFlat\n", "import isPointInPolygon from \"point-in-polygon\"\n\nexport default class Zone {\n static isInBounds(zone, position) {\n zone = zone || Zone.getPlaceholderZone()\n\n if(zone.points != undefined) {\n return isPointInPolygon([position.x, position.y], zone.points.map((point) => [point.x, point.y]))\n && (position.z == zone.z || position.z == undefined)\n }\n return position != undefined\n && position.x >= zone.x\n && position.x < zone.x + zone.width\n && position.y >= zone.y\n && position.y < zone.y + zone.height\n && position.z >= zone.z\n && position.z < zone.z + 1\n }\n static isOutOfBounds(zone, position) {\n return this.isInBounds(zone, position) == false\n }\n static getPlaceholderZone() {\n return {\n \"x\": 0,\n \"y\": 0,\n \"width\": 7,\n \"height\": 7,\n }\n }\n}\n", "import Geometry from \"@frog/source/utility/Geometry.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nexport default class World {\n static getTerrain(world, position) {\n if(position == undefined) {\n return undefined\n }\n if(world.terrain[position.x + \"x\" + position.y] != undefined) {\n return world.terrain[position.x + \"x\" + position.y]\n }\n return undefined\n }\n static isOutOfBounds(world, position) {\n return position.x < 0\n || position.y < 0\n || position.z < 0\n || position.x >= world.width\n || position.y >= world.height\n // || position.z >= world.depth\n }\n static isEmptyPosition(world, position) {\n return world.terrain[position.x + \"x\" + position.y] == undefined\n }\n static hasCollision({world, zone, previousPosition, nextPosition, position, options}) {\n previousPosition = previousPosition || position\n nextPosition = nextPosition || position\n\n options = options || {}\n options.isIgnoringLedges = options.isIgnoringLedges || false\n options.isIgnoringWallEdges = options.isIgnoringWallEdges || false\n options.isIgnoringCollision = options.isIgnoringCollision || false\n\n options.isIgnoringTerrain = true // DISABLED FOR NOW\n\n // TODO: DO YOU NEED TO ALSO PUT THIS COLLISION ELSEWHERE??\n if(options.isIgnoringLedges != true // TODO: Make a separate variable for this?\n && zone != undefined\n && options.isIgnoringZoneBoundaries != true\n && Zone.isInBounds(zone, nextPosition) == false) {\n return true\n }\n\n if(options.isIgnoringLedges != true\n && World.isOutOfBounds(world, nextPosition) == true) {\n return true\n }\n if(options.isIgnoringWallEdges == false\n && previousPosition != undefined\n && world.edges != undefined) {\n const direction2 = Geometry.vector(previousPosition, nextPosition)\n const direction1 = Geometry.flip(direction2)\n const key1 = previousPosition.x + \"x\" + previousPosition.y + \"x\" + previousPosition.z + \"/\" + (direction1.x > 0 ? \"+\" : \"\") + direction1.x + \"x\" + (direction1.y > 0 ? \"+\" : \"\") + direction1.y\n const key2 = nextPosition.x + \"x\" + nextPosition.y + \"x\" + nextPosition.z + \"/\" + (direction2.x > 0 ? \"+\" : \"\") + direction2.x + \"x\" + (direction2.y > 0 ? \"+\" : \"\") + direction2.y\n let edge1 = world.edges[key1]\n let edge2 = world.edges[key2]\n if(edge1 != undefined\n || edge2 != undefined) {\n return true\n }\n }\n const terrain = world.terrain[nextPosition.x + \"x\" + nextPosition.y]\n if(options.isIgnoringLedges != true // TODO: Make a separate variable for this??\n && terrain == undefined) {\n return true\n }\n if(options.isIgnoringCollsion != true\n && terrain != undefined\n && terrain.hasCollision == true) {\n return true\n }\n if(options.isIgnoringTerrain != true\n && terrain != undefined\n && nextPosition.z != terrain.position.z + terrain.size.z) {\n return true\n // const MOVEMENT_SIZE = 1\n // if(Math.abs(nextPosition.z - (terrain.position.z + terrain.size.z)) > MOVEMENT_SIZE) {\n // return true\n // }\n }\n // if(previousPosition != undefined\n // && terrain.shape == \"ramp\") {\n // if((terrain.direction == \"east\" || terrain.direction == \"west\")\n // && previousPosition.y != nextPosition.y) {\n // return true\n // }\n // if((terrain.direction == \"south\" || terrain.direction == \"north\")\n // && previousPosition.x != nextPosition.x) {\n // return true\n // }\n // }\n return false\n }\n}\n", "export class Path {\n public static parentId = \"^\";\n\n public _isRelative: boolean;\n public _components: Path.Component[];\n public _componentsString: string | null;\n\n constructor();\n constructor(componentsString: string);\n constructor(head: Path.Component, tail: Path);\n constructor(head: Path.Component[], relative?: boolean);\n constructor() {\n this._components = [];\n this._componentsString = null;\n this._isRelative = false;\n\n if (typeof arguments[0] == \"string\") {\n let componentsString = arguments[0] as string;\n this.componentsString = componentsString;\n } else if (\n arguments[0] instanceof Path.Component &&\n arguments[1] instanceof Path\n ) {\n let head = arguments[0] as Path.Component;\n let tail = arguments[1] as Path;\n this._components.push(head);\n this._components = this._components.concat(tail._components);\n } else if (arguments[0] instanceof Array) {\n let head = arguments[0] as Path.Component[];\n let relative = !!arguments[1] as boolean;\n this._components = this._components.concat(head);\n this._isRelative = relative;\n }\n }\n get isRelative() {\n return this._isRelative;\n }\n get componentCount(): number {\n return this._components.length;\n }\n get head(): Path.Component | null {\n if (this._components.length > 0) {\n return this._components[0];\n } else {\n return null;\n }\n }\n get tail(): Path {\n if (this._components.length >= 2) {\n // careful, the original code uses length-1 here. This is because the second argument of\n // List.GetRange is a number of elements to extract, wherease Array.slice uses an index\n let tailComps = this._components.slice(1, this._components.length);\n return new Path(tailComps);\n } else {\n return Path.self;\n }\n }\n get length(): number {\n return this._components.length;\n }\n get lastComponent(): Path.Component | null {\n let lastComponentIdx = this._components.length - 1;\n if (lastComponentIdx >= 0) {\n return this._components[lastComponentIdx];\n } else {\n return null;\n }\n }\n get containsNamedComponent(): boolean {\n for (let i = 0, l = this._components.length; i < l; i++) {\n if (!this._components[i].isIndex) {\n return true;\n }\n }\n return false;\n }\n static get self(): Path {\n let path = new Path();\n path._isRelative = true;\n return path;\n }\n\n public GetComponent(index: number): Path.Component {\n return this._components[index];\n }\n public PathByAppendingPath(pathToAppend: Path): Path {\n let p = new Path();\n\n let upwardMoves = 0;\n for (let i = 0; i < pathToAppend._components.length; ++i) {\n if (pathToAppend._components[i].isParent) {\n upwardMoves++;\n } else {\n break;\n }\n }\n\n for (let i = 0; i < this._components.length - upwardMoves; ++i) {\n p._components.push(this._components[i]);\n }\n\n for (let i = upwardMoves; i < pathToAppend._components.length; ++i) {\n p._components.push(pathToAppend._components[i]);\n }\n\n return p;\n }\n get componentsString(): string {\n if (this._componentsString == null) {\n this._componentsString = this._components.join(\".\");\n if (this.isRelative)\n this._componentsString = \".\" + this._componentsString;\n }\n\n return this._componentsString;\n }\n set componentsString(value: string) {\n this._components.length = 0;\n\n this._componentsString = value;\n\n if (this._componentsString == null || this._componentsString == \"\") return;\n\n if (this._componentsString[0] == \".\") {\n this._isRelative = true;\n this._componentsString = this._componentsString.substring(1);\n }\n\n let componentStrings = this._componentsString.split(\".\");\n for (let str of componentStrings) {\n // we need to distinguish between named components that start with a number, eg \"42somewhere\", and indexed components\n // the normal parseInt won't do for the detection because it's too relaxed.\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n if (/^(\\-|\\+)?([0-9]+|Infinity)$/.test(str)) {\n this._components.push(new Path.Component(parseInt(str)));\n } else {\n this._components.push(new Path.Component(str));\n }\n }\n }\n public toString(): string {\n return this.componentsString;\n }\n public Equals(otherPath: Path | null): boolean {\n if (otherPath == null) return false;\n\n if (otherPath._components.length != this._components.length) return false;\n\n if (otherPath.isRelative != this.isRelative) return false;\n\n // the original code uses SequenceEqual here, so we need to iterate over the components manually.\n for (let i = 0, l = otherPath._components.length; i < l; i++) {\n // it's not quite clear whether this test should use Equals or a simple == operator,\n // see https://github.com/y-lohse/inkjs/issues/22\n if (!otherPath._components[i].Equals(this._components[i])) return false;\n }\n\n return true;\n }\n public PathByAppendingComponent(c: Path.Component): Path {\n let p = new Path();\n p._components.push(...this._components);\n p._components.push(c);\n return p;\n }\n}\n\nexport namespace Path {\n export class Component {\n public readonly index: number;\n public readonly name: string | null;\n\n constructor(indexOrName: string | number) {\n this.index = -1;\n this.name = null;\n if (typeof indexOrName == \"string\") {\n this.name = indexOrName;\n } else {\n this.index = indexOrName;\n }\n }\n get isIndex(): boolean {\n return this.index >= 0;\n }\n get isParent(): boolean {\n return this.name == Path.parentId;\n }\n\n public static ToParent(): Component {\n return new Component(Path.parentId);\n }\n public toString(): string | null {\n if (this.isIndex) {\n return this.index.toString();\n } else {\n return this.name;\n }\n }\n public Equals(otherComp: Component): boolean {\n if (otherComp != null && otherComp.isIndex == this.isIndex) {\n if (this.isIndex) {\n return this.index == otherComp.index;\n } else {\n return this.name == otherComp.name;\n }\n }\n\n return false;\n }\n }\n}\n", "export namespace Debug {\n export function AssertType<T>(\n variable: any,\n type: new () => T,\n message: string\n ): void | never {\n Assert(variable instanceof type, message);\n }\n\n export function Assert(condition: boolean, message?: string): void | never {\n if (!condition) {\n if (typeof message !== \"undefined\") {\n console.warn(message);\n }\n\n if (console.trace) {\n console.trace();\n }\n\n throw new Error(\"\");\n }\n }\n}\n", "import { InkObject } from \"./Object\";\nimport { Path } from \"./Path\";\nimport { InkList, InkListItem } from \"./InkList\";\nimport { StoryException } from \"./StoryException\";\nimport { asOrNull, asOrThrows } from \"./TypeAssertion\";\nimport { tryParseInt, tryParseFloat } from \"./TryGetResult\";\nimport { throwNullException } from \"./NullException\";\n\nexport abstract class AbstractValue extends InkObject {\n public abstract get valueType(): ValueType;\n public abstract get isTruthy(): boolean;\n public abstract get valueObject(): any;\n\n public abstract Cast(newType: ValueType): Value<any>;\n\n public static Create(\n val: any,\n preferredNumberType?: ValueType\n ): Value<any> | null {\n // This code doesn't exist in upstream and is simply here to enforce\n // the creation of the proper number value.\n // If `preferredNumberType` is not provided or if value doesn't match\n // `preferredNumberType`, this conditional does nothing.\n if (preferredNumberType) {\n if (\n preferredNumberType === (ValueType.Int as ValueType) &&\n Number.isInteger(Number(val))\n ) {\n return new IntValue(Number(val));\n } else if (\n preferredNumberType === (ValueType.Float as ValueType) &&\n !isNaN(val)\n ) {\n return new FloatValue(Number(val));\n }\n }\n\n if (typeof val === \"boolean\") {\n return new BoolValue(Boolean(val));\n }\n\n // https://github.com/y-lohse/inkjs/issues/425\n // Changed condition sequence, because Number('') is\n // parsed to 0, which made setting string to empty\n // impossible\n if (typeof val === \"string\") {\n return new StringValue(String(val));\n } else if (Number.isInteger(Number(val))) {\n return new IntValue(Number(val));\n } else if (!isNaN(val)) {\n return new FloatValue(Number(val));\n } else if (val instanceof Path) {\n return new DivertTargetValue(asOrThrows(val, Path));\n } else if (val instanceof InkList) {\n return new ListValue(asOrThrows(val, InkList));\n }\n\n return null;\n }\n public Copy() {\n return asOrThrows(AbstractValue.Create(this.valueObject), InkObject);\n }\n public BadCastException(targetType: ValueType) {\n return new StoryException(\n \"Can't cast \" +\n this.valueObject +\n \" from \" +\n this.valueType +\n \" to \" +\n targetType\n );\n }\n}\n\nexport abstract class Value<\n T extends { toString: () => string }\n> extends AbstractValue {\n public value: T | null;\n\n constructor(val: T | null) {\n super();\n this.value = val;\n }\n public get valueObject() {\n return this.value;\n }\n public toString() {\n if (this.value === null) return throwNullException(\"Value.value\");\n return this.value.toString();\n }\n}\n\nexport class BoolValue extends Value<boolean> {\n constructor(val: boolean) {\n super(val || false);\n }\n public get isTruthy() {\n return Boolean(this.value);\n }\n public get valueType() {\n return ValueType.Bool;\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (this.value === null) return throwNullException(\"Value.value\");\n\n if (newType == this.valueType) {\n return this;\n }\n\n if (newType == ValueType.Int) {\n return new IntValue(this.value ? 1 : 0);\n }\n\n if (newType == ValueType.Float) {\n return new FloatValue(this.value ? 1.0 : 0.0);\n }\n\n if (newType == ValueType.String) {\n return new StringValue(this.value ? \"true\" : \"false\");\n }\n\n throw this.BadCastException(newType);\n }\n\n public toString() {\n return this.value ? \"true\" : \"false\";\n }\n}\n\nexport class IntValue extends Value<number> {\n constructor(val: number) {\n super(val || 0);\n }\n public get isTruthy() {\n return this.value != 0;\n }\n public get valueType() {\n return ValueType.Int;\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (this.value === null) return throwNullException(\"Value.value\");\n\n if (newType == this.valueType) {\n return this;\n }\n\n if (newType == ValueType.Bool) {\n return new BoolValue(this.value === 0 ? false : true);\n }\n\n if (newType == ValueType.Float) {\n return new FloatValue(this.value);\n }\n\n if (newType == ValueType.String) {\n return new StringValue(\"\" + this.value);\n }\n\n throw this.BadCastException(newType);\n }\n}\n\nexport class FloatValue extends Value<number> {\n constructor(val: number) {\n super(val || 0.0);\n }\n public get isTruthy() {\n return this.value != 0.0;\n }\n public get valueType() {\n return ValueType.Float;\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (this.value === null) return throwNullException(\"Value.value\");\n\n if (newType == this.valueType) {\n return this;\n }\n\n if (newType == ValueType.Bool) {\n return new BoolValue(this.value === 0.0 ? false : true);\n }\n\n if (newType == ValueType.Int) {\n return new IntValue(this.value);\n }\n\n if (newType == ValueType.String) {\n return new StringValue(\"\" + this.value);\n }\n\n throw this.BadCastException(newType);\n }\n}\n\nexport class StringValue extends Value<string> {\n public _isNewline: boolean;\n public _isInlineWhitespace: boolean;\n\n constructor(val: string) {\n super(val || \"\");\n\n this._isNewline = this.value == \"\\n\";\n this._isInlineWhitespace = true;\n\n if (this.value === null) return throwNullException(\"Value.value\");\n\n if (this.value.length > 0) {\n this.value.split(\"\").every((c) => {\n if (c != \" \" && c != \"\\t\") {\n this._isInlineWhitespace = false;\n return false;\n }\n\n return true;\n });\n }\n }\n public get valueType() {\n return ValueType.String;\n }\n public get isTruthy() {\n if (this.value === null) return throwNullException(\"Value.value\");\n return this.value.length > 0;\n }\n public get isNewline() {\n return this._isNewline;\n }\n public get isInlineWhitespace() {\n return this._isInlineWhitespace;\n }\n public get isNonWhitespace() {\n return !this.isNewline && !this.isInlineWhitespace;\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (newType == this.valueType) {\n return this;\n }\n\n if (newType == ValueType.Int) {\n let parsedInt = tryParseInt(this.value);\n if (parsedInt.exists) {\n return new IntValue(parsedInt.result);\n } else {\n throw this.BadCastException(newType);\n }\n }\n\n if (newType == ValueType.Float) {\n let parsedFloat = tryParseFloat(this.value);\n if (parsedFloat.exists) {\n return new FloatValue(parsedFloat.result);\n } else {\n throw this.BadCastException(newType);\n }\n }\n\n throw this.BadCastException(newType);\n }\n}\n\nexport class DivertTargetValue extends Value<Path> {\n constructor(targetPath: Path | null = null) {\n super(targetPath);\n }\n public get valueType() {\n return ValueType.DivertTarget;\n }\n public get targetPath() {\n if (this.value === null) return throwNullException(\"Value.value\");\n return this.value;\n }\n public set targetPath(value: Path) {\n this.value = value;\n }\n public get isTruthy(): never {\n throw new Error(\"Shouldn't be checking the truthiness of a divert target\");\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (newType == this.valueType) return this;\n\n throw this.BadCastException(newType);\n }\n public toString() {\n return \"DivertTargetValue(\" + this.targetPath + \")\";\n }\n}\n\nexport class VariablePointerValue extends Value<string> {\n public _contextIndex: number;\n\n constructor(variableName: string, contextIndex: number = -1) {\n super(variableName);\n\n this._contextIndex = contextIndex;\n }\n\n public get contextIndex() {\n return this._contextIndex;\n }\n public set contextIndex(value: number) {\n this._contextIndex = value;\n }\n public get variableName() {\n if (this.value === null) return throwNullException(\"Value.value\");\n return this.value;\n }\n public set variableName(value: string) {\n this.value = value;\n }\n public get valueType() {\n return ValueType.VariablePointer;\n }\n\n public get isTruthy(): never {\n throw new Error(\n \"Shouldn't be checking the truthiness of a variable pointer\"\n );\n }\n\n public Cast(newType: ValueType): Value<any> {\n if (newType == this.valueType) return this;\n\n throw this.BadCastException(newType);\n }\n public toString() {\n return \"VariablePointerValue(\" + this.variableName + \")\";\n }\n public Copy() {\n return new VariablePointerValue(this.variableName, this.contextIndex);\n }\n}\n\nexport class ListValue extends Value<InkList> {\n public get isTruthy() {\n if (this.value === null) {\n return throwNullException(\"this.value\");\n }\n return this.value.Count > 0;\n }\n public get valueType() {\n return ValueType.List;\n }\n public Cast(newType: ValueType): Value<any> {\n if (this.value === null) return throwNullException(\"Value.value\");\n\n if (newType == ValueType.Int) {\n let max = this.value.maxItem;\n if (max.Key.isNull) return new IntValue(0);\n else return new IntValue(max.Value);\n } else if (newType == ValueType.Float) {\n let max = this.value.maxItem;\n if (max.Key.isNull) return new FloatValue(0.0);\n else return new FloatValue(max.Value);\n } else if (newType == ValueType.String) {\n let max = this.value.maxItem;\n if (max.Key.isNull) return new StringValue(\"\");\n else {\n return new StringValue(max.Key.toString());\n }\n }\n\n if (newType == this.valueType) return this;\n\n throw this.BadCastException(newType);\n }\n constructor();\n constructor(list: InkList);\n constructor(listOrSingleItem: InkListItem, singleValue: number);\n constructor(listOrSingleItem?: InkListItem | InkList, singleValue?: number) {\n super(null);\n\n if (!listOrSingleItem && !singleValue) {\n this.value = new InkList();\n } else if (listOrSingleItem instanceof InkList) {\n this.value = new InkList(listOrSingleItem);\n } else if (\n listOrSingleItem instanceof InkListItem &&\n typeof singleValue === \"number\"\n ) {\n this.value = new InkList({\n Key: listOrSingleItem,\n Value: singleValue,\n });\n }\n }\n public static RetainListOriginsForAssignment(\n oldValue: InkObject | null,\n newValue: InkObject\n ) {\n let oldList = asOrNull(oldValue, ListValue);\n let newList = asOrNull(newValue, ListValue);\n\n if (newList && newList.value === null)\n return throwNullException(\"newList.value\");\n if (oldList && oldList.value === null)\n return throwNullException(\"oldList.value\");\n\n // When assigning the empty list, try to retain any initial origin names\n if (oldList && newList && newList.value!.Count == 0)\n newList.value!.SetInitialOriginNames(oldList.value!.originNames);\n }\n}\n\nexport enum ValueType {\n Bool = -1,\n Int = 0,\n Float = 1,\n List = 2,\n String = 3,\n DivertTarget = 4,\n VariablePointer = 5,\n}\n", "export enum PushPopType {\n Tunnel = 0,\n Function = 1,\n FunctionEvaluationFromGame = 2,\n}\n", "// TODO: Unify with Compiler.\n\nexport type ErrorHandler = (message: string, type: ErrorType) => void;\n\nexport enum ErrorType {\n Author,\n Warning,\n Error,\n}\n", "import { INamedContent } from \"./INamedContent\";\n\nexport function asOrNull<T>(\n obj: any,\n type: (new (...arg: any[]) => T) | (Function & { prototype: T })\n): T | null {\n if (obj instanceof type) {\n return unsafeTypeAssertion(obj, type);\n } else {\n return null;\n }\n}\n\nexport function asOrThrows<T>(\n obj: any,\n type: (new (...arg: any[]) => T) | (Function & { prototype: T })\n): T | never {\n if (obj instanceof type) {\n return unsafeTypeAssertion(obj, type);\n } else {\n throw new Error(`${obj} is not of type ${type}`);\n }\n}\n\nexport function asNumberOrThrows(obj: any) {\n if (typeof obj === \"number\") {\n return obj as number;\n } else {\n throw new Error(`${obj} is not a number`);\n }\n}\n\nexport function asBooleanOrThrows(obj: any) {\n if (typeof obj === \"boolean\") {\n return obj as boolean;\n } else {\n throw new Error(`${obj} is not a boolean`);\n }\n}\n\n// So here, in the reference implementation, contentObj is casted to an INamedContent\n// but here we use js-style duck typing: if it implements the same props as the interface,\n// we treat it as valid.\nexport function asINamedContentOrNull(obj: any): INamedContent | null {\n if (obj.hasValidName && obj.name) {\n return obj as INamedContent;\n }\n\n return null;\n}\n\nexport function nullIfUndefined<T>(obj: T | undefined): T | null {\n if (typeof obj === \"undefined\") {\n return null;\n }\n\n return obj;\n}\n\nexport function isEquatable(type: any) {\n return typeof type === \"object\" && typeof type.Equals === \"function\";\n}\n\nfunction unsafeTypeAssertion<T>(\n obj: any,\n type: (new () => T) | (Function & { prototype: T })\n) {\n return obj as T;\n}\n\nexport function filterUndef<T>(element: T | undefined): element is T {\n return element != undefined;\n}\n", "/**\n * In the original C# code, a SystemException would be thrown when passing\n * null to methods expected a valid instance. Javascript has no such\n * concept, but TypeScript will not allow `null` to be passed to methods\n * explicitely requiring a valid type.\n *\n * Whenever TypeScript complain about the possibility of a `null` value,\n * check the offending value and it it's null, throw this exception using\n * `throwNullException(name: string)`.\n */\nexport class NullException extends Error {}\n\n/**\n * Throw a NullException.\n *\n * @param name a short description of the offending value (often its name within the code).\n */\nexport function throwNullException(name: string): never {\n throw new NullException(`${name} is null or undefined`);\n}\n", "import { Path } from \"./Path\";\nimport { Container } from \"./Container\";\nimport { Debug } from \"./Debug\";\nimport { asOrNull, asINamedContentOrNull } from \"./TypeAssertion\";\nimport { throwNullException } from \"./NullException\";\nimport { SearchResult } from \"./SearchResult\";\nimport { DebugMetadata } from \"./DebugMetadata\";\n\nexport class InkObject {\n public parent: InkObject | null = null;\n\n get debugMetadata(): DebugMetadata | null {\n if (this._debugMetadata === null) {\n if (this.parent) {\n return this.parent.debugMetadata;\n }\n }\n\n return this._debugMetadata;\n }\n\n set debugMetadata(value) {\n this._debugMetadata = value;\n }\n\n get ownDebugMetadata() {\n return this._debugMetadata;\n }\n\n private _debugMetadata: DebugMetadata | null = null;\n\n public DebugLineNumberOfPath(path: Path) {\n if (path === null) return null;\n\n // Try to get a line number from debug metadata\n let root = this.rootContentContainer;\n if (root) {\n let targetContent = root.ContentAtPath(path).obj;\n if (targetContent) {\n let dm = targetContent.debugMetadata;\n if (dm !== null) {\n return dm.startLineNumber;\n }\n }\n }\n\n return null;\n }\n\n get path() {\n if (this._path == null) {\n if (this.parent == null) {\n this._path = new Path();\n } else {\n let comps: Path.Component[] = [];\n\n let child: InkObject = this;\n let container = asOrNull(child.parent, Container);\n\n while (container !== null) {\n let namedChild = asINamedContentOrNull(child);\n if (namedChild != null && namedChild.hasValidName) {\n if (namedChild.name === null)\n return throwNullException(\"namedChild.name\");\n comps.unshift(new Path.Component(namedChild.name!));\n } else {\n comps.unshift(new Path.Component(container.content.indexOf(child)));\n }\n\n child = container;\n container = asOrNull(container.parent, Container);\n }\n\n this._path = new Path(comps);\n }\n }\n\n return this._path;\n }\n private _path: Path | null = null;\n\n public ResolvePath(path: Path | null): SearchResult {\n if (path === null) return throwNullException(\"path\");\n if (path.isRelative) {\n let nearestContainer = asOrNull(this, Container);\n\n if (nearestContainer === null) {\n Debug.Assert(\n this.parent !== null,\n \"Can't resolve relative path because we don't have a parent\"\n );\n nearestContainer = asOrNull(this.parent, Container);\n Debug.Assert(\n nearestContainer !== null,\n \"Expected parent to be a container\"\n );\n Debug.Assert(path.GetComponent(0).isParent);\n path = path.tail;\n }\n\n if (nearestContainer === null) {\n return throwNullException(\"nearestContainer\");\n }\n return nearestContainer.ContentAtPath(path);\n } else {\n let contentContainer = this.rootContentContainer;\n if (contentContainer === null) {\n return throwNullException(\"contentContainer\");\n }\n return contentContainer.ContentAtPath(path);\n }\n }\n\n public ConvertPathToRelative(globalPath: Path) {\n let ownPath = this.path;\n\n let minPathLength = Math.min(globalPath.length, ownPath.length);\n let lastSharedPathCompIndex = -1;\n\n for (let i = 0; i < minPathLength; ++i) {\n let ownComp = ownPath.GetComponent(i);\n let otherComp = globalPath.GetComponent(i);\n\n if (ownComp.Equals(otherComp)) {\n lastSharedPathCompIndex = i;\n } else {\n break;\n }\n }\n\n // No shared path components, so just use global path\n if (lastSharedPathCompIndex == -1) return globalPath;\n\n let numUpwardsMoves = ownPath.componentCount - 1 - lastSharedPathCompIndex;\n\n let newPathComps: Path.Component[] = [];\n\n for (let up = 0; up < numUpwardsMoves; ++up)\n newPathComps.push(Path.Component.ToParent());\n\n for (\n let down = lastSharedPathCompIndex + 1;\n down < globalPath.componentCount;\n ++down\n )\n newPathComps.push(globalPath.GetComponent(down));\n\n let relativePath = new Path(newPathComps, true);\n return relativePath;\n }\n\n public CompactPathString(otherPath: Path) {\n let globalPathStr = null;\n let relativePathStr = null;\n\n if (otherPath.isRelative) {\n relativePathStr = otherPath.componentsString;\n globalPathStr = this.path.PathByAppendingPath(otherPath).componentsString;\n } else {\n let relativePath = this.ConvertPathToRelative(otherPath);\n relativePathStr = relativePath.componentsString;\n globalPathStr = otherPath.componentsString;\n }\n\n if (relativePathStr.length < globalPathStr.length) return relativePathStr;\n else return globalPathStr;\n }\n\n get rootContentContainer() {\n let ancestor: InkObject = this;\n while (ancestor.parent) {\n ancestor = ancestor.parent;\n }\n return asOrNull(ancestor, Container);\n }\n\n public Copy(): InkObject {\n throw Error(\"Not Implemented: Doesn't support copying\");\n }\n // SetChild works slightly diferently in the js implementation.\n // Since we can't pass an objets property by reference, we instead pass\n // the object and the property string.\n // TODO: This method can probably be rewritten with type-safety in mind.\n public SetChild(obj: any, prop: any, value: any) {\n if (obj[prop]) obj[prop] = null;\n\n obj[prop] = value;\n\n if (obj[prop]) obj[prop].parent = this;\n }\n\n public Equals(obj: any) {\n return obj === this;\n }\n}\n", "export class StringBuilder {\n private string: string;\n\n constructor(str?: string) {\n str = typeof str !== \"undefined\" ? str.toString() : \"\";\n this.string = str;\n }\n get Length(): number {\n return this.string.length;\n }\n public Append(str: string | null) {\n if (str !== null) {\n this.string += str;\n }\n }\n public AppendLine(str?: string) {\n if (typeof str !== \"undefined\") this.Append(str);\n this.string += \"\\n\";\n }\n public AppendFormat(format: string, ...args: any[]) {\n // taken from http://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format\n this.string += format.replace(/{(\\d+)}/g, (match: string, num: number) =>\n typeof args[num] != \"undefined\" ? args[num] : match\n );\n }\n public toString(): string {\n return this.string;\n }\n\n public Clear() {\n this.string = \"\";\n }\n}\n", "import { throwNullException } from \"./NullException\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { ListDefinition } from \"./ListDefinition\";\nimport { Story } from \"./Story\";\n\nexport class InkListItem implements IInkListItem {\n // InkListItem is a struct\n\n public readonly originName: string | null = null;\n public readonly itemName: string | null = null;\n\n constructor(originName: string | null, itemName: string | null);\n constructor(fullName: string | null);\n constructor() {\n if (typeof arguments[1] !== \"undefined\") {\n let originName = arguments[0] as string | null;\n let itemName = arguments[1] as string | null;\n\n this.originName = originName;\n this.itemName = itemName;\n } else if (arguments[0]) {\n let fullName = arguments[0] as string;\n\n let nameParts = fullName.toString().split(\".\");\n this.originName = nameParts[0];\n this.itemName = nameParts[1];\n }\n }\n public static get Null() {\n return new InkListItem(null, null);\n }\n public get isNull() {\n return this.originName == null && this.itemName == null;\n }\n get fullName() {\n return (\n (this.originName !== null ? this.originName : \"?\") + \".\" + this.itemName\n );\n }\n public toString(): string {\n return this.fullName;\n }\n public Equals(obj: InkListItem) {\n if (obj instanceof InkListItem) {\n let otherItem = obj;\n return (\n otherItem.itemName == this.itemName &&\n otherItem.originName == this.originName\n );\n }\n\n return false;\n }\n\n // These methods did not exist in the original C# code. Their purpose is to\n // make `InkListItem` mimics the value-type semantics of the original\n // struct. Please refer to the end of this file, for a more in-depth\n // explanation.\n\n /**\n * Returns a shallow clone of the current instance.\n */\n public copy() {\n return new InkListItem(this.originName, this.itemName);\n }\n /**\n * Returns a `SerializedInkListItem` representing the current\n * instance. The result is intended to be used as a key inside a Map.\n */\n public serialized(): SerializedInkListItem {\n // We are simply using a JSON representation as a value-typed key.\n return JSON.stringify({\n originName: this.originName,\n itemName: this.itemName,\n });\n }\n\n /**\n * Reconstructs a `InkListItem` from the given SerializedInkListItem.\n */\n public static fromSerializedKey(key: SerializedInkListItem): InkListItem {\n let obj = JSON.parse(key);\n if (!InkListItem.isLikeInkListItem(obj)) return InkListItem.Null;\n\n let inkListItem = obj as IInkListItem;\n\n return new InkListItem(inkListItem.originName, inkListItem.itemName);\n }\n\n /**\n * Determines whether the given item is sufficiently `InkListItem`-like\n * to be used as a template when reconstructing the InkListItem.\n */\n private static isLikeInkListItem(item: any) {\n if (typeof item !== \"object\") return false;\n if (!item.hasOwnProperty(\"originName\") || !item.hasOwnProperty(\"itemName\"))\n return false;\n if (typeof item.originName !== \"string\" && typeof item.originName !== null)\n return false;\n if (typeof item.itemName !== \"string\" && typeof item.itemName !== null)\n return false;\n\n return true;\n }\n}\n\nexport class InkList extends Map<SerializedInkListItem, number> {\n public origins: ListDefinition[] | null = null;\n public _originNames: string[] | null = [];\n\n constructor();\n constructor(otherList: InkList);\n constructor(singleOriginListName: string, originStory: Story);\n constructor(singleElement: KeyValuePair<InkListItem, number>);\n constructor() {\n // Trying to be smart here, this emulates the constructor inheritance found\n // in the original code, but only if otherList is an InkList. IIFE FTW.\n super(\n (() => {\n if (arguments[0] instanceof InkList) {\n return arguments[0];\n } else {\n return [];\n }\n })()\n );\n\n if (arguments[0] instanceof InkList) {\n let otherList = arguments[0] as InkList;\n\n let otherOriginNames = otherList.originNames as string[];\n if (otherOriginNames !== null)\n this._originNames = otherOriginNames.slice();\n if (otherList.origins !== null) {\n this.origins = otherList.origins.slice();\n }\n } else if (typeof arguments[0] === \"string\") {\n let singleOriginListName = arguments[0] as string;\n let originStory = arguments[1] as Story;\n this.SetInitialOriginName(singleOriginListName);\n\n if (originStory.listDefinitions === null) {\n return throwNullException(\"originStory.listDefinitions\");\n }\n let def = originStory.listDefinitions.TryListGetDefinition(\n singleOriginListName,\n null\n );\n if (def.exists) {\n // Throwing now, because if the value is `null` it will\n // eventually throw down the line.\n if (def.result === null) {\n return throwNullException(\"def.result\");\n }\n this.origins = [def.result];\n } else {\n throw new Error(\n \"InkList origin could not be found in story when constructing new list: \" +\n singleOriginListName\n );\n }\n } else if (\n typeof arguments[0] === \"object\" &&\n arguments[0].hasOwnProperty(\"Key\") &&\n arguments[0].hasOwnProperty(\"Value\")\n ) {\n let singleElement = arguments[0] as KeyValuePair<InkListItem, number>;\n this.Add(singleElement.Key, singleElement.Value);\n }\n }\n\n public static FromString(myListItem: string, originStory: Story) {\n let listValue =\n originStory.listDefinitions?.FindSingleItemListWithName(myListItem);\n if (listValue) {\n if (listValue.value === null) {\n return throwNullException(\"listValue.value\");\n }\n return new InkList(listValue.value);\n } else {\n throw new Error(\n \"Could not find the InkListItem from the string '\" +\n myListItem +\n \"' to create an InkList because it doesn't exist in the original list definition in ink.\"\n );\n }\n }\n\n public AddItem(itemOrItemName: InkListItem | string | null) {\n if (itemOrItemName instanceof InkListItem) {\n let item = itemOrItemName;\n\n if (item.originName == null) {\n this.AddItem(item.itemName);\n return;\n }\n\n if (this.origins === null) return throwNullException(\"this.origins\");\n\n for (let origin of this.origins) {\n if (origin.name == item.originName) {\n let intVal = origin.TryGetValueForItem(item, 0);\n if (intVal.exists) {\n this.Add(item, intVal.result);\n return;\n } else {\n throw new Error(\n \"Could not add the item \" +\n item +\n \" to this list because it doesn't exist in the original list definition in ink.\"\n );\n }\n }\n }\n\n throw new Error(\n \"Failed to add item to list because the item was from a new list definition that wasn't previously known to this list. Only items from previously known lists can be used, so that the int value can be found.\"\n );\n } else {\n let itemName = itemOrItemName as string | null;\n\n let foundListDef: ListDefinition | null = null;\n\n if (this.origins === null) return throwNullException(\"this.origins\");\n\n for (let origin of this.origins) {\n if (itemName === null) return throwNullException(\"itemName\");\n\n if (origin.ContainsItemWithName(itemName)) {\n if (foundListDef != null) {\n throw new Error(\n \"Could not add the item \" +\n itemName +\n \" to this list because it could come from either \" +\n origin.name +\n \" or \" +\n foundListDef.name\n );\n } else {\n foundListDef = origin;\n }\n }\n }\n\n if (foundListDef == null)\n throw new Error(\n \"Could not add the item \" +\n itemName +\n \" to this list because it isn't known to any list definitions previously associated with this list.\"\n );\n\n let item = new InkListItem(foundListDef.name, itemName);\n let itemVal = foundListDef.ValueForItem(item);\n this.Add(item, itemVal);\n }\n }\n public ContainsItemNamed(itemName: string | null) {\n for (let [key] of this) {\n let item = InkListItem.fromSerializedKey(key);\n if (item.itemName == itemName) return true;\n }\n\n return false;\n }\n public ContainsKey(key: InkListItem) {\n return this.has(key.serialized());\n }\n public Add(key: InkListItem, value: number) {\n let serializedKey = key.serialized();\n if (this.has(serializedKey)) {\n // Throw an exception to match the C# behavior.\n throw new Error(`The Map already contains an entry for ${key}`);\n }\n this.set(serializedKey, value);\n }\n public Remove(key: InkListItem) {\n return this.delete(key.serialized());\n }\n get Count() {\n return this.size;\n }\n get originOfMaxItem(): ListDefinition | null {\n if (this.origins == null) return null;\n\n let maxOriginName = this.maxItem.Key.originName;\n let result = null;\n this.origins.every((origin) => {\n if (origin.name == maxOriginName) {\n result = origin;\n return false;\n } else return true;\n });\n\n return result;\n }\n get originNames(): string[] {\n if (this.Count > 0) {\n if (this._originNames == null && this.Count > 0) this._originNames = [];\n else {\n if (!this._originNames) this._originNames = [];\n this._originNames.length = 0;\n }\n\n for (let [key] of this) {\n let item = InkListItem.fromSerializedKey(key);\n if (item.originName === null)\n return throwNullException(\"item.originName\");\n this._originNames.push(item.originName);\n }\n }\n\n return this._originNames as string[];\n }\n public SetInitialOriginName(initialOriginName: string) {\n this._originNames = [initialOriginName];\n }\n public SetInitialOriginNames(initialOriginNames: string[]) {\n if (initialOriginNames == null) this._originNames = null;\n else this._originNames = initialOriginNames.slice(); // store a copy\n }\n get maxItem() {\n let max: KeyValuePair<InkListItem, number> = {\n Key: InkListItem.Null,\n Value: 0,\n };\n for (let [key, value] of this) {\n let item = InkListItem.fromSerializedKey(key);\n if (max.Key.isNull || value > max.Value)\n max = { Key: item, Value: value };\n }\n\n return max;\n }\n get minItem() {\n let min: KeyValuePair<InkListItem, number> = {\n Key: InkListItem.Null,\n Value: 0,\n };\n for (let [key, value] of this) {\n let item = InkListItem.fromSerializedKey(key);\n if (min.Key.isNull || value < min.Value) {\n min = { Key: item, Value: value };\n }\n }\n return min;\n }\n get inverse() {\n let list = new InkList();\n if (this.origins != null) {\n for (let origin of this.origins) {\n for (let [key, value] of origin.items) {\n let item = InkListItem.fromSerializedKey(key);\n if (!this.ContainsKey(item)) list.Add(item, value);\n }\n }\n }\n return list;\n }\n get all() {\n let list = new InkList();\n if (this.origins != null) {\n for (let origin of this.origins) {\n for (let [key, value] of origin.items) {\n let item = InkListItem.fromSerializedKey(key);\n list.set(item.serialized(), value);\n }\n }\n }\n return list;\n }\n public Union(otherList: InkList) {\n let union = new InkList(this);\n for (let [key, value] of otherList) {\n union.set(key, value);\n }\n return union;\n }\n public Intersect(otherList: InkList) {\n let intersection = new InkList();\n for (let [key, value] of this) {\n if (otherList.has(key)) intersection.set(key, value);\n }\n\n return intersection;\n }\n public HasIntersection(otherList: InkList): boolean {\n for (let [key] of this) {\n if (otherList.has(key)) return true;\n }\n return false;\n }\n public Without(listToRemove: InkList) {\n let result = new InkList(this);\n for (let [key] of listToRemove) {\n result.delete(key);\n }\n\n return result;\n }\n\n public Contains(key: string): boolean;\n public Contains(otherList: InkList): boolean;\n public Contains(what: string | InkList): boolean {\n if (typeof what == \"string\") return this.ContainsItemNamed(what);\n const otherList = what;\n if (otherList.size == 0 || this.size == 0) return false;\n for (let [key] of otherList) {\n if (!this.has(key)) return false;\n }\n\n return true;\n }\n public GreaterThan(otherList: InkList) {\n if (this.Count == 0) return false;\n if (otherList.Count == 0) return true;\n\n return this.minItem.Value > otherList.maxItem.Value;\n }\n public GreaterThanOrEquals(otherList: InkList) {\n if (this.Count == 0) return false;\n if (otherList.Count == 0) return true;\n\n return (\n this.minItem.Value >= otherList.minItem.Value &&\n this.maxItem.Value >= otherList.maxItem.Value\n );\n }\n public LessThan(otherList: InkList) {\n if (otherList.Count == 0) return false;\n if (this.Count == 0) return true;\n\n return this.maxItem.Value < otherList.minItem.Value;\n }\n public LessThanOrEquals(otherList: InkList) {\n if (otherList.Count == 0) return false;\n if (this.Count == 0) return true;\n\n return (\n this.maxItem.Value <= otherList.maxItem.Value &&\n this.minItem.Value <= otherList.minItem.Value\n );\n }\n public MaxAsList() {\n if (this.Count > 0) return new InkList(this.maxItem);\n else return new InkList();\n }\n public MinAsList() {\n if (this.Count > 0) return new InkList(this.minItem);\n else return new InkList();\n }\n public ListWithSubRange(minBound: any, maxBound: any) {\n if (this.Count == 0) return new InkList();\n\n let ordered = this.orderedItems;\n\n let minValue = 0;\n let maxValue = Number.MAX_SAFE_INTEGER;\n\n if (Number.isInteger(minBound)) {\n minValue = minBound;\n } else {\n if (minBound instanceof InkList && minBound.Count > 0)\n minValue = minBound.minItem.Value;\n }\n\n if (Number.isInteger(maxBound)) {\n maxValue = maxBound;\n } else {\n if (maxBound instanceof InkList && maxBound.Count > 0)\n maxValue = maxBound.maxItem.Value;\n }\n\n let subList = new InkList();\n subList.SetInitialOriginNames(this.originNames);\n for (let item of ordered) {\n if (item.Value >= minValue && item.Value <= maxValue) {\n subList.Add(item.Key, item.Value);\n }\n }\n\n return subList;\n }\n public Equals(otherInkList: InkList) {\n if (otherInkList instanceof InkList === false) return false;\n if (otherInkList.Count != this.Count) return false;\n\n for (let [key] of this) {\n if (!otherInkList.has(key)) return false;\n }\n\n return true;\n }\n // GetHashCode not implemented\n get orderedItems() {\n // List<KeyValuePair<InkListItem, int>>\n let ordered = new Array<KeyValuePair<InkListItem, number>>();\n\n for (let [key, value] of this) {\n let item = InkListItem.fromSerializedKey(key);\n ordered.push({ Key: item, Value: value });\n }\n\n ordered.sort((x, y) => {\n if (x.Key.originName === null) {\n return throwNullException(\"x.Key.originName\");\n }\n if (y.Key.originName === null) {\n return throwNullException(\"y.Key.originName\");\n }\n\n if (x.Value == y.Value) {\n return x.Key.originName.localeCompare(y.Key.originName);\n } else {\n // TODO: refactor this bit into a numberCompareTo method?\n if (x.Value < y.Value) return -1;\n return x.Value > y.Value ? 1 : 0;\n }\n });\n\n return ordered;\n }\n public toString() {\n let ordered = this.orderedItems;\n\n let sb = new StringBuilder();\n for (let i = 0; i < ordered.length; i++) {\n if (i > 0) sb.Append(\", \");\n\n let item = ordered[i].Key;\n if (item.itemName === null) return throwNullException(\"item.itemName\");\n sb.Append(item.itemName);\n }\n\n return sb.toString();\n }\n // casting a InkList to a Number, for somereason, actually gives a number.\n // This messes up the type detection when creating a Value from a InkList.\n // Returning NaN here prevents that.\n public valueOf() {\n return NaN;\n }\n}\n\n/**\n * In the original C# code, `InkListItem` was defined as value type, meaning\n * that two `InkListItem` would be considered equal as long as they held the\n * same values. This doesn't hold true in Javascript, as `InkListItem` is a\n * reference type (Javascript doesn't allow the creation of custom value types).\n *\n * The key equality of Map objects is based on the \"SameValueZero\" algorithm;\n * since `InkListItem` is a value type, two keys will only be considered\n * equal if they are, in fact, the same object. As we are trying to emulate\n * the original behavior as close as possible, this will lead to unforeseen\n * side effects.\n *\n * In order to have a key equality based on value semantics, we'll convert\n * `InkListItem` to a valid string representation and use this representation\n * as a key (strings are value types in Javascript). Rather than using the\n * type `string` directly, we'll alias it to `SerializedInkListItem` and use\n * this type as the key for our Map-based `InkList`.\n *\n * Reducing `InkListItem` to a JSON representation would not be bulletproof\n * in the general case, but for our needs it works well. The major downside of\n * this method is that we will have to to reconstruct the original `InkListItem`\n * every time we'll need to access its properties.\n */\nexport type SerializedInkListItem = string;\n\n/**\n * An interface inherited by `InkListItem`, defining exposed\n * properties. It's mainly used when deserializing a `InkListItem` from its\n * key (`SerializedInkListItem`)\n */\ninterface IInkListItem {\n readonly originName: string | null;\n readonly itemName: string | null;\n}\nexport interface KeyValuePair<K, V> {\n Key: K;\n Value: V;\n}\n", "export class StoryException extends Error {\n public useEndLineNumber: boolean;\n public message: string;\n public name: string;\n\n constructor(message: string) {\n super(message);\n this.useEndLineNumber = false;\n this.message = message;\n this.name = \"StoryException\";\n }\n}\n", "/**\n * This interface normalize the `TryGet` behavior found in the original\n * C# project. Any `TryGet` method will return a object conforming to this\n * interface.\n *\n * The original function returns a boolean and has a second parameter called\n * item that is an `out`. Both are needed and we can't just return the item\n * because it'll always be truthy. Instead, we return an object containing\n * whether the result exists (`exists`) and the result itself (`result`).\n *\n * For instance a `TryGet` prototype would look like this:\n```\nTryGetItemWithValue(val: number, item: InkListItem): TryGetResult<InkListItem>{\n```\n *\n * On the other hand, dealing with the result can be done in the following way:\n```\nvar item = item.TryGetItemWithValue(intVal, InkListItem.Null);\nif (item.exists) {\n\tconsole.log(item.result)\n}\n```\n *\n */\nexport interface TryGetResult<T> {\n result: T;\n exists: boolean;\n}\n\nexport function tryGetValueFromMap<K, V>(\n map: Map<K, V> | null,\n key: K,\n /* out */ value: V\n): TryGetResult<V> {\n if (map === null) {\n return { result: value, exists: false };\n }\n\n let val = map.get(key);\n\n if (typeof val === \"undefined\") {\n return { result: value, exists: false };\n } else {\n return { result: val, exists: true };\n }\n}\n\nexport function tryParseInt(\n value: any,\n /* out */ defaultValue: number = 0\n): TryGetResult<number> {\n let val = parseInt(value);\n\n if (!Number.isNaN(val)) {\n return { result: val, exists: true };\n } else {\n return { result: defaultValue, exists: false };\n }\n}\n\nexport function tryParseFloat(\n value: any,\n /* out */ defaultValue: number = 0\n): TryGetResult<number> {\n let val = parseFloat(value);\n\n if (!Number.isNaN(val)) {\n return { result: val, exists: true };\n } else {\n return { result: defaultValue, exists: false };\n }\n}\n", "import { InkObject } from \"./Object\";\nimport { Container } from \"./Container\";\n\nexport class SearchResult {\n public obj: InkObject | null = null;\n public approximate: boolean = false;\n\n get correctObj() {\n return this.approximate ? null : this.obj;\n }\n\n get container() {\n return this.obj instanceof Container ? this.obj : null;\n }\n\n public copy() {\n let searchResult = new SearchResult();\n searchResult.obj = this.obj;\n searchResult.approximate = this.approximate;\n\n return searchResult;\n }\n}\n", "import { StringValue } from \"./Value\";\nimport { throwNullException } from \"./NullException\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { INamedContent } from \"./INamedContent\";\nimport { InkObject } from \"./Object\";\nimport { SearchResult } from \"./SearchResult\";\nimport { Path } from \"./Path\";\nimport { Debug } from \"./Debug\";\nimport { tryGetValueFromMap } from \"./TryGetResult\";\nimport { asINamedContentOrNull, asOrNull, asOrThrows } from \"./TypeAssertion\";\n\nexport class Container extends InkObject implements INamedContent {\n public name: string | null = null;\n\n public _content: InkObject[] = [];\n public namedContent: Map<string, INamedContent> = new Map();\n\n public visitsShouldBeCounted: boolean = false;\n public turnIndexShouldBeCounted: boolean = false;\n public countingAtStartOnly: boolean = false;\n\n public _pathToFirstLeafContent: Path | null = null;\n\n get hasValidName() {\n return this.name != null && this.name.length > 0;\n }\n get content() {\n return this._content;\n }\n set content(value: InkObject[]) {\n this.AddContent(value);\n }\n get namedOnlyContent() {\n let namedOnlyContentDict: Map<string, InkObject> | null = new Map();\n\n for (let [key, value] of this.namedContent) {\n let inkObject = asOrThrows(value, InkObject);\n namedOnlyContentDict.set(key, inkObject);\n }\n\n for (let c of this.content) {\n let named = asINamedContentOrNull(c);\n if (named != null && named.hasValidName) {\n namedOnlyContentDict.delete(named.name!);\n }\n }\n\n if (namedOnlyContentDict.size == 0) namedOnlyContentDict = null;\n\n return namedOnlyContentDict;\n }\n set namedOnlyContent(value: Map<string, InkObject> | null) {\n let existingNamedOnly = this.namedOnlyContent;\n if (existingNamedOnly != null) {\n for (let [key] of existingNamedOnly) {\n this.namedContent.delete(key);\n }\n }\n\n if (value == null) return;\n\n for (let [, val] of value) {\n let named = asINamedContentOrNull(val);\n if (named != null) this.AddToNamedContentOnly(named);\n }\n }\n get countFlags(): number {\n let flags: Container.CountFlags = 0;\n if (this.visitsShouldBeCounted) flags |= Container.CountFlags.Visits;\n if (this.turnIndexShouldBeCounted) flags |= Container.CountFlags.Turns;\n if (this.countingAtStartOnly) flags |= Container.CountFlags.CountStartOnly;\n\n if (flags == Container.CountFlags.CountStartOnly) {\n flags = 0;\n }\n\n return flags;\n }\n set countFlags(value: number) {\n let flag: Container.CountFlags = value;\n if ((flag & Container.CountFlags.Visits) > 0)\n this.visitsShouldBeCounted = true;\n if ((flag & Container.CountFlags.Turns) > 0)\n this.turnIndexShouldBeCounted = true;\n if ((flag & Container.CountFlags.CountStartOnly) > 0)\n this.countingAtStartOnly = true;\n }\n get pathToFirstLeafContent() {\n if (this._pathToFirstLeafContent == null)\n this._pathToFirstLeafContent = this.path.PathByAppendingPath(\n this.internalPathToFirstLeafContent\n );\n\n return this._pathToFirstLeafContent;\n }\n get internalPathToFirstLeafContent() {\n let components: Path.Component[] = [];\n let container: Container = this;\n while (container instanceof Container) {\n if (container.content.length > 0) {\n components.push(new Path.Component(0));\n container = container.content[0] as Container;\n }\n }\n return new Path(components);\n }\n\n public AddContent(contentObjOrList: InkObject | InkObject[]) {\n if (contentObjOrList instanceof Array) {\n let contentList = contentObjOrList as InkObject[];\n\n for (let c of contentList) {\n this.AddContent(c);\n }\n } else {\n let contentObj = contentObjOrList as InkObject;\n\n this._content.push(contentObj);\n\n if (contentObj.parent) {\n throw new Error(\"content is already in \" + contentObj.parent);\n }\n\n contentObj.parent = this;\n\n this.TryAddNamedContent(contentObj);\n }\n }\n public TryAddNamedContent(contentObj: InkObject) {\n let namedContentObj = asINamedContentOrNull(contentObj);\n if (namedContentObj != null && namedContentObj.hasValidName) {\n this.AddToNamedContentOnly(namedContentObj);\n }\n }\n public AddToNamedContentOnly(namedContentObj: INamedContent) {\n Debug.AssertType(\n namedContentObj,\n InkObject,\n \"Can only add Runtime.Objects to a Runtime.Container\"\n );\n let runtimeObj = asOrThrows(namedContentObj, InkObject);\n runtimeObj.parent = this;\n\n if (namedContentObj.name === null)\n return throwNullException(\"namedContentObj.name\");\n this.namedContent.set(namedContentObj.name!, namedContentObj);\n }\n public ContentAtPath(\n path: Path,\n partialPathStart: number = 0,\n partialPathLength: number = -1\n ) {\n if (partialPathLength == -1) partialPathLength = path.length;\n\n let result = new SearchResult();\n result.approximate = false;\n\n let currentContainer: Container | null = this;\n let currentObj: InkObject = this;\n\n for (let i = partialPathStart; i < partialPathLength; ++i) {\n let comp = path.GetComponent(i);\n if (currentContainer == null) {\n result.approximate = true;\n break;\n }\n\n let foundObj: InkObject | null =\n currentContainer.ContentWithPathComponent(comp);\n\n if (foundObj == null) {\n result.approximate = true;\n break;\n }\n\n currentObj = foundObj;\n currentContainer = asOrNull(foundObj, Container);\n }\n\n result.obj = currentObj;\n\n return result;\n }\n public InsertContent(contentObj: InkObject, index: number) {\n this.content.splice(index, 0, contentObj);\n\n if (contentObj.parent) {\n throw new Error(\"content is already in \" + contentObj.parent);\n }\n\n contentObj.parent = this;\n\n this.TryAddNamedContent(contentObj);\n }\n public AddContentsOfContainer(otherContainer: Container) {\n this.content.push(...otherContainer.content);\n\n for (let obj of otherContainer.content) {\n obj.parent = this;\n this.TryAddNamedContent(obj);\n }\n }\n public ContentWithPathComponent(component: Path.Component): InkObject | null {\n if (component.isIndex) {\n if (component.index >= 0 && component.index < this.content.length) {\n return this.content[component.index];\n } else {\n return null;\n }\n } else if (component.isParent) {\n return this.parent;\n } else {\n if (component.name === null) {\n return throwNullException(\"component.name\");\n }\n let foundContent = tryGetValueFromMap(\n this.namedContent,\n component.name,\n null\n );\n if (foundContent.exists) {\n return asOrThrows(foundContent.result, InkObject);\n } else {\n return null;\n }\n }\n }\n public BuildStringOfHierarchy(): string;\n public BuildStringOfHierarchy(\n sb: StringBuilder,\n indentation: number,\n pointedObj: InkObject | null\n ): string;\n public BuildStringOfHierarchy() {\n let sb: StringBuilder;\n if (arguments.length == 0) {\n sb = new StringBuilder();\n this.BuildStringOfHierarchy(sb, 0, null);\n return sb.toString();\n }\n\n sb = arguments[0] as StringBuilder;\n let indentation = arguments[1] as number;\n let pointedObj = arguments[2] as InkObject | null;\n\n function appendIndentation() {\n const spacesPerIndent = 4; // Truly const in the original code\n for (let i = 0; i < spacesPerIndent * indentation; ++i) {\n sb.Append(\" \");\n }\n }\n\n appendIndentation();\n sb.Append(\"[\");\n\n if (this.hasValidName) {\n sb.AppendFormat(\" ({0})\", this.name);\n }\n\n if (this == pointedObj) {\n sb.Append(\" <---\");\n }\n\n sb.AppendLine();\n\n indentation++;\n\n for (let i = 0; i < this.content.length; ++i) {\n let obj = this.content[i];\n\n if (obj instanceof Container) {\n let container = obj as Container;\n\n container.BuildStringOfHierarchy(sb, indentation, pointedObj);\n } else {\n appendIndentation();\n if (obj instanceof StringValue) {\n sb.Append('\"');\n sb.Append(obj.toString().replace(\"\\n\", \"\\\\n\"));\n sb.Append('\"');\n } else {\n sb.Append(obj.toString());\n }\n }\n\n if (i != this.content.length - 1) {\n sb.Append(\",\");\n }\n\n if (!(obj instanceof Container) && obj == pointedObj) {\n sb.Append(\" <---\");\n }\n\n sb.AppendLine();\n }\n\n let onlyNamed: Map<string, INamedContent> = new Map();\n\n for (let [key, value] of this.namedContent) {\n if (this.content.indexOf(asOrThrows(value, InkObject)) >= 0) {\n continue;\n } else {\n onlyNamed.set(key, value);\n }\n }\n\n if (onlyNamed.size > 0) {\n appendIndentation();\n sb.AppendLine(\"-- named: --\");\n\n for (let [, value] of onlyNamed) {\n Debug.AssertType(\n value,\n Container,\n \"Can only print out named Containers\"\n );\n let container = value as Container;\n container.BuildStringOfHierarchy(sb, indentation, pointedObj);\n sb.AppendLine();\n }\n }\n\n indentation--;\n\n appendIndentation();\n sb.Append(\"]\");\n }\n}\n\nexport namespace Container {\n export enum CountFlags {\n Visits = 1,\n Turns = 2,\n CountStartOnly = 4,\n }\n}\n", "import { InkObject } from \"./Object\";\n\nexport class Glue extends InkObject {\n public toString() {\n return \"Glue\";\n }\n}\n", "import { InkObject } from \"./Object\";\n\nexport class ControlCommand extends InkObject {\n private _commandType: ControlCommand.CommandType;\n\n get commandType(): ControlCommand.CommandType {\n return this._commandType;\n }\n\n constructor(\n commandType: ControlCommand.CommandType = ControlCommand.CommandType.NotSet\n ) {\n super();\n this._commandType = commandType;\n }\n\n public Copy() {\n return new ControlCommand(this.commandType);\n }\n public static EvalStart() {\n return new ControlCommand(ControlCommand.CommandType.EvalStart);\n }\n public static EvalOutput() {\n return new ControlCommand(ControlCommand.CommandType.EvalOutput);\n }\n public static EvalEnd() {\n return new ControlCommand(ControlCommand.CommandType.EvalEnd);\n }\n public static Duplicate() {\n return new ControlCommand(ControlCommand.CommandType.Duplicate);\n }\n public static PopEvaluatedValue() {\n return new ControlCommand(ControlCommand.CommandType.PopEvaluatedValue);\n }\n public static PopFunction() {\n return new ControlCommand(ControlCommand.CommandType.PopFunction);\n }\n public static PopTunnel() {\n return new ControlCommand(ControlCommand.CommandType.PopTunnel);\n }\n public static BeginString() {\n return new ControlCommand(ControlCommand.CommandType.BeginString);\n }\n public static EndString() {\n return new ControlCommand(ControlCommand.CommandType.EndString);\n }\n public static NoOp() {\n return new ControlCommand(ControlCommand.CommandType.NoOp);\n }\n public static ChoiceCount() {\n return new ControlCommand(ControlCommand.CommandType.ChoiceCount);\n }\n public static Turns() {\n return new ControlCommand(ControlCommand.CommandType.Turns);\n }\n public static TurnsSince() {\n return new ControlCommand(ControlCommand.CommandType.TurnsSince);\n }\n public static ReadCount() {\n return new ControlCommand(ControlCommand.CommandType.ReadCount);\n }\n public static Random() {\n return new ControlCommand(ControlCommand.CommandType.Random);\n }\n public static SeedRandom() {\n return new ControlCommand(ControlCommand.CommandType.SeedRandom);\n }\n public static VisitIndex() {\n return new ControlCommand(ControlCommand.CommandType.VisitIndex);\n }\n public static SequenceShuffleIndex() {\n return new ControlCommand(ControlCommand.CommandType.SequenceShuffleIndex);\n }\n public static StartThread() {\n return new ControlCommand(ControlCommand.CommandType.StartThread);\n }\n public static Done() {\n return new ControlCommand(ControlCommand.CommandType.Done);\n }\n public static End() {\n return new ControlCommand(ControlCommand.CommandType.End);\n }\n public static ListFromInt() {\n return new ControlCommand(ControlCommand.CommandType.ListFromInt);\n }\n public static ListRange() {\n return new ControlCommand(ControlCommand.CommandType.ListRange);\n }\n public static ListRandom() {\n return new ControlCommand(ControlCommand.CommandType.ListRandom);\n }\n public static BeginTag() {\n return new ControlCommand(ControlCommand.CommandType.BeginTag);\n }\n public static EndTag() {\n return new ControlCommand(ControlCommand.CommandType.EndTag);\n }\n public toString() {\n return \"ControlCommand \" + this.commandType.toString();\n }\n}\n\nexport namespace ControlCommand {\n export enum CommandType {\n NotSet = -1,\n EvalStart, // 0\n EvalOutput, // 1\n EvalEnd, // 2\n Duplicate, // 3\n PopEvaluatedValue, // 4\n PopFunction, // 5\n PopTunnel, // 6\n BeginString, // 7\n EndString, // 8\n NoOp, // 9\n ChoiceCount, // 10\n Turns, // 11\n TurnsSince, // 12\n ReadCount, // 13\n Random, // 14\n SeedRandom, // 15\n VisitIndex, // 16\n SequenceShuffleIndex, // 17\n StartThread, // 18\n Done, // 19\n End, // 20\n ListFromInt, // 21\n ListRange, // 22\n ListRandom, // 23\n BeginTag, // 24\n EndTag, // 25\n\n TOTAL_VALUES,\n }\n}\n", "import { Path } from \"./Path\";\nimport { Container } from \"./Container\";\nimport { InkObject } from \"./Object\";\n\nexport class Pointer {\n public container: Container | null = null;\n public index: number = -1;\n\n constructor();\n constructor(container: Container | null, index: number);\n constructor() {\n if (arguments.length === 2) {\n this.container = arguments[0];\n this.index = arguments[1];\n }\n }\n\n public Resolve(): InkObject | null {\n if (this.index < 0) return this.container;\n if (this.container == null) return null;\n if (this.container.content.length == 0) return this.container;\n if (this.index >= this.container.content.length) return null;\n\n return this.container.content[this.index];\n }\n\n get isNull(): boolean {\n return this.container == null;\n }\n\n get path(): Path | null {\n if (this.isNull) return null;\n\n if (this.index >= 0)\n return this.container!.path.PathByAppendingComponent(\n new Path.Component(this.index)\n );\n else return this.container!.path;\n }\n\n public toString(): string {\n if (!this.container) return \"Ink Pointer (null)\";\n\n return (\n \"Ink Pointer -> \" +\n this.container.path.toString() +\n \" -- index \" +\n this.index\n );\n }\n\n // This method does not exist in the original C# code, but is here to maintain the\n // value semantics of Pointer.\n public copy(): Pointer {\n return new Pointer(this.container, this.index);\n }\n\n public static StartOf(container: Container | null): Pointer {\n return new Pointer(container, 0);\n }\n\n public static get Null(): Pointer {\n return new Pointer(null, -1);\n }\n}\n", "import { Path } from \"./Path\";\nimport { PushPopType } from \"./PushPop\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { InkObject } from \"./Object\";\nimport { Pointer } from \"./Pointer\";\nimport { Container } from \"./Container\";\nimport { throwNullException } from \"./NullException\";\n\nexport class Divert extends InkObject {\n get targetPath() {\n if (this._targetPath != null && this._targetPath.isRelative) {\n let targetObj = this.targetPointer.Resolve();\n if (targetObj) {\n this._targetPath = targetObj.path;\n }\n }\n\n return this._targetPath;\n }\n set targetPath(value: Path | null) {\n this._targetPath = value;\n this._targetPointer = Pointer.Null;\n }\n\n public _targetPath: Path | null = null;\n\n get targetPointer() {\n if (this._targetPointer.isNull) {\n let targetObj = this.ResolvePath(this._targetPath).obj;\n\n if (this._targetPath === null)\n return throwNullException(\"this._targetPath\");\n if (this._targetPath.lastComponent === null)\n return throwNullException(\"this._targetPath.lastComponent\");\n\n if (this._targetPath.lastComponent.isIndex) {\n if (targetObj === null) return throwNullException(\"targetObj\");\n this._targetPointer.container =\n targetObj.parent instanceof Container ? targetObj.parent : null;\n this._targetPointer.index = this._targetPath.lastComponent.index;\n } else {\n this._targetPointer = Pointer.StartOf(\n targetObj instanceof Container ? targetObj : null\n );\n }\n }\n\n return this._targetPointer.copy();\n }\n\n public _targetPointer: Pointer = Pointer.Null;\n\n get targetPathString() {\n if (this.targetPath == null) return null;\n\n return this.CompactPathString(this.targetPath);\n }\n set targetPathString(value: string | null) {\n if (value == null) {\n this.targetPath = null;\n } else {\n this.targetPath = new Path(value);\n }\n }\n\n public variableDivertName: string | null = null;\n get hasVariableTarget() {\n return this.variableDivertName != null;\n }\n\n public pushesToStack: boolean = false;\n public stackPushType: PushPopType = 0;\n\n public isExternal: boolean = false;\n public externalArgs: number = 0;\n\n public isConditional: boolean = false;\n\n constructor(stackPushType?: PushPopType) {\n super();\n this.pushesToStack = false;\n\n if (typeof stackPushType !== \"undefined\") {\n this.pushesToStack = true;\n this.stackPushType = stackPushType;\n }\n }\n\n public Equals(obj: Divert | null) {\n let otherDivert = obj;\n if (otherDivert instanceof Divert) {\n if (this.hasVariableTarget == otherDivert.hasVariableTarget) {\n if (this.hasVariableTarget) {\n return this.variableDivertName == otherDivert.variableDivertName;\n } else {\n if (this.targetPath === null)\n return throwNullException(\"this.targetPath\");\n return this.targetPath.Equals(otherDivert.targetPath);\n }\n }\n }\n return false;\n }\n\n public toString() {\n if (this.hasVariableTarget) {\n return \"Divert(variable: \" + this.variableDivertName + \")\";\n } else if (this.targetPath == null) {\n return \"Divert(null)\";\n } else {\n let sb = new StringBuilder();\n\n let targetStr = this.targetPath.toString();\n // int? targetLineNum = DebugLineNumberOfPath (targetPath);\n let targetLineNum = null;\n if (targetLineNum != null) {\n targetStr = \"line \" + targetLineNum;\n }\n\n sb.Append(\"Divert\");\n\n if (this.isConditional) sb.Append(\"?\");\n\n if (this.pushesToStack) {\n if (this.stackPushType == PushPopType.Function) {\n sb.Append(\" function\");\n } else {\n sb.Append(\" tunnel\");\n }\n }\n\n sb.Append(\" -> \");\n sb.Append(this.targetPathString);\n\n sb.Append(\" (\");\n sb.Append(targetStr);\n sb.Append(\")\");\n\n return sb.toString();\n }\n }\n}\n", "import { InkObject } from \"./Object\";\nimport { Path } from \"./Path\";\nimport { Container } from \"./Container\";\nimport { throwNullException } from \"./NullException\";\n\nexport class ChoicePoint extends InkObject {\n public _pathOnChoice: Path | null = null;\n public hasCondition: boolean = false;\n public hasStartContent: boolean = false;\n public hasChoiceOnlyContent: boolean = false;\n public isInvisibleDefault: boolean = false;\n public onceOnly: boolean = true;\n\n constructor(onceOnly: boolean = true) {\n super();\n this.onceOnly = onceOnly;\n }\n get pathOnChoice(): Path | null {\n if (this._pathOnChoice != null && this._pathOnChoice.isRelative) {\n let choiceTargetObj = this.choiceTarget;\n if (choiceTargetObj) {\n this._pathOnChoice = choiceTargetObj.path;\n }\n }\n return this._pathOnChoice;\n }\n set pathOnChoice(value: Path | null) {\n this._pathOnChoice = value;\n }\n get choiceTarget(): Container | null {\n if (this._pathOnChoice === null)\n return throwNullException(\"ChoicePoint._pathOnChoice\");\n return this.ResolvePath(this._pathOnChoice).container;\n }\n get pathStringOnChoice(): string {\n if (this.pathOnChoice === null)\n return throwNullException(\"ChoicePoint.pathOnChoice\");\n return this.CompactPathString(this.pathOnChoice);\n }\n set pathStringOnChoice(value: string) {\n this.pathOnChoice = new Path(value);\n }\n get flags(): number {\n let flags = 0;\n if (this.hasCondition) flags |= 1;\n if (this.hasStartContent) flags |= 2;\n if (this.hasChoiceOnlyContent) flags |= 4;\n if (this.isInvisibleDefault) flags |= 8;\n if (this.onceOnly) flags |= 16;\n return flags;\n }\n set flags(value: number) {\n this.hasCondition = (value & 1) > 0;\n this.hasStartContent = (value & 2) > 0;\n this.hasChoiceOnlyContent = (value & 4) > 0;\n this.isInvisibleDefault = (value & 8) > 0;\n this.onceOnly = (value & 16) > 0;\n }\n public toString(): string {\n if (this.pathOnChoice === null)\n return throwNullException(\"ChoicePoint.pathOnChoice\");\n // int? targetLineNum = DebugLineNumberOfPath (pathOnChoice);\n let targetLineNum = null;\n let targetString = this.pathOnChoice.toString();\n\n if (targetLineNum != null) {\n targetString = \" line \" + targetLineNum + \"(\" + targetString + \")\";\n }\n\n return \"Choice: -> \" + targetString;\n }\n}\n", "import { InkObject } from \"./Object\";\nimport { Path } from \"./Path\";\n\nexport class VariableReference extends InkObject {\n public name: string | null;\n public pathForCount: Path | null = null;\n\n get containerForCount() {\n if (this.pathForCount === null) return null;\n return this.ResolvePath(this.pathForCount).container;\n }\n get pathStringForCount() {\n if (this.pathForCount === null) return null;\n\n return this.CompactPathString(this.pathForCount);\n }\n set pathStringForCount(value: string | null) {\n if (value === null) this.pathForCount = null;\n else this.pathForCount = new Path(value);\n }\n\n constructor(name: string | null = null) {\n super();\n this.name = name;\n }\n\n public toString() {\n if (this.name != null) {\n return \"var(\" + this.name + \")\";\n } else {\n let pathStr = this.pathStringForCount;\n return \"read_count(\" + pathStr + \")\";\n }\n }\n}\n", "import { InkObject } from \"./Object\";\n\nexport class VariableAssignment extends InkObject {\n public readonly variableName: string | null;\n public readonly isNewDeclaration: boolean;\n public isGlobal: boolean;\n\n constructor(variableName: string | null, isNewDeclaration: boolean) {\n super();\n this.variableName = variableName || null;\n this.isNewDeclaration = !!isNewDeclaration;\n this.isGlobal = false;\n }\n\n public toString(): string {\n return \"VarAssign to \" + this.variableName;\n }\n}\n", "import { InkObject } from \"./Object\";\n\nexport class Void extends InkObject {\n public toString() {\n return \"Void\";\n }\n}\n", "import { Value, ValueType, IntValue, ListValue, BoolValue } from \"./Value\";\nimport { StoryException } from \"./StoryException\";\nimport { Void } from \"./Void\";\nimport { Path } from \"./Path\";\nimport { InkList, InkListItem } from \"./InkList\";\nimport { InkObject } from \"./Object\";\nimport { asOrNull, asOrThrows, asBooleanOrThrows } from \"./TypeAssertion\";\nimport { throwNullException } from \"./NullException\";\n\ntype BinaryOp<T> = (left: T, right: T) => any;\ntype UnaryOp<T> = (val: T) => any;\n\nexport class NativeFunctionCall extends InkObject {\n public static readonly Add: string = \"+\";\n public static readonly Subtract: string = \"-\";\n public static readonly Divide: string = \"/\";\n public static readonly Multiply: string = \"*\";\n public static readonly Mod: string = \"%\";\n public static readonly Negate: string = \"_\";\n public static readonly Equal: string = \"==\";\n public static readonly Greater: string = \">\";\n public static readonly Less: string = \"<\";\n public static readonly GreaterThanOrEquals: string = \">=\";\n public static readonly LessThanOrEquals: string = \"<=\";\n public static readonly NotEquals: string = \"!=\";\n public static readonly Not: string = \"!\";\n public static readonly And: string = \"&&\";\n public static readonly Or: string = \"||\";\n public static readonly Min: string = \"MIN\";\n public static readonly Max: string = \"MAX\";\n public static readonly Pow: string = \"POW\";\n public static readonly Floor: string = \"FLOOR\";\n public static readonly Ceiling: string = \"CEILING\";\n public static readonly Int: string = \"INT\";\n public static readonly Float: string = \"FLOAT\";\n public static readonly Has: string = \"?\";\n public static readonly Hasnt: string = \"!?\";\n public static readonly Intersect: string = \"^\";\n public static readonly ListMin: string = \"LIST_MIN\";\n public static readonly ListMax: string = \"LIST_MAX\";\n public static readonly All: string = \"LIST_ALL\";\n public static readonly Count: string = \"LIST_COUNT\";\n public static readonly ValueOfList: string = \"LIST_VALUE\";\n public static readonly Invert: string = \"LIST_INVERT\";\n\n public static CallWithName(functionName: string) {\n return new NativeFunctionCall(functionName);\n }\n\n public static CallExistsWithName(functionName: string) {\n this.GenerateNativeFunctionsIfNecessary();\n return this._nativeFunctions!.get(functionName);\n }\n\n get name() {\n if (this._name === null)\n return throwNullException(\"NativeFunctionCall._name\");\n return this._name;\n }\n set name(value: string) {\n this._name = value;\n if (!this._isPrototype) {\n if (NativeFunctionCall._nativeFunctions === null)\n throwNullException(\"NativeFunctionCall._nativeFunctions\");\n else\n this._prototype =\n NativeFunctionCall._nativeFunctions.get(this._name) || null;\n }\n }\n public _name: string | null = null;\n\n get numberOfParameters() {\n if (this._prototype) {\n return this._prototype.numberOfParameters;\n } else {\n return this._numberOfParameters;\n }\n }\n set numberOfParameters(value: number) {\n this._numberOfParameters = value;\n }\n public _numberOfParameters: number = 0;\n\n public Call(parameters: InkObject[]): InkObject | null {\n if (this._prototype) {\n return this._prototype.Call(parameters);\n }\n\n if (this.numberOfParameters != parameters.length) {\n throw new Error(\"Unexpected number of parameters\");\n }\n\n let hasList = false;\n for (let p of parameters) {\n if (p instanceof Void)\n throw new StoryException(\n 'Attempting to perform operation on a void value. Did you forget to \"return\" a value from a function you called here?'\n );\n if (p instanceof ListValue) hasList = true;\n }\n\n if (parameters.length == 2 && hasList) {\n return this.CallBinaryListOperation(parameters);\n }\n\n let coercedParams = this.CoerceValuesToSingleType(parameters);\n let coercedType = coercedParams[0].valueType;\n\n if (coercedType == ValueType.Int) {\n return this.CallType<number>(coercedParams);\n } else if (coercedType == ValueType.Float) {\n return this.CallType<number>(coercedParams);\n } else if (coercedType == ValueType.String) {\n return this.CallType<string>(coercedParams);\n } else if (coercedType == ValueType.DivertTarget) {\n return this.CallType<Path>(coercedParams);\n } else if (coercedType == ValueType.List) {\n return this.CallType<InkList>(coercedParams);\n }\n\n return null;\n }\n\n public CallType<T extends { toString: () => string }>(\n parametersOfSingleType: Array<Value<T>>\n ) {\n let param1 = asOrThrows(parametersOfSingleType[0], Value);\n let valType = param1.valueType;\n\n let val1 = param1 as Value<T>;\n\n let paramCount = parametersOfSingleType.length;\n\n if (paramCount == 2 || paramCount == 1) {\n if (this._operationFuncs === null)\n return throwNullException(\"NativeFunctionCall._operationFuncs\");\n let opForTypeObj = this._operationFuncs.get(valType);\n if (!opForTypeObj) {\n const key = ValueType[valType];\n throw new StoryException(\n \"Cannot perform operation \" + this.name + \" on \" + key\n );\n }\n\n if (paramCount == 2) {\n let param2 = asOrThrows(parametersOfSingleType[1], Value);\n\n let val2 = param2 as Value<T>;\n\n let opForType = opForTypeObj as BinaryOp<T>;\n\n if (val1.value === null || val2.value === null)\n return throwNullException(\"NativeFunctionCall.Call BinaryOp values\");\n let resultVal = opForType(val1.value, val2.value);\n\n return Value.Create(resultVal);\n } else {\n let opForType = opForTypeObj as UnaryOp<T>;\n\n if (val1.value === null)\n return throwNullException(\"NativeFunctionCall.Call UnaryOp value\");\n let resultVal = opForType(val1.value);\n\n // This code is different from upstream. Since JavaScript treats\n // integers and floats as the same numbers, it's impossible\n // to force an number to be either an integer or a float.\n //\n // It can be useful to force a specific number type\n // (especially for divisions), so the result of INT() & FLOAT()\n // is coerced to the the proper value type.\n //\n // Note that we also force all other unary operation to\n // return the same value type, although this is only\n // meaningful for numbers. See `Value.Create`.\n if (this.name === NativeFunctionCall.Int) {\n return Value.Create(resultVal, ValueType.Int);\n } else if (this.name === NativeFunctionCall.Float) {\n return Value.Create(resultVal, ValueType.Float);\n } else {\n return Value.Create(resultVal, param1.valueType);\n }\n }\n } else {\n throw new Error(\n \"Unexpected number of parameters to NativeFunctionCall: \" +\n parametersOfSingleType.length\n );\n }\n }\n\n public CallBinaryListOperation(parameters: InkObject[]) {\n if (\n (this.name == \"+\" || this.name == \"-\") &&\n parameters[0] instanceof ListValue &&\n parameters[1] instanceof IntValue\n )\n return this.CallListIncrementOperation(parameters);\n\n let v1 = asOrThrows(parameters[0], Value);\n let v2 = asOrThrows(parameters[1], Value);\n\n if (\n (this.name == \"&&\" || this.name == \"||\") &&\n (v1.valueType != ValueType.List || v2.valueType != ValueType.List)\n ) {\n if (this._operationFuncs === null)\n return throwNullException(\"NativeFunctionCall._operationFuncs\");\n let op = this._operationFuncs.get(ValueType.Int) as BinaryOp<number>;\n if (op === null)\n return throwNullException(\n \"NativeFunctionCall.CallBinaryListOperation op\"\n );\n let result = asBooleanOrThrows(\n op(v1.isTruthy ? 1 : 0, v2.isTruthy ? 1 : 0)\n );\n return new BoolValue(result);\n }\n\n if (v1.valueType == ValueType.List && v2.valueType == ValueType.List)\n return this.CallType<InkList>([v1, v2]);\n\n throw new StoryException(\n \"Can not call use \" +\n this.name +\n \" operation on \" +\n ValueType[v1.valueType] +\n \" and \" +\n ValueType[v2.valueType]\n );\n }\n\n public CallListIncrementOperation(listIntParams: InkObject[]) {\n let listVal = asOrThrows(listIntParams[0], ListValue);\n let intVal = asOrThrows(listIntParams[1], IntValue);\n\n let resultInkList = new InkList();\n\n if (listVal.value === null)\n return throwNullException(\n \"NativeFunctionCall.CallListIncrementOperation listVal.value\"\n );\n for (let [listItemKey, listItemValue] of listVal.value) {\n let listItem = InkListItem.fromSerializedKey(listItemKey);\n\n if (this._operationFuncs === null)\n return throwNullException(\"NativeFunctionCall._operationFuncs\");\n let intOp = this._operationFuncs.get(ValueType.Int) as BinaryOp<number>;\n\n if (intVal.value === null)\n return throwNullException(\n \"NativeFunctionCall.CallListIncrementOperation intVal.value\"\n );\n let targetInt = intOp(listItemValue, intVal.value);\n\n let itemOrigin = null;\n if (listVal.value.origins === null)\n return throwNullException(\n \"NativeFunctionCall.CallListIncrementOperation listVal.value.origins\"\n );\n for (let origin of listVal.value.origins) {\n if (origin.name == listItem.originName) {\n itemOrigin = origin;\n break;\n }\n }\n if (itemOrigin != null) {\n let incrementedItem = itemOrigin.TryGetItemWithValue(\n targetInt,\n InkListItem.Null\n );\n if (incrementedItem.exists)\n resultInkList.Add(incrementedItem.result, targetInt);\n }\n }\n\n return new ListValue(resultInkList);\n }\n\n public CoerceValuesToSingleType(parametersIn: InkObject[]) {\n let valType = ValueType.Int;\n\n let specialCaseList: null | ListValue = null;\n\n for (let obj of parametersIn) {\n let val = asOrThrows(obj, Value);\n if (val.valueType > valType) {\n valType = val.valueType;\n }\n\n if (val.valueType == ValueType.List) {\n specialCaseList = asOrNull(val, ListValue);\n }\n }\n\n let parametersOut = [];\n\n if (ValueType[valType] == ValueType[ValueType.List]) {\n for (let inkObjectVal of parametersIn) {\n let val = asOrThrows(inkObjectVal, Value);\n if (val.valueType == ValueType.List) {\n parametersOut.push(val);\n } else if (val.valueType == ValueType.Int) {\n let intVal = parseInt(val.valueObject);\n\n specialCaseList = asOrThrows(specialCaseList, ListValue);\n if (specialCaseList.value === null)\n return throwNullException(\n \"NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value\"\n );\n let list = specialCaseList.value.originOfMaxItem;\n\n if (list === null)\n return throwNullException(\n \"NativeFunctionCall.CoerceValuesToSingleType list\"\n );\n let item = list.TryGetItemWithValue(intVal, InkListItem.Null);\n if (item.exists) {\n let castedValue = new ListValue(item.result, intVal);\n parametersOut.push(castedValue);\n } else\n throw new StoryException(\n \"Could not find List item with the value \" +\n intVal +\n \" in \" +\n list.name\n );\n } else {\n const key = ValueType[val.valueType];\n throw new StoryException(\n \"Cannot mix Lists and \" + key + \" values in this operation\"\n );\n }\n }\n } else {\n for (let inkObjectVal of parametersIn) {\n let val = asOrThrows(inkObjectVal, Value);\n let castedValue = val.Cast(valType);\n parametersOut.push(castedValue);\n }\n }\n\n return parametersOut;\n }\n\n constructor(name: string);\n constructor(name: string, numberOfParameters: number);\n constructor();\n constructor() {\n super();\n\n if (arguments.length === 0) {\n NativeFunctionCall.GenerateNativeFunctionsIfNecessary();\n } else if (arguments.length === 1) {\n let name = arguments[0];\n NativeFunctionCall.GenerateNativeFunctionsIfNecessary();\n this.name = name;\n } else if (arguments.length === 2) {\n let name = arguments[0];\n let numberOfParameters = arguments[1];\n\n this._isPrototype = true;\n this.name = name;\n this.numberOfParameters = numberOfParameters;\n }\n }\n\n public static Identity<T>(t: T): any {\n return t;\n }\n\n public static GenerateNativeFunctionsIfNecessary() {\n if (this._nativeFunctions == null) {\n this._nativeFunctions = new Map();\n\n // Int operations\n this.AddIntBinaryOp(this.Add, (x, y) => x + y);\n this.AddIntBinaryOp(this.Subtract, (x, y) => x - y);\n this.AddIntBinaryOp(this.Multiply, (x, y) => x * y);\n this.AddIntBinaryOp(this.Divide, (x, y) => Math.floor(x / y));\n this.AddIntBinaryOp(this.Mod, (x, y) => x % y);\n this.AddIntUnaryOp(this.Negate, (x) => -x);\n\n this.AddIntBinaryOp(this.Equal, (x, y) => x == y);\n this.AddIntBinaryOp(this.Greater, (x, y) => x > y);\n this.AddIntBinaryOp(this.Less, (x, y) => x < y);\n this.AddIntBinaryOp(this.GreaterThanOrEquals, (x, y) => x >= y);\n this.AddIntBinaryOp(this.LessThanOrEquals, (x, y) => x <= y);\n this.AddIntBinaryOp(this.NotEquals, (x, y) => x != y);\n this.AddIntUnaryOp(this.Not, (x) => x == 0);\n\n this.AddIntBinaryOp(this.And, (x, y) => x != 0 && y != 0);\n this.AddIntBinaryOp(this.Or, (x, y) => x != 0 || y != 0);\n\n this.AddIntBinaryOp(this.Max, (x, y) => Math.max(x, y));\n this.AddIntBinaryOp(this.Min, (x, y) => Math.min(x, y));\n\n this.AddIntBinaryOp(this.Pow, (x, y) => Math.pow(x, y));\n this.AddIntUnaryOp(this.Floor, NativeFunctionCall.Identity);\n this.AddIntUnaryOp(this.Ceiling, NativeFunctionCall.Identity);\n this.AddIntUnaryOp(this.Int, NativeFunctionCall.Identity);\n this.AddIntUnaryOp(this.Float, (x) => x);\n\n // Float operations\n this.AddFloatBinaryOp(this.Add, (x, y) => x + y);\n this.AddFloatBinaryOp(this.Subtract, (x, y) => x - y);\n this.AddFloatBinaryOp(this.Multiply, (x, y) => x * y);\n this.AddFloatBinaryOp(this.Divide, (x, y) => x / y);\n this.AddFloatBinaryOp(this.Mod, (x, y) => x % y);\n this.AddFloatUnaryOp(this.Negate, (x) => -x);\n\n this.AddFloatBinaryOp(this.Equal, (x, y) => x == y);\n this.AddFloatBinaryOp(this.Greater, (x, y) => x > y);\n this.AddFloatBinaryOp(this.Less, (x, y) => x < y);\n this.AddFloatBinaryOp(this.GreaterThanOrEquals, (x, y) => x >= y);\n this.AddFloatBinaryOp(this.LessThanOrEquals, (x, y) => x <= y);\n this.AddFloatBinaryOp(this.NotEquals, (x, y) => x != y);\n this.AddFloatUnaryOp(this.Not, (x) => x == 0.0);\n\n this.AddFloatBinaryOp(this.And, (x, y) => x != 0.0 && y != 0.0);\n this.AddFloatBinaryOp(this.Or, (x, y) => x != 0.0 || y != 0.0);\n\n this.AddFloatBinaryOp(this.Max, (x, y) => Math.max(x, y));\n this.AddFloatBinaryOp(this.Min, (x, y) => Math.min(x, y));\n\n this.AddFloatBinaryOp(this.Pow, (x, y) => Math.pow(x, y));\n this.AddFloatUnaryOp(this.Floor, (x) => Math.floor(x));\n this.AddFloatUnaryOp(this.Ceiling, (x) => Math.ceil(x));\n this.AddFloatUnaryOp(this.Int, (x) => Math.floor(x));\n this.AddFloatUnaryOp(this.Float, NativeFunctionCall.Identity);\n\n // String operations\n this.AddStringBinaryOp(this.Add, (x, y) => x + y); // concat\n this.AddStringBinaryOp(this.Equal, (x, y) => x === y);\n this.AddStringBinaryOp(this.NotEquals, (x, y) => !(x === y));\n this.AddStringBinaryOp(this.Has, (x, y) => x.includes(y));\n this.AddStringBinaryOp(this.Hasnt, (x, y) => !x.includes(y));\n\n this.AddListBinaryOp(this.Add, (x, y) => x.Union(y));\n this.AddListBinaryOp(this.Subtract, (x, y) => x.Without(y));\n this.AddListBinaryOp(this.Has, (x, y) => x.Contains(y));\n this.AddListBinaryOp(this.Hasnt, (x, y) => !x.Contains(y));\n this.AddListBinaryOp(this.Intersect, (x, y) => x.Intersect(y));\n\n this.AddListBinaryOp(this.Equal, (x, y) => x.Equals(y));\n this.AddListBinaryOp(this.Greater, (x, y) => x.GreaterThan(y));\n this.AddListBinaryOp(this.Less, (x, y) => x.LessThan(y));\n this.AddListBinaryOp(this.GreaterThanOrEquals, (x, y) =>\n x.GreaterThanOrEquals(y)\n );\n this.AddListBinaryOp(this.LessThanOrEquals, (x, y) =>\n x.LessThanOrEquals(y)\n );\n this.AddListBinaryOp(this.NotEquals, (x, y) => !x.Equals(y));\n\n this.AddListBinaryOp(this.And, (x, y) => x.Count > 0 && y.Count > 0);\n this.AddListBinaryOp(this.Or, (x, y) => x.Count > 0 || y.Count > 0);\n\n this.AddListUnaryOp(this.Not, (x) => (x.Count == 0 ? 1 : 0));\n\n this.AddListUnaryOp(this.Invert, (x) => x.inverse);\n this.AddListUnaryOp(this.All, (x) => x.all);\n this.AddListUnaryOp(this.ListMin, (x) => x.MinAsList());\n this.AddListUnaryOp(this.ListMax, (x) => x.MaxAsList());\n this.AddListUnaryOp(this.Count, (x) => x.Count);\n this.AddListUnaryOp(this.ValueOfList, (x) => x.maxItem.Value);\n\n let divertTargetsEqual = (d1: Path, d2: Path) => d1.Equals(d2);\n let divertTargetsNotEqual = (d1: Path, d2: Path) => !d1.Equals(d2);\n this.AddOpToNativeFunc(\n this.Equal,\n 2,\n ValueType.DivertTarget,\n divertTargetsEqual\n );\n this.AddOpToNativeFunc(\n this.NotEquals,\n 2,\n ValueType.DivertTarget,\n divertTargetsNotEqual\n );\n }\n }\n\n public AddOpFuncForType(\n valType: ValueType,\n op: UnaryOp<number | InkList> | BinaryOp<number | string | InkList | Path>\n ): void {\n if (this._operationFuncs == null) {\n this._operationFuncs = new Map();\n }\n\n this._operationFuncs.set(valType, op);\n }\n\n public static AddOpToNativeFunc(\n name: string,\n args: number,\n valType: ValueType,\n op: UnaryOp<any> | BinaryOp<any>\n ): void {\n if (this._nativeFunctions === null)\n return throwNullException(\"NativeFunctionCall._nativeFunctions\");\n let nativeFunc = this._nativeFunctions.get(name);\n if (!nativeFunc) {\n nativeFunc = new NativeFunctionCall(name, args);\n this._nativeFunctions.set(name, nativeFunc);\n }\n\n nativeFunc.AddOpFuncForType(valType, op);\n }\n\n public static AddIntBinaryOp(name: string, op: BinaryOp<number>) {\n this.AddOpToNativeFunc(name, 2, ValueType.Int, op);\n }\n public static AddIntUnaryOp(name: string, op: UnaryOp<number>) {\n this.AddOpToNativeFunc(name, 1, ValueType.Int, op);\n }\n\n public static AddFloatBinaryOp(name: string, op: BinaryOp<number>) {\n this.AddOpToNativeFunc(name, 2, ValueType.Float, op);\n }\n public static AddFloatUnaryOp(name: string, op: UnaryOp<number>) {\n this.AddOpToNativeFunc(name, 1, ValueType.Float, op);\n }\n\n public static AddStringBinaryOp(name: string, op: BinaryOp<string>) {\n this.AddOpToNativeFunc(name, 2, ValueType.String, op);\n }\n\n public static AddListBinaryOp(name: string, op: BinaryOp<InkList>) {\n this.AddOpToNativeFunc(name, 2, ValueType.List, op);\n }\n public static AddListUnaryOp(name: string, op: UnaryOp<InkList>) {\n this.AddOpToNativeFunc(name, 1, ValueType.List, op);\n }\n\n public toString() {\n return 'Native \"' + this.name + '\"';\n }\n\n public _prototype: NativeFunctionCall | null = null;\n public _isPrototype: boolean = false;\n public _operationFuncs: Map<ValueType, BinaryOp<any> | UnaryOp<any>> | null =\n null;\n public static _nativeFunctions: Map<string, NativeFunctionCall> | null = null;\n}\n", "import { InkObject } from \"./Object\";\n\n// New version of tags is dynamic - it constructs the tags\n// at runtime based on BeginTag and EndTag control commands.\n// Plain text that's in the output stream is turned into tags\n// when you do story.currentTags.\n// The only place this is used is when flattening tags down\n// to string in advance, during dynamic string generation if\n// there's a tag embedded in it. See how ControlCommand.EndString\n// is implemented in Story.cs for more details + comment\nexport class Tag extends InkObject {\n public readonly text: string;\n\n constructor(tagText: string) {\n super();\n this.text = tagText.toString() || \"\";\n }\n\n public toString(): string {\n return \"# \" + this.text;\n }\n}\n", "import { Path } from \"./Path\";\nimport { CallStack } from \"./CallStack\";\nimport { throwNullException } from \"./NullException\";\nimport { InkObject } from \"./Object\";\n\nexport class Choice extends InkObject {\n public text: string = \"\";\n public index: number = 0;\n public threadAtGeneration: CallStack.Thread | null = null;\n public sourcePath: string = \"\";\n public targetPath: Path | null = null;\n public isInvisibleDefault: boolean = false;\n public tags: string[] | null = null;\n public originalThreadIndex: number = 0;\n\n get pathStringOnChoice(): string {\n if (this.targetPath === null)\n return throwNullException(\"Choice.targetPath\");\n return this.targetPath.toString();\n }\n set pathStringOnChoice(value: string) {\n this.targetPath = new Path(value);\n }\n}\n", "import { InkListItem, SerializedInkListItem } from \"./InkList\";\nimport { TryGetResult } from \"./TryGetResult\";\n\nexport class ListDefinition {\n public _name: string;\n public _items: Map<SerializedInkListItem, number> | null;\n public _itemNameToValues: Map<string, number>;\n\n constructor(name: string, items: Map<string, number> | null) {\n this._name = name || \"\";\n this._items = null;\n this._itemNameToValues = items || new Map();\n }\n get name() {\n return this._name;\n }\n get items() {\n if (this._items == null) {\n this._items = new Map();\n for (let [key, value] of this._itemNameToValues) {\n let item = new InkListItem(this.name, key);\n this._items.set(item.serialized(), value);\n }\n }\n\n return this._items;\n }\n\n public ValueForItem(item: InkListItem) {\n if (!item.itemName) return 0;\n\n let intVal = this._itemNameToValues.get(item.itemName);\n if (typeof intVal !== \"undefined\") return intVal;\n else return 0;\n }\n public ContainsItem(item: InkListItem) {\n if (!item.itemName) return false;\n if (item.originName != this.name) return false;\n\n return this._itemNameToValues.has(item.itemName);\n }\n public ContainsItemWithName(itemName: string) {\n return this._itemNameToValues.has(itemName);\n }\n public TryGetItemWithValue(\n val: number,\n /* out */ item: InkListItem\n ): TryGetResult<InkListItem> {\n for (let [key, value] of this._itemNameToValues) {\n if (value == val) {\n item = new InkListItem(this.name, key);\n return { result: item, exists: true };\n }\n }\n\n item = InkListItem.Null;\n return { result: item, exists: false };\n }\n public TryGetValueForItem(\n item: InkListItem,\n /* out */ intVal: number\n ): TryGetResult<number> {\n if (!item.itemName) return { result: 0, exists: false };\n let value = this._itemNameToValues.get(item.itemName);\n\n if (!value) return { result: 0, exists: false };\n return { result: value, exists: true };\n }\n}\n", "import { InkListItem } from \"./InkList\";\nimport { ListValue } from \"./Value\";\nimport { ListDefinition } from \"./ListDefinition\";\nimport { TryGetResult } from \"./TryGetResult\";\nimport { throwNullException } from \"./NullException\";\n\nexport class ListDefinitionsOrigin {\n protected _lists: Map<string, ListDefinition>;\n protected _allUnambiguousListValueCache: Map<string, ListValue>;\n\n constructor(lists: ListDefinition[]) {\n this._lists = new Map();\n this._allUnambiguousListValueCache = new Map();\n\n for (let list of lists) {\n this._lists.set(list.name, list);\n\n for (let [key, val] of list.items) {\n let item = InkListItem.fromSerializedKey(key);\n let listValue = new ListValue(item, val);\n\n if (!item.itemName) {\n throw new Error(\"item.itemName is null or undefined.\");\n }\n\n this._allUnambiguousListValueCache.set(item.itemName, listValue);\n this._allUnambiguousListValueCache.set(item.fullName, listValue);\n }\n }\n }\n get lists(): ListDefinition[] {\n let listOfLists: ListDefinition[] = [];\n\n for (let [, value] of this._lists) {\n listOfLists.push(value);\n }\n\n return listOfLists;\n }\n public TryListGetDefinition(\n name: string | null,\n /* out */ def: ListDefinition | null\n ): TryGetResult<ListDefinition | null> {\n if (name === null) {\n return { result: def, exists: false };\n }\n // initially, this function returns a boolean and the second parameter is an out.\n let definition = this._lists.get(name);\n if (!definition) return { result: def, exists: false };\n\n return { result: definition, exists: true };\n }\n public FindSingleItemListWithName(name: string | null) {\n if (name === null) {\n return throwNullException(\"name\");\n }\n let val = this._allUnambiguousListValueCache.get(name);\n\n if (typeof val !== \"undefined\") {\n return val;\n }\n\n return null;\n }\n}\n", "import { Container } from \"./Container\";\nimport {\n Value,\n IntValue,\n FloatValue,\n StringValue,\n DivertTargetValue,\n VariablePointerValue,\n ListValue,\n BoolValue,\n} from \"./Value\";\nimport { Glue } from \"./Glue\";\nimport { ControlCommand } from \"./ControlCommand\";\nimport { PushPopType } from \"./PushPop\";\nimport { Divert } from \"./Divert\";\nimport { ChoicePoint } from \"./ChoicePoint\";\nimport { VariableReference } from \"./VariableReference\";\nimport { VariableAssignment } from \"./VariableAssignment\";\nimport { NativeFunctionCall } from \"./NativeFunctionCall\";\nimport { Void } from \"./Void\";\nimport { Tag } from \"./Tag\";\nimport { Path } from \"./Path\";\nimport { Choice } from \"./Choice\";\nimport { ListDefinition } from \"./ListDefinition\";\nimport { ListDefinitionsOrigin } from \"./ListDefinitionsOrigin\";\nimport { InkListItem, InkList } from \"./InkList\";\nimport { InkObject } from \"./Object\";\nimport { asOrNull } from \"./TypeAssertion\";\nimport { throwNullException } from \"./NullException\";\nimport { SimpleJson } from \"./SimpleJson\";\n\nexport class JsonSerialisation {\n public static JArrayToRuntimeObjList(\n jArray: any[],\n skipLast: boolean = false\n ) {\n let count = jArray.length;\n if (skipLast) count--;\n\n let list: InkObject[] = [];\n\n for (let i = 0; i < count; i++) {\n let jTok = jArray[i];\n let runtimeObj = this.JTokenToRuntimeObject(jTok);\n if (runtimeObj === null) {\n return throwNullException(\"runtimeObj\");\n }\n list.push(runtimeObj);\n }\n\n return list;\n }\n\n public static WriteDictionaryRuntimeObjs(\n writer: SimpleJson.Writer,\n dictionary: Map<string, InkObject>\n ) {\n writer.WriteObjectStart();\n for (let [key, value] of dictionary) {\n writer.WritePropertyStart(key);\n this.WriteRuntimeObject(writer, value);\n writer.WritePropertyEnd();\n }\n writer.WriteObjectEnd();\n }\n\n public static WriteListRuntimeObjs(\n writer: SimpleJson.Writer,\n list: InkObject[]\n ) {\n writer.WriteArrayStart();\n for (let value of list) {\n this.WriteRuntimeObject(writer, value);\n }\n writer.WriteArrayEnd();\n }\n\n public static WriteIntDictionary(\n writer: SimpleJson.Writer,\n dict: Map<string, number>\n ) {\n writer.WriteObjectStart();\n for (let [key, value] of dict) {\n writer.WriteIntProperty(key, value);\n }\n writer.WriteObjectEnd();\n }\n\n public static WriteRuntimeObject(\n writer: SimpleJson.Writer,\n obj: InkObject\n ): void {\n let container = asOrNull(obj, Container);\n if (container) {\n this.WriteRuntimeContainer(writer, container);\n return;\n }\n\n let divert = asOrNull(obj, Divert);\n if (divert) {\n let divTypeKey = \"->\";\n if (divert.isExternal) {\n divTypeKey = \"x()\";\n } else if (divert.pushesToStack) {\n if (divert.stackPushType == PushPopType.Function) {\n divTypeKey = \"f()\";\n } else if (divert.stackPushType == PushPopType.Tunnel) {\n divTypeKey = \"->t->\";\n }\n }\n\n let targetStr;\n if (divert.hasVariableTarget) {\n targetStr = divert.variableDivertName;\n } else {\n targetStr = divert.targetPathString;\n }\n\n writer.WriteObjectStart();\n writer.WriteProperty(divTypeKey, targetStr);\n\n if (divert.hasVariableTarget) {\n writer.WriteProperty(\"var\", true);\n }\n\n if (divert.isConditional) {\n writer.WriteProperty(\"c\", true);\n }\n\n if (divert.externalArgs > 0) {\n writer.WriteIntProperty(\"exArgs\", divert.externalArgs);\n }\n\n writer.WriteObjectEnd();\n return;\n }\n\n let choicePoint = asOrNull(obj, ChoicePoint);\n if (choicePoint) {\n writer.WriteObjectStart();\n writer.WriteProperty(\"*\", choicePoint.pathStringOnChoice);\n writer.WriteIntProperty(\"flg\", choicePoint.flags);\n writer.WriteObjectEnd();\n return;\n }\n\n let boolVal = asOrNull(obj, BoolValue);\n if (boolVal) {\n writer.WriteBool(boolVal.value);\n return;\n }\n\n let intVal = asOrNull(obj, IntValue);\n if (intVal) {\n writer.WriteInt(intVal.value);\n return;\n }\n\n let floatVal = asOrNull(obj, FloatValue);\n if (floatVal) {\n writer.WriteFloat(floatVal.value);\n return;\n }\n\n let strVal = asOrNull(obj, StringValue);\n if (strVal) {\n if (strVal.isNewline) {\n writer.Write(\"\\n\", false);\n } else {\n writer.WriteStringStart();\n writer.WriteStringInner(\"^\");\n writer.WriteStringInner(strVal.value);\n writer.WriteStringEnd();\n }\n return;\n }\n\n let listVal = asOrNull(obj, ListValue);\n if (listVal) {\n this.WriteInkList(writer, listVal);\n return;\n }\n\n let divTargetVal = asOrNull(obj, DivertTargetValue);\n if (divTargetVal) {\n writer.WriteObjectStart();\n if (divTargetVal.value === null) {\n return throwNullException(\"divTargetVal.value\");\n }\n writer.WriteProperty(\"^->\", divTargetVal.value.componentsString);\n writer.WriteObjectEnd();\n\n return;\n }\n\n let varPtrVal = asOrNull(obj, VariablePointerValue);\n if (varPtrVal) {\n writer.WriteObjectStart();\n writer.WriteProperty(\"^var\", varPtrVal.value);\n writer.WriteIntProperty(\"ci\", varPtrVal.contextIndex);\n writer.WriteObjectEnd();\n return;\n }\n\n let glue = asOrNull(obj, Glue);\n if (glue) {\n writer.Write(\"<>\");\n return;\n }\n\n let controlCmd = asOrNull(obj, ControlCommand);\n if (controlCmd) {\n writer.Write(\n JsonSerialisation._controlCommandNames[controlCmd.commandType]\n );\n return;\n }\n\n let nativeFunc = asOrNull(obj, NativeFunctionCall);\n if (nativeFunc) {\n let name = nativeFunc.name;\n\n if (name == \"^\") name = \"L^\";\n\n writer.Write(name);\n return;\n }\n\n let varRef = asOrNull(obj, VariableReference);\n if (varRef) {\n writer.WriteObjectStart();\n let readCountPath = varRef.pathStringForCount;\n if (readCountPath != null) {\n writer.WriteProperty(\"CNT?\", readCountPath);\n } else {\n writer.WriteProperty(\"VAR?\", varRef.name);\n }\n\n writer.WriteObjectEnd();\n return;\n }\n\n let varAss = asOrNull(obj, VariableAssignment);\n if (varAss) {\n writer.WriteObjectStart();\n\n let key = varAss.isGlobal ? \"VAR=\" : \"temp=\";\n writer.WriteProperty(key, varAss.variableName);\n\n // Reassignment?\n if (!varAss.isNewDeclaration) writer.WriteProperty(\"re\", true);\n\n writer.WriteObjectEnd();\n\n return;\n }\n\n let voidObj = asOrNull(obj, Void);\n if (voidObj) {\n writer.Write(\"void\");\n return;\n }\n\n let tag = asOrNull(obj, Tag);\n if (tag) {\n writer.WriteObjectStart();\n writer.WriteProperty(\"#\", tag.text);\n writer.WriteObjectEnd();\n return;\n }\n\n let choice = asOrNull(obj, Choice);\n if (choice) {\n this.WriteChoice(writer, choice);\n return;\n }\n\n throw new Error(\"Failed to convert runtime object to Json token: \" + obj);\n }\n\n public static JObjectToDictionaryRuntimeObjs(jObject: Record<string, any>) {\n let dict: Map<string, InkObject> = new Map();\n\n for (let key in jObject) {\n if (jObject.hasOwnProperty(key)) {\n let inkObject = this.JTokenToRuntimeObject(jObject[key]);\n if (inkObject === null) {\n return throwNullException(\"inkObject\");\n }\n dict.set(key, inkObject);\n }\n }\n\n return dict;\n }\n\n public static JObjectToIntDictionary(jObject: Record<string, any>) {\n let dict: Map<string, number> = new Map();\n for (let key in jObject) {\n if (jObject.hasOwnProperty(key)) {\n dict.set(key, parseInt(jObject[key]));\n }\n }\n return dict;\n }\n\n public static JTokenToRuntimeObject(token: any): InkObject | null {\n if (\n (typeof token === \"number\" && !isNaN(token)) ||\n typeof token === \"boolean\"\n ) {\n return Value.Create(token);\n }\n\n if (typeof token === \"string\") {\n let str = token.toString();\n\n // String value\n let firstChar = str[0];\n if (firstChar == \"^\") return new StringValue(str.substring(1));\n else if (firstChar == \"\\n\" && str.length == 1)\n return new StringValue(\"\\n\");\n\n // Glue\n if (str == \"<>\") return new Glue();\n\n // Control commands (would looking up in a hash set be faster?)\n for (let i = 0; i < JsonSerialisation._controlCommandNames.length; ++i) {\n let cmdName = JsonSerialisation._controlCommandNames[i];\n if (str == cmdName) {\n return new ControlCommand(i);\n }\n }\n\n // Native functions\n if (str == \"L^\") str = \"^\";\n if (NativeFunctionCall.CallExistsWithName(str))\n return NativeFunctionCall.CallWithName(str);\n\n // Pop\n if (str == \"->->\") return ControlCommand.PopTunnel();\n else if (str == \"~ret\") return ControlCommand.PopFunction();\n\n // Void\n if (str == \"void\") return new Void();\n }\n\n if (typeof token === \"object\" && !Array.isArray(token)) {\n let obj = token as Record<string, any>;\n let propValue;\n\n // Divert target value to path\n if (obj[\"^->\"]) {\n propValue = obj[\"^->\"];\n return new DivertTargetValue(new Path(propValue.toString()));\n }\n\n // VariablePointerValue\n if (obj[\"^var\"]) {\n propValue = obj[\"^var\"];\n let varPtr = new VariablePointerValue(propValue.toString());\n if (\"ci\" in obj) {\n propValue = obj[\"ci\"];\n varPtr.contextIndex = parseInt(propValue);\n }\n return varPtr;\n }\n\n // Divert\n let isDivert = false;\n let pushesToStack = false;\n let divPushType = PushPopType.Function;\n let external = false;\n if ((propValue = obj[\"->\"])) {\n isDivert = true;\n } else if ((propValue = obj[\"f()\"])) {\n isDivert = true;\n pushesToStack = true;\n divPushType = PushPopType.Function;\n } else if ((propValue = obj[\"->t->\"])) {\n isDivert = true;\n pushesToStack = true;\n divPushType = PushPopType.Tunnel;\n } else if ((propValue = obj[\"x()\"])) {\n isDivert = true;\n external = true;\n pushesToStack = false;\n divPushType = PushPopType.Function;\n }\n\n if (isDivert) {\n let divert = new Divert();\n divert.pushesToStack = pushesToStack;\n divert.stackPushType = divPushType;\n divert.isExternal = external;\n\n let target = propValue.toString();\n\n if ((propValue = obj[\"var\"])) divert.variableDivertName = target;\n else divert.targetPathString = target;\n\n divert.isConditional = !!obj[\"c\"];\n\n if (external) {\n if ((propValue = obj[\"exArgs\"]))\n divert.externalArgs = parseInt(propValue);\n }\n\n return divert;\n }\n\n // Choice\n if ((propValue = obj[\"*\"])) {\n let choice = new ChoicePoint();\n choice.pathStringOnChoice = propValue.toString();\n\n if ((propValue = obj[\"flg\"])) choice.flags = parseInt(propValue);\n\n return choice;\n }\n\n // Variable reference\n if ((propValue = obj[\"VAR?\"])) {\n return new VariableReference(propValue.toString());\n } else if ((propValue = obj[\"CNT?\"])) {\n let readCountVarRef = new VariableReference();\n readCountVarRef.pathStringForCount = propValue.toString();\n return readCountVarRef;\n }\n\n // Variable assignment\n let isVarAss = false;\n let isGlobalVar = false;\n if ((propValue = obj[\"VAR=\"])) {\n isVarAss = true;\n isGlobalVar = true;\n } else if ((propValue = obj[\"temp=\"])) {\n isVarAss = true;\n isGlobalVar = false;\n }\n if (isVarAss) {\n let varName = propValue.toString();\n let isNewDecl = !obj[\"re\"];\n let varAss = new VariableAssignment(varName, isNewDecl);\n varAss.isGlobal = isGlobalVar;\n return varAss;\n }\n if (obj[\"#\"] !== undefined) {\n propValue = obj[\"#\"];\n return new Tag(propValue.toString());\n }\n\n // List value\n if ((propValue = obj[\"list\"])) {\n // var listContent = (Dictionary<string, object>)propValue;\n let listContent = propValue as Record<string, any>;\n let rawList = new InkList();\n if ((propValue = obj[\"origins\"])) {\n // var namesAsObjs = (List<object>)propValue;\n let namesAsObjs = propValue as string[];\n // rawList.SetInitialOriginNames(namesAsObjs.Cast<string>().ToList());\n rawList.SetInitialOriginNames(namesAsObjs);\n }\n\n for (let key in listContent) {\n if (listContent.hasOwnProperty(key)) {\n let nameToVal = listContent[key];\n let item = new InkListItem(key);\n let val = parseInt(nameToVal);\n rawList.Add(item, val);\n }\n }\n\n return new ListValue(rawList);\n }\n\n if (obj[\"originalChoicePath\"] != null) return this.JObjectToChoice(obj);\n }\n\n // Array is always a Runtime.Container\n if (Array.isArray(token)) {\n return this.JArrayToContainer(token);\n }\n\n if (token === null || token === undefined) return null;\n\n throw new Error(\n \"Failed to convert token to runtime object: \" +\n this.toJson(token, [\"parent\"])\n );\n }\n\n public static toJson<T>(\n me: T,\n removes?: (keyof T)[],\n space?: number\n ): string {\n return JSON.stringify(\n me,\n (k, v) => (removes?.some((r) => r === k) ? undefined : v),\n space\n );\n }\n\n public static WriteRuntimeContainer(\n writer: SimpleJson.Writer,\n container: Container | null,\n withoutName: boolean = false\n ) {\n writer.WriteArrayStart();\n if (container === null) {\n return throwNullException(\"container\");\n }\n for (let c of container.content) this.WriteRuntimeObject(writer, c);\n\n let namedOnlyContent = container.namedOnlyContent;\n let countFlags = container.countFlags;\n let hasNameProperty = container.name != null && !withoutName;\n\n let hasTerminator =\n namedOnlyContent != null || countFlags > 0 || hasNameProperty;\n if (hasTerminator) {\n writer.WriteObjectStart();\n }\n\n if (namedOnlyContent != null) {\n for (let [key, value] of namedOnlyContent) {\n let name = key;\n let namedContainer = asOrNull(value, Container);\n writer.WritePropertyStart(name);\n this.WriteRuntimeContainer(writer, namedContainer, true);\n writer.WritePropertyEnd();\n }\n }\n\n if (countFlags > 0) writer.WriteIntProperty(\"#f\", countFlags);\n\n if (hasNameProperty) writer.WriteProperty(\"#n\", container.name);\n\n if (hasTerminator) writer.WriteObjectEnd();\n else writer.WriteNull();\n\n writer.WriteArrayEnd();\n }\n\n public static JArrayToContainer(jArray: any[]) {\n let container = new Container();\n container.content = this.JArrayToRuntimeObjList(jArray, true);\n\n let terminatingObj = jArray[jArray.length - 1] as Record<string, any>;\n if (terminatingObj != null) {\n let namedOnlyContent = new Map();\n\n for (let key in terminatingObj) {\n if (key == \"#f\") {\n container.countFlags = parseInt(terminatingObj[key]);\n } else if (key == \"#n\") {\n container.name = terminatingObj[key].toString();\n } else {\n let namedContentItem = this.JTokenToRuntimeObject(\n terminatingObj[key]\n );\n // var namedSubContainer = namedContentItem as Container;\n let namedSubContainer = asOrNull(namedContentItem, Container);\n if (namedSubContainer) namedSubContainer.name = key;\n namedOnlyContent.set(key, namedContentItem);\n }\n }\n\n container.namedOnlyContent = namedOnlyContent;\n }\n\n return container;\n }\n\n public static JObjectToChoice(jObj: Record<string, any>) {\n let choice = new Choice();\n choice.text = jObj[\"text\"].toString();\n choice.index = parseInt(jObj[\"index\"]);\n choice.sourcePath = jObj[\"originalChoicePath\"].toString();\n choice.originalThreadIndex = parseInt(jObj[\"originalThreadIndex\"]);\n choice.pathStringOnChoice = jObj[\"targetPath\"].toString();\n if (jObj[\"tags\"]) {\n choice.tags = jObj[\"tags\"];\n }\n return choice;\n }\n\n public static WriteChoice(writer: SimpleJson.Writer, choice: Choice) {\n writer.WriteObjectStart();\n writer.WriteProperty(\"text\", choice.text);\n writer.WriteIntProperty(\"index\", choice.index);\n writer.WriteProperty(\"originalChoicePath\", choice.sourcePath);\n writer.WriteIntProperty(\"originalThreadIndex\", choice.originalThreadIndex);\n writer.WriteProperty(\"targetPath\", choice.pathStringOnChoice);\n if (choice.tags) {\n writer.WriteProperty(\"tags\", (w) => {\n w.WriteArrayStart();\n for (const tag of choice.tags!) {\n w.WriteStringStart();\n w.WriteStringInner(tag);\n w.WriteStringEnd();\n }\n w.WriteArrayEnd();\n });\n }\n writer.WriteObjectEnd();\n }\n\n public static WriteInkList(writer: SimpleJson.Writer, listVal: ListValue) {\n let rawList = listVal.value;\n if (rawList === null) {\n return throwNullException(\"rawList\");\n }\n\n writer.WriteObjectStart();\n writer.WritePropertyStart(\"list\");\n writer.WriteObjectStart();\n\n for (let [key, val] of rawList) {\n let item = InkListItem.fromSerializedKey(key);\n let itemVal = val;\n\n if (item.itemName === null) {\n return throwNullException(\"item.itemName\");\n }\n\n writer.WritePropertyNameStart();\n writer.WritePropertyNameInner(item.originName ? item.originName : \"?\");\n writer.WritePropertyNameInner(\".\");\n writer.WritePropertyNameInner(item.itemName);\n writer.WritePropertyNameEnd();\n\n writer.Write(itemVal);\n\n writer.WritePropertyEnd();\n }\n\n writer.WriteObjectEnd();\n\n writer.WritePropertyEnd();\n\n if (\n rawList.Count == 0 &&\n rawList.originNames != null &&\n rawList.originNames.length > 0\n ) {\n writer.WritePropertyStart(\"origins\");\n writer.WriteArrayStart();\n for (let name of rawList.originNames) writer.Write(name);\n writer.WriteArrayEnd();\n writer.WritePropertyEnd();\n }\n\n writer.WriteObjectEnd();\n }\n\n public static ListDefinitionsToJToken(origin: ListDefinitionsOrigin) {\n let result: Record<string, any> = {};\n\n for (let def of origin.lists) {\n let listDefJson: Record<string, any> = {};\n\n for (let [key, val] of def.items) {\n let item = InkListItem.fromSerializedKey(key);\n if (item.itemName === null) {\n return throwNullException(\"item.itemName\");\n }\n listDefJson[item.itemName] = val;\n }\n\n result[def.name] = listDefJson;\n }\n\n return result;\n }\n\n public static JTokenToListDefinitions(obj: Record<string, any>) {\n // var defsObj = (Dictionary<string, object>)obj;\n let defsObj = obj;\n\n let allDefs: ListDefinition[] = [];\n\n for (let key in defsObj) {\n if (defsObj.hasOwnProperty(key)) {\n let name = key.toString();\n // var listDefJson = (Dictionary<string, object>)kv.Value;\n let listDefJson = defsObj[key] as Record<string, any>;\n\n // Cast (string, object) to (string, int) for items\n let items: Map<string, number> = new Map();\n\n for (let nameValueKey in listDefJson) {\n if (defsObj.hasOwnProperty(key)) {\n let nameValue = listDefJson[nameValueKey];\n items.set(nameValueKey, parseInt(nameValue));\n }\n }\n\n let def = new ListDefinition(name, items);\n allDefs.push(def);\n }\n }\n\n return new ListDefinitionsOrigin(allDefs);\n }\n\n private static _controlCommandNames = (() => {\n let _controlCommandNames: string[] = [];\n\n _controlCommandNames[ControlCommand.CommandType.EvalStart] = \"ev\";\n _controlCommandNames[ControlCommand.CommandType.EvalOutput] = \"out\";\n _controlCommandNames[ControlCommand.CommandType.EvalEnd] = \"/ev\";\n _controlCommandNames[ControlCommand.CommandType.Duplicate] = \"du\";\n _controlCommandNames[ControlCommand.CommandType.PopEvaluatedValue] = \"pop\";\n _controlCommandNames[ControlCommand.CommandType.PopFunction] = \"~ret\";\n _controlCommandNames[ControlCommand.CommandType.PopTunnel] = \"->->\";\n _controlCommandNames[ControlCommand.CommandType.BeginString] = \"str\";\n _controlCommandNames[ControlCommand.CommandType.EndString] = \"/str\";\n _controlCommandNames[ControlCommand.CommandType.NoOp] = \"nop\";\n _controlCommandNames[ControlCommand.CommandType.ChoiceCount] = \"choiceCnt\";\n _controlCommandNames[ControlCommand.CommandType.Turns] = \"turn\";\n _controlCommandNames[ControlCommand.CommandType.TurnsSince] = \"turns\";\n _controlCommandNames[ControlCommand.CommandType.ReadCount] = \"readc\";\n _controlCommandNames[ControlCommand.CommandType.Random] = \"rnd\";\n _controlCommandNames[ControlCommand.CommandType.SeedRandom] = \"srnd\";\n _controlCommandNames[ControlCommand.CommandType.VisitIndex] = \"visit\";\n _controlCommandNames[ControlCommand.CommandType.SequenceShuffleIndex] =\n \"seq\";\n _controlCommandNames[ControlCommand.CommandType.StartThread] = \"thread\";\n _controlCommandNames[ControlCommand.CommandType.Done] = \"done\";\n _controlCommandNames[ControlCommand.CommandType.End] = \"end\";\n _controlCommandNames[ControlCommand.CommandType.ListFromInt] = \"listInt\";\n _controlCommandNames[ControlCommand.CommandType.ListRange] = \"range\";\n _controlCommandNames[ControlCommand.CommandType.ListRandom] = \"lrnd\";\n _controlCommandNames[ControlCommand.CommandType.BeginTag] = \"#\";\n _controlCommandNames[ControlCommand.CommandType.EndTag] = \"/#\";\n\n for (let i = 0; i < ControlCommand.CommandType.TOTAL_VALUES; ++i) {\n if (_controlCommandNames[i] == null)\n throw new Error(\"Control command not accounted for in serialisation\");\n }\n\n return _controlCommandNames;\n })();\n}\n", "import { PushPopType } from \"./PushPop\";\nimport { Path } from \"./Path\";\nimport { Story } from \"./Story\";\nimport { JsonSerialisation } from \"./JsonSerialisation\";\nimport { ListValue } from \"./Value\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { Pointer } from \"./Pointer\";\nimport { InkObject } from \"./Object\";\nimport { Debug } from \"./Debug\";\nimport { tryGetValueFromMap } from \"./TryGetResult\";\nimport { throwNullException } from \"./NullException\";\nimport { SimpleJson } from \"./SimpleJson\";\n\nexport class CallStack {\n get elements() {\n return this.callStack;\n }\n\n get depth() {\n return this.elements.length;\n }\n\n get currentElement() {\n let thread = this._threads[this._threads.length - 1];\n let cs = thread.callstack;\n return cs[cs.length - 1];\n }\n\n get currentElementIndex() {\n return this.callStack.length - 1;\n }\n\n get currentThread(): CallStack.Thread {\n return this._threads[this._threads.length - 1];\n }\n set currentThread(value: CallStack.Thread) {\n Debug.Assert(\n this._threads.length == 1,\n \"Shouldn't be directly setting the current thread when we have a stack of them\"\n );\n\n this._threads.length = 0;\n this._threads.push(value);\n }\n\n get canPop() {\n return this.callStack.length > 1;\n }\n\n constructor(storyContext: Story);\n constructor(toCopy: CallStack);\n constructor() {\n if (arguments[0] instanceof Story) {\n let storyContext = arguments[0] as Story;\n\n this._startOfRoot = Pointer.StartOf(storyContext.rootContentContainer);\n this.Reset();\n } else {\n let toCopy = arguments[0] as CallStack;\n\n this._threads = [];\n for (let otherThread of toCopy._threads) {\n this._threads.push(otherThread.Copy());\n }\n this._threadCounter = toCopy._threadCounter;\n this._startOfRoot = toCopy._startOfRoot.copy();\n }\n }\n\n public Reset() {\n this._threads = [];\n this._threads.push(new CallStack.Thread());\n\n this._threads[0].callstack.push(\n new CallStack.Element(PushPopType.Tunnel, this._startOfRoot)\n );\n }\n\n public SetJsonToken(jObject: Record<string, any>, storyContext: Story) {\n this._threads.length = 0;\n\n // TODO: (List<object>) jObject [\"threads\"];\n let jThreads: any[] = jObject[\"threads\"];\n\n for (let jThreadTok of jThreads) {\n // TODO: var jThreadObj = (Dictionary<string, object>)jThreadTok;\n let jThreadObj = jThreadTok;\n let thread = new CallStack.Thread(jThreadObj, storyContext);\n this._threads.push(thread);\n }\n\n // TODO: (int)jObject [\"threadCounter\"];\n this._threadCounter = parseInt(jObject[\"threadCounter\"]);\n this._startOfRoot = Pointer.StartOf(storyContext.rootContentContainer);\n }\n public WriteJson(w: SimpleJson.Writer) {\n w.WriteObject((writer) => {\n writer.WritePropertyStart(\"threads\");\n writer.WriteArrayStart();\n\n for (let thread of this._threads) {\n thread.WriteJson(writer);\n }\n\n writer.WriteArrayEnd();\n writer.WritePropertyEnd();\n\n writer.WritePropertyStart(\"threadCounter\");\n writer.WriteInt(this._threadCounter);\n writer.WritePropertyEnd();\n });\n }\n\n public PushThread() {\n let newThread = this.currentThread.Copy();\n this._threadCounter++;\n newThread.threadIndex = this._threadCounter;\n this._threads.push(newThread);\n }\n\n public ForkThread() {\n let forkedThread = this.currentThread.Copy();\n this._threadCounter++;\n forkedThread.threadIndex = this._threadCounter;\n return forkedThread;\n }\n\n public PopThread() {\n if (this.canPopThread) {\n this._threads.splice(this._threads.indexOf(this.currentThread), 1); // should be equivalent to a pop()\n } else {\n throw new Error(\"Can't pop thread\");\n }\n }\n\n get canPopThread() {\n return this._threads.length > 1 && !this.elementIsEvaluateFromGame;\n }\n\n get elementIsEvaluateFromGame() {\n return this.currentElement.type == PushPopType.FunctionEvaluationFromGame;\n }\n\n public Push(\n type: PushPopType,\n externalEvaluationStackHeight: number = 0,\n outputStreamLengthWithPushed: number = 0\n ) {\n let element = new CallStack.Element(\n type,\n this.currentElement.currentPointer,\n false\n );\n\n element.evaluationStackHeightWhenPushed = externalEvaluationStackHeight;\n element.functionStartInOutputStream = outputStreamLengthWithPushed;\n\n this.callStack.push(element);\n }\n\n public CanPop(type: PushPopType | null = null) {\n if (!this.canPop) return false;\n\n if (type == null) return true;\n\n return this.currentElement.type == type;\n }\n\n public Pop(type: PushPopType | null = null) {\n if (this.CanPop(type)) {\n this.callStack.pop();\n return;\n } else {\n throw new Error(\"Mismatched push/pop in Callstack\");\n }\n }\n\n public GetTemporaryVariableWithName(\n name: string | null,\n contextIndex: number = -1\n ) {\n if (contextIndex == -1) contextIndex = this.currentElementIndex + 1;\n\n let contextElement = this.callStack[contextIndex - 1];\n\n let varValue = tryGetValueFromMap(\n contextElement.temporaryVariables,\n name,\n null\n );\n if (varValue.exists) {\n return varValue.result;\n } else {\n return null;\n }\n }\n\n public SetTemporaryVariable(\n name: string,\n value: any,\n declareNew: boolean,\n contextIndex: number = -1\n ) {\n if (contextIndex == -1) contextIndex = this.currentElementIndex + 1;\n\n let contextElement = this.callStack[contextIndex - 1];\n\n if (!declareNew && !contextElement.temporaryVariables.get(name)) {\n throw new Error(\"Could not find temporary variable to set: \" + name);\n }\n\n let oldValue = tryGetValueFromMap(\n contextElement.temporaryVariables,\n name,\n null\n );\n if (oldValue.exists)\n ListValue.RetainListOriginsForAssignment(oldValue.result, value);\n\n contextElement.temporaryVariables.set(name, value);\n }\n\n public ContextForVariableNamed(name: string) {\n if (this.currentElement.temporaryVariables.get(name)) {\n return this.currentElementIndex + 1;\n } else {\n return 0;\n }\n }\n\n public ThreadWithIndex(index: number) {\n let filtered = this._threads.filter((t) => {\n if (t.threadIndex == index) return t;\n });\n\n return filtered.length > 0 ? filtered[0] : null;\n }\n\n get callStack() {\n return this.currentThread.callstack;\n }\n\n get callStackTrace() {\n let sb = new StringBuilder();\n\n for (let t = 0; t < this._threads.length; t++) {\n let thread = this._threads[t];\n let isCurrent = t == this._threads.length - 1;\n sb.AppendFormat(\n \"=== THREAD {0}/{1} {2}===\\n\",\n t + 1,\n this._threads.length,\n isCurrent ? \"(current) \" : \"\"\n );\n\n for (let i = 0; i < thread.callstack.length; i++) {\n if (thread.callstack[i].type == PushPopType.Function)\n sb.Append(\" [FUNCTION] \");\n else sb.Append(\" [TUNNEL] \");\n\n let pointer = thread.callstack[i].currentPointer;\n if (!pointer.isNull) {\n sb.Append(\"<SOMEWHERE IN \");\n if (pointer.container === null) {\n return throwNullException(\"pointer.container\");\n }\n sb.Append(pointer.container.path.toString());\n sb.AppendLine(\">\");\n }\n }\n }\n\n return sb.toString();\n }\n\n public _threads!: CallStack.Thread[]; // Banged because it's initialized in Reset().\n public _threadCounter: number = 0;\n public _startOfRoot: Pointer = Pointer.Null;\n}\n\nexport namespace CallStack {\n export class Element {\n public currentPointer: Pointer;\n public inExpressionEvaluation: boolean;\n public temporaryVariables: Map<string, InkObject>;\n public type: PushPopType;\n\n public evaluationStackHeightWhenPushed: number = 0;\n public functionStartInOutputStream: number = 0;\n\n constructor(\n type: PushPopType,\n pointer: Pointer,\n inExpressionEvaluation: boolean = false\n ) {\n this.currentPointer = pointer.copy();\n this.inExpressionEvaluation = inExpressionEvaluation;\n this.temporaryVariables = new Map();\n this.type = type;\n }\n\n public Copy() {\n let copy = new Element(\n this.type,\n this.currentPointer,\n this.inExpressionEvaluation\n );\n copy.temporaryVariables = new Map(this.temporaryVariables);\n copy.evaluationStackHeightWhenPushed =\n this.evaluationStackHeightWhenPushed;\n copy.functionStartInOutputStream = this.functionStartInOutputStream;\n return copy;\n }\n }\n\n export class Thread {\n public callstack: Element[];\n public threadIndex: number = 0;\n public previousPointer: Pointer = Pointer.Null;\n\n constructor();\n constructor(jThreadObj: any, storyContext: Story);\n constructor() {\n this.callstack = [];\n\n if (arguments[0] && arguments[1]) {\n let jThreadObj = arguments[0];\n let storyContext = arguments[1];\n\n // TODO: (int) jThreadObj['threadIndex'] can raise;\n this.threadIndex = parseInt(jThreadObj[\"threadIndex\"]);\n\n let jThreadCallstack = jThreadObj[\"callstack\"];\n\n for (let jElTok of jThreadCallstack) {\n let jElementObj = jElTok;\n\n // TODO: (int) jElementObj['type'] can raise;\n let pushPopType: PushPopType = parseInt(jElementObj[\"type\"]);\n\n let pointer = Pointer.Null;\n\n let currentContainerPathStr: string;\n // TODO: jElementObj.TryGetValue (\"cPath\", out currentContainerPathStrToken);\n let currentContainerPathStrToken = jElementObj[\"cPath\"];\n if (typeof currentContainerPathStrToken !== \"undefined\") {\n currentContainerPathStr = currentContainerPathStrToken.toString();\n\n let threadPointerResult = storyContext.ContentAtPath(\n new Path(currentContainerPathStr)\n );\n pointer.container = threadPointerResult.container;\n pointer.index = parseInt(jElementObj[\"idx\"]);\n\n if (threadPointerResult.obj == null)\n throw new Error(\n \"When loading state, internal story location couldn't be found: \" +\n currentContainerPathStr +\n \". Has the story changed since this save data was created?\"\n );\n else if (threadPointerResult.approximate) {\n if (pointer.container === null) {\n return throwNullException(\"pointer.container\");\n }\n storyContext.Warning(\n \"When loading state, exact internal story location couldn't be found: '\" +\n currentContainerPathStr +\n \"', so it was approximated to '\" +\n pointer.container.path.toString() +\n \"' to recover. Has the story changed since this save data was created?\"\n );\n }\n }\n\n let inExpressionEvaluation = !!jElementObj[\"exp\"];\n\n let el = new Element(pushPopType, pointer, inExpressionEvaluation);\n\n let temps = jElementObj[\"temp\"];\n if (typeof temps !== \"undefined\") {\n el.temporaryVariables =\n JsonSerialisation.JObjectToDictionaryRuntimeObjs(temps);\n } else {\n el.temporaryVariables.clear();\n }\n\n this.callstack.push(el);\n }\n\n let prevContentObjPath = jThreadObj[\"previousContentObject\"];\n if (typeof prevContentObjPath !== \"undefined\") {\n let prevPath = new Path(prevContentObjPath.toString());\n this.previousPointer = storyContext.PointerAtPath(prevPath);\n }\n }\n }\n\n public Copy() {\n let copy = new Thread();\n copy.threadIndex = this.threadIndex;\n for (let e of this.callstack) {\n copy.callstack.push(e.Copy());\n }\n copy.previousPointer = this.previousPointer.copy();\n return copy;\n }\n\n public WriteJson(writer: SimpleJson.Writer) {\n writer.WriteObjectStart();\n\n writer.WritePropertyStart(\"callstack\");\n writer.WriteArrayStart();\n for (let el of this.callstack) {\n writer.WriteObjectStart();\n if (!el.currentPointer.isNull) {\n if (el.currentPointer.container === null) {\n return throwNullException(\"el.currentPointer.container\");\n }\n writer.WriteProperty(\n \"cPath\",\n el.currentPointer.container.path.componentsString\n );\n writer.WriteIntProperty(\"idx\", el.currentPointer.index);\n }\n\n writer.WriteProperty(\"exp\", el.inExpressionEvaluation);\n writer.WriteIntProperty(\"type\", el.type);\n\n if (el.temporaryVariables.size > 0) {\n writer.WritePropertyStart(\"temp\");\n JsonSerialisation.WriteDictionaryRuntimeObjs(\n writer,\n el.temporaryVariables\n );\n writer.WritePropertyEnd();\n }\n\n writer.WriteObjectEnd();\n }\n writer.WriteArrayEnd();\n writer.WritePropertyEnd();\n\n writer.WriteIntProperty(\"threadIndex\", this.threadIndex);\n\n if (!this.previousPointer.isNull) {\n let resolvedPointer = this.previousPointer.Resolve();\n if (resolvedPointer === null) {\n return throwNullException(\"this.previousPointer.Resolve()\");\n }\n writer.WriteProperty(\n \"previousContentObject\",\n resolvedPointer.path.toString()\n );\n }\n\n writer.WriteObjectEnd();\n }\n }\n}\n", "import {\n AbstractValue,\n Value,\n VariablePointerValue,\n ListValue,\n IntValue,\n FloatValue,\n BoolValue,\n} from \"./Value\";\nimport { VariableAssignment } from \"./VariableAssignment\";\nimport { InkObject } from \"./Object\";\nimport { ListDefinitionsOrigin } from \"./ListDefinitionsOrigin\";\nimport { StoryException } from \"./StoryException\";\nimport { JsonSerialisation } from \"./JsonSerialisation\";\nimport { asOrThrows, asOrNull, isEquatable } from \"./TypeAssertion\";\nimport { tryGetValueFromMap } from \"./TryGetResult\";\nimport { throwNullException } from \"./NullException\";\nimport { CallStack } from \"./CallStack\";\nimport { StatePatch } from \"./StatePatch\";\nimport { SimpleJson } from \"./SimpleJson\";\nimport { InkList } from \"./Story\";\nimport { Path } from \"./Path\";\n\n// Fake class wrapper around VariableState to have correct typing\n// when using the Proxy syntax in typescript\nfunction VariablesStateAccessor<T>(): new () => Pick<T, keyof T> {\n return class {} as any;\n}\n\ntype VariableStateValue = boolean | string | number | InkList | Path | null;\n\nexport class VariablesState extends VariablesStateAccessor<\n Record<string, any>\n>() {\n // The way variableChangedEvent is a bit different than the reference implementation.\n // Originally it uses the C# += operator to add delegates, but in js we need to maintain\n // an actual collection of delegates (ie. callbacks) to register a new one, there is a\n // special ObserveVariableChange method below.\n public variableChangedEventCallbacks: Array<\n (variableName: string, newValue: InkObject) => void\n > = [];\n public variableChangedEvent(variableName: string, newValue: InkObject): void {\n for (let callback of this.variableChangedEventCallbacks) {\n callback(variableName, newValue);\n }\n }\n\n public patch: StatePatch | null = null;\n\n get batchObservingVariableChanges() {\n return this._batchObservingVariableChanges;\n }\n set batchObservingVariableChanges(value: boolean) {\n this._batchObservingVariableChanges = value;\n if (value) {\n this._changedVariablesForBatchObs = new Set();\n } else {\n if (this._changedVariablesForBatchObs != null) {\n for (let variableName of this._changedVariablesForBatchObs) {\n let currentValue = this._globalVariables.get(variableName);\n if (!currentValue) {\n throwNullException(\"currentValue\");\n } else {\n this.variableChangedEvent(variableName, currentValue);\n }\n }\n\n this._changedVariablesForBatchObs = null;\n }\n }\n }\n\n get callStack() {\n return this._callStack;\n }\n set callStack(callStack) {\n this._callStack = callStack;\n }\n\n private _batchObservingVariableChanges: boolean = false;\n\n // the original code uses a magic getter and setter for global variables,\n // allowing things like variableState['varname]. This is not quite possible\n // in js without a Proxy, so it is replaced with this $ function.\n public $(variableName: string): VariableStateValue;\n public $(variableName: string, value: VariableStateValue): void;\n public $(variableName: string, value?: any) {\n if (typeof value === \"undefined\") {\n let varContents = null;\n\n if (this.patch !== null) {\n varContents = this.patch.TryGetGlobal(variableName, null);\n if (varContents.exists)\n return (varContents.result as AbstractValue).valueObject;\n }\n\n varContents = this._globalVariables.get(variableName);\n\n if (typeof varContents === \"undefined\") {\n varContents = this._defaultGlobalVariables.get(variableName);\n }\n\n if (typeof varContents !== \"undefined\")\n return (varContents as AbstractValue).valueObject;\n else return null;\n } else {\n if (typeof this._defaultGlobalVariables.get(variableName) === \"undefined\")\n throw new StoryException(\n \"Cannot assign to a variable (\" +\n variableName +\n \") that hasn't been declared in the story\"\n );\n\n let val = Value.Create(value);\n if (val == null) {\n if (value == null) {\n throw new Error(\"Cannot pass null to VariableState\");\n } else {\n throw new Error(\n \"Invalid value passed to VariableState: \" + value.toString()\n );\n }\n }\n\n this.SetGlobal(variableName, val);\n }\n }\n\n constructor(\n callStack: CallStack,\n listDefsOrigin: ListDefinitionsOrigin | null\n ) {\n super();\n this._globalVariables = new Map();\n this._callStack = callStack;\n this._listDefsOrigin = listDefsOrigin;\n\n // if es6 proxies are available, use them.\n try {\n // the proxy is used to allow direct manipulation of global variables.\n // It first tries to access the objects own property, and if none is\n // found it delegates the call to the $ method, defined below\n let p = new Proxy(this, {\n get(target: any, name) {\n return name in target ? target[name] : target.$(name);\n },\n set(target: any, name, value) {\n if (name in target) target[name] = value;\n else target.$(name, value);\n return true; // returning a falsy value make the trap fail\n },\n });\n\n return p;\n } catch (e) {\n // the proxy object is not available in this context. we should warn the\n // dev but writing to the console feels a bit intrusive.\n // console.log(\"ES6 Proxy not available - direct manipulation of global variables can't work, use $() instead.\");\n }\n }\n\n public ApplyPatch() {\n if (this.patch === null) {\n return throwNullException(\"this.patch\");\n }\n\n for (let [namedVarKey, namedVarValue] of this.patch.globals) {\n this._globalVariables.set(namedVarKey, namedVarValue);\n }\n\n if (this._changedVariablesForBatchObs !== null) {\n for (let name of this.patch.changedVariables) {\n this._changedVariablesForBatchObs.add(name);\n }\n }\n\n this.patch = null;\n }\n\n public SetJsonToken(jToken: Record<string, any>) {\n this._globalVariables.clear();\n\n for (let [varValKey, varValValue] of this._defaultGlobalVariables) {\n let loadedToken = jToken[varValKey];\n if (typeof loadedToken !== \"undefined\") {\n let tokenInkObject =\n JsonSerialisation.JTokenToRuntimeObject(loadedToken);\n if (tokenInkObject === null) {\n return throwNullException(\"tokenInkObject\");\n }\n this._globalVariables.set(varValKey, tokenInkObject);\n } else {\n this._globalVariables.set(varValKey, varValValue);\n }\n }\n }\n\n public static dontSaveDefaultValues: boolean = true;\n\n public WriteJson(writer: SimpleJson.Writer) {\n writer.WriteObjectStart();\n for (let [keyValKey, keyValValue] of this._globalVariables) {\n let name = keyValKey;\n let val = keyValValue;\n\n if (VariablesState.dontSaveDefaultValues) {\n if (this._defaultGlobalVariables.has(name)) {\n let defaultVal = this._defaultGlobalVariables.get(name)!;\n if (this.RuntimeObjectsEqual(val, defaultVal)) continue;\n }\n }\n\n writer.WritePropertyStart(name);\n JsonSerialisation.WriteRuntimeObject(writer, val);\n writer.WritePropertyEnd();\n }\n writer.WriteObjectEnd();\n }\n\n public RuntimeObjectsEqual(\n obj1: InkObject | null,\n obj2: InkObject | null\n ): boolean {\n if (obj1 === null) {\n return throwNullException(\"obj1\");\n }\n if (obj2 === null) {\n return throwNullException(\"obj2\");\n }\n\n if (obj1.constructor !== obj2.constructor) return false;\n\n let boolVal = asOrNull(obj1, BoolValue);\n if (boolVal !== null) {\n return boolVal.value === asOrThrows(obj2, BoolValue).value;\n }\n\n let intVal = asOrNull(obj1, IntValue);\n if (intVal !== null) {\n return intVal.value === asOrThrows(obj2, IntValue).value;\n }\n\n let floatVal = asOrNull(obj1, FloatValue);\n if (floatVal !== null) {\n return floatVal.value === asOrThrows(obj2, FloatValue).value;\n }\n\n let val1 = asOrNull(obj1, Value);\n let val2 = asOrNull(obj2, Value);\n if (val1 !== null && val2 !== null) {\n if (isEquatable(val1.valueObject) && isEquatable(val2.valueObject)) {\n return val1.valueObject.Equals(val2.valueObject);\n } else {\n return val1.valueObject === val2.valueObject;\n }\n }\n\n throw new Error(\n \"FastRoughDefinitelyEquals: Unsupported runtime object type: \" +\n obj1.constructor.name\n );\n }\n\n public GetVariableWithName(\n name: string | null,\n contextIndex: number = -1\n ): InkObject | null {\n let varValue = this.GetRawVariableWithName(name, contextIndex);\n\n // var varPointer = varValue as VariablePointerValue;\n let varPointer = asOrNull(varValue, VariablePointerValue);\n if (varPointer !== null) {\n varValue = this.ValueAtVariablePointer(varPointer);\n }\n\n return varValue;\n }\n\n public TryGetDefaultVariableValue(name: string | null): InkObject | null {\n let val = tryGetValueFromMap(this._defaultGlobalVariables, name, null);\n return val.exists ? val.result : null;\n }\n\n public GlobalVariableExistsWithName(name: string) {\n return (\n this._globalVariables.has(name) ||\n (this._defaultGlobalVariables !== null &&\n this._defaultGlobalVariables.has(name))\n );\n }\n\n public GetRawVariableWithName(name: string | null, contextIndex: number) {\n let varValue: InkObject | null = null;\n\n if (contextIndex == 0 || contextIndex == -1) {\n let variableValue = null;\n if (this.patch !== null) {\n variableValue = this.patch.TryGetGlobal(name, null);\n if (variableValue.exists) return variableValue.result!;\n }\n\n // this is a conditional assignment\n variableValue = tryGetValueFromMap(this._globalVariables, name, null);\n if (variableValue.exists) return variableValue.result;\n\n if (this._defaultGlobalVariables !== null) {\n variableValue = tryGetValueFromMap(\n this._defaultGlobalVariables,\n name,\n null\n );\n if (variableValue.exists) return variableValue.result;\n }\n\n if (this._listDefsOrigin === null)\n return throwNullException(\"VariablesState._listDefsOrigin\");\n let listItemValue = this._listDefsOrigin.FindSingleItemListWithName(name);\n if (listItemValue) return listItemValue;\n }\n\n varValue = this._callStack.GetTemporaryVariableWithName(name, contextIndex);\n\n return varValue;\n }\n\n public ValueAtVariablePointer(pointer: VariablePointerValue) {\n return this.GetVariableWithName(pointer.variableName, pointer.contextIndex);\n }\n\n public Assign(varAss: VariableAssignment, value: InkObject) {\n let name = varAss.variableName;\n if (name === null) {\n return throwNullException(\"name\");\n }\n let contextIndex = -1;\n\n let setGlobal = false;\n if (varAss.isNewDeclaration) {\n setGlobal = varAss.isGlobal;\n } else {\n setGlobal = this.GlobalVariableExistsWithName(name);\n }\n\n if (varAss.isNewDeclaration) {\n // var varPointer = value as VariablePointerValue;\n let varPointer = asOrNull(value, VariablePointerValue);\n if (varPointer !== null) {\n let fullyResolvedVariablePointer =\n this.ResolveVariablePointer(varPointer);\n value = fullyResolvedVariablePointer;\n }\n } else {\n let existingPointer = null;\n do {\n // existingPointer = GetRawVariableWithName (name, contextIndex) as VariablePointerValue;\n existingPointer = asOrNull(\n this.GetRawVariableWithName(name, contextIndex),\n VariablePointerValue\n );\n if (existingPointer != null) {\n name = existingPointer.variableName;\n contextIndex = existingPointer.contextIndex;\n setGlobal = contextIndex == 0;\n }\n } while (existingPointer != null);\n }\n\n if (setGlobal) {\n this.SetGlobal(name, value);\n } else {\n this._callStack.SetTemporaryVariable(\n name,\n value,\n varAss.isNewDeclaration,\n contextIndex\n );\n }\n }\n\n public SnapshotDefaultGlobals() {\n this._defaultGlobalVariables = new Map(this._globalVariables);\n }\n\n public RetainListOriginsForAssignment(\n oldValue: InkObject,\n newValue: InkObject\n ) {\n let oldList = asOrThrows(oldValue, ListValue);\n let newList = asOrThrows(newValue, ListValue);\n\n if (oldList.value && newList.value && newList.value.Count == 0) {\n newList.value.SetInitialOriginNames(oldList.value.originNames);\n }\n }\n\n public SetGlobal(variableName: string | null, value: InkObject) {\n let oldValue = null;\n\n if (this.patch === null) {\n oldValue = tryGetValueFromMap(this._globalVariables, variableName, null);\n }\n\n if (this.patch !== null) {\n oldValue = this.patch.TryGetGlobal(variableName, null);\n if (!oldValue.exists) {\n oldValue = tryGetValueFromMap(\n this._globalVariables,\n variableName,\n null\n );\n }\n }\n\n ListValue.RetainListOriginsForAssignment(oldValue!.result!, value);\n\n if (variableName === null) {\n return throwNullException(\"variableName\");\n }\n\n if (this.patch !== null) {\n this.patch.SetGlobal(variableName, value);\n } else {\n this._globalVariables.set(variableName, value);\n }\n\n // TODO: Not sure !== is equivalent to !value.Equals(oldValue)\n if (\n this.variableChangedEvent !== null &&\n oldValue !== null &&\n value !== oldValue.result\n ) {\n if (this.batchObservingVariableChanges) {\n if (this._changedVariablesForBatchObs === null) {\n return throwNullException(\"this._changedVariablesForBatchObs\");\n }\n\n if (this.patch !== null) {\n this.patch.AddChangedVariable(variableName);\n } else if (this._changedVariablesForBatchObs !== null) {\n this._changedVariablesForBatchObs.add(variableName);\n }\n } else {\n this.variableChangedEvent(variableName, value);\n }\n }\n }\n\n public ResolveVariablePointer(varPointer: VariablePointerValue) {\n let contextIndex = varPointer.contextIndex;\n\n if (contextIndex == -1)\n contextIndex = this.GetContextIndexOfVariableNamed(\n varPointer.variableName\n );\n\n let valueOfVariablePointedTo = this.GetRawVariableWithName(\n varPointer.variableName,\n contextIndex\n );\n\n // var doubleRedirectionPointer = valueOfVariablePointedTo as VariablePointerValue;\n let doubleRedirectionPointer = asOrNull(\n valueOfVariablePointedTo,\n VariablePointerValue\n );\n if (doubleRedirectionPointer != null) {\n return doubleRedirectionPointer;\n } else {\n return new VariablePointerValue(varPointer.variableName, contextIndex);\n }\n }\n\n public GetContextIndexOfVariableNamed(varName: string) {\n if (this.GlobalVariableExistsWithName(varName)) return 0;\n\n return this._callStack.currentElementIndex;\n }\n\n /**\n * This function is specific to the js version of ink. It allows to register a\n * callback that will be called when a variable changes. The original code uses\n * `state.variableChangedEvent += callback` instead.\n *\n * @param {function} callback\n */\n public ObserveVariableChange(\n callback: (variableName: string, newValue: InkObject) => void\n ) {\n this.variableChangedEventCallbacks.push(callback);\n }\n\n private _globalVariables: Map<string, InkObject>;\n private _defaultGlobalVariables: Map<string, InkObject> = new Map();\n\n private _callStack: CallStack;\n private _changedVariablesForBatchObs: Set<string> | null = new Set();\n private _listDefsOrigin: ListDefinitionsOrigin | null;\n}\n", "// Taken from https://gist.github.com/blixt/f17b47c62508be59987b\n// Ink uses a seedable PRNG of which there is none in native javascript.\nexport class PRNG {\n private seed: number;\n\n constructor(seed: number) {\n this.seed = seed % 2147483647;\n if (this.seed <= 0) this.seed += 2147483646;\n }\n public next(): number {\n return (this.seed = (this.seed * 48271) % 2147483647);\n }\n public nextFloat(): number {\n return (this.next() - 1) / 2147483646;\n }\n}\n", "import { InkObject } from \"./Object\";\nimport { Container } from \"./Container\";\n\nexport class StatePatch {\n get globals() {\n return this._globals;\n }\n get changedVariables() {\n return this._changedVariables;\n }\n get visitCounts() {\n return this._visitCounts;\n }\n get turnIndices() {\n return this._turnIndices;\n }\n\n constructor();\n constructor(toCopy: StatePatch | null);\n constructor() {\n if (arguments.length === 1 && arguments[0] !== null) {\n let toCopy = arguments[0] as StatePatch;\n this._globals = new Map(toCopy._globals);\n this._changedVariables = new Set(toCopy._changedVariables);\n this._visitCounts = new Map(toCopy._visitCounts);\n this._turnIndices = new Map(toCopy._turnIndices);\n } else {\n this._globals = new Map();\n this._changedVariables = new Set();\n this._visitCounts = new Map();\n this._turnIndices = new Map();\n }\n }\n\n public TryGetGlobal(name: string | null, /* out */ value: InkObject | null) {\n if (name !== null && this._globals.has(name)) {\n return { result: this._globals.get(name), exists: true };\n }\n\n return { result: value, exists: false };\n }\n\n public SetGlobal(name: string, value: InkObject) {\n this._globals.set(name, value);\n }\n\n public AddChangedVariable(name: string) {\n return this._changedVariables.add(name);\n }\n\n public TryGetVisitCount(container: Container, /* out */ count: number) {\n if (this._visitCounts.has(container)) {\n return { result: this._visitCounts.get(container), exists: true };\n }\n\n return { result: count, exists: false };\n }\n\n public SetVisitCount(container: Container, count: number) {\n this._visitCounts.set(container, count);\n }\n\n public SetTurnIndex(container: Container, index: number) {\n this._turnIndices.set(container, index);\n }\n\n public TryGetTurnIndex(container: Container, /* out */ index: number) {\n if (this._turnIndices.has(container)) {\n return { result: this._turnIndices.get(container), exists: true };\n }\n\n return { result: index, exists: false };\n }\n\n private _globals: Map<string, InkObject>;\n private _changedVariables: Set<string> = new Set();\n private _visitCounts: Map<Container, number> = new Map();\n private _turnIndices: Map<Container, number> = new Map();\n}\n", "export class SimpleJson {\n public static TextToDictionary(text: string) {\n return new SimpleJson.Reader(text).ToDictionary();\n }\n\n public static TextToArray(text: string) {\n return new SimpleJson.Reader(text).ToArray();\n }\n}\n\nexport namespace SimpleJson {\n export class Reader {\n constructor(text: string) {\n this._rootObject = JSON.parse(text);\n }\n\n public ToDictionary() {\n return this._rootObject as Record<string, any>;\n }\n\n public ToArray() {\n return this._rootObject as any[];\n }\n\n private _rootObject: any[] | Record<string, any>;\n }\n\n // In C#, this class writes json tokens directly to a StringWriter or\n // another stream. Here, a temporary hierarchy is created in the form\n // of a javascript object, which is serialised in the `toString` method.\n // See individual methods and properties for more information.\n export class Writer {\n public WriteObject(inner: (w: Writer) => void) {\n this.WriteObjectStart();\n inner(this);\n this.WriteObjectEnd();\n }\n\n // Add a new object.\n public WriteObjectStart() {\n this.StartNewObject(true);\n\n let newObject: Record<string, any> = {};\n\n if (this.state === SimpleJson.Writer.State.Property) {\n // This object is created as the value of a property,\n // inside an other object.\n this.Assert(this.currentCollection !== null);\n this.Assert(this.currentPropertyName !== null);\n\n let propertyName = this._propertyNameStack.pop();\n this.currentCollection![propertyName!] = newObject;\n this._collectionStack.push(newObject);\n } else if (this.state === SimpleJson.Writer.State.Array) {\n // This object is created as the child of an array.\n this.Assert(this.currentCollection !== null);\n\n this.currentCollection!.push(newObject);\n this._collectionStack.push(newObject);\n } else {\n // This object is the root object.\n this.Assert(this.state === SimpleJson.Writer.State.None);\n this._jsonObject = newObject;\n this._collectionStack.push(newObject);\n }\n\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.Object)\n );\n }\n\n public WriteObjectEnd() {\n this.Assert(this.state === SimpleJson.Writer.State.Object);\n this._collectionStack.pop();\n this._stateStack.pop();\n }\n\n // Write a property name / value pair to the current object.\n public WriteProperty(\n name: any,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n innerOrContent: ((w: Writer) => void) | string | boolean | null\n ) {\n this.WritePropertyStart(name);\n if (arguments[1] instanceof Function) {\n let inner = arguments[1];\n inner(this);\n } else {\n let content: string | boolean | null = arguments[1];\n this.Write(content);\n }\n this.WritePropertyEnd();\n }\n\n // Int and Float are separate calls, since there both are\n // numbers in JavaScript, but need to be handled differently.\n\n public WriteIntProperty(name: any, content: number) {\n this.WritePropertyStart(name);\n this.WriteInt(content);\n this.WritePropertyEnd();\n }\n\n public WriteFloatProperty(name: any, content: number) {\n this.WritePropertyStart(name);\n this.WriteFloat(content);\n this.WritePropertyEnd();\n }\n\n // Prepare a new property name, which will be use to add the\n // new object when calling _addToCurrentObject() from a Write\n // method.\n public WritePropertyStart(name: any) {\n this.Assert(this.state === SimpleJson.Writer.State.Object);\n this._propertyNameStack.push(name);\n\n this.IncrementChildCount();\n\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.Property)\n );\n }\n\n public WritePropertyEnd() {\n this.Assert(this.state === SimpleJson.Writer.State.Property);\n this.Assert(this.childCount === 1);\n this._stateStack.pop();\n }\n\n // Prepare a new property name, except this time, the property name\n // will be created by concatenating all the strings passed to\n // WritePropertyNameInner.\n public WritePropertyNameStart() {\n this.Assert(this.state === SimpleJson.Writer.State.Object);\n this.IncrementChildCount();\n\n this._currentPropertyName = \"\";\n\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.Property)\n );\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.PropertyName)\n );\n }\n\n public WritePropertyNameEnd() {\n this.Assert(this.state === SimpleJson.Writer.State.PropertyName);\n this.Assert(this._currentPropertyName !== null);\n this._propertyNameStack.push(this._currentPropertyName!);\n this._currentPropertyName = null;\n this._stateStack.pop();\n }\n\n public WritePropertyNameInner(str: string) {\n this.Assert(this.state === SimpleJson.Writer.State.PropertyName);\n this.Assert(this._currentPropertyName !== null);\n this._currentPropertyName += str;\n }\n\n // Add a new array.\n public WriteArrayStart() {\n this.StartNewObject(true);\n\n let newObject: any[] = [];\n\n if (this.state === SimpleJson.Writer.State.Property) {\n // This array is created as the value of a property,\n // inside an object.\n this.Assert(this.currentCollection !== null);\n this.Assert(this.currentPropertyName !== null);\n\n let propertyName = this._propertyNameStack.pop();\n this.currentCollection![propertyName!] = newObject;\n this._collectionStack.push(newObject);\n } else if (this.state === SimpleJson.Writer.State.Array) {\n // This array is created as the child of another array.\n this.Assert(this.currentCollection !== null);\n\n this.currentCollection!.push(newObject);\n this._collectionStack.push(newObject);\n } else {\n // This array is the root object.\n this.Assert(this.state === SimpleJson.Writer.State.None);\n this._jsonObject = newObject;\n this._collectionStack.push(newObject);\n }\n\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.Array)\n );\n }\n\n public WriteArrayEnd() {\n this.Assert(this.state === SimpleJson.Writer.State.Array);\n this._collectionStack.pop();\n this._stateStack.pop();\n }\n\n // Add the value to the appropriate collection (array / object), given the current\n // context.\n public Write(\n value: number | string | boolean | null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n escape: boolean = true\n ) {\n if (value === null) {\n console.error(\"Warning: trying to write a null value\");\n return;\n }\n\n this.StartNewObject(false);\n this._addToCurrentObject(value);\n }\n\n public WriteBool(value: boolean | null) {\n if (value === null) {\n return;\n }\n\n this.StartNewObject(false);\n this._addToCurrentObject(value);\n }\n\n public WriteInt(value: number | null) {\n if (value === null) {\n return;\n }\n\n this.StartNewObject(false);\n\n // Math.floor is used as a precaution:\n // 1. to ensure that the value is written as an integer\n // (without a fractional part -> 1 instead of 1.0), even\n // though it should be the default behaviour of\n // JSON.serialize;\n // 2. to ensure that if a floating number is passed\n // accidentally, it's converted to an integer.\n //\n // This guarantees savegame compatibility with the reference\n // implementation.\n this._addToCurrentObject(Math.floor(value));\n }\n\n // Since JSON doesn't support NaN and Infinity, these values\n // are converted here.\n public WriteFloat(value: number | null) {\n if (value === null) {\n return;\n }\n\n this.StartNewObject(false);\n if (value == Number.POSITIVE_INFINITY) {\n this._addToCurrentObject(3.4e38);\n } else if (value == Number.NEGATIVE_INFINITY) {\n this._addToCurrentObject(-3.4e38);\n } else if (isNaN(value)) {\n this._addToCurrentObject(0.0);\n } else {\n this._addToCurrentObject(value);\n }\n }\n\n public WriteNull() {\n this.StartNewObject(false);\n this._addToCurrentObject(null);\n }\n\n // Prepare a string before adding it to the current collection in\n // WriteStringEnd(). The string will be a concatenation of all the\n // strings passed to WriteStringInner.\n public WriteStringStart() {\n this.StartNewObject(false);\n this._currentString = \"\";\n this._stateStack.push(\n new SimpleJson.Writer.StateElement(SimpleJson.Writer.State.String)\n );\n }\n\n public WriteStringEnd() {\n this.Assert(this.state == SimpleJson.Writer.State.String);\n this._stateStack.pop();\n this._addToCurrentObject(this._currentString);\n this._currentString = null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public WriteStringInner(str: string | null, escape: boolean = true) {\n this.Assert(this.state === SimpleJson.Writer.State.String);\n\n if (str === null) {\n console.error(\"Warning: trying to write a null string\");\n return;\n }\n\n this._currentString += str;\n }\n\n // Serialise the root object into a JSON string.\n public toString() {\n if (this._jsonObject === null) {\n return \"\";\n }\n\n return JSON.stringify(this._jsonObject);\n }\n\n // Prepare the state stack when adding new objects / values.\n private StartNewObject(container: boolean) {\n if (container) {\n this.Assert(\n this.state === SimpleJson.Writer.State.None ||\n this.state === SimpleJson.Writer.State.Property ||\n this.state === SimpleJson.Writer.State.Array\n );\n } else {\n this.Assert(\n this.state === SimpleJson.Writer.State.Property ||\n this.state === SimpleJson.Writer.State.Array\n );\n }\n\n if (this.state === SimpleJson.Writer.State.Property) {\n this.Assert(this.childCount === 0);\n }\n\n if (\n this.state === SimpleJson.Writer.State.Array ||\n this.state === SimpleJson.Writer.State.Property\n ) {\n this.IncrementChildCount();\n }\n }\n\n // These getters peek all the different stacks.\n\n private get state() {\n if (this._stateStack.length > 0) {\n return this._stateStack[this._stateStack.length - 1].type;\n } else {\n return SimpleJson.Writer.State.None;\n }\n }\n\n private get childCount() {\n if (this._stateStack.length > 0) {\n return this._stateStack[this._stateStack.length - 1].childCount;\n } else {\n return 0;\n }\n }\n\n private get currentCollection() {\n if (this._collectionStack.length > 0) {\n return this._collectionStack[this._collectionStack.length - 1];\n } else {\n return null;\n }\n }\n\n private get currentPropertyName() {\n if (this._propertyNameStack.length > 0) {\n return this._propertyNameStack[this._propertyNameStack.length - 1];\n } else {\n return null;\n }\n }\n\n private IncrementChildCount() {\n this.Assert(this._stateStack.length > 0);\n let currEl = this._stateStack.pop()!;\n currEl.childCount++;\n this._stateStack.push(currEl);\n }\n\n private Assert(condition: boolean) {\n if (!condition) throw Error(\"Assert failed while writing JSON\");\n }\n\n // This method did not exist in the original C# code. It adds\n // the given value to the current collection (used by Write methods).\n private _addToCurrentObject(value: number | string | boolean | null) {\n this.Assert(this.currentCollection !== null);\n if (this.state === SimpleJson.Writer.State.Array) {\n this.Assert(Array.isArray(this.currentCollection));\n (this.currentCollection as any[]).push(value);\n } else if (this.state === SimpleJson.Writer.State.Property) {\n this.Assert(!Array.isArray(this.currentCollection));\n this.Assert(this.currentPropertyName !== null);\n (this.currentCollection as Record<string, any>)[\n this.currentPropertyName!\n ] = value;\n this._propertyNameStack.pop();\n }\n }\n\n // In addition to `_stateStack` present in the original code,\n // this implementation of SimpleJson use two other stacks and two\n // temporary variables holding the current context.\n\n // Used to keep track of the current property name being built\n // with `WritePropertyNameStart`, `WritePropertyNameInner` and\n // `WritePropertyNameEnd`.\n private _currentPropertyName: string | null = null;\n\n // Used to keep track of the current string value being built\n // with `WriteStringStart`, `WriteStringInner` and\n // `WriteStringEnd`.\n private _currentString: string | null = null;\n\n private _stateStack: SimpleJson.Writer.StateElement[] = [];\n\n // Keep track of the current collection being built (either an array\n // or an object). For instance, at the '?' step during the hiarchy\n // creation, this hierarchy:\n // [3, {a: [b, ?]}] will have this corresponding stack:\n // (bottom) [Array, Object, Array] (top)\n private _collectionStack: Array<any[] | Record<string, any>> = [];\n\n // Keep track of the current property being assigned. For instance, at\n // the '?' step during the hiarchy creation, this hierarchy:\n // [3, {a: [b, {c: ?}]}] will have this corresponding stack:\n // (bottom) [a, c] (top)\n private _propertyNameStack: string[] = [];\n\n // Object containing the entire hiearchy.\n private _jsonObject: Record<string, any> | any[] | null = null;\n }\n\n export namespace Writer {\n export enum State {\n None,\n Object,\n Array,\n Property,\n PropertyName,\n String,\n }\n\n export class StateElement {\n public type: SimpleJson.Writer.State = SimpleJson.Writer.State.None;\n public childCount: number = 0;\n\n constructor(type: SimpleJson.Writer.State) {\n this.type = type;\n }\n }\n }\n}\n", "import { CallStack } from \"./CallStack\";\nimport { Choice } from \"./Choice\";\nimport { JsonSerialisation } from \"./JsonSerialisation\";\nimport { InkObject } from \"./Object\";\nimport { SimpleJson } from \"./SimpleJson\";\nimport { Story } from \"./Story\";\nimport { throwNullException } from \"./NullException\";\n\nexport class Flow {\n public name: string;\n public callStack: CallStack;\n public outputStream: InkObject[];\n public currentChoices: Choice[];\n\n constructor(name: String, story: Story);\n constructor(name: String, story: Story, jObject: Record<string, any>);\n constructor() {\n let name = arguments[0] as string;\n let story = arguments[1] as Story;\n\n this.name = name;\n this.callStack = new CallStack(story);\n\n if (arguments[2]) {\n let jObject = arguments[2] as Record<string, any>;\n\n this.callStack.SetJsonToken(jObject[\"callstack\"], story);\n this.outputStream = JsonSerialisation.JArrayToRuntimeObjList(\n jObject[\"outputStream\"]\n );\n this.currentChoices = JsonSerialisation.JArrayToRuntimeObjList(\n jObject[\"currentChoices\"]\n ) as Choice[];\n\n let jChoiceThreadsObj = jObject[\"choiceThreads\"];\n if (typeof jChoiceThreadsObj !== \"undefined\") {\n this.LoadFlowChoiceThreads(jChoiceThreadsObj, story);\n }\n } else {\n this.outputStream = [];\n this.currentChoices = [];\n }\n }\n\n public WriteJson(writer: SimpleJson.Writer) {\n writer.WriteObjectStart();\n\n writer.WriteProperty(\"callstack\", (w) => this.callStack.WriteJson(w));\n writer.WriteProperty(\"outputStream\", (w) =>\n JsonSerialisation.WriteListRuntimeObjs(w, this.outputStream)\n );\n\n let hasChoiceThreads = false;\n for (let c of this.currentChoices) {\n if (c.threadAtGeneration === null)\n return throwNullException(\"c.threadAtGeneration\");\n\n c.originalThreadIndex = c.threadAtGeneration.threadIndex;\n\n if (this.callStack.ThreadWithIndex(c.originalThreadIndex) === null) {\n if (!hasChoiceThreads) {\n hasChoiceThreads = true;\n writer.WritePropertyStart(\"choiceThreads\");\n writer.WriteObjectStart();\n }\n\n writer.WritePropertyStart(c.originalThreadIndex);\n c.threadAtGeneration.WriteJson(writer);\n writer.WritePropertyEnd();\n }\n }\n\n if (hasChoiceThreads) {\n writer.WriteObjectEnd();\n writer.WritePropertyEnd();\n }\n\n writer.WriteProperty(\"currentChoices\", (w) => {\n w.WriteArrayStart();\n for (let c of this.currentChoices) {\n JsonSerialisation.WriteChoice(w, c);\n }\n w.WriteArrayEnd();\n });\n\n writer.WriteObjectEnd();\n }\n\n public LoadFlowChoiceThreads(\n jChoiceThreads: Record<string, any>,\n story: Story\n ) {\n for (let choice of this.currentChoices) {\n let foundActiveThread = this.callStack.ThreadWithIndex(\n choice.originalThreadIndex\n );\n if (foundActiveThread !== null) {\n choice.threadAtGeneration = foundActiveThread.Copy();\n } else {\n let jSavedChoiceThread =\n jChoiceThreads[`${choice.originalThreadIndex}`];\n choice.threadAtGeneration = new CallStack.Thread(\n jSavedChoiceThread,\n story\n );\n }\n }\n }\n}\n", "import { CallStack } from \"./CallStack\";\nimport { VariablesState } from \"./VariablesState\";\nimport { ValueType, Value, StringValue, ListValue } from \"./Value\";\nimport { PushPopType } from \"./PushPop\";\nimport { Tag } from \"./Tag\";\nimport { Glue } from \"./Glue\";\nimport { Path } from \"./Path\";\nimport { ControlCommand } from \"./ControlCommand\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { JsonSerialisation } from \"./JsonSerialisation\";\nimport { PRNG } from \"./PRNG\";\nimport { Void } from \"./Void\";\nimport { Pointer } from \"./Pointer\";\nimport { tryGetValueFromMap } from \"./TryGetResult\";\nimport { Choice } from \"./Choice\";\nimport { asOrNull, asOrThrows, nullIfUndefined } from \"./TypeAssertion\";\nimport { Debug } from \"./Debug\";\nimport { Container } from \"./Container\";\nimport { InkObject } from \"./Object\";\nimport { throwNullException } from \"./NullException\";\nimport { Story } from \"./Story\";\nimport { StatePatch } from \"./StatePatch\";\nimport { SimpleJson } from \"./SimpleJson\";\nimport { Flow } from \"./Flow\";\nimport { InkList } from \"./InkList\";\n\nexport class StoryState {\n // Backward compatible changes since v8:\n // v10: dynamic tags\n // v9: multi-flows\n public readonly kInkSaveStateVersion = 10;\n public readonly kMinCompatibleLoadVersion = 8;\n\n public onDidLoadState: (() => void) | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public ToJson(indented: boolean = false) {\n let writer = new SimpleJson.Writer();\n this.WriteJson(writer);\n return writer.toString();\n }\n public toJson(indented: boolean = false) {\n return this.ToJson(indented);\n }\n\n public LoadJson(json: string) {\n let jObject = SimpleJson.TextToDictionary(json);\n this.LoadJsonObj(jObject);\n if (this.onDidLoadState !== null) this.onDidLoadState();\n }\n\n public VisitCountAtPathString(pathString: string) {\n let visitCountOut;\n\n if (this._patch !== null) {\n let container = this.story.ContentAtPath(new Path(pathString)).container;\n if (container === null)\n throw new Error(\"Content at path not found: \" + pathString);\n\n visitCountOut = this._patch.TryGetVisitCount(container, 0);\n if (visitCountOut.exists) return visitCountOut.result;\n }\n\n visitCountOut = tryGetValueFromMap(this._visitCounts, pathString, null);\n if (visitCountOut.exists) return visitCountOut.result;\n\n return 0;\n }\n\n public VisitCountForContainer(container: Container | null): number {\n if (container === null) {\n return throwNullException(\"container\");\n }\n if (!container.visitsShouldBeCounted) {\n this.story.Error(\n \"Read count for target (\" +\n container.name +\n \" - on \" +\n container.debugMetadata +\n \") unknown. The story may need to be compiled with countAllVisits flag (-c).\"\n );\n return 0;\n }\n\n if (this._patch !== null) {\n let count = this._patch.TryGetVisitCount(container, 0);\n if (count.exists) {\n return count.result!;\n }\n }\n\n let containerPathStr = container.path.toString();\n let count2 = tryGetValueFromMap(this._visitCounts, containerPathStr, null);\n if (count2.exists) {\n return count2.result!;\n }\n\n return 0;\n }\n\n public IncrementVisitCountForContainer(container: Container) {\n if (this._patch !== null) {\n let currCount = this.VisitCountForContainer(container);\n currCount++;\n this._patch.SetVisitCount(container, currCount);\n return;\n }\n\n let containerPathStr = container.path.toString();\n let count = tryGetValueFromMap(this._visitCounts, containerPathStr, null);\n if (count.exists) {\n this._visitCounts.set(containerPathStr, count.result! + 1);\n } else {\n this._visitCounts.set(containerPathStr, 1);\n }\n }\n\n public RecordTurnIndexVisitToContainer(container: Container) {\n if (this._patch !== null) {\n this._patch.SetTurnIndex(container, this.currentTurnIndex);\n return;\n }\n\n let containerPathStr = container.path.toString();\n this._turnIndices.set(containerPathStr, this.currentTurnIndex);\n }\n\n public TurnsSinceForContainer(container: Container) {\n if (!container.turnIndexShouldBeCounted) {\n this.story.Error(\n \"TURNS_SINCE() for target (\" +\n container.name +\n \" - on \" +\n container.debugMetadata +\n \") unknown. The story may need to be compiled with countAllVisits flag (-c).\"\n );\n }\n\n if (this._patch !== null) {\n let index = this._patch.TryGetTurnIndex(container, 0);\n if (index.exists) {\n return this.currentTurnIndex - index.result!;\n }\n }\n\n let containerPathStr = container.path.toString();\n let index2 = tryGetValueFromMap(this._turnIndices, containerPathStr, 0);\n if (index2.exists) {\n return this.currentTurnIndex - index2.result!;\n } else {\n return -1;\n }\n }\n\n get callstackDepth() {\n return this.callStack.depth;\n }\n\n get outputStream() {\n return this._currentFlow.outputStream;\n }\n\n get currentChoices() {\n // If we can continue generating text content rather than choices,\n // then we reflect the choice list as being empty, since choices\n // should always come at the end.\n if (this.canContinue) return [];\n return this._currentFlow.currentChoices;\n }\n\n get generatedChoices() {\n return this._currentFlow.currentChoices;\n }\n\n get currentErrors() {\n return this._currentErrors;\n }\n private _currentErrors: string[] | null = null;\n\n get currentWarnings() {\n return this._currentWarnings;\n }\n private _currentWarnings: string[] | null = null;\n\n get variablesState() {\n return this._variablesState;\n }\n set variablesState(value) {\n this._variablesState = value;\n }\n private _variablesState: VariablesState;\n\n get callStack() {\n return this._currentFlow.callStack;\n }\n\n get evaluationStack() {\n return this._evaluationStack;\n }\n private _evaluationStack: InkObject[];\n\n public divertedPointer: Pointer = Pointer.Null;\n\n get currentTurnIndex() {\n return this._currentTurnIndex;\n }\n set currentTurnIndex(value) {\n this._currentTurnIndex = value;\n }\n private _currentTurnIndex: number = 0;\n\n public storySeed: number = 0;\n public previousRandom: number = 0;\n public didSafeExit: boolean = false;\n\n public story: Story;\n\n get currentPathString() {\n let pointer = this.currentPointer;\n if (pointer.isNull) {\n return null;\n } else {\n if (pointer.path === null) {\n return throwNullException(\"pointer.path\");\n }\n return pointer.path.toString();\n }\n }\n\n get currentPointer() {\n return this.callStack.currentElement.currentPointer.copy();\n }\n\n set currentPointer(value) {\n this.callStack.currentElement.currentPointer = value.copy();\n }\n\n get previousPointer() {\n return this.callStack.currentThread.previousPointer.copy();\n }\n\n set previousPointer(value) {\n this.callStack.currentThread.previousPointer = value.copy();\n }\n\n get canContinue() {\n return !this.currentPointer.isNull && !this.hasError;\n }\n\n get hasError() {\n return this.currentErrors != null && this.currentErrors.length > 0;\n }\n\n get hasWarning() {\n return this.currentWarnings != null && this.currentWarnings.length > 0;\n }\n\n get currentText() {\n if (this._outputStreamTextDirty) {\n let sb = new StringBuilder();\n\n let inTag: boolean = false;\n\n for (let outputObj of this.outputStream) {\n // var textContent = outputObj as StringValue;\n let textContent = asOrNull(outputObj, StringValue);\n if (!inTag && textContent !== null) {\n sb.Append(textContent.value);\n } else {\n let controlCommand = asOrNull(outputObj, ControlCommand);\n if (controlCommand !== null) {\n if (\n controlCommand.commandType == ControlCommand.CommandType.BeginTag\n ) {\n inTag = true;\n } else if (\n controlCommand.commandType == ControlCommand.CommandType.EndTag\n ) {\n inTag = false;\n }\n }\n }\n }\n\n this._currentText = this.CleanOutputWhitespace(sb.toString());\n this._outputStreamTextDirty = false;\n }\n\n return this._currentText;\n }\n private _currentText: string | null = null;\n\n public CleanOutputWhitespace(str: string) {\n let sb = new StringBuilder();\n\n let currentWhitespaceStart = -1;\n let startOfLine = 0;\n\n for (let i = 0; i < str.length; i++) {\n let c = str.charAt(i);\n\n let isInlineWhitespace = c == \" \" || c == \"\\t\";\n\n if (isInlineWhitespace && currentWhitespaceStart == -1)\n currentWhitespaceStart = i;\n\n if (!isInlineWhitespace) {\n if (\n c != \"\\n\" &&\n currentWhitespaceStart > 0 &&\n currentWhitespaceStart != startOfLine\n ) {\n sb.Append(\" \");\n }\n currentWhitespaceStart = -1;\n }\n\n if (c == \"\\n\") startOfLine = i + 1;\n\n if (!isInlineWhitespace) sb.Append(c);\n }\n\n return sb.toString();\n }\n\n get currentTags() {\n if (this._outputStreamTagsDirty) {\n this._currentTags = [];\n let inTag: boolean = false;\n let sb = new StringBuilder();\n\n for (let outputObj of this.outputStream) {\n let controlCommand = asOrNull(outputObj, ControlCommand);\n if (controlCommand != null) {\n if (\n controlCommand.commandType == ControlCommand.CommandType.BeginTag\n ) {\n if (inTag && sb.Length > 0) {\n let txt = this.CleanOutputWhitespace(sb.toString());\n this._currentTags.push(txt);\n sb.Clear();\n }\n inTag = true;\n } else if (\n controlCommand.commandType == ControlCommand.CommandType.EndTag\n ) {\n if (sb.Length > 0) {\n let txt = this.CleanOutputWhitespace(sb.toString());\n this._currentTags.push(txt);\n sb.Clear();\n }\n inTag = false;\n }\n } else if (inTag) {\n let strVal = asOrNull(outputObj, StringValue);\n if (strVal !== null) {\n sb.Append(strVal.value);\n }\n } else {\n let tag = asOrNull(outputObj, Tag);\n if (tag != null && tag.text != null && tag.text.length > 0) {\n this._currentTags.push(tag.text); // tag.text has whitespae already cleaned\n }\n }\n }\n\n if (sb.Length > 0) {\n let txt = this.CleanOutputWhitespace(sb.toString());\n this._currentTags.push(txt);\n sb.Clear();\n }\n\n this._outputStreamTagsDirty = false;\n }\n\n return this._currentTags;\n }\n private _currentTags: string[] | null = null;\n\n get currentFlowName() {\n return this._currentFlow.name;\n }\n\n get currentFlowIsDefaultFlow() {\n return this._currentFlow.name == this.kDefaultFlowName;\n }\n\n get aliveFlowNames() {\n if (this._aliveFlowNamesDirty) {\n this._aliveFlowNames = [];\n\n if (this._namedFlows != null) {\n for (let flowName of this._namedFlows.keys()) {\n if (flowName != this.kDefaultFlowName) {\n this._aliveFlowNames.push(flowName);\n }\n }\n }\n\n this._aliveFlowNamesDirty = false;\n }\n\n return this._aliveFlowNames;\n }\n\n get inExpressionEvaluation() {\n return this.callStack.currentElement.inExpressionEvaluation;\n }\n set inExpressionEvaluation(value) {\n this.callStack.currentElement.inExpressionEvaluation = value;\n }\n\n constructor(story: Story) {\n this.story = story;\n\n this._currentFlow = new Flow(this.kDefaultFlowName, story);\n this.OutputStreamDirty();\n\n this._aliveFlowNamesDirty = true;\n this._evaluationStack = [];\n\n this._variablesState = new VariablesState(\n this.callStack,\n story.listDefinitions\n );\n\n this._visitCounts = new Map();\n this._turnIndices = new Map();\n this.currentTurnIndex = -1;\n\n let timeSeed = new Date().getTime();\n this.storySeed = new PRNG(timeSeed).next() % 100;\n this.previousRandom = 0;\n\n this.GoToStart();\n }\n\n public GoToStart() {\n this.callStack.currentElement.currentPointer = Pointer.StartOf(\n this.story.mainContentContainer\n );\n }\n\n public SwitchFlow_Internal(flowName: string | null) {\n if (flowName === null)\n throw new Error(\"Must pass a non-null string to Story.SwitchFlow\");\n\n if (this._namedFlows === null) {\n this._namedFlows = new Map();\n this._namedFlows.set(this.kDefaultFlowName, this._currentFlow);\n }\n\n if (flowName === this._currentFlow.name) {\n return;\n }\n\n let flow: Flow;\n let content = tryGetValueFromMap(this._namedFlows, flowName, null);\n if (content.exists) {\n flow = content.result!;\n } else {\n flow = new Flow(flowName, this.story);\n this._namedFlows.set(flowName, flow);\n this._aliveFlowNamesDirty = true;\n }\n\n this._currentFlow = flow;\n this.variablesState.callStack = this._currentFlow.callStack;\n\n this.OutputStreamDirty();\n }\n\n public SwitchToDefaultFlow_Internal() {\n if (this._namedFlows === null) return;\n this.SwitchFlow_Internal(this.kDefaultFlowName);\n }\n\n public RemoveFlow_Internal(flowName: string | null) {\n if (flowName === null)\n throw new Error(\"Must pass a non-null string to Story.DestroyFlow\");\n if (flowName === this.kDefaultFlowName)\n throw new Error(\"Cannot destroy default flow\");\n\n if (this._currentFlow.name === flowName) {\n this.SwitchToDefaultFlow_Internal();\n }\n\n if (this._namedFlows === null)\n return throwNullException(\"this._namedFlows\");\n this._namedFlows.delete(flowName);\n this._aliveFlowNamesDirty = true;\n }\n\n public CopyAndStartPatching() {\n let copy = new StoryState(this.story);\n\n copy._patch = new StatePatch(this._patch);\n\n copy._currentFlow.name = this._currentFlow.name;\n copy._currentFlow.callStack = new CallStack(this._currentFlow.callStack);\n copy._currentFlow.currentChoices.push(...this._currentFlow.currentChoices);\n copy._currentFlow.outputStream.push(...this._currentFlow.outputStream);\n copy.OutputStreamDirty();\n\n if (this._namedFlows !== null) {\n copy._namedFlows = new Map();\n for (let [namedFlowKey, namedFlowValue] of this._namedFlows) {\n copy._namedFlows.set(namedFlowKey, namedFlowValue);\n copy._aliveFlowNamesDirty = true;\n }\n copy._namedFlows.set(this._currentFlow.name, copy._currentFlow);\n }\n\n if (this.hasError) {\n copy._currentErrors = [];\n copy._currentErrors.push(...(this.currentErrors || []));\n }\n\n if (this.hasWarning) {\n copy._currentWarnings = [];\n copy._currentWarnings.push(...(this.currentWarnings || []));\n }\n\n copy.variablesState = this.variablesState;\n copy.variablesState.callStack = copy.callStack;\n copy.variablesState.patch = copy._patch;\n\n copy.evaluationStack.push(...this.evaluationStack);\n\n if (!this.divertedPointer.isNull)\n copy.divertedPointer = this.divertedPointer.copy();\n\n copy.previousPointer = this.previousPointer.copy();\n\n copy._visitCounts = this._visitCounts;\n copy._turnIndices = this._turnIndices;\n\n copy.currentTurnIndex = this.currentTurnIndex;\n copy.storySeed = this.storySeed;\n copy.previousRandom = this.previousRandom;\n\n copy.didSafeExit = this.didSafeExit;\n\n return copy;\n }\n\n public RestoreAfterPatch() {\n this.variablesState.callStack = this.callStack;\n this.variablesState.patch = this._patch;\n }\n\n public ApplyAnyPatch() {\n if (this._patch === null) return;\n\n this.variablesState.ApplyPatch();\n\n for (let [key, value] of this._patch.visitCounts)\n this.ApplyCountChanges(key, value, true);\n\n for (let [key, value] of this._patch.turnIndices)\n this.ApplyCountChanges(key, value, false);\n\n this._patch = null;\n }\n\n public ApplyCountChanges(\n container: Container,\n newCount: number,\n isVisit: boolean\n ) {\n let counts = isVisit ? this._visitCounts : this._turnIndices;\n counts.set(container.path.toString(), newCount);\n }\n\n public WriteJson(writer: SimpleJson.Writer) {\n writer.WriteObjectStart();\n\n writer.WritePropertyStart(\"flows\");\n writer.WriteObjectStart();\n\n // NOTE: Never pass `WriteJson` directly as an argument to `WriteProperty`.\n // Call it inside a function to make sure `this` is correctly bound\n // and passed down the call hierarchy.\n\n if (this._namedFlows !== null) {\n for (let [namedFlowKey, namedFlowValue] of this._namedFlows) {\n writer.WriteProperty(namedFlowKey, (w) => namedFlowValue.WriteJson(w));\n }\n } else {\n writer.WriteProperty(this._currentFlow.name, (w) =>\n this._currentFlow.WriteJson(w)\n );\n }\n\n writer.WriteObjectEnd();\n writer.WritePropertyEnd();\n\n writer.WriteProperty(\"currentFlowName\", this._currentFlow.name);\n\n writer.WriteProperty(\"variablesState\", (w) =>\n this.variablesState.WriteJson(w)\n );\n\n writer.WriteProperty(\"evalStack\", (w) =>\n JsonSerialisation.WriteListRuntimeObjs(w, this.evaluationStack)\n );\n\n if (!this.divertedPointer.isNull) {\n if (this.divertedPointer.path === null) {\n return throwNullException(\"divertedPointer\");\n }\n writer.WriteProperty(\n \"currentDivertTarget\",\n this.divertedPointer.path.componentsString\n );\n }\n\n writer.WriteProperty(\"visitCounts\", (w) =>\n JsonSerialisation.WriteIntDictionary(w, this._visitCounts)\n );\n writer.WriteProperty(\"turnIndices\", (w) =>\n JsonSerialisation.WriteIntDictionary(w, this._turnIndices)\n );\n\n writer.WriteIntProperty(\"turnIdx\", this.currentTurnIndex);\n writer.WriteIntProperty(\"storySeed\", this.storySeed);\n writer.WriteIntProperty(\"previousRandom\", this.previousRandom);\n\n writer.WriteIntProperty(\"inkSaveVersion\", this.kInkSaveStateVersion);\n\n writer.WriteIntProperty(\"inkFormatVersion\", Story.inkVersionCurrent);\n\n writer.WriteObjectEnd();\n }\n\n public LoadJsonObj(value: Record<string, any>) {\n let jObject = value;\n\n let jSaveVersion = jObject[\"inkSaveVersion\"];\n if (jSaveVersion == null) {\n throw new Error(\"ink save format incorrect, can't load.\");\n } else if (parseInt(jSaveVersion) < this.kMinCompatibleLoadVersion) {\n throw new Error(\n \"Ink save format isn't compatible with the current version (saw '\" +\n jSaveVersion +\n \"', but minimum is \" +\n this.kMinCompatibleLoadVersion +\n \"), so can't load.\"\n );\n }\n\n let flowsObj = jObject[\"flows\"];\n if (flowsObj != null) {\n let flowsObjDict = flowsObj as Record<string, any>;\n\n // Single default flow\n if (Object.keys(flowsObjDict).length === 1) {\n this._namedFlows = null;\n } else if (this._namedFlows === null) {\n this._namedFlows = new Map();\n } else {\n this._namedFlows.clear();\n }\n\n let flowsObjDictEntries = Object.entries(flowsObjDict);\n for (let [namedFlowObjKey, namedFlowObjValue] of flowsObjDictEntries) {\n let name = namedFlowObjKey;\n let flowObj = namedFlowObjValue as Record<string, any>;\n\n let flow = new Flow(name, this.story, flowObj);\n\n if (Object.keys(flowsObjDict).length === 1) {\n this._currentFlow = new Flow(name, this.story, flowObj);\n } else {\n if (this._namedFlows === null)\n return throwNullException(\"this._namedFlows\");\n this._namedFlows.set(name, flow);\n }\n }\n\n if (this._namedFlows != null && this._namedFlows.size > 1) {\n let currFlowName = jObject[\"currentFlowName\"] as string;\n // Adding a bang at the end, because we're trusting the save, as\n // done in upstream. If the save is corrupted, the execution\n // is undefined.\n this._currentFlow = this._namedFlows.get(currFlowName)!;\n }\n } else {\n this._namedFlows = null;\n this._currentFlow.name = this.kDefaultFlowName;\n this._currentFlow.callStack.SetJsonToken(\n jObject[\"callstackThreads\"] as Record<string, any>,\n this.story\n );\n this._currentFlow.outputStream = JsonSerialisation.JArrayToRuntimeObjList(\n jObject[\"outputStream\"] as any[]\n );\n this._currentFlow.currentChoices =\n JsonSerialisation.JArrayToRuntimeObjList(\n jObject[\"currentChoices\"] as any[]\n ) as Choice[];\n\n let jChoiceThreadsObj = jObject[\"choiceThreads\"];\n this._currentFlow.LoadFlowChoiceThreads(jChoiceThreadsObj, this.story);\n }\n\n this.OutputStreamDirty();\n this._aliveFlowNamesDirty = true;\n\n this.variablesState.SetJsonToken(jObject[\"variablesState\"]);\n this.variablesState.callStack = this._currentFlow.callStack;\n\n this._evaluationStack = JsonSerialisation.JArrayToRuntimeObjList(\n jObject[\"evalStack\"]\n );\n\n let currentDivertTargetPath = jObject[\"currentDivertTarget\"];\n if (currentDivertTargetPath != null) {\n let divertPath = new Path(currentDivertTargetPath.toString());\n this.divertedPointer = this.story.PointerAtPath(divertPath);\n }\n\n this._visitCounts = JsonSerialisation.JObjectToIntDictionary(\n jObject[\"visitCounts\"]\n );\n this._turnIndices = JsonSerialisation.JObjectToIntDictionary(\n jObject[\"turnIndices\"]\n );\n this.currentTurnIndex = parseInt(jObject[\"turnIdx\"]);\n this.storySeed = parseInt(jObject[\"storySeed\"]);\n this.previousRandom = parseInt(jObject[\"previousRandom\"]);\n }\n\n public ResetErrors() {\n this._currentErrors = null;\n this._currentWarnings = null;\n }\n public ResetOutput(objs: InkObject[] | null = null) {\n this.outputStream.length = 0;\n if (objs !== null) this.outputStream.push(...objs);\n this.OutputStreamDirty();\n }\n\n public PushToOutputStream(obj: InkObject | null) {\n // var text = obj as StringValue;\n let text = asOrNull(obj, StringValue);\n if (text !== null) {\n let listText = this.TrySplittingHeadTailWhitespace(text);\n if (listText !== null) {\n for (let textObj of listText) {\n this.PushToOutputStreamIndividual(textObj);\n }\n this.OutputStreamDirty();\n return;\n }\n }\n\n this.PushToOutputStreamIndividual(obj);\n this.OutputStreamDirty();\n }\n\n public PopFromOutputStream(count: number) {\n this.outputStream.splice(this.outputStream.length - count, count);\n this.OutputStreamDirty();\n }\n\n public TrySplittingHeadTailWhitespace(single: StringValue) {\n let str = single.value;\n if (str === null) {\n return throwNullException(\"single.value\");\n }\n\n let headFirstNewlineIdx = -1;\n let headLastNewlineIdx = -1;\n for (let i = 0; i < str.length; i++) {\n let c = str[i];\n if (c == \"\\n\") {\n if (headFirstNewlineIdx == -1) headFirstNewlineIdx = i;\n headLastNewlineIdx = i;\n } else if (c == \" \" || c == \"\\t\") continue;\n else break;\n }\n\n let tailLastNewlineIdx = -1;\n let tailFirstNewlineIdx = -1;\n for (let i = str.length - 1; i >= 0; i--) {\n let c = str[i];\n if (c == \"\\n\") {\n if (tailLastNewlineIdx == -1) tailLastNewlineIdx = i;\n tailFirstNewlineIdx = i;\n } else if (c == \" \" || c == \"\\t\") continue;\n else break;\n }\n\n // No splitting to be done?\n if (headFirstNewlineIdx == -1 && tailLastNewlineIdx == -1) return null;\n\n let listTexts: StringValue[] = [];\n let innerStrStart = 0;\n let innerStrEnd = str.length;\n\n if (headFirstNewlineIdx != -1) {\n if (headFirstNewlineIdx > 0) {\n let leadingSpaces = new StringValue(\n str.substring(0, headFirstNewlineIdx)\n );\n listTexts.push(leadingSpaces);\n }\n listTexts.push(new StringValue(\"\\n\"));\n innerStrStart = headLastNewlineIdx + 1;\n }\n\n if (tailLastNewlineIdx != -1) {\n innerStrEnd = tailFirstNewlineIdx;\n }\n\n if (innerStrEnd > innerStrStart) {\n let innerStrText = str.substring(innerStrStart, innerStrEnd);\n listTexts.push(new StringValue(innerStrText));\n }\n\n if (tailLastNewlineIdx != -1 && tailFirstNewlineIdx > headLastNewlineIdx) {\n listTexts.push(new StringValue(\"\\n\"));\n if (tailLastNewlineIdx < str.length - 1) {\n let numSpaces = str.length - tailLastNewlineIdx - 1;\n let trailingSpaces = new StringValue(\n str.substring(\n tailLastNewlineIdx + 1,\n tailLastNewlineIdx + 1 + numSpaces\n )\n );\n listTexts.push(trailingSpaces);\n }\n }\n\n return listTexts;\n }\n\n public PushToOutputStreamIndividual(obj: InkObject | null) {\n let glue = asOrNull(obj, Glue);\n let text = asOrNull(obj, StringValue);\n\n let includeInOutput = true;\n\n if (glue) {\n this.TrimNewlinesFromOutputStream();\n includeInOutput = true;\n } else if (text) {\n let functionTrimIndex = -1;\n let currEl = this.callStack.currentElement;\n if (currEl.type == PushPopType.Function) {\n functionTrimIndex = currEl.functionStartInOutputStream;\n }\n\n let glueTrimIndex = -1;\n for (let i = this.outputStream.length - 1; i >= 0; i--) {\n let o = this.outputStream[i];\n let c = o instanceof ControlCommand ? o : null;\n let g = o instanceof Glue ? o : null;\n\n if (g != null) {\n glueTrimIndex = i;\n break;\n } else if (\n c != null &&\n c.commandType == ControlCommand.CommandType.BeginString\n ) {\n if (i >= functionTrimIndex) {\n functionTrimIndex = -1;\n }\n break;\n }\n }\n\n let trimIndex = -1;\n if (glueTrimIndex != -1 && functionTrimIndex != -1)\n trimIndex = Math.min(functionTrimIndex, glueTrimIndex);\n else if (glueTrimIndex != -1) trimIndex = glueTrimIndex;\n else trimIndex = functionTrimIndex;\n\n if (trimIndex != -1) {\n if (text.isNewline) {\n includeInOutput = false;\n } else if (text.isNonWhitespace) {\n if (glueTrimIndex > -1) this.RemoveExistingGlue();\n\n if (functionTrimIndex > -1) {\n let callStackElements = this.callStack.elements;\n for (let i = callStackElements.length - 1; i >= 0; i--) {\n let el = callStackElements[i];\n if (el.type == PushPopType.Function) {\n el.functionStartInOutputStream = -1;\n } else {\n break;\n }\n }\n }\n }\n } else if (text.isNewline) {\n if (this.outputStreamEndsInNewline || !this.outputStreamContainsContent)\n includeInOutput = false;\n }\n }\n\n if (includeInOutput) {\n if (obj === null) {\n return throwNullException(\"obj\");\n }\n this.outputStream.push(obj);\n this.OutputStreamDirty();\n }\n }\n\n public TrimNewlinesFromOutputStream() {\n let removeWhitespaceFrom = -1;\n\n let i = this.outputStream.length - 1;\n while (i >= 0) {\n let obj = this.outputStream[i];\n let cmd = asOrNull(obj, ControlCommand);\n let txt = asOrNull(obj, StringValue);\n\n if (cmd != null || (txt != null && txt.isNonWhitespace)) {\n break;\n } else if (txt != null && txt.isNewline) {\n removeWhitespaceFrom = i;\n }\n i--;\n }\n\n // Remove the whitespace\n if (removeWhitespaceFrom >= 0) {\n i = removeWhitespaceFrom;\n while (i < this.outputStream.length) {\n let text = asOrNull(this.outputStream[i], StringValue);\n if (text) {\n this.outputStream.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n this.OutputStreamDirty();\n }\n\n public RemoveExistingGlue() {\n for (let i = this.outputStream.length - 1; i >= 0; i--) {\n let c = this.outputStream[i];\n if (c instanceof Glue) {\n this.outputStream.splice(i, 1);\n } else if (c instanceof ControlCommand) {\n break;\n }\n }\n\n this.OutputStreamDirty();\n }\n\n get outputStreamEndsInNewline() {\n if (this.outputStream.length > 0) {\n for (let i = this.outputStream.length - 1; i >= 0; i--) {\n let obj = this.outputStream[i];\n if (obj instanceof ControlCommand) break;\n let text = this.outputStream[i];\n if (text instanceof StringValue) {\n if (text.isNewline) return true;\n else if (text.isNonWhitespace) break;\n }\n }\n }\n\n return false;\n }\n\n get outputStreamContainsContent() {\n for (let content of this.outputStream) {\n if (content instanceof StringValue) return true;\n }\n return false;\n }\n\n get inStringEvaluation() {\n for (let i = this.outputStream.length - 1; i >= 0; i--) {\n let cmd = asOrNull(this.outputStream[i], ControlCommand);\n if (\n cmd instanceof ControlCommand &&\n cmd.commandType == ControlCommand.CommandType.BeginString\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n public PushEvaluationStack(obj: InkObject | null) {\n // var listValue = obj as ListValue;\n let listValue = asOrNull(obj, ListValue);\n if (listValue) {\n // Update origin when list is has something to indicate the list origin\n let rawList = listValue.value;\n if (rawList === null) {\n return throwNullException(\"rawList\");\n }\n\n if (rawList.originNames != null) {\n if (!rawList.origins) rawList.origins = [];\n rawList.origins.length = 0;\n\n for (let n of rawList.originNames) {\n if (this.story.listDefinitions === null)\n return throwNullException(\"StoryState.story.listDefinitions\");\n let def = this.story.listDefinitions.TryListGetDefinition(n, null);\n if (def.result === null)\n return throwNullException(\"StoryState def.result\");\n if (rawList.origins.indexOf(def.result) < 0)\n rawList.origins.push(def.result);\n }\n }\n }\n\n if (obj === null) {\n return throwNullException(\"obj\");\n }\n this.evaluationStack.push(obj);\n }\n\n public PopEvaluationStack(): InkObject;\n public PopEvaluationStack(numberOfObjects: number): InkObject[];\n public PopEvaluationStack(numberOfObjects?: number) {\n if (typeof numberOfObjects === \"undefined\") {\n let obj = this.evaluationStack.pop();\n return nullIfUndefined(obj);\n } else {\n if (numberOfObjects > this.evaluationStack.length) {\n throw new Error(\"trying to pop too many objects\");\n }\n\n let popped = this.evaluationStack.splice(\n this.evaluationStack.length - numberOfObjects,\n numberOfObjects\n );\n return nullIfUndefined(popped);\n }\n }\n\n public PeekEvaluationStack() {\n return this.evaluationStack[this.evaluationStack.length - 1];\n }\n\n public ForceEnd() {\n this.callStack.Reset();\n\n this._currentFlow.currentChoices.length = 0;\n\n this.currentPointer = Pointer.Null;\n this.previousPointer = Pointer.Null;\n\n this.didSafeExit = true;\n }\n\n public TrimWhitespaceFromFunctionEnd() {\n Debug.Assert(this.callStack.currentElement.type == PushPopType.Function);\n let functionStartPoint =\n this.callStack.currentElement.functionStartInOutputStream;\n\n if (functionStartPoint == -1) {\n functionStartPoint = 0;\n }\n\n for (let i = this.outputStream.length - 1; i >= functionStartPoint; i--) {\n let obj = this.outputStream[i];\n let txt = asOrNull(obj, StringValue);\n let cmd = asOrNull(obj, ControlCommand);\n\n if (txt == null) continue;\n if (cmd) break;\n\n if (txt.isNewline || txt.isInlineWhitespace) {\n this.outputStream.splice(i, 1);\n this.OutputStreamDirty();\n } else {\n break;\n }\n }\n }\n\n public PopCallStack(popType: PushPopType | null = null) {\n if (this.callStack.currentElement.type == PushPopType.Function)\n this.TrimWhitespaceFromFunctionEnd();\n\n this.callStack.Pop(popType);\n }\n\n public SetChosenPath(path: Path, incrementingTurnIndex: boolean) {\n // Changing direction, assume we need to clear current set of choices\n this._currentFlow.currentChoices.length = 0;\n\n let newPointer = this.story.PointerAtPath(path);\n if (!newPointer.isNull && newPointer.index == -1) newPointer.index = 0;\n\n this.currentPointer = newPointer;\n\n if (incrementingTurnIndex) {\n this.currentTurnIndex++;\n }\n }\n\n public StartFunctionEvaluationFromGame(\n funcContainer: Container,\n args: any[]\n ) {\n this.callStack.Push(\n PushPopType.FunctionEvaluationFromGame,\n this.evaluationStack.length\n );\n this.callStack.currentElement.currentPointer =\n Pointer.StartOf(funcContainer);\n\n this.PassArgumentsToEvaluationStack(args);\n }\n\n public PassArgumentsToEvaluationStack(args: any[] | null) {\n if (args !== null) {\n for (let i = 0; i < args.length; i++) {\n if (\n !(\n typeof args[i] === \"number\" ||\n typeof args[i] === \"string\" ||\n typeof args[i] === \"boolean\" ||\n args[i] instanceof InkList\n )\n ) {\n throw new Error(\n \"ink arguments when calling EvaluateFunction / ChoosePathStringWithParameters must be\" +\n \"number, string, bool or InkList. Argument was \" +\n (nullIfUndefined(arguments[i]) === null)\n ? \"null\"\n : arguments[i].constructor.name\n );\n }\n\n this.PushEvaluationStack(Value.Create(args[i]));\n }\n }\n }\n\n public TryExitFunctionEvaluationFromGame() {\n if (\n this.callStack.currentElement.type ==\n PushPopType.FunctionEvaluationFromGame\n ) {\n this.currentPointer = Pointer.Null;\n this.didSafeExit = true;\n return true;\n }\n\n return false;\n }\n\n public CompleteFunctionEvaluationFromGame() {\n if (\n this.callStack.currentElement.type !=\n PushPopType.FunctionEvaluationFromGame\n ) {\n throw new Error(\n \"Expected external function evaluation to be complete. Stack trace: \" +\n this.callStack.callStackTrace\n );\n }\n\n let originalEvaluationStackHeight =\n this.callStack.currentElement.evaluationStackHeightWhenPushed;\n\n let returnedObj: InkObject | null = null;\n while (this.evaluationStack.length > originalEvaluationStackHeight) {\n let poppedObj = this.PopEvaluationStack();\n if (returnedObj === null) returnedObj = poppedObj;\n }\n\n this.PopCallStack(PushPopType.FunctionEvaluationFromGame);\n\n if (returnedObj) {\n if (returnedObj instanceof Void) return null;\n\n // Some kind of value, if not void\n // var returnVal = returnedObj as Runtime.Value;\n let returnVal = asOrThrows(returnedObj, Value);\n\n // DivertTargets get returned as the string of components\n // (rather than a Path, which isn't public)\n if (returnVal.valueType == ValueType.DivertTarget) {\n return returnVal.valueObject.toString();\n }\n\n // Other types can just have their exact object type:\n // int, float, string. VariablePointers get returned as strings.\n return returnVal.valueObject;\n }\n\n return null;\n }\n\n public AddError(message: string, isWarning: boolean) {\n if (!isWarning) {\n if (this._currentErrors == null) this._currentErrors = [];\n this._currentErrors.push(message);\n } else {\n if (this._currentWarnings == null) this._currentWarnings = [];\n this._currentWarnings.push(message);\n }\n }\n\n public OutputStreamDirty() {\n this._outputStreamTextDirty = true;\n this._outputStreamTagsDirty = true;\n }\n\n private _visitCounts: Map<string, number>;\n private _turnIndices: Map<string, number>;\n\n private _outputStreamTextDirty = true;\n private _outputStreamTagsDirty = true;\n\n private _patch: StatePatch | null = null;\n\n private _currentFlow: Flow;\n private _aliveFlowNames: string[] | null = null;\n private _namedFlows: Map<string, Flow> | null = null;\n private readonly kDefaultFlowName = \"DEFAULT_FLOW\";\n private _aliveFlowNamesDirty: boolean = true;\n}\n", "// This is simple replacement of the Stopwatch class from the .NET Framework.\n// The original class can count time with much more accuracy than the Javascript version.\n// It might be worth considering using `window.performance` in the browser\n// or `process.hrtime()` in node.\nexport class Stopwatch {\n private startTime: number | undefined;\n\n constructor() {\n this.startTime = undefined;\n }\n\n get ElapsedMilliseconds(): number {\n if (typeof this.startTime === \"undefined\") {\n return 0;\n }\n return new Date().getTime() - this.startTime;\n }\n\n public Start() {\n this.startTime = new Date().getTime();\n }\n public Stop() {\n this.startTime = undefined;\n }\n}\n", "import { Container } from \"./Container\";\nimport { InkObject } from \"./Object\";\nimport { JsonSerialisation } from \"./JsonSerialisation\";\nimport { StoryState } from \"./StoryState\";\nimport { ControlCommand } from \"./ControlCommand\";\nimport { PushPopType } from \"./PushPop\";\nimport { ChoicePoint } from \"./ChoicePoint\";\nimport { Choice } from \"./Choice\";\nimport { Divert } from \"./Divert\";\nimport {\n Value,\n StringValue,\n IntValue,\n DivertTargetValue,\n VariablePointerValue,\n ListValue,\n} from \"./Value\";\nimport { Path } from \"./Path\";\nimport { Void } from \"./Void\";\nimport { Tag } from \"./Tag\";\nimport { VariableAssignment } from \"./VariableAssignment\";\nimport { VariableReference } from \"./VariableReference\";\nimport { NativeFunctionCall } from \"./NativeFunctionCall\";\nimport { StoryException } from \"./StoryException\";\nimport { PRNG } from \"./PRNG\";\nimport { StringBuilder } from \"./StringBuilder\";\nimport { ListDefinitionsOrigin } from \"./ListDefinitionsOrigin\";\nimport { ListDefinition } from \"./ListDefinition\";\nimport { Stopwatch } from \"./StopWatch\";\nimport { Pointer } from \"./Pointer\";\nimport { InkList, InkListItem, KeyValuePair } from \"./InkList\";\nimport { asOrNull, asOrThrows } from \"./TypeAssertion\";\nimport { DebugMetadata } from \"./DebugMetadata\";\nimport { throwNullException } from \"./NullException\";\nimport { SimpleJson } from \"./SimpleJson\";\nimport { ErrorHandler, ErrorType } from \"./Error\";\n\nexport { InkList } from \"./InkList\";\n\nif (!Number.isInteger) {\n Number.isInteger = function isInteger(nVal: any) {\n return (\n typeof nVal === \"number\" &&\n isFinite(nVal) &&\n nVal > -9007199254740992 &&\n nVal < 9007199254740992 &&\n Math.floor(nVal) === nVal\n );\n };\n}\n\nexport class Story extends InkObject {\n public static inkVersionCurrent = 21;\n\n public inkVersionMinimumCompatible = 18;\n\n get currentChoices() {\n let choices: Choice[] = [];\n\n if (this._state === null) {\n return throwNullException(\"this._state\");\n }\n for (let c of this._state.currentChoices) {\n if (!c.isInvisibleDefault) {\n c.index = choices.length;\n choices.push(c);\n }\n }\n\n return choices;\n }\n\n get currentText() {\n this.IfAsyncWeCant(\"call currentText since it's a work in progress\");\n return this.state.currentText;\n }\n\n get currentTags() {\n this.IfAsyncWeCant(\"call currentTags since it's a work in progress\");\n return this.state.currentTags;\n }\n\n get currentErrors() {\n return this.state.currentErrors;\n }\n\n get currentWarnings() {\n return this.state.currentWarnings;\n }\n\n get currentFlowName() {\n return this.state.currentFlowName;\n }\n\n get currentFlowIsDefaultFlow() {\n return this.state.currentFlowIsDefaultFlow;\n }\n\n get aliveFlowNames() {\n return this.state.aliveFlowNames;\n }\n\n get hasError() {\n return this.state.hasError;\n }\n\n get hasWarning() {\n return this.state.hasWarning;\n }\n\n get variablesState() {\n return this.state.variablesState;\n }\n\n get listDefinitions() {\n return this._listDefinitions;\n }\n\n get state() {\n return this._state;\n }\n\n public onError: ErrorHandler | null = null;\n\n public onDidContinue: (() => void) | null = null;\n\n public onMakeChoice: ((arg1: Choice) => void) | null = null;\n\n public onEvaluateFunction: ((arg1: string, arg2: any[]) => void) | null =\n null;\n\n public onCompleteEvaluateFunction:\n | ((arg1: string, arg2: any[], arg3: string, arg4: any) => void)\n | null = null;\n\n public onChoosePathString: ((arg1: string, arg2: any[]) => void) | null =\n null;\n\n // TODO: Implement Profiler\n public StartProfiling() {\n /* */\n }\n public EndProfiling() {\n /* */\n }\n\n constructor(contentContainer: Container, lists: ListDefinition[] | null);\n constructor(jsonString: string);\n constructor(json: Record<string, any>);\n constructor() {\n super();\n\n // Discrimination between constructors\n let contentContainer: Container;\n let lists: ListDefinition[] | null = null;\n let json: Record<string, any> | null = null;\n\n if (arguments[0] instanceof Container) {\n contentContainer = arguments[0] as Container;\n\n if (typeof arguments[1] !== \"undefined\") {\n lists = arguments[1] as ListDefinition[];\n }\n\n // ------ Story (Container contentContainer, List<Runtime.ListDefinition> lists = null)\n this._mainContentContainer = contentContainer;\n // ------\n } else {\n if (typeof arguments[0] === \"string\") {\n let jsonString = arguments[0] as string;\n json = SimpleJson.TextToDictionary(jsonString);\n } else {\n json = arguments[0] as Record<string, any>;\n }\n }\n\n // ------ Story (Container contentContainer, List<Runtime.ListDefinition> lists = null)\n if (lists != null) this._listDefinitions = new ListDefinitionsOrigin(lists);\n\n this._externals = new Map();\n // ------\n\n // ------ Story(string jsonString) : this((Container)null)\n if (json !== null) {\n let rootObject: Record<string, any> = json;\n\n let versionObj = rootObject[\"inkVersion\"];\n if (versionObj == null)\n throw new Error(\n \"ink version number not found. Are you sure it's a valid .ink.json file?\"\n );\n\n let formatFromFile = parseInt(versionObj);\n if (formatFromFile > Story.inkVersionCurrent) {\n throw new Error(\n \"Version of ink used to build story was newer than the current version of the engine\"\n );\n } else if (formatFromFile < this.inkVersionMinimumCompatible) {\n throw new Error(\n \"Version of ink used to build story is too old to be loaded by this version of the engine\"\n );\n } else if (formatFromFile != Story.inkVersionCurrent) {\n console.warn(\n \"WARNING: Version of ink used to build story doesn't match current version of engine. Non-critical, but recommend synchronising.\"\n );\n }\n\n let rootToken = rootObject[\"root\"];\n if (rootToken == null)\n throw new Error(\n \"Root node for ink not found. Are you sure it's a valid .ink.json file?\"\n );\n\n let listDefsObj;\n if ((listDefsObj = rootObject[\"listDefs\"])) {\n this._listDefinitions =\n JsonSerialisation.JTokenToListDefinitions(listDefsObj);\n }\n\n this._mainContentContainer = asOrThrows(\n JsonSerialisation.JTokenToRuntimeObject(rootToken),\n Container\n );\n\n this.ResetState();\n }\n // ------\n }\n\n // Merge together `public string ToJson()` and `void ToJson(SimpleJson.Writer writer)`.\n // Will only return a value if writer was not provided.\n public ToJson(writer?: SimpleJson.Writer): string | void {\n let shouldReturn = false;\n\n if (!writer) {\n shouldReturn = true;\n writer = new SimpleJson.Writer();\n }\n\n writer.WriteObjectStart();\n\n writer.WriteIntProperty(\"inkVersion\", Story.inkVersionCurrent);\n\n writer.WriteProperty(\"root\", (w) =>\n JsonSerialisation.WriteRuntimeContainer(w, this._mainContentContainer)\n );\n\n if (this._listDefinitions != null) {\n writer.WritePropertyStart(\"listDefs\");\n writer.WriteObjectStart();\n\n for (let def of this._listDefinitions.lists) {\n writer.WritePropertyStart(def.name);\n writer.WriteObjectStart();\n\n for (let [key, value] of def.items) {\n let item = InkListItem.fromSerializedKey(key);\n let val = value;\n writer.WriteIntProperty(item.itemName, val);\n }\n\n writer.WriteObjectEnd();\n writer.WritePropertyEnd();\n }\n\n writer.WriteObjectEnd();\n writer.WritePropertyEnd();\n }\n\n writer.WriteObjectEnd();\n\n if (shouldReturn) return writer.toString();\n }\n\n public ResetState() {\n this.IfAsyncWeCant(\"ResetState\");\n\n this._state = new StoryState(this);\n this._state.variablesState.ObserveVariableChange(\n this.VariableStateDidChangeEvent.bind(this)\n );\n\n this.ResetGlobals();\n }\n\n public ResetErrors() {\n if (this._state === null) {\n return throwNullException(\"this._state\");\n }\n this._state.ResetErrors();\n }\n\n public ResetCallstack() {\n this.IfAsyncWeCant(\"ResetCallstack\");\n if (this._state === null) {\n return throwNullException(\"this._state\");\n }\n this._state.ForceEnd();\n }\n\n public ResetGlobals() {\n if (this._mainContentContainer.namedContent.get(\"global decl\")) {\n let originalPointer = this.state.currentPointer.copy();\n\n this.ChoosePath(new Path(\"global decl\"), false);\n\n this.ContinueInternal();\n\n this.state.currentPointer = originalPointer;\n }\n\n this.state.variablesState.SnapshotDefaultGlobals();\n }\n\n public SwitchFlow(flowName: string) {\n this.IfAsyncWeCant(\"switch flow\");\n if (this._asyncSaving) {\n throw new Error(\n \"Story is already in background saving mode, can't switch flow to \" +\n flowName\n );\n }\n\n this.state.SwitchFlow_Internal(flowName);\n }\n\n public RemoveFlow(flowName: string) {\n this.state.RemoveFlow_Internal(flowName);\n }\n\n public SwitchToDefaultFlow() {\n this.state.SwitchToDefaultFlow_Internal();\n }\n\n public Continue() {\n this.ContinueAsync(0);\n return this.currentText;\n }\n\n get canContinue() {\n return this.state.canContinue;\n }\n\n get asyncContinueComplete() {\n return !this._asyncContinueActive;\n }\n\n public ContinueAsync(millisecsLimitAsync: number) {\n if (!this._hasValidatedExternals) this.ValidateExternalBindings();\n\n this.ContinueInternal(millisecsLimitAsync);\n }\n\n public ContinueInternal(millisecsLimitAsync = 0) {\n if (this._profiler != null) this._profiler.PreContinue();\n\n let isAsyncTimeLimited = millisecsLimitAsync > 0;\n this._recursiveContinueCount++;\n\n if (!this._asyncContinueActive) {\n this._asyncContinueActive = isAsyncTimeLimited;\n\n if (!this.canContinue) {\n throw new Error(\n \"Can't continue - should check canContinue before calling Continue\"\n );\n }\n\n this._state.didSafeExit = false;\n this._state.ResetOutput();\n\n if (this._recursiveContinueCount == 1)\n this._state.variablesState.batchObservingVariableChanges = true;\n }\n\n let durationStopwatch = new Stopwatch();\n durationStopwatch.Start();\n\n let outputStreamEndsInNewline = false;\n this._sawLookaheadUnsafeFunctionAfterNewline = false;\n do {\n try {\n outputStreamEndsInNewline = this.ContinueSingleStep();\n } catch (e) {\n if (!(e instanceof StoryException)) throw e;\n\n this.AddError(e.message, undefined, e.useEndLineNumber);\n break;\n }\n\n if (outputStreamEndsInNewline) break;\n\n if (\n this._asyncContinueActive &&\n durationStopwatch.ElapsedMilliseconds > millisecsLimitAsync\n ) {\n break;\n }\n } while (this.canContinue);\n\n durationStopwatch.Stop();\n\n if (outputStreamEndsInNewline || !this.canContinue) {\n if (this._stateSnapshotAtLastNewline !== null) {\n this.RestoreStateSnapshot();\n }\n\n if (!this.canContinue) {\n if (this.state.callStack.canPopThread)\n this.AddError(\n \"Thread available to pop, threads should always be flat by the end of evaluation?\"\n );\n\n if (\n this.state.generatedChoices.length == 0 &&\n !this.state.didSafeExit &&\n this._temporaryEvaluationContainer == null\n ) {\n if (this.state.callStack.CanPop(PushPopType.Tunnel))\n this.AddError(\n \"unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?\"\n );\n else if (this.state.callStack.CanPop(PushPopType.Function))\n this.AddError(\n \"unexpectedly reached end of content. Do you need a '~ return'?\"\n );\n else if (!this.state.callStack.canPop)\n this.AddError(\n \"ran out of content. Do you need a '-> DONE' or '-> END'?\"\n );\n else\n this.AddError(\n \"unexpectedly reached end of content for unknown reason. Please debug compiler!\"\n );\n }\n }\n\n this.state.didSafeExit = false;\n this._sawLookaheadUnsafeFunctionAfterNewline = false;\n\n if (this._recursiveContinueCount == 1)\n this._state.variablesState.batchObservingVariableChanges = false;\n\n this._asyncContinueActive = false;\n if (this.onDidContinue !== null) this.onDidContinue();\n }\n\n this._recursiveContinueCount--;\n\n if (this._profiler != null) this._profiler.PostContinue();\n\n // In the following code, we're masking a lot of non-null assertion,\n // because testing for against `hasError` or `hasWarning` makes sure\n // the arrays are present and contain at least one element.\n if (this.state.hasError || this.state.hasWarning) {\n if (this.onError !== null) {\n if (this.state.hasError) {\n for (let err of this.state.currentErrors!) {\n this.onError(err, ErrorType.Error);\n }\n }\n if (this.state.hasWarning) {\n for (let err of this.state.currentWarnings!) {\n this.onError(err, ErrorType.Warning);\n }\n }\n this.ResetErrors();\n } else {\n let sb = new StringBuilder();\n sb.Append(\"Ink had \");\n if (this.state.hasError) {\n sb.Append(`${this.state.currentErrors!.length}`);\n sb.Append(\n this.state.currentErrors!.length == 1 ? \" error\" : \"errors\"\n );\n if (this.state.hasWarning) sb.Append(\" and \");\n }\n if (this.state.hasWarning) {\n sb.Append(`${this.state.currentWarnings!.length}`);\n sb.Append(\n this.state.currentWarnings!.length == 1 ? \" warning\" : \"warnings\"\n );\n if (this.state.hasWarning) sb.Append(\" and \");\n }\n sb.Append(\n \". It is strongly suggested that you assign an error handler to story.onError. The first issue was: \"\n );\n sb.Append(\n this.state.hasError\n ? this.state.currentErrors![0]\n : this.state.currentWarnings![0]\n );\n\n throw new StoryException(sb.toString());\n }\n }\n }\n\n public ContinueSingleStep() {\n if (this._profiler != null) this._profiler.PreStep();\n\n this.Step();\n\n if (this._profiler != null) this._profiler.PostStep();\n\n if (!this.canContinue && !this.state.callStack.elementIsEvaluateFromGame) {\n this.TryFollowDefaultInvisibleChoice();\n }\n\n if (this._profiler != null) this._profiler.PreSnapshot();\n\n if (!this.state.inStringEvaluation) {\n if (this._stateSnapshotAtLastNewline !== null) {\n if (this._stateSnapshotAtLastNewline.currentTags === null) {\n return throwNullException(\"this._stateAtLastNewline.currentTags\");\n }\n if (this.state.currentTags === null) {\n return throwNullException(\"this.state.currentTags\");\n }\n\n let change = this.CalculateNewlineOutputStateChange(\n this._stateSnapshotAtLastNewline.currentText,\n this.state.currentText,\n this._stateSnapshotAtLastNewline.currentTags.length,\n this.state.currentTags.length\n );\n\n if (\n change == Story.OutputStateChange.ExtendedBeyondNewline ||\n this._sawLookaheadUnsafeFunctionAfterNewline\n ) {\n this.RestoreStateSnapshot();\n\n return true;\n } else if (change == Story.OutputStateChange.NewlineRemoved) {\n this.DiscardSnapshot();\n }\n }\n\n if (this.state.outputStreamEndsInNewline) {\n if (this.canContinue) {\n if (this._stateSnapshotAtLastNewline == null) this.StateSnapshot();\n } else {\n this.DiscardSnapshot();\n }\n }\n }\n\n if (this._profiler != null) this._profiler.PostSnapshot();\n\n return false;\n }\n\n public CalculateNewlineOutputStateChange(\n prevText: string | null,\n currText: string | null,\n prevTagCount: number,\n currTagCount: number\n ) {\n if (prevText === null) {\n return throwNullException(\"prevText\");\n }\n if (currText === null) {\n return throwNullException(\"currText\");\n }\n\n let newlineStillExists =\n currText.length >= prevText.length &&\n prevText.length > 0 &&\n currText.charAt(prevText.length - 1) == \"\\n\";\n if (\n prevTagCount == currTagCount &&\n prevText.length == currText.length &&\n newlineStillExists\n )\n return Story.OutputStateChange.NoChange;\n\n if (!newlineStillExists) {\n return Story.OutputStateChange.NewlineRemoved;\n }\n\n if (currTagCount > prevTagCount)\n return Story.OutputStateChange.ExtendedBeyondNewline;\n\n for (let i = prevText.length; i < currText.length; i++) {\n let c = currText.charAt(i);\n if (c != \" \" && c != \"\\t\") {\n return Story.OutputStateChange.ExtendedBeyondNewline;\n }\n }\n\n return Story.OutputStateChange.NoChange;\n }\n\n public ContinueMaximally() {\n this.IfAsyncWeCant(\"ContinueMaximally\");\n\n let sb = new StringBuilder();\n\n while (this.canContinue) {\n sb.Append(this.Continue());\n }\n\n return sb.toString();\n }\n\n public ContentAtPath(path: Path) {\n return this.mainContentContainer.ContentAtPath(path);\n }\n\n public KnotContainerWithName(name: string) {\n let namedContainer = this.mainContentContainer.namedContent.get(name);\n if (namedContainer instanceof Container) return namedContainer;\n else return null;\n }\n\n public PointerAtPath(path: Path) {\n if (path.length == 0) return Pointer.Null;\n\n let p = new Pointer();\n\n let pathLengthToUse = path.length;\n\n let result = null;\n if (path.lastComponent === null) {\n return throwNullException(\"path.lastComponent\");\n }\n\n if (path.lastComponent.isIndex) {\n pathLengthToUse = path.length - 1;\n result = this.mainContentContainer.ContentAtPath(\n path,\n undefined,\n pathLengthToUse\n );\n p.container = result.container;\n p.index = path.lastComponent.index;\n } else {\n result = this.mainContentContainer.ContentAtPath(path);\n p.container = result.container;\n p.index = -1;\n }\n\n if (\n result.obj == null ||\n (result.obj == this.mainContentContainer && pathLengthToUse > 0)\n ) {\n this.Error(\n \"Failed to find content at path '\" +\n path +\n \"', and no approximation of it was possible.\"\n );\n } else if (result.approximate)\n this.Warning(\n \"Failed to find content at path '\" +\n path +\n \"', so it was approximated to: '\" +\n result.obj.path +\n \"'.\"\n );\n\n return p;\n }\n\n public StateSnapshot() {\n this._stateSnapshotAtLastNewline = this._state;\n this._state = this._state.CopyAndStartPatching();\n }\n\n public RestoreStateSnapshot() {\n if (this._stateSnapshotAtLastNewline === null) {\n throwNullException(\"_stateSnapshotAtLastNewline\");\n }\n this._stateSnapshotAtLastNewline.RestoreAfterPatch();\n\n this._state = this._stateSnapshotAtLastNewline;\n this._stateSnapshotAtLastNewline = null;\n\n if (!this._asyncSaving) {\n this._state.ApplyAnyPatch();\n }\n }\n\n public DiscardSnapshot() {\n if (!this._asyncSaving) this._state.ApplyAnyPatch();\n\n this._stateSnapshotAtLastNewline = null;\n }\n\n public CopyStateForBackgroundThreadSave() {\n this.IfAsyncWeCant(\"start saving on a background thread\");\n\n if (this._asyncSaving)\n throw new Error(\n \"Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!\"\n );\n\n let stateToSave = this._state;\n this._state = this._state.CopyAndStartPatching();\n this._asyncSaving = true;\n return stateToSave;\n }\n\n public BackgroundSaveComplete() {\n if (this._stateSnapshotAtLastNewline === null) {\n this._state.ApplyAnyPatch();\n }\n\n this._asyncSaving = false;\n }\n\n public Step() {\n let shouldAddToStream = true;\n\n let pointer = this.state.currentPointer.copy();\n if (pointer.isNull) {\n return;\n }\n\n // Container containerToEnter = pointer.Resolve () as Container;\n let containerToEnter = asOrNull(pointer.Resolve(), Container);\n\n while (containerToEnter) {\n this.VisitContainer(containerToEnter, true);\n\n // No content? the most we can do is step past it\n if (containerToEnter.content.length == 0) {\n break;\n }\n\n pointer = Pointer.StartOf(containerToEnter);\n // containerToEnter = pointer.Resolve() as Container;\n containerToEnter = asOrNull(pointer.Resolve(), Container);\n }\n\n this.state.currentPointer = pointer.copy();\n\n if (this._profiler != null) this._profiler.Step(this.state.callStack);\n\n // Is the current content object:\n // - Normal content\n // - Or a logic/flow statement - if so, do it\n // Stop flow if we hit a stack pop when we're unable to pop (e.g. return/done statement in knot\n // that was diverted to rather than called as a function)\n let currentContentObj = pointer.Resolve();\n let isLogicOrFlowControl =\n this.PerformLogicAndFlowControl(currentContentObj);\n\n // Has flow been forced to end by flow control above?\n if (this.state.currentPointer.isNull) {\n return;\n }\n\n if (isLogicOrFlowControl) {\n shouldAddToStream = false;\n }\n\n // Choice with condition?\n // var choicePoint = currentContentObj as ChoicePoint;\n let choicePoint = asOrNull(currentContentObj, ChoicePoint);\n if (choicePoint) {\n let choice = this.ProcessChoice(choicePoint);\n if (choice) {\n this.state.generatedChoices.push(choice);\n }\n\n currentContentObj = null;\n shouldAddToStream = false;\n }\n\n // If the container has no content, then it will be\n // the \"content\" itself, but we skip over it.\n if (currentContentObj instanceof Container) {\n shouldAddToStream = false;\n }\n\n // Content to add to evaluation stack or the output stream\n if (shouldAddToStream) {\n // If we're pushing a variable pointer onto the evaluation stack, ensure that it's specific\n // to our current (possibly temporary) context index. And make a copy of the pointer\n // so that we're not editing the original runtime object.\n // var varPointer = currentContentObj as VariablePointerValue;\n let varPointer = asOrNull(currentContentObj, VariablePointerValue);\n if (varPointer && varPointer.contextIndex == -1) {\n // Create new object so we're not overwriting the story's own data\n let contextIdx = this.state.callStack.ContextForVariableNamed(\n varPointer.variableName\n );\n currentContentObj = new VariablePointerValue(\n varPointer.variableName,\n contextIdx\n );\n }\n\n // Expression evaluation content\n if (this.state.inExpressionEvaluation) {\n this.state.PushEvaluationStack(currentContentObj);\n }\n // Output stream content (i.e. not expression evaluation)\n else {\n this.state.PushToOutputStream(currentContentObj);\n }\n }\n\n // Increment the content pointer, following diverts if necessary\n this.NextContent();\n\n // Starting a thread should be done after the increment to the content pointer,\n // so that when returning from the thread, it returns to the content after this instruction.\n // var controlCmd = currentContentObj as ;\n let controlCmd = asOrNull(currentContentObj, ControlCommand);\n if (\n controlCmd &&\n controlCmd.commandType == ControlCommand.CommandType.StartThread\n ) {\n this.state.callStack.PushThread();\n }\n }\n\n public VisitContainer(container: Container, atStart: boolean) {\n if (!container.countingAtStartOnly || atStart) {\n if (container.visitsShouldBeCounted)\n this.state.IncrementVisitCountForContainer(container);\n\n if (container.turnIndexShouldBeCounted)\n this.state.RecordTurnIndexVisitToContainer(container);\n }\n }\n\n private _prevContainers: Container[] = [];\n public VisitChangedContainersDueToDivert() {\n let previousPointer = this.state.previousPointer.copy();\n let pointer = this.state.currentPointer.copy();\n\n if (pointer.isNull || pointer.index == -1) return;\n\n this._prevContainers.length = 0;\n if (!previousPointer.isNull) {\n // Container prevAncestor = previousPointer.Resolve() as Container ?? previousPointer.container as Container;\n let resolvedPreviousAncestor = previousPointer.Resolve();\n let prevAncestor =\n asOrNull(resolvedPreviousAncestor, Container) ||\n asOrNull(previousPointer.container, Container);\n while (prevAncestor) {\n this._prevContainers.push(prevAncestor);\n // prevAncestor = prevAncestor.parent as Container;\n prevAncestor = asOrNull(prevAncestor.parent, Container);\n }\n }\n\n let currentChildOfContainer = pointer.Resolve();\n\n if (currentChildOfContainer == null) return;\n\n // Container currentContainerAncestor = currentChildOfContainer.parent as Container;\n let currentContainerAncestor = asOrNull(\n currentChildOfContainer.parent,\n Container\n );\n let allChildrenEnteredAtStart = true;\n while (\n currentContainerAncestor &&\n (this._prevContainers.indexOf(currentContainerAncestor) < 0 ||\n currentContainerAncestor.countingAtStartOnly)\n ) {\n // Check whether this ancestor container is being entered at the start,\n // by checking whether the child object is the first.\n let enteringAtStart =\n currentContainerAncestor.content.length > 0 &&\n currentChildOfContainer == currentContainerAncestor.content[0] &&\n allChildrenEnteredAtStart;\n\n if (!enteringAtStart) allChildrenEnteredAtStart = false;\n\n // Mark a visit to this container\n this.VisitContainer(currentContainerAncestor, enteringAtStart);\n\n currentChildOfContainer = currentContainerAncestor;\n // currentContainerAncestor = currentContainerAncestor.parent as Container;\n currentContainerAncestor = asOrNull(\n currentContainerAncestor.parent,\n Container\n );\n }\n }\n\n public PopChoiceStringAndTags(tags: string[]) {\n let choiceOnlyStrVal = asOrThrows(\n this.state.PopEvaluationStack(),\n StringValue\n );\n\n while (\n this.state.evaluationStack.length > 0 &&\n asOrNull(this.state.PeekEvaluationStack(), Tag) != null\n ) {\n let tag = asOrNull(this.state.PopEvaluationStack(), Tag);\n if (tag) tags.push(tag.text);\n }\n return choiceOnlyStrVal.value;\n }\n\n public ProcessChoice(choicePoint: ChoicePoint) {\n let showChoice = true;\n\n // Don't create choice if choice point doesn't pass conditional\n if (choicePoint.hasCondition) {\n let conditionValue = this.state.PopEvaluationStack();\n if (!this.IsTruthy(conditionValue)) {\n showChoice = false;\n }\n }\n\n let startText = \"\";\n let choiceOnlyText = \"\";\n let tags: string[] = [];\n\n if (choicePoint.hasChoiceOnlyContent) {\n choiceOnlyText = this.PopChoiceStringAndTags(tags) || \"\";\n }\n\n if (choicePoint.hasStartContent) {\n startText = this.PopChoiceStringAndTags(tags) || \"\";\n }\n\n // Don't create choice if player has already read this content\n if (choicePoint.onceOnly) {\n let visitCount = this.state.VisitCountForContainer(\n choicePoint.choiceTarget\n );\n if (visitCount > 0) {\n showChoice = false;\n }\n }\n\n // We go through the full process of creating the choice above so\n // that we consume the content for it, since otherwise it'll\n // be shown on the output stream.\n if (!showChoice) {\n return null;\n }\n\n let choice = new Choice();\n choice.targetPath = choicePoint.pathOnChoice;\n choice.sourcePath = choicePoint.path.toString();\n choice.isInvisibleDefault = choicePoint.isInvisibleDefault;\n choice.threadAtGeneration = this.state.callStack.ForkThread();\n choice.tags = tags.reverse(); //C# is a stack\n choice.text = (startText + choiceOnlyText).replace(/^[ \\t]+|[ \\t]+$/g, \"\");\n\n return choice;\n }\n\n public IsTruthy(obj: InkObject) {\n let truthy = false;\n if (obj instanceof Value) {\n let val = obj;\n\n if (val instanceof DivertTargetValue) {\n let divTarget = val;\n this.Error(\n \"Shouldn't use a divert target (to \" +\n divTarget.targetPath +\n \") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)\"\n );\n return false;\n }\n\n return val.isTruthy;\n }\n return truthy;\n }\n\n public PerformLogicAndFlowControl(contentObj: InkObject | null) {\n if (contentObj == null) {\n return false;\n }\n\n // Divert\n if (contentObj instanceof Divert) {\n let currentDivert = contentObj;\n\n if (currentDivert.isConditional) {\n let conditionValue = this.state.PopEvaluationStack();\n\n // False conditional? Cancel divert\n if (!this.IsTruthy(conditionValue)) return true;\n }\n\n if (currentDivert.hasVariableTarget) {\n let varName = currentDivert.variableDivertName;\n\n let varContents =\n this.state.variablesState.GetVariableWithName(varName);\n\n if (varContents == null) {\n this.Error(\n \"Tried to divert using a target from a variable that could not be found (\" +\n varName +\n \")\"\n );\n } else if (!(varContents instanceof DivertTargetValue)) {\n // var intContent = varContents as IntValue;\n let intContent = asOrNull(varContents, IntValue);\n\n let errorMessage =\n \"Tried to divert to a target from a variable, but the variable (\" +\n varName +\n \") didn't contain a divert target, it \";\n if (intContent instanceof IntValue && intContent.value == 0) {\n errorMessage += \"was empty/null (the value 0).\";\n } else {\n errorMessage += \"contained '\" + varContents + \"'.\";\n }\n\n this.Error(errorMessage);\n }\n\n let target = asOrThrows(varContents, DivertTargetValue);\n this.state.divertedPointer = this.PointerAtPath(target.targetPath);\n } else if (currentDivert.isExternal) {\n this.CallExternalFunction(\n currentDivert.targetPathString,\n currentDivert.externalArgs\n );\n return true;\n } else {\n this.state.divertedPointer = currentDivert.targetPointer.copy();\n }\n\n if (currentDivert.pushesToStack) {\n this.state.callStack.Push(\n currentDivert.stackPushType,\n undefined,\n this.state.outputStream.length\n );\n }\n\n if (this.state.divertedPointer.isNull && !currentDivert.isExternal) {\n if (\n currentDivert &&\n currentDivert.debugMetadata &&\n currentDivert.debugMetadata.sourceName != null\n ) {\n this.Error(\n \"Divert target doesn't exist: \" +\n currentDivert.debugMetadata.sourceName\n );\n } else {\n this.Error(\"Divert resolution failed: \" + currentDivert);\n }\n }\n\n return true;\n }\n\n // Start/end an expression evaluation? Or print out the result?\n else if (contentObj instanceof ControlCommand) {\n let evalCommand = contentObj;\n\n switch (evalCommand.commandType) {\n case ControlCommand.CommandType.EvalStart:\n this.Assert(\n this.state.inExpressionEvaluation === false,\n \"Already in expression evaluation?\"\n );\n this.state.inExpressionEvaluation = true;\n break;\n\n case ControlCommand.CommandType.EvalEnd:\n this.Assert(\n this.state.inExpressionEvaluation === true,\n \"Not in expression evaluation mode\"\n );\n this.state.inExpressionEvaluation = false;\n break;\n\n case ControlCommand.CommandType.EvalOutput:\n // If the expression turned out to be empty, there may not be anything on the stack\n if (this.state.evaluationStack.length > 0) {\n let output = this.state.PopEvaluationStack();\n\n // Functions may evaluate to Void, in which case we skip output\n if (!(output instanceof Void)) {\n // TODO: Should we really always blanket convert to string?\n // It would be okay to have numbers in the output stream the\n // only problem is when exporting text for viewing, it skips over numbers etc.\n let text = new StringValue(output.toString());\n\n this.state.PushToOutputStream(text);\n }\n }\n break;\n\n case ControlCommand.CommandType.NoOp:\n break;\n\n case ControlCommand.CommandType.Duplicate:\n this.state.PushEvaluationStack(this.state.PeekEvaluationStack());\n break;\n\n case ControlCommand.CommandType.PopEvaluatedValue:\n this.state.PopEvaluationStack();\n break;\n\n case ControlCommand.CommandType.PopFunction:\n case ControlCommand.CommandType.PopTunnel:\n let popType =\n evalCommand.commandType == ControlCommand.CommandType.PopFunction\n ? PushPopType.Function\n : PushPopType.Tunnel;\n\n let overrideTunnelReturnTarget: DivertTargetValue | null = null;\n if (popType == PushPopType.Tunnel) {\n let popped = this.state.PopEvaluationStack();\n // overrideTunnelReturnTarget = popped as DivertTargetValue;\n overrideTunnelReturnTarget = asOrNull(popped, DivertTargetValue);\n if (overrideTunnelReturnTarget === null) {\n this.Assert(\n popped instanceof Void,\n \"Expected void if ->-> doesn't override target\"\n );\n }\n }\n\n if (this.state.TryExitFunctionEvaluationFromGame()) {\n break;\n } else if (\n this.state.callStack.currentElement.type != popType ||\n !this.state.callStack.canPop\n ) {\n let names: Map<PushPopType, string> = new Map();\n names.set(\n PushPopType.Function,\n \"function return statement (~ return)\"\n );\n names.set(PushPopType.Tunnel, \"tunnel onwards statement (->->)\");\n\n let expected = names.get(this.state.callStack.currentElement.type);\n if (!this.state.callStack.canPop) {\n expected = \"end of flow (-> END or choice)\";\n }\n\n let errorMsg =\n \"Found \" + names.get(popType) + \", when expected \" + expected;\n\n this.Error(errorMsg);\n } else {\n this.state.PopCallStack();\n\n if (overrideTunnelReturnTarget)\n this.state.divertedPointer = this.PointerAtPath(\n overrideTunnelReturnTarget.targetPath\n );\n }\n break;\n\n case ControlCommand.CommandType.BeginString:\n this.state.PushToOutputStream(evalCommand);\n\n this.Assert(\n this.state.inExpressionEvaluation === true,\n \"Expected to be in an expression when evaluating a string\"\n );\n this.state.inExpressionEvaluation = false;\n break;\n\n // Leave it to story.currentText and story.currentTags to sort out the text from the tags\n // This is mostly because we can't always rely on the existence of EndTag, and we don't want\n // to try and flatten dynamic tags to strings every time \\n is pushed to output\n case ControlCommand.CommandType.BeginTag:\n this.state.PushToOutputStream(evalCommand);\n break;\n\n // EndTag has 2 modes:\n // - When in string evaluation (for choices)\n // - Normal\n //\n // The only way you could have an EndTag in the middle of\n // string evaluation is if we're currently generating text for a\n // choice, such as:\n //\n // + choice # tag\n //\n // In the above case, the ink will be run twice:\n // - First, to generate the choice text. String evaluation\n // will be on, and the final string will be pushed to the\n // evaluation stack, ready to be popped to make a Choice\n // object.\n // - Second, when ink generates text after choosing the choice.\n // On this ocassion, it's not in string evaluation mode.\n //\n // On the writing side, we disallow manually putting tags within\n // strings like this:\n //\n // {\"hello # world\"}\n //\n // So we know that the tag must be being generated as part of\n // choice content. Therefore, when the tag has been generated,\n // we push it onto the evaluation stack in the exact same way\n // as the string for the choice content.\n case ControlCommand.CommandType.EndTag: {\n if (this.state.inStringEvaluation) {\n let contentStackForTag: InkObject[] = [];\n let outputCountConsumed = 0;\n for (let i = this.state.outputStream.length - 1; i >= 0; --i) {\n let obj = this.state.outputStream[i];\n outputCountConsumed++;\n\n // var command = obj as ControlCommand;\n let command = asOrNull(obj, ControlCommand);\n if (command != null) {\n if (\n command.commandType == ControlCommand.CommandType.BeginTag\n ) {\n break;\n } else {\n this.Error(\n \"Unexpected ControlCommand while extracting tag from choice\"\n );\n break;\n }\n }\n if (obj instanceof StringValue) {\n contentStackForTag.push(obj);\n }\n }\n\n // Consume the content that was produced for this string\n this.state.PopFromOutputStream(outputCountConsumed);\n // Build string out of the content we collected\n let sb = new StringBuilder();\n for (let strVal of contentStackForTag.reverse()) {\n sb.Append(strVal.toString());\n }\n let choiceTag = new Tag(\n this.state.CleanOutputWhitespace(sb.toString())\n );\n // Pushing to the evaluation stack means it gets picked up\n // when a Choice is generated from the next Choice Point.\n this.state.PushEvaluationStack(choiceTag);\n } else {\n // Otherwise! Simply push EndTag, so that in the output stream we\n // have a structure of: [BeginTag, \"the tag content\", EndTag]\n this.state.PushToOutputStream(evalCommand);\n }\n break;\n }\n\n case ControlCommand.CommandType.EndString: {\n let contentStackForString: InkObject[] = [];\n let contentToRetain: InkObject[] = [];\n\n let outputCountConsumed = 0;\n for (let i = this.state.outputStream.length - 1; i >= 0; --i) {\n let obj = this.state.outputStream[i];\n\n outputCountConsumed++;\n\n // var command = obj as ControlCommand;\n let command = asOrNull(obj, ControlCommand);\n if (\n command &&\n command.commandType == ControlCommand.CommandType.BeginString\n ) {\n break;\n }\n if (obj instanceof Tag) {\n contentToRetain.push(obj);\n }\n if (obj instanceof StringValue) {\n contentStackForString.push(obj);\n }\n }\n\n // Consume the content that was produced for this string\n this.state.PopFromOutputStream(outputCountConsumed);\n\n // Rescue the tags that we want actually to keep on the output stack\n // rather than consume as part of the string we're building.\n // At the time of writing, this only applies to Tag objects generated\n // by choices, which are pushed to the stack during string generation.\n for (let rescuedTag of contentToRetain)\n this.state.PushToOutputStream(rescuedTag);\n\n // The C# version uses a Stack for contentStackForString, but we're\n // using a simple array, so we need to reverse it before using it\n contentStackForString = contentStackForString.reverse();\n\n // Build string out of the content we collected\n let sb = new StringBuilder();\n for (let c of contentStackForString) {\n sb.Append(c.toString());\n }\n\n // Return to expression evaluation (from content mode)\n this.state.inExpressionEvaluation = true;\n this.state.PushEvaluationStack(new StringValue(sb.toString()));\n break;\n }\n\n case ControlCommand.CommandType.ChoiceCount:\n let choiceCount = this.state.generatedChoices.length;\n this.state.PushEvaluationStack(new IntValue(choiceCount));\n break;\n\n case ControlCommand.CommandType.Turns:\n this.state.PushEvaluationStack(\n new IntValue(this.state.currentTurnIndex + 1)\n );\n break;\n\n case ControlCommand.CommandType.TurnsSince:\n case ControlCommand.CommandType.ReadCount:\n let target = this.state.PopEvaluationStack();\n if (!(target instanceof DivertTargetValue)) {\n let extraNote = \"\";\n if (target instanceof IntValue)\n extraNote =\n \". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?\";\n this.Error(\n \"TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw \" +\n target +\n extraNote\n );\n break;\n }\n\n // var divertTarget = target as DivertTargetValue;\n let divertTarget = asOrThrows(target, DivertTargetValue);\n // var container = ContentAtPath (divertTarget.targetPath).correctObj as Container;\n let container = asOrNull(\n this.ContentAtPath(divertTarget.targetPath).correctObj,\n Container\n );\n\n let eitherCount;\n if (container != null) {\n if (\n evalCommand.commandType == ControlCommand.CommandType.TurnsSince\n )\n eitherCount = this.state.TurnsSinceForContainer(container);\n else eitherCount = this.state.VisitCountForContainer(container);\n } else {\n if (\n evalCommand.commandType == ControlCommand.CommandType.TurnsSince\n )\n eitherCount = -1;\n else eitherCount = 0;\n\n this.Warning(\n \"Failed to find container for \" +\n evalCommand.toString() +\n \" lookup at \" +\n divertTarget.targetPath.toString()\n );\n }\n\n this.state.PushEvaluationStack(new IntValue(eitherCount));\n break;\n\n case ControlCommand.CommandType.Random: {\n let maxInt = asOrNull(this.state.PopEvaluationStack(), IntValue);\n let minInt = asOrNull(this.state.PopEvaluationStack(), IntValue);\n\n if (minInt == null || minInt instanceof IntValue === false)\n return this.Error(\n \"Invalid value for minimum parameter of RANDOM(min, max)\"\n );\n\n if (maxInt == null || maxInt instanceof IntValue === false)\n return this.Error(\n \"Invalid value for maximum parameter of RANDOM(min, max)\"\n );\n\n // Originally a primitive type, but here, can be null.\n // TODO: Replace by default value?\n if (maxInt.value === null) {\n return throwNullException(\"maxInt.value\");\n }\n if (minInt.value === null) {\n return throwNullException(\"minInt.value\");\n }\n\n // This code is differs a bit from the reference implementation, since\n // JavaScript has no true integers. Hence integer arithmetics and\n // interger overflows don't apply here. A loss of precision can\n // happen with big numbers however.\n //\n // The case where 'randomRange' is lower than zero is handled below,\n // so there's no need to test against Number.MIN_SAFE_INTEGER.\n let randomRange = maxInt.value - minInt.value + 1;\n if (!isFinite(randomRange) || randomRange > Number.MAX_SAFE_INTEGER) {\n randomRange = Number.MAX_SAFE_INTEGER;\n this.Error(\n \"RANDOM was called with a range that exceeds the size that ink numbers can use.\"\n );\n }\n if (randomRange <= 0)\n this.Error(\n \"RANDOM was called with minimum as \" +\n minInt.value +\n \" and maximum as \" +\n maxInt.value +\n \". The maximum must be larger\"\n );\n\n let resultSeed = this.state.storySeed + this.state.previousRandom;\n let random = new PRNG(resultSeed);\n\n let nextRandom = random.next();\n let chosenValue = (nextRandom % randomRange) + minInt.value;\n this.state.PushEvaluationStack(new IntValue(chosenValue));\n\n // Next random number (rather than keeping the Random object around)\n this.state.previousRandom = nextRandom;\n break;\n }\n\n case ControlCommand.CommandType.SeedRandom:\n let seed = asOrNull(this.state.PopEvaluationStack(), IntValue);\n if (seed == null || seed instanceof IntValue === false)\n return this.Error(\"Invalid value passed to SEED_RANDOM\");\n\n // Originally a primitive type, but here, can be null.\n // TODO: Replace by default value?\n if (seed.value === null) {\n return throwNullException(\"minInt.value\");\n }\n\n this.state.storySeed = seed.value;\n this.state.previousRandom = 0;\n\n this.state.PushEvaluationStack(new Void());\n break;\n\n case ControlCommand.CommandType.VisitIndex:\n let count =\n this.state.VisitCountForContainer(\n this.state.currentPointer.container\n ) - 1; // index not count\n this.state.PushEvaluationStack(new IntValue(count));\n break;\n\n case ControlCommand.CommandType.SequenceShuffleIndex:\n let shuffleIndex = this.NextSequenceShuffleIndex();\n this.state.PushEvaluationStack(new IntValue(shuffleIndex));\n break;\n\n case ControlCommand.CommandType.StartThread:\n // Handled in main step function\n break;\n\n case ControlCommand.CommandType.Done:\n // We may exist in the context of the initial\n // act of creating the thread, or in the context of\n // evaluating the content.\n if (this.state.callStack.canPopThread) {\n this.state.callStack.PopThread();\n }\n\n // In normal flow - allow safe exit without warning\n else {\n this.state.didSafeExit = true;\n\n // Stop flow in current thread\n this.state.currentPointer = Pointer.Null;\n }\n\n break;\n\n // Force flow to end completely\n case ControlCommand.CommandType.End:\n this.state.ForceEnd();\n break;\n\n case ControlCommand.CommandType.ListFromInt:\n // var intVal = state.PopEvaluationStack () as IntValue;\n let intVal = asOrNull(this.state.PopEvaluationStack(), IntValue);\n // var listNameVal = state.PopEvaluationStack () as StringValue;\n let listNameVal = asOrThrows(\n this.state.PopEvaluationStack(),\n StringValue\n );\n\n if (intVal === null) {\n throw new StoryException(\n \"Passed non-integer when creating a list element from a numerical value.\"\n );\n }\n\n let generatedListValue = null;\n\n if (this.listDefinitions === null) {\n return throwNullException(\"this.listDefinitions\");\n }\n let foundListDef = this.listDefinitions.TryListGetDefinition(\n listNameVal.value,\n null\n );\n if (foundListDef.exists) {\n // Originally a primitive type, but here, can be null.\n // TODO: Replace by default value?\n if (intVal.value === null) {\n return throwNullException(\"minInt.value\");\n }\n\n let foundItem = foundListDef.result!.TryGetItemWithValue(\n intVal.value,\n InkListItem.Null\n );\n if (foundItem.exists) {\n generatedListValue = new ListValue(\n foundItem.result!,\n intVal.value\n );\n }\n } else {\n throw new StoryException(\n \"Failed to find LIST called \" + listNameVal.value\n );\n }\n\n if (generatedListValue == null) generatedListValue = new ListValue();\n\n this.state.PushEvaluationStack(generatedListValue);\n break;\n\n case ControlCommand.CommandType.ListRange:\n let max = asOrNull(this.state.PopEvaluationStack(), Value);\n let min = asOrNull(this.state.PopEvaluationStack(), Value);\n\n // var targetList = state.PopEvaluationStack () as ListValue;\n let targetList = asOrNull(this.state.PopEvaluationStack(), ListValue);\n\n if (targetList === null || min === null || max === null)\n throw new StoryException(\n \"Expected list, minimum and maximum for LIST_RANGE\"\n );\n\n if (targetList.value === null) {\n return throwNullException(\"targetList.value\");\n }\n let result = targetList.value.ListWithSubRange(\n min.valueObject,\n max.valueObject\n );\n\n this.state.PushEvaluationStack(new ListValue(result));\n break;\n\n case ControlCommand.CommandType.ListRandom: {\n let listVal = this.state.PopEvaluationStack() as ListValue;\n if (listVal === null)\n throw new StoryException(\"Expected list for LIST_RANDOM\");\n\n let list = listVal.value;\n\n let newList: InkList | null = null;\n\n if (list === null) {\n throw throwNullException(\"list\");\n }\n if (list.Count == 0) {\n newList = new InkList();\n } else {\n // Generate a random index for the element to take\n let resultSeed = this.state.storySeed + this.state.previousRandom;\n let random = new PRNG(resultSeed);\n\n let nextRandom = random.next();\n let listItemIndex = nextRandom % list.Count;\n\n // This bit is a little different from the original\n // C# code, since iterators do not work in the same way.\n // First, we iterate listItemIndex - 1 times, calling next().\n // The listItemIndex-th time is made outside of the loop,\n // in order to retrieve the value.\n let listEnumerator = list.entries();\n for (let i = 0; i <= listItemIndex - 1; i++) {\n listEnumerator.next();\n }\n let value = listEnumerator.next().value;\n let randomItem: KeyValuePair<InkListItem, number> = {\n Key: InkListItem.fromSerializedKey(value[0]),\n Value: value[1],\n };\n\n // Origin list is simply the origin of the one element\n if (randomItem.Key.originName === null) {\n return throwNullException(\"randomItem.Key.originName\");\n }\n newList = new InkList(randomItem.Key.originName, this);\n newList.Add(randomItem.Key, randomItem.Value);\n\n this.state.previousRandom = nextRandom;\n }\n\n this.state.PushEvaluationStack(new ListValue(newList));\n break;\n }\n\n default:\n this.Error(\"unhandled ControlCommand: \" + evalCommand);\n break;\n }\n\n return true;\n }\n\n // Variable assignment\n else if (contentObj instanceof VariableAssignment) {\n let varAss = contentObj;\n let assignedVal = this.state.PopEvaluationStack();\n\n this.state.variablesState.Assign(varAss, assignedVal);\n\n return true;\n }\n\n // Variable reference\n else if (contentObj instanceof VariableReference) {\n let varRef = contentObj;\n let foundValue = null;\n\n // Explicit read count value\n if (varRef.pathForCount != null) {\n let container = varRef.containerForCount;\n let count = this.state.VisitCountForContainer(container);\n foundValue = new IntValue(count);\n }\n\n // Normal variable reference\n else {\n foundValue = this.state.variablesState.GetVariableWithName(varRef.name);\n\n if (foundValue == null) {\n this.Warning(\n \"Variable not found: '\" +\n varRef.name +\n \"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit. Globals are always given a default value on load if a value doesn't exist in the save state.\"\n );\n foundValue = new IntValue(0);\n }\n }\n\n this.state.PushEvaluationStack(foundValue);\n\n return true;\n }\n\n // Native function call\n else if (contentObj instanceof NativeFunctionCall) {\n let func = contentObj;\n let funcParams = this.state.PopEvaluationStack(func.numberOfParameters);\n let result = func.Call(funcParams);\n this.state.PushEvaluationStack(result);\n return true;\n }\n\n // No control content, must be ordinary content\n return false;\n }\n\n public ChoosePathString(\n path: string,\n resetCallstack = true,\n args: any[] = []\n ) {\n this.IfAsyncWeCant(\"call ChoosePathString right now\");\n if (this.onChoosePathString !== null) this.onChoosePathString(path, args);\n\n if (resetCallstack) {\n this.ResetCallstack();\n } else {\n if (this.state.callStack.currentElement.type == PushPopType.Function) {\n let funcDetail = \"\";\n let container =\n this.state.callStack.currentElement.currentPointer.container;\n if (container != null) {\n funcDetail = \"(\" + container.path.toString() + \") \";\n }\n throw new Error(\n \"Story was running a function \" +\n funcDetail +\n \"when you called ChoosePathString(\" +\n path +\n \") - this is almost certainly not not what you want! Full stack trace: \\n\" +\n this.state.callStack.callStackTrace\n );\n }\n }\n\n this.state.PassArgumentsToEvaluationStack(args);\n this.ChoosePath(new Path(path));\n }\n\n public IfAsyncWeCant(activityStr: string) {\n if (this._asyncContinueActive)\n throw new Error(\n \"Can't \" +\n activityStr +\n \". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.\"\n );\n }\n\n public ChoosePath(p: Path, incrementingTurnIndex: boolean = true) {\n this.state.SetChosenPath(p, incrementingTurnIndex);\n\n // Take a note of newly visited containers for read counts etc\n this.VisitChangedContainersDueToDivert();\n }\n\n public ChooseChoiceIndex(choiceIdx: number) {\n choiceIdx = choiceIdx;\n let choices = this.currentChoices;\n this.Assert(\n choiceIdx >= 0 && choiceIdx < choices.length,\n \"choice out of range\"\n );\n\n let choiceToChoose = choices[choiceIdx];\n if (this.onMakeChoice !== null) this.onMakeChoice(choiceToChoose);\n\n if (choiceToChoose.threadAtGeneration === null) {\n return throwNullException(\"choiceToChoose.threadAtGeneration\");\n }\n if (choiceToChoose.targetPath === null) {\n return throwNullException(\"choiceToChoose.targetPath\");\n }\n\n this.state.callStack.currentThread = choiceToChoose.threadAtGeneration;\n\n this.ChoosePath(choiceToChoose.targetPath);\n }\n\n public HasFunction(functionName: string) {\n try {\n return this.KnotContainerWithName(functionName) != null;\n } catch (e) {\n return false;\n }\n }\n\n public EvaluateFunction(\n functionName: string,\n args: any[] = [],\n returnTextOutput: boolean = false\n ): Story.EvaluateFunctionTextOutput | any {\n // EvaluateFunction behaves slightly differently than the C# version.\n // In C#, you can pass a (second) parameter `out textOutput` to get the\n // text outputted by the function. This is not possible in js. Instead,\n // we maintain the regular signature (functionName, args), plus an\n // optional third parameter returnTextOutput. If set to true, we will\n // return both the textOutput and the returned value, as an object.\n\n if (this.onEvaluateFunction !== null)\n this.onEvaluateFunction(functionName, args);\n\n this.IfAsyncWeCant(\"evaluate a function\");\n\n if (functionName == null) {\n throw new Error(\"Function is null\");\n } else if (functionName == \"\" || functionName.trim() == \"\") {\n throw new Error(\"Function is empty or white space.\");\n }\n\n let funcContainer = this.KnotContainerWithName(functionName);\n if (funcContainer == null) {\n throw new Error(\"Function doesn't exist: '\" + functionName + \"'\");\n }\n\n let outputStreamBefore: InkObject[] = [];\n outputStreamBefore.push(...this.state.outputStream);\n this._state.ResetOutput();\n\n this.state.StartFunctionEvaluationFromGame(funcContainer, args);\n\n // Evaluate the function, and collect the string output\n let stringOutput = new StringBuilder();\n while (this.canContinue) {\n stringOutput.Append(this.Continue());\n }\n let textOutput = stringOutput.toString();\n\n this._state.ResetOutput(outputStreamBefore);\n\n let result = this.state.CompleteFunctionEvaluationFromGame();\n if (this.onCompleteEvaluateFunction != null)\n this.onCompleteEvaluateFunction(functionName, args, textOutput, result);\n\n return returnTextOutput ? { returned: result, output: textOutput } : result;\n }\n\n public EvaluateExpression(exprContainer: Container) {\n let startCallStackHeight = this.state.callStack.elements.length;\n\n this.state.callStack.Push(PushPopType.Tunnel);\n\n this._temporaryEvaluationContainer = exprContainer;\n\n this.state.GoToStart();\n\n let evalStackHeight = this.state.evaluationStack.length;\n\n this.Continue();\n\n this._temporaryEvaluationContainer = null;\n\n // Should have fallen off the end of the Container, which should\n // have auto-popped, but just in case we didn't for some reason,\n // manually pop to restore the state (including currentPath).\n if (this.state.callStack.elements.length > startCallStackHeight) {\n this.state.PopCallStack();\n }\n\n let endStackHeight = this.state.evaluationStack.length;\n if (endStackHeight > evalStackHeight) {\n return this.state.PopEvaluationStack();\n } else {\n return null;\n }\n }\n\n public allowExternalFunctionFallbacks: boolean = false;\n\n public CallExternalFunction(\n funcName: string | null,\n numberOfArguments: number\n ) {\n if (funcName === null) {\n return throwNullException(\"funcName\");\n }\n let funcDef = this._externals.get(funcName);\n let fallbackFunctionContainer = null;\n\n let foundExternal = typeof funcDef !== \"undefined\";\n\n if (\n foundExternal &&\n !funcDef!.lookAheadSafe &&\n this._stateSnapshotAtLastNewline !== null\n ) {\n this._sawLookaheadUnsafeFunctionAfterNewline = true;\n return;\n }\n\n if (!foundExternal) {\n if (this.allowExternalFunctionFallbacks) {\n fallbackFunctionContainer = this.KnotContainerWithName(funcName);\n this.Assert(\n fallbackFunctionContainer !== null,\n \"Trying to call EXTERNAL function '\" +\n funcName +\n \"' which has not been bound, and fallback ink function could not be found.\"\n );\n\n // Divert direct into fallback function and we're done\n this.state.callStack.Push(\n PushPopType.Function,\n undefined,\n this.state.outputStream.length\n );\n this.state.divertedPointer = Pointer.StartOf(fallbackFunctionContainer);\n return;\n } else {\n this.Assert(\n false,\n \"Trying to call EXTERNAL function '\" +\n funcName +\n \"' which has not been bound (and ink fallbacks disabled).\"\n );\n }\n }\n\n // Pop arguments\n let args: any[] = [];\n for (let i = 0; i < numberOfArguments; ++i) {\n // var poppedObj = state.PopEvaluationStack () as Value;\n let poppedObj = asOrThrows(this.state.PopEvaluationStack(), Value);\n let valueObj = poppedObj.valueObject;\n args.push(valueObj);\n }\n\n // Reverse arguments from the order they were popped,\n // so they're the right way round again.\n args.reverse();\n\n // Run the function!\n let funcResult = funcDef!.function(args);\n\n // Convert return value (if any) to the a type that the ink engine can use\n let returnObj = null;\n if (funcResult != null) {\n returnObj = Value.Create(funcResult);\n this.Assert(\n returnObj !== null,\n \"Could not create ink value from returned object of type \" +\n typeof funcResult\n );\n } else {\n returnObj = new Void();\n }\n\n this.state.PushEvaluationStack(returnObj);\n }\n\n public BindExternalFunctionGeneral(\n funcName: string,\n func: Story.ExternalFunction,\n lookaheadSafe: boolean = true\n ) {\n this.IfAsyncWeCant(\"bind an external function\");\n this.Assert(\n !this._externals.has(funcName),\n \"Function '\" + funcName + \"' has already been bound.\"\n );\n this._externals.set(funcName, {\n function: func,\n lookAheadSafe: lookaheadSafe,\n });\n }\n\n public TryCoerce(value: any) {\n // We're skipping type coercition in this implementation. First of, js\n // is loosely typed, so it's not that important. Secondly, there is no\n // clean way (AFAIK) for the user to describe what type of parameters\n // they expect.\n return value;\n }\n\n public BindExternalFunction(\n funcName: string,\n func: Story.ExternalFunction,\n lookaheadSafe: boolean = false\n ) {\n this.Assert(func != null, \"Can't bind a null function\");\n\n this.BindExternalFunctionGeneral(\n funcName,\n (args: any) => {\n this.Assert(\n args.length >= func.length,\n \"External function expected \" + func.length + \" arguments\"\n );\n\n let coercedArgs = [];\n for (let i = 0, l = args.length; i < l; i++) {\n coercedArgs[i] = this.TryCoerce(args[i]);\n }\n return func.apply(null, coercedArgs);\n },\n lookaheadSafe\n );\n }\n\n public UnbindExternalFunction(funcName: string) {\n this.IfAsyncWeCant(\"unbind an external a function\");\n this.Assert(\n this._externals.has(funcName),\n \"Function '\" + funcName + \"' has not been bound.\"\n );\n this._externals.delete(funcName);\n }\n\n public ValidateExternalBindings(): void;\n public ValidateExternalBindings(\n c: Container | null,\n missingExternals: Set<string>\n ): void;\n public ValidateExternalBindings(\n o: InkObject | null,\n missingExternals: Set<string>\n ): void;\n public ValidateExternalBindings() {\n let c: Container | null = null;\n let o: InkObject | null = null;\n let missingExternals: Set<string> = arguments[1] || new Set();\n\n if (arguments[0] instanceof Container) {\n c = arguments[0];\n }\n\n if (arguments[0] instanceof InkObject) {\n o = arguments[0];\n }\n\n if (c === null && o === null) {\n this.ValidateExternalBindings(\n this._mainContentContainer,\n missingExternals\n );\n this._hasValidatedExternals = true;\n\n // No problem! Validation complete\n if (missingExternals.size == 0) {\n this._hasValidatedExternals = true;\n } else {\n let message = \"Error: Missing function binding for external\";\n message += missingExternals.size > 1 ? \"s\" : \"\";\n message += \": '\";\n message += Array.from(missingExternals).join(\"', '\");\n message += \"' \";\n message += this.allowExternalFunctionFallbacks\n ? \", and no fallback ink function found.\"\n : \" (ink fallbacks disabled)\";\n\n this.Error(message);\n }\n } else if (c != null) {\n for (let innerContent of c.content) {\n let container = innerContent as Container;\n if (container == null || !container.hasValidName)\n this.ValidateExternalBindings(innerContent, missingExternals);\n }\n for (let [, value] of c.namedContent) {\n this.ValidateExternalBindings(\n asOrNull(value, InkObject),\n missingExternals\n );\n }\n } else if (o != null) {\n let divert = asOrNull(o, Divert);\n if (divert && divert.isExternal) {\n let name = divert.targetPathString;\n if (name === null) {\n return throwNullException(\"name\");\n }\n if (!this._externals.has(name)) {\n if (this.allowExternalFunctionFallbacks) {\n let fallbackFound =\n this.mainContentContainer.namedContent.has(name);\n if (!fallbackFound) {\n missingExternals.add(name);\n }\n } else {\n missingExternals.add(name);\n }\n }\n }\n }\n }\n\n public ObserveVariable(\n variableName: string,\n observer: Story.VariableObserver\n ) {\n this.IfAsyncWeCant(\"observe a new variable\");\n\n if (this._variableObservers === null) this._variableObservers = new Map();\n\n if (!this.state.variablesState.GlobalVariableExistsWithName(variableName))\n throw new Error(\n \"Cannot observe variable '\" +\n variableName +\n \"' because it wasn't declared in the ink story.\"\n );\n\n if (this._variableObservers.has(variableName)) {\n this._variableObservers.get(variableName)!.push(observer);\n } else {\n this._variableObservers.set(variableName, [observer]);\n }\n }\n\n public ObserveVariables(\n variableNames: string[],\n observers: Story.VariableObserver[]\n ) {\n for (let i = 0, l = variableNames.length; i < l; i++) {\n this.ObserveVariable(variableNames[i], observers[i]);\n }\n }\n\n public RemoveVariableObserver(\n observer?: Story.VariableObserver,\n specificVariableName?: string\n ) {\n // A couple of things to know about this method:\n //\n // 1. Since `RemoveVariableObserver` is exposed to the JavaScript world,\n // optionality is marked as `undefined` rather than `null`.\n // To keep things simple, null-checks are performed using regular\n // equality operators, where undefined == null.\n //\n // 2. Since C# delegates are translated to arrays of functions,\n // -= becomes a call to splice and null-checks are replaced by\n // emptiness-checks.\n //\n this.IfAsyncWeCant(\"remove a variable observer\");\n\n if (this._variableObservers === null) return;\n\n if (specificVariableName != null) {\n if (this._variableObservers.has(specificVariableName)) {\n if (observer != null) {\n let variableObservers =\n this._variableObservers.get(specificVariableName);\n if (variableObservers != null) {\n variableObservers.splice(variableObservers.indexOf(observer), 1);\n if (variableObservers.length === 0) {\n this._variableObservers.delete(specificVariableName);\n }\n }\n } else {\n this._variableObservers.delete(specificVariableName);\n }\n }\n } else if (observer != null) {\n let keys = this._variableObservers.keys();\n for (let varName of keys) {\n let variableObservers = this._variableObservers.get(varName);\n if (variableObservers != null) {\n variableObservers.splice(variableObservers.indexOf(observer), 1);\n if (variableObservers.length === 0) {\n this._variableObservers.delete(varName);\n }\n }\n }\n }\n }\n\n public VariableStateDidChangeEvent(\n variableName: string,\n newValueObj: InkObject\n ) {\n if (this._variableObservers === null) return;\n\n let observers = this._variableObservers.get(variableName);\n if (typeof observers !== \"undefined\") {\n if (!(newValueObj instanceof Value)) {\n throw new Error(\n \"Tried to get the value of a variable that isn't a standard type\"\n );\n }\n // var val = newValueObj as Value;\n let val = asOrThrows(newValueObj, Value);\n\n for (let observer of observers) {\n observer(variableName, val.valueObject);\n }\n }\n }\n\n get globalTags() {\n return this.TagsAtStartOfFlowContainerWithPathString(\"\");\n }\n\n public TagsForContentAtPath(path: string) {\n return this.TagsAtStartOfFlowContainerWithPathString(path);\n }\n\n public TagsAtStartOfFlowContainerWithPathString(pathString: string) {\n let path = new Path(pathString);\n\n let flowContainer = this.ContentAtPath(path).container;\n if (flowContainer === null) {\n return throwNullException(\"flowContainer\");\n }\n while (true) {\n let firstContent: InkObject = flowContainer.content[0];\n if (firstContent instanceof Container) flowContainer = firstContent;\n else break;\n }\n\n let inTag = false;\n let tags: string[] | null = null;\n\n for (let c of flowContainer.content) {\n // var tag = c as Runtime.Tag;\n let command = asOrNull(c, ControlCommand);\n\n if (command != null) {\n if (command.commandType == ControlCommand.CommandType.BeginTag) {\n inTag = true;\n } else if (command.commandType == ControlCommand.CommandType.EndTag) {\n inTag = false;\n }\n } else if (inTag) {\n let str = asOrNull(c, StringValue);\n if (str !== null) {\n if (tags === null) tags = [];\n if (str.value !== null) tags.push(str.value);\n } else {\n this.Error(\n \"Tag contained non-text content. Only plain text is allowed when using globalTags or TagsAtContentPath. If you want to evaluate dynamic content, you need to use story.Continue().\"\n );\n }\n } else {\n break;\n }\n }\n\n return tags;\n }\n\n public BuildStringOfHierarchy() {\n let sb = new StringBuilder();\n\n this.mainContentContainer.BuildStringOfHierarchy(\n sb,\n 0,\n this.state.currentPointer.Resolve()\n );\n\n return sb.toString();\n }\n\n public BuildStringOfContainer(container: Container) {\n let sb = new StringBuilder();\n container.BuildStringOfHierarchy(\n sb,\n 0,\n this.state.currentPointer.Resolve()\n );\n return sb.toString();\n }\n\n public NextContent() {\n this.state.previousPointer = this.state.currentPointer.copy();\n\n if (!this.state.divertedPointer.isNull) {\n this.state.currentPointer = this.state.divertedPointer.copy();\n this.state.divertedPointer = Pointer.Null;\n\n this.VisitChangedContainersDueToDivert();\n\n if (!this.state.currentPointer.isNull) {\n return;\n }\n }\n\n let successfulPointerIncrement = this.IncrementContentPointer();\n\n if (!successfulPointerIncrement) {\n let didPop = false;\n\n if (this.state.callStack.CanPop(PushPopType.Function)) {\n this.state.PopCallStack(PushPopType.Function);\n\n if (this.state.inExpressionEvaluation) {\n this.state.PushEvaluationStack(new Void());\n }\n\n didPop = true;\n } else if (this.state.callStack.canPopThread) {\n this.state.callStack.PopThread();\n\n didPop = true;\n } else {\n this.state.TryExitFunctionEvaluationFromGame();\n }\n\n if (didPop && !this.state.currentPointer.isNull) {\n this.NextContent();\n }\n }\n }\n\n public IncrementContentPointer() {\n let successfulIncrement = true;\n\n let pointer = this.state.callStack.currentElement.currentPointer.copy();\n pointer.index++;\n\n if (pointer.container === null) {\n return throwNullException(\"pointer.container\");\n }\n while (pointer.index >= pointer.container.content.length) {\n successfulIncrement = false;\n\n // Container nextAncestor = pointer.container.parent as Container;\n let nextAncestor = asOrNull(pointer.container.parent, Container);\n if (nextAncestor instanceof Container === false) {\n break;\n }\n\n let indexInAncestor = nextAncestor!.content.indexOf(pointer.container);\n if (indexInAncestor == -1) {\n break;\n }\n\n pointer = new Pointer(nextAncestor, indexInAncestor);\n\n pointer.index++;\n\n successfulIncrement = true;\n if (pointer.container === null) {\n return throwNullException(\"pointer.container\");\n }\n }\n\n if (!successfulIncrement) pointer = Pointer.Null;\n\n this.state.callStack.currentElement.currentPointer = pointer.copy();\n\n return successfulIncrement;\n }\n\n public TryFollowDefaultInvisibleChoice() {\n let allChoices = this._state.currentChoices;\n\n let invisibleChoices = allChoices.filter((c) => c.isInvisibleDefault);\n\n if (\n invisibleChoices.length == 0 ||\n allChoices.length > invisibleChoices.length\n )\n return false;\n\n let choice = invisibleChoices[0];\n\n if (choice.targetPath === null) {\n return throwNullException(\"choice.targetPath\");\n }\n\n if (choice.threadAtGeneration === null) {\n return throwNullException(\"choice.threadAtGeneration\");\n }\n\n this.state.callStack.currentThread = choice.threadAtGeneration;\n\n if (this._stateSnapshotAtLastNewline !== null) {\n this.state.callStack.currentThread = this.state.callStack.ForkThread();\n }\n\n this.ChoosePath(choice.targetPath, false);\n\n return true;\n }\n\n public NextSequenceShuffleIndex() {\n // var numElementsIntVal = state.PopEvaluationStack () as IntValue;\n let numElementsIntVal = asOrNull(this.state.PopEvaluationStack(), IntValue);\n if (!(numElementsIntVal instanceof IntValue)) {\n this.Error(\"expected number of elements in sequence for shuffle index\");\n return 0;\n }\n\n let seqContainer = this.state.currentPointer.container;\n if (seqContainer === null) {\n return throwNullException(\"seqContainer\");\n }\n\n // Originally a primitive type, but here, can be null.\n // TODO: Replace by default value?\n if (numElementsIntVal.value === null) {\n return throwNullException(\"numElementsIntVal.value\");\n }\n let numElements = numElementsIntVal.value;\n\n // var seqCountVal = state.PopEvaluationStack () as IntValue;\n let seqCountVal = asOrThrows(this.state.PopEvaluationStack(), IntValue);\n let seqCount = seqCountVal.value;\n\n // Originally a primitive type, but here, can be null.\n // TODO: Replace by default value?\n if (seqCount === null) {\n return throwNullException(\"seqCount\");\n }\n\n let loopIndex = seqCount / numElements;\n let iterationIndex = seqCount % numElements;\n\n let seqPathStr = seqContainer.path.toString();\n let sequenceHash = 0;\n for (let i = 0, l = seqPathStr.length; i < l; i++) {\n sequenceHash += seqPathStr.charCodeAt(i) || 0;\n }\n let randomSeed = sequenceHash + loopIndex + this.state.storySeed;\n let random = new PRNG(Math.floor(randomSeed));\n\n let unpickedIndices = [];\n for (let i = 0; i < numElements; ++i) {\n unpickedIndices.push(i);\n }\n\n for (let i = 0; i <= iterationIndex; ++i) {\n let chosen = random.next() % unpickedIndices.length;\n let chosenIndex = unpickedIndices[chosen];\n unpickedIndices.splice(chosen, 1);\n\n if (i == iterationIndex) {\n return chosenIndex;\n }\n }\n\n throw new Error(\"Should never reach here\");\n }\n\n public Error(message: string, useEndLineNumber = false): never {\n let e = new StoryException(message);\n e.useEndLineNumber = useEndLineNumber;\n throw e;\n }\n\n public Warning(message: string) {\n this.AddError(message, true);\n }\n\n public AddError(\n message: string,\n isWarning = false,\n useEndLineNumber = false\n ) {\n let dm = this.currentDebugMetadata;\n\n let errorTypeStr = isWarning ? \"WARNING\" : \"ERROR\";\n\n if (dm != null) {\n let lineNum = useEndLineNumber ? dm.endLineNumber : dm.startLineNumber;\n message =\n \"RUNTIME \" +\n errorTypeStr +\n \": '\" +\n dm.fileName +\n \"' line \" +\n lineNum +\n \": \" +\n message;\n } else if (!this.state.currentPointer.isNull) {\n message =\n \"RUNTIME \" +\n errorTypeStr +\n \": (\" +\n this.state.currentPointer +\n \"): \" +\n message;\n } else {\n message = \"RUNTIME \" + errorTypeStr + \": \" + message;\n }\n\n this.state.AddError(message, isWarning);\n\n // In a broken state don't need to know about any other errors.\n if (!isWarning) this.state.ForceEnd();\n }\n\n public Assert(condition: boolean, message: string | null = null) {\n if (condition == false) {\n if (message == null) {\n message = \"Story assert\";\n }\n\n throw new Error(message + \" \" + this.currentDebugMetadata);\n }\n }\n\n get currentDebugMetadata(): DebugMetadata | null {\n let dm: DebugMetadata | null;\n\n let pointer = this.state.currentPointer;\n if (!pointer.isNull && pointer.Resolve() !== null) {\n dm = pointer.Resolve()!.debugMetadata;\n if (dm !== null) {\n return dm;\n }\n }\n\n for (let i = this.state.callStack.elements.length - 1; i >= 0; --i) {\n pointer = this.state.callStack.elements[i].currentPointer;\n if (!pointer.isNull && pointer.Resolve() !== null) {\n dm = pointer.Resolve()!.debugMetadata;\n if (dm !== null) {\n return dm;\n }\n }\n }\n\n for (let i = this.state.outputStream.length - 1; i >= 0; --i) {\n let outputObj = this.state.outputStream[i];\n dm = outputObj.debugMetadata;\n if (dm !== null) {\n return dm;\n }\n }\n\n return null;\n }\n\n get mainContentContainer() {\n if (this._temporaryEvaluationContainer) {\n return this._temporaryEvaluationContainer;\n } else {\n return this._mainContentContainer;\n }\n }\n\n /**\n * `_mainContentContainer` is almost guaranteed to be set in the\n * constructor, unless the json is malformed.\n */\n private _mainContentContainer!: Container;\n private _listDefinitions: ListDefinitionsOrigin | null = null;\n\n private _externals: Map<string, Story.ExternalFunctionDef>;\n private _variableObservers: Map<string, Story.VariableObserver[]> | null =\n null;\n private _hasValidatedExternals: boolean = false;\n\n private _temporaryEvaluationContainer: Container | null = null;\n\n /**\n * `state` is almost guaranteed to be set in the constructor, unless\n * using the compiler-specific constructor which will likely not be used in\n * the real world.\n */\n private _state!: StoryState;\n\n private _asyncContinueActive: boolean = false;\n private _stateSnapshotAtLastNewline: StoryState | null = null;\n private _sawLookaheadUnsafeFunctionAfterNewline: boolean = false;\n\n private _recursiveContinueCount: number = 0;\n\n private _asyncSaving: boolean = false;\n\n private _profiler: any | null = null; // TODO: Profiler\n}\n\nexport namespace Story {\n export enum OutputStateChange {\n NoChange = 0,\n ExtendedBeyondNewline = 1,\n NewlineRemoved = 2,\n }\n\n export interface EvaluateFunctionTextOutput {\n returned: any;\n output: string;\n }\n\n export interface ExternalFunctionDef {\n function: ExternalFunction;\n lookAheadSafe: boolean;\n }\n\n export type VariableObserver = (variableName: string, newValue: any) => void;\n export type ExternalFunction = (...args: any) => any;\n}\n", "// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n", "import Afloop from \"afloop\"\nimport Keyb from \"keyb\"\n\n\nexport default new class Loop {\n constructor() {\n this.EXPECTED_FRAMES_PER_SECOND = 60\n this.MAXIMUM_MILLISECONDS_PER_FRAME = 1000\n\n this.time = {\n \"s\": 0,\n \"ms\": 0,\n \"f\": 0,\n }\n }\n start(func) {\n return new Afloop((ms) => {\n ms = Math.min(ms, this.MAXIMUM_MILLISECONDS_PER_FRAME)\n\n // Calculate the delta in\n // different units of time.\n this.delta = {\n \"ms\": ms, // in milliseconds\n \"s\": ms / 1000, // in seconds\n \"f\": ms / (1000 / this.EXPECTED_FRAMES_PER_SECOND), // in frames\n }\n this.time.ms += this.delta.ms\n this.time.s += this.delta.s\n this.time.f += this.delta.f\n\n Keyb.delta = this.delta.ms\n\n func(this.delta)\n })\n }\n}\n", "import Stats from \"stats.js\"\nimport Keyb from \"keyb\"\nimport Poin from \"poin\"\nimport App from \"@frog/source/models/App.js\"\n\nimport games from \"@frog/source/data/games/index.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Unit from \"@frog/source/models/Unit.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nimport Loop from \"@frog/source/utility/Loop.js\"\n//import Audiomix from \"@frog/source/juice/Audiomix.js\"\n\nimport {nanoid} from \"nanoid\"\n\n// import Sleep from \"@frog/source/utility/Sleep.js\"\n\nconst dev = new class Dev {\n constructor() {\n this.isAllyDeathEnabled = true\n this.isAllyCollisionEnabled = true\n\n this.areDevPanelsOpen = false\n this.inProtoMode = false\n\n this.editsSinceLastSave = 0\n this.selectedTemplate = undefined\n this.lastEmptyPositionClicked = undefined\n this.haveProtounitsBeenModified = false\n this.havePlayunitsBeenModified = false\n\n this.actionTrace = []\n\n this.previousProtoUnits = []\n this.nextProtoUnits = []\n this.loadedProtostage = undefined\n this.navigatorTab = \"assets\"\n this.inspectorTab = \"units\"\n\n this.isEnabled = false\n\n if(window.location.hostname == \"localhost\"\n || window.location.hostname == \"127.0.0.1\") {\n // || window.location.hostname.endsWith(\".github.io\")) {\n this.isEnabled = true\n if(window.location.search.includes(\"production\") == false) {\n this.isEnabled = true\n }\n }\n\n if(this.isEnabled != true) return\n\n // Profiling\n this.stats = new Stats()\n this.stats.dom.style.position = \"absolute\"\n this.stats.dom.style.display = \"flex\"\n this.stats.dom.style.zIndex = -1\n Object.values(this.stats.dom.children).forEach((child) => child.style = \"block\")\n this.stats.dom.addEventListener(\"click\", (event) => event.stopPropagation(), true)\n document.body.appendChild(this.stats.dom)\n\n // // Testing\n // import(/* webpackChunkName: \"test.js\" */\"@frog/source/test.js\")\n // import(\"@frog/source/utility/Testrecord.js\")\n // Sleep(20 * 1000).then(() => import(/* webpackChunkName: \"test.js\" */\"@frog/source/test.js\"))\n // Sleep(2 * 1000).then(() => import(/* webpackChunkName: \"test.js\" */\"@frog/source/test.js\"))\n // require(\"@frog/source/test.js\")\n // Sleep(1000).then(() => import(\"@frog/source/test.js\"))\n // import(\"@frog/source/test.js\")\n // import(/* webpackChunkName: \"test.js\" */\"@frog/source/test.js\")\n }\n // === Update Functions === //\n atStartOfLoop() {\n if(this.isEnabled != true) return\n\n if(this.stats != undefined) {\n this.stats.begin()\n }\n\n if(this.loadedProtostage == undefined\n && App.game?.slug != undefined\n && games[App.game.slug].chapters[App.game?.chapter?.slug] != undefined) {\n this.loadedProtostage = games[App.game.slug].chapters[App.game.chapter.slug].stage\n }\n\n if(Keyb.wasJustPressed(\"`\", Loop.delta.ms)) {\n this.areDevPanelsOpen = !this.areDevPanelsOpen\n }\n if(Keyb.wasJustPressed(\"=\", Loop.delta.ms)) {\n this.inProtoMode = !this.inProtoMode\n if(this.inProtoMode == false) {\n this.reloadSavestate(\"livePlaytest\", {\"rejectStaleSavestates\": true})\n }\n }\n\n if(this.inProtoMode == true && this.areDevPanelsOpen == false) {\n this.inProtoMode = false\n }\n\n if(Keyb.wasJustPressed(\"<escape>\", Loop.delta.ms)\n || Keyb.wasJustPressed(\"<backspace>\", Loop.delta.ms)\n || Keyb.wasJustPressed(\"<delete>\", Loop.delta.ms)\n || Poin.wasJustPressed(\"secondary\", true, Loop.delta.ms)) {\n this.selectedTemplate = undefined\n }\n\n if(Keyb.wasJustPressed(\"<backspace>\", Loop.delta.ms)\n || Keyb.wasJustPressed(\"<delete>\", Loop.delta.ms)) {\n this.deleteSelectedUnit()\n }\n }\n atEndOfLoop() {\n if(this.stats != undefined) {\n if(this.isEnabled != true) return\n this.stats.end()\n }\n }\n // === Filesaving Functions === //\n saveUnitsToFile(options) {\n this.notification = {\n \"message\": \"Units saved to file\",\n \"startTime\": Date.now(),\n }\n this.writeToFile({\n \"saveObject\": this.loadedProtostage.units,\n \"fileType\": \"units\",\n \"options\": options\n })\n if(this.havePlayunitsBeenModified == true) {\n window.alert(\"Edits have been made to the playtest units. These will not be saved\")\n }\n this.editsSinceLastSave = 0\n }\n autosaveUnitsToFile() {\n if(history.state != null\n && history.state[\"unitsFile\"] != undefined) {\n //this.saveUnitsToFile()\n localStorage.setItem(\n \"workingBackup_\" + App.game.slug + \"_\" + App.game.chapter.slug,\n JSON.stringify(this.loadedProtostage.units, undefined, 4)\n )\n }\n this.editsSinceLastSave += 1\n }\n async writeToFile({saveObject, fileType, options}) {\n options = options || {}\n const filePointerSlug = fileType+\"File\"\n\n if(history.state == null\n || history.state[filePointerSlug] == undefined\n || history.state.gameSlug != App.game.slug\n || history.state.chapterSlug != App.game.chapter.slug\n || options.isManuallySelectingSavefile == true) {\n const filePointer = await window.showSaveFilePicker({\n \"suggestedName\": fileType+\".json\",\n \"types\": [\n {\n \"description\": \"JSON Files\",\n \"accept\": {\n \"text/*\": [\".json\"],\n },\n },\n ]\n })\n const newHistoryState = {\n \"gameSlug\": App.game.slug,\n \"chapterSlug\": App.game.chapter.slug\n }\n newHistoryState[filePointerSlug] = filePointer\n history.pushState(newHistoryState, \"loaded units file\")\n }\n\n const writable = await history.state[filePointerSlug].createWritable()\n await writable.write(JSON.stringify(saveObject,undefined,4))\n await writable.close()\n }\n saveEncountersToFile(options) {\n this.notification = {\n \"message\": \"Encounters saved to file\",\n \"startTime\": Date.now(),\n }\n const encounters = Object.values(this.loadedProtostage.world.zones).map((encounter) => {\n if(encounter.points == undefined) {\n encounter.points = [\n {\"x\": encounter.x, \"y\": encounter.y},\n {\"x\": encounter.x+encounter.width, \"y\": encounter.y},\n {\"x\": encounter.x+encounter.width, \"y\": encounter.y+encounter.height},\n {\"x\": encounter.x, \"y\": encounter.y+encounter.height},\n ]\n }\n return {\n \"key\": encounter.key || encounter.slug,\n \"zoomout\": encounter.zoomout,\n \"z\": encounter.z,\n \"points\": encounter.points.map((point) => {return {\n \"x\": point.x,\n \"y\": point.y\n }})\n }\n })\n this.writeToFile({\n \"saveObject\": encounters,\n \"fileType\": \"encounters\",\n \"options\": options\n })\n }\n // === Clipboard Functions === //\n writeToClipboard(clippedUnit) {\n navigator.permissions.query({ \"name\": \"clipboard-write\" }).then((result) => {\n if (result.state === \"granted\" || result.state === \"prompt\") {\n navigator.clipboard.writeText(clippedUnit)\n }\n })\n }\n async readFromClipboard() {\n const permissionResult = await navigator.permissions.query({ \"name\": \"clipboard-read\" })\n if ((permissionResult.state === \"granted\" || permissionResult.state === \"prompt\") == false) {\n return undefined\n }\n return await navigator.clipboard.readText()\n }\n // === Undo-Redo Functions === //\n saveToUndo() {\n if(this.isEditingProto()) {\n this.saveProtoUnitsToUndo()\n this.haveProtounitsBeenModified = true\n } else {\n App.game.chapter.saveStage()\n this.havePlayunitsBeenModified = true\n }\n }\n // === Undo Functions\n saveProtoUnitsToUndo() {\n this.pushProtoUnitsToUndo()\n this.clearProtoUnitsToRedo()\n }\n pushProtoUnitsToUndo() {\n const protoUnits = this.loadedProtostage.units\n\n this.previousProtoUnits.push(structuredClone(protoUnits))\n if(this.previousProtoUnits.length > 20) {\n this.previousProtoUnits.shift()\n }\n }\n loadProtoUnitsToUndo() {\n if(this.previousProtoUnits.length > 0) {\n this.saveProtoUnitsToRedo()\n this.loadedProtostage.units = this.previousProtoUnits.pop()\n\n //Audiomix.trigger(\"UndoAction\")\n App.game.chapter.selection.reset()\n App.game.chapter.reloadStage()\n }\n }\n // === Redo Functions\n saveProtoUnitsToRedo() {\n const protoUnits = this.loadedProtostage.units\n\n this.nextProtoUnits.push(structuredClone(protoUnits))\n }\n loadProtoUnitsToRedo() {\n if(this.nextProtoUnits.length > 0) {\n this.pushProtoUnitsToUndo()\n this.loadedProtostage.units = this.nextProtoUnits.pop()\n\n //Audiomix.trigger(\"UndoAction\")\n App.game.chapter.selection.reset()\n App.game.chapter.reloadStage()\n }\n }\n clearProtoUnitsToRedo() {\n this.nextProtoUnits = []\n }\n // === Editing Mode Booleans === //\n isFreezingPlaying() {\n return this.inProtoMode\n }\n isEditingProto() {\n return this.inProtoMode\n }\n isInspectorShowing() {\n return this.areDevPanelsOpen\n }\n isPaletteShowing() {\n return this.areDevPanelsOpen\n }\n // === Unit Creation Functions === //\n createNewUnit(newUnit) {\n this.saveToUndo()\n\n const player = games[App.game.slug].player\n if(player.party.units[newUnit.key] == undefined) {\n newUnit.key = nanoid()\n }\n\n if(this.isEditingProto() == true) {\n this.loadedProtostage.units[newUnit.key] = newUnit\n this.autosaveUnitsToFile()\n } else {\n const gameSlug = App.game.chapter.gameslug\n const chapterSlug = App.game.chapter.slug\n App.game.chapter.stage.units[newUnit.key] = Unit.instantiate({\n \"unit\": newUnit, player, gameSlug, chapterSlug\n })\n App.game.chapter.recalculateStage()\n }\n }\n // === Cut, Copy, Paste Functions === //\n deleteSelectedUnit() {\n const selection = App.game.chapter.selection\n const key = selection.selectedUnitKey || selection.hoveredUnitKey\n if(key != undefined) {\n this.saveToUndo()\n if(this.isEditingProto() == true) {\n if(selection.multiselectedUnitKeys.size > 0) {\n selection.multiselectedUnitKeys.forEach((anotherKey) => {\n delete this.loadedProtostage.units[anotherKey]\n })\n } else {\n delete this.loadedProtostage.units[key]\n }\n this.autosaveUnitsToFile()\n } else {\n delete App.game.chapter.stage.units[key]\n }\n selection.hoveredUnitKey = undefined\n selection.selectedUnitKey = undefined\n selection.multiselectedUnitKeys.clear()\n App.game.chapter.recalculateStage()\n }\n }\n async clipUnit() {\n const selection = App.game.chapter.selection\n const unitKey = selection.selectedUnitKey || selection.hoveredUnitKey\n let selectedUnit = undefined\n if(this.inProtoMode) {\n if(selection.multiselectedUnitKeys.size > 0) {\n selectedUnit = []\n selection.multiselectedUnitKeys.forEach((key) => {\n let unit = structuredClone(this.loadedProtostage.units[key])\n unit.position.x -= selection.position.x\n unit.position.y -= selection.position.y\n selectedUnit.push(unit)\n })\n } else {\n selectedUnit = this.loadedProtostage.units[unitKey]\n }\n } else {\n selectedUnit = copyClippedUnit(App.game.chapter.stage.units[unitKey])\n }\n const stringifiedUnit = JSON.stringify(selectedUnit,undefined,4)\n this.writeToClipboard(stringifiedUnit)\n }\n async pasteUnit() {\n const clipboard = await this.readFromClipboard()\n let newUnit = undefined\n try {\n newUnit = JSON.parse(clipboard)\n } catch (error) {\n console.error(\"Could not parse the clipboard as JSON\")\n console.error(error)\n }\n if(newUnit != undefined) {\n const selection = App.game.chapter.selection\n if(newUnit instanceof Array) {\n selection.multiselectedUnitKeys.clear()\n newUnit.forEach((unit) => {\n unit.position.x += App.game.chapter.selection.position.x\n unit.position.y += App.game.chapter.selection.position.y\n this.createNewUnit(unit)\n\n //selection.multiselectedUnitKeys.add(unit.key)\n })\n\n //selection.selectedUnitKey = newUnit[0].key\n selection.selectedUnitKey = undefined\n selection.clearSelected()\n } else {\n newUnit.position.x = App.game.chapter.selection.position.x\n newUnit.position.y = App.game.chapter.selection.position.y\n this.createNewUnit(newUnit)\n\n //selection.selectedUnitKey = newUnit.key\n selection.selectedUnitKey = undefined\n selection.clearSelected()\n }\n }\n }\n replaySavestate(savestate) {\n App.game.chapter.restart({\"randomSeed\": savestate.randomSeed})\n this.actionTrace = savestate.actionTrace\n for (const savedSelection of savestate.actionTrace) {\n if(savedSelection.type == \"endTurn\") {\n App.game.chapter.endPlayerTurn(App.game.chapter.stage, {\"isReplayingActionTrace\": true})\n continue\n }\n if(savedSelection.type == \"undoAction\") {\n App.game.chapter.undoAction()\n continue\n }\n if(savedSelection.type == \"killAllEnemies\") {\n App.game.chapter.killAllEnemies()\n continue\n }\n\n const unit = App.game.chapter.stage.units[savedSelection.performerKey]\n if(unit == undefined) {\n console.error(\"Terminating savestate replay. This saved action's performer no longer exists: \", savedSelection)\n App.game.chapter.selection.hoveredAction = savedSelection\n break\n }\n const actionlist = unit.actionmap[savedSelection.position.x + \"x\" + savedSelection.position.y]\n if(actionlist == undefined) {\n console.error(\"Terminating savestate replay. This saved action's position no longer has any actions: \", savedSelection)\n App.game.chapter.selection.hoveredAction = savedSelection\n App.game.chapter.selection.selectedUnitKey = savedSelection.performerKey\n break\n }\n const subactionlist = App.game.chapter.selection.findSubactionsInActionlist({unit, actionlist, \"options\": {}})\n const indexedAction = subactionlist.filter((action) => {\n return action.type == savedSelection.type\n && action.skillKey == savedSelection.skillKey\n && action.omegastage.units[action.performerKey].position.x == savedSelection.performerPosition.x\n && action.omegastage.units[action.performerKey].position.y == savedSelection.performerPosition.y\n })[0]\n if(indexedAction == undefined) {\n console.error(\"Terminating savestate replay. This saved action no longer available: \", savedSelection)\n App.game.chapter.selection.hoveredAction = savedSelection\n App.game.chapter.selection.selectedUnitKey = savedSelection.performerKey\n break\n }\n\n App.game.chapter.performAction(indexedAction)\n App.game.chapter.sequence = undefined\n }\n }\n recordSavestate(slug, data) {\n data = data || {}\n if(App.game == undefined) return\n const savestateSlug = \"savestate_\" + App.game.slug + \"_\" + App.game.chapter.slug + \"_\" + slug\n const savestate = {\n \"actionTrace\": this.actionTrace,\n \"randomSeed\": Random.seed,\n \"gameSlug\": App.game.slug,\n \"chapterSlug\": App.game.chapter.slug,\n \"name\": slug,\n \"captureDate\": Date.now(),\n \"data\": data,\n }\n localStorage.setItem(\n savestateSlug,\n JSON.stringify(savestate,undefined,4)\n )\n this.notification = {\n \"message\": \"Recorded savestate: \" + savestateSlug,\n \"startTime\": Date.now(),\n }\n }\n // Reload Savestate looks up a savestate in localstorage\n // If it fails to find the requested savestate it will return false\n reloadSavestate(slug, options) {\n const savestateSlug = \"savestate_\" + App.game.slug + \"_\" + App.game.chapter.slug + \"_\" + slug\n const reloadedSavestate = JSON.parse(localStorage.getItem(savestateSlug))\n const FOUR_HOURS = 1000 * 60 * 60 * 4\n\n options = options || {}\n if(options.rejectStaleSavestates != undefined) {\n if(reloadedSavestate?.captureDate != undefined\n && reloadedSavestate?.captureDate < Date.now() - FOUR_HOURS) {\n return false\n }\n }\n\n if(reloadedSavestate != undefined) {\n this.replaySavestate(reloadedSavestate)\n return true\n } else {\n console.error(\"savestate '\" + savestateSlug + \"' undefined\")\n return false\n }\n }\n onKeyDown() {\n return async (event) => {\n if(event.metaKey == true\n || event.ctrlKey == true) {\n if(event.key == \"s\") {\n const isManuallySelectingSavefile = event.shiftKey || false\n if(Navigation.state.screen == \"DevEncounterEditorScreen\") {\n this.saveEncountersToFile({\"isManuallySelectingSavefile\": isManuallySelectingSavefile})\n } else {\n this.saveUnitsToFile({\"isManuallySelectingSavefile\": isManuallySelectingSavefile})\n }\n event.preventDefault()\n }\n if(event.key == \"x\") {\n this.clipUnit()\n this.deleteSelectedUnit()\n event.preventDefault()\n }\n if(event.key == \"c\") {\n this.clipUnit()\n event.preventDefault()\n }\n if(event.key == \"v\") {\n this.pasteUnit()\n event.preventDefault()\n }\n if(event.key == \"f\") {\n const element = document.getElementById(\"search-palette\")\n if(element != undefined) {\n element.focus()\n }\n event.preventDefault()\n }\n }\n if(this.inProtoMode == true && event.key == \"z\") {\n if(event.shiftKey == true) {\n this.loadProtoUnitsToRedo()\n } else {\n this.loadProtoUnitsToUndo()\n }\n event.preventDefault()\n }\n if(event.metaKey == true\n || event.ctrlKey == true) {\n if(event.key.match(/^[0-9]+$/) != null) {\n this.recordSavestate(event.key)\n event.preventDefault()\n }\n } else {\n if(event.key.match(/^[0-9]+$/) != null) {\n this.reloadSavestate(event.key)\n event.preventDefault()\n }\n }\n if(event.key == \"F7\") {\n this.actionTrace.push({\"type\": \"killAllEnemies\"})\n App.game.chapter.killAllEnemies()\n event.preventDefault()\n }\n }\n }\n}\n\n// === Dev Key Combinations handler === //\ndocument.addEventListener(\"keydown\", dev.onKeyDown())\n\nexport default dev\n\n// === Copying Utilities === //\nfunction copyClippedUnit(unit) {\n if(unit == undefined) return undefined\n return {\n \"key\": unit.key, // unit's individual unique key\n \"position\": unit.position && {\n \"x\": unit.position.x,\n \"y\": unit.position.y,\n \"z\": unit.position.z,\n },\n \"affiliation\": unit.affiliation,\n \"jobKey\": unit.jobKey,\n \"faceKey\": unit.faceKey,\n \"bodyKey\": unit.bodyKey,\n \"health\": unit.health,\n \"maxhealth\": unit.maxhealth,\n \"name\": unit.name,\n \"jobName\": unit.jobName,\n }\n}\n", "\uFEFF{\"inkVersion\":20,\"root\":[[[\"done\",{\"#f\":5,\"#n\":\"g-0\"}],null],\"done\",{\"xchapterprototype_encounter1_turn0start\":[\"^TITLE: Chapter X / Deadweight / In which the undead board / and true allegiances are tested\",\"\\n\",\"^MUSIC: Combat\",\"\\n\",\"^CAPTAIN: ENTERS stage_left\",\"\\n\",\"^CAPTAIN: Avast!\",\"\\n\",\"^CAPTAIN: MOVES 10x7\",\"\\n\",\"^CAPTAIN:\",\"\\n\",\"^The loot is ours, and ours alone!\",\"\\n\",\"^And no *damned* undead will tell\",\"\\n\",\"^me otherwise\",\"\\n\",\"^CABINBOY: ATTACKS 9x5\",\"\\n\",\"^CABINBOY:\",\"\\n\",\"^The crew of the damned have\",\"\\n\",\"^boarded, captain!\",\"\\n\",\"^QUARTERMASTER:\",\"\\n\",\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:bad\",\"\\n\",\"^Hmph.\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},false,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"^ One last job, then? \",{\"->\":\".^.^.^.39\"},null]}],[{\"->\":\".^.b\"},{\"b\":[\"^ This is no battle, there are no enemies standing against us.\",{\"->\":\".^.^.^.39\"},null]}],\"nop\",\"\\n\",\"^MERCENARY: SUPPORTS 8x3\",\"\\n\",\"^MERCENARY:\",\"\\n\",\"^These cold dead bastards will\",\"\\n\",\"^have to wretch it from me cold\",\"\\n\",\"^dead hands.\",\"\\n\",\"^CAPTAIN:\",\"\\n\",{\"#\":\"expression: happy\"},{\"#\":\"direction: left\"},\"^We fight to the **last** man, each\",\"\\n\",\"^and every one of us.\",\"\\n\",\"^CAPTAIN: \",{\"#\":\"expression: base\"},\"\\n\",\"^QUARTERMASTER:\",\"\\n\",\"^Aye aye, captain.\",\"\\n\",\"end\",{\"#f\":1}],\"xchapterwild_encounter1_turn0start\":[\"^MUSIC: Combat:3\",\"\\n\",\"^CABINBOY: Land ho!\",\"\\n\",\"^> EXECUTES SpawnPlayerPartyScript\",\"\\n\",\"^> WAITS 500\",\"\\n\",\"^CAPTAIN: The sands feel good under me boots. Sand towards treasure!\",\"\\n\",\"end\",{\"#f\":1}],\"xchapterwild_encounter1_turneveryend\":[\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:bad encounterKey:1\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^> EXECUTES HealPlayerPartyScript\",\"\\n\",\"^SCENE: ADVANCES_TO 2\",\"\\n\",{\"->\":\".^.^.^.8\"},null]}],\"nop\",\"\\n\",\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:good\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^BANNER: FAILURE\",\"\\n\",\"^> WAITS 1000\",\"\\n\",\"^SCENE: RESTARTS\",\"\\n\",{\"->\":\".^.^.^.18\"},null]}],\"nop\",\"\\n\",\"end\",{\"#f\":1}],\"xchapterwild_encounter2_turneveryend\":[\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:bad encounterKey:2\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^> EXECUTES HealPlayerPartyScript\",\"\\n\",\"^SCENE: ADVANCES_TO 3\",\"\\n\",{\"->\":\".^.^.^.8\"},null]}],\"nop\",\"\\n\",\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:good\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^BANNER: FAILURE\",\"\\n\",\"^> WAITS 1000\",\"\\n\",\"^SCENE: RESTARTS\",\"\\n\",{\"->\":\".^.^.^.18\"},null]}],\"nop\",\"\\n\",\"end\",{\"#f\":1}],\"xchapterwild_encounter3_turneveryend\":[\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:bad encounterKey:3\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^> EXECUTES HealPlayerPartyScript\",\"\\n\",\"^SCENE: ADVANCES_TO 4\",\"\\n\",{\"->\":\".^.^.^.8\"},null]}],\"nop\",\"\\n\",\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:good\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^BANNER: FAILURE\",\"\\n\",\"^> WAITS 1000\",\"\\n\",\"^SCENE: RESTARTS\",\"\\n\",{\"->\":\".^.^.^.18\"},null]}],\"nop\",\"\\n\",\"end\",{\"#f\":1}],\"xchapterwild_encounter4_turneveryend\":[\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:bad encounterKey:4\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^BANNER: SUCCESS\",\"\\n\",\"^> WAITS 1000\",\"\\n\",\"^SCENE: CUTS_TO /games/pirates\",\"\\n\",{\"->\":\".^.^.^.8\"},null]}],\"nop\",\"\\n\",\"^> CHECKS areAllAffiliatedUnitsDefeated affiliation:good\",\"\\n\",\"ev\",{\"VAR?\":\"returnedCheck\"},true,\"==\",\"/ev\",[{\"->\":\".^.b\",\"c\":true},{\"b\":[\"\\n\",\"^BANNER: FAILURE\",\"\\n\",\"^> WAITS 1000\",\"\\n\",\"^SCENE: RESTARTS\",\"\\n\",{\"->\":\".^.^.^.18\"},null]}],\"nop\",\"\\n\",\"end\",{\"#f\":1}],\"xcaptain_betrayed\":[\"^CAPTAIN: ...\",\"\\n\",\"^BANNER: FAILURE\",\"\\n\",\"^SCENE: RESTARTS\",\"\\n\",\"end\",{\"#f\":1}],\"xbard_betrayed\":[\"^CABINBOY:\",\"\\n\",\"^You bastard!\",\"\\n\",\"^I'll kill you!!\",\"\\n\",\"end\",{\"#f\":1}],\"xmercenary_betrayed\":[\"^MERCENARY: Hey! You'll pay for this.\",\"\\n\",\"end\",{\"#f\":1}],\"xcastaway_betrayed\":[\"^QUARTERMASTER: Didn't think you'd have it in you.\",\"\\n\",\"end\",{\"#f\":1}],\"xfirstmate_betrayed\":[\"^FIRSTMATE: I should have seen this coming.\",\"\\n\",\"end\",{\"#f\":1}],\"xsharpshooter_betrayed\":[\"^SHARPSHOOTER: Ah, I guess I earned this.\",\"\\n\",\"end\",{\"#f\":1}],\"xswashbuckler_death\":[\"^CAPTAIN: Bah, the winds have failed me.\",\"\\n\",\"^CAPTAIN: This was always how I'd go. \",{\"#\":\"expression: happy\"},\"\\n\",\"^CAPTAIN: Just didn't think it'd be so soon. \",{\"#\":\"expression: base\"},\"\\n\",\"end\",{\"#f\":1}],\"xbard_death\":[\"^CABINBOY: Damn. Wasn't my day.\",\"\\n\",\"end\",{\"#f\":1}],\"xmercenary_death\":[\"^MERCENARY:\",\"\\n\",\"^Next time, I'll be rich.\",\"\\n\",\"^Just you wait and see.\",\"\\n\",\"end\",{\"#f\":1}],\"xcastaway_death\":[\"^CASTAWAY: Finally.\",\"\\n\",\"end\",{\"#f\":1}],\"xfirstmate_death\":[\"^FIRSTMATE: Kfh. Remember me.\",\"\\n\",\"end\",{\"#f\":1}],\"xsharpshooter_death\":[\"^SHARPSHOOTER: Ah, I guess I earned this.\",\"\\n\",\"end\",{\"#f\":1}],\"xcaptian_vs_treasure\":[\"^CAPTAIN:\",\"\\n\",\"^With this much gold, I\",\"\\n\",\"^think I'll buy a new ship\",\"\\n\",\"end\",{\"#f\":1}],\"xcabinboy_vs_treasure\":[\"^CABINBOY:\",\"\\n\",\"^This treasure will all be mine.\",\"\\n\",\"^I can't wait.\",\"\\n\",\"end\",{\"#f\":1}],\"mercenary_vs_treasure\":[\"^MERCENARY:\",\"\\n\",\"^This much gold would be enough\",\"\\n\",\"^to set me for life.\",\"\\n\",\"end\",{\"#f\":1}],\"firstmate_vs_treasure\":[\"^FIRSMATE:\",\"\\n\",\"^This much gold is going to be\",\"\\n\",\"^heavy to hoist down the docks.\",\"\\n\",\"end\",{\"#f\":1}],\"quartermaster_vs_treasure\":[\"^CASTAWAY:\",\"\\n\",\"^All this for just some gold?\",\"\\n\",\"^Maybe they deserve the curse.\",\"\\n\",\"end\",{\"#f\":1}],\"global decl\":[\"ev\",true,{\"VAR=\":\"returnedCheck\"},\"/ev\",\"end\",null],\"#f\":1}],\"listDefs\":{}}", "import * as Ink from \"inkjs\"\nimport LocalStorage from \"local-storage-json\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\n\n// TODO: don't hardcode this to a single game, have\n// this be passed in when calling for ink dialogue\nconst CURRENT_GAME_TITLE = \"Pirate\"\nconst CURRENT_GAME_SLUG = \"pirates\"\nimport STORY from \"@frog/source/data/games/pirates/script.ink.json\"\nimport currentGame from \"@frog/source/data/games/pirates\"\n\nfunction mapKeywordToPartyKey(keyword) {\n const party = Object.values(currentGame.player.party.units)\n\n const keyMatchedUnit = party.find((unit) => unit.key.toLowerCase() == keyword)\n if(keyMatchedUnit != undefined) return keyMatchedUnit.key\n\n const nameMatchedUnit = party.find((unit) => unit.name.toLowerCase() == keyword)\n if(nameMatchedUnit != undefined) return nameMatchedUnit.key\n\n const subtitleMatchedUnit = party.find((unit) => unit.subtitle.toLowerCase() == keyword)\n if(subtitleMatchedUnit != undefined) return subtitleMatchedUnit.key\n\n const jobnameMatchedUnit = party.find((unit) => unit.jobName?.toLowerCase() == keyword)\n if(jobnameMatchedUnit != undefined) return jobnameMatchedUnit.key\n\n return undefined\n}\n\nexport default new class {\n constructor() {\n if(Dev.isEnabled == true\n && LocalStorage.get(\"ink\") != undefined) {\n this.story = new Ink.Story(LocalStorage.get(\"ink\"))\n console.log(\"%cInk: We are using a locally uploaded script. To drop this script, run ink.wipe()\", \"color: green\")\n // document.documentElement.style.backgroundColor = \"hotpink\"\n } else {\n this.story = new Ink.Story(STORY)\n }\n\n window.ink = {\n \"wipe\": function() {\n LocalStorage.remove(\"ink\")\n window.location.reload()\n },\n \"reset\": () => {\n this.loadDialogue(\"reset_run\")\n },\n \"endgame\": () => {\n this.loadDialogue(\"endgame\")\n }\n }\n this.story.onError = function(error) {\n console.error(error)\n }\n }\n loadDialogue(knotname, stage) {\n try {\n this.story.ChoosePathString(knotname)\n return this.loadNextDialogue(stage)\n } catch(error) {\n // console.log(error)\n // console.log(\"Could not find narrative trigger: \" + knotname)\n return []\n }\n }\n convertRibbitToCommand(currentPerformerKey,keyword,actWord,words) {\n // Chyrons\n if(keyword == \"title\") {\n const stanzas = words.join(\" \").split(\"/\")\n const commandLine = {\n \"command\": \"titlecard\",\n \"commandParameters\" : {\n \"lines\": stanzas,\n },\n }\n return commandLine\n }\n // Camera\n if(keyword == \"scene\") {\n let commandParameters = {}\n if(actWord == \"cuts_to\") {\n commandParameters.motion = \"cuts\"\n commandParameters.destination = words.join(\"/\")\n if(Object.keys(currentGame.chapters).includes(words[0])) {\n commandParameters.destination = \"/games/\" + CURRENT_GAME_SLUG + \"/chapters/\" + words[0]\n }\n if(words[0] == \"main\" && words[1] == \"menu\") {\n commandParameters.destination = \"/games/\" + CURRENT_GAME_SLUG\n }\n }\n if(actWord == \"restarts\") {\n commandParameters.motion = \"restarts\"\n }\n if(actWord == \"advances_to\") {\n commandParameters.motion = \"advances\"\n commandParameters.encounterKey = words[0]\n }\n const commandLine = {\n \"command\": \"scene\",\n \"commandParameters\" : commandParameters\n }\n return commandLine\n }\n // Plotscript Lookup\n if(actWord == \"executes\") {\n let options = {}\n const plotscriptName = words[0]\n words.shift()\n for(let word of words) {\n const optionKey = word.split(\":\")[0]\n const optionValue = word.split(\":\")[1]\n options[optionKey] = optionValue\n }\n const commandLine = {\n \"command\": \"execute\",\n \"commandParameters\": {\n \"scriptname\": plotscriptName,\n \"toPass\": options,\n }\n }\n return commandLine\n }\n // Banner\n if(keyword == \"banner\") {\n if(actWord == \"success\") {\n const commandLine = {\n \"command\": \"banner\",\n \"commandParameters\" : {\n \"outcome\": \"success\",\n },\n }\n return commandLine\n }\n if(actWord == \"failure\") {\n const commandLine = {\n \"command\": \"banner\",\n \"commandParameters\" : {\n \"outcome\": \"failure\",\n },\n }\n return commandLine\n }\n }\n // Sound Cues\n if(keyword == \"music\") {\n let audioString = words[0]\n if(audioString == undefined) {\n console.error(\"attempting to play sound with no name\")\n }\n const audioPath = audioString.split(\":\")\n if(audioPath[0].toLowerCase() != CURRENT_GAME_TITLE.toLowerCase()\n && audioPath[0].toLowerCase() != \"unit\") {\n if(audioPath[0].toLowerCase() != \"music\") {\n audioString = CURRENT_GAME_TITLE + \":Music:\" + audioString\n } else {\n audioString = CURRENT_GAME_TITLE + \":\" + audioString\n }\n }\n if(audioPath.slice(-1) == \"Combat\") {\n audioString = audioString + \":1\"\n }\n const commandLine = {\n \"command\": \"audio\",\n \"commandParameters\" : {\n \"soundCue\": audioString,\n },\n }\n return commandLine\n }\n // Onstage Action\n if(actWord == \"attacks\"\n || actWord == \"moves\"\n || actWord == \"supports\") {\n let targetWord = words[0].toLowerCase()\n if(currentPerformerKey == undefined) {\n console.error(\"parsing a Ribbit direction without a specified performer\",words)\n }\n\n let targetPosition = undefined\n const targetCoordinates = targetWord.split(\"x\")\n if(isNaN(Number.parseInt(targetCoordinates[0])) == false) {\n targetPosition = {\n \"x\": Number.parseInt(targetCoordinates[0]),\n \"y\": Number.parseInt(targetCoordinates[1]),\n }\n }\n const targetKey = mapKeywordToPartyKey(targetWord)\n if(targetKey != undefined) {\n targetPosition = {\n \"x\": App.game.chapter.stage.units[targetKey].position.x,\n \"y\": App.game.chapter.stage.units[targetKey].position.y,\n }\n }\n\n const commandLine = {}\n commandLine.commandParameters = {\n \"performerKey\": currentPerformerKey,\n \"targetPosition\": targetPosition,\n }\n if(actWord == \"attacks\") {\n commandLine.command = \"attackUnit\"\n return commandLine\n }\n if(actWord == \"moves\") {\n commandLine.command = \"moveUnit\"\n return commandLine\n }\n if(actWord == \"supports\") {\n commandLine.command = \"supportUnit\"\n return commandLine\n }\n }\n // Wait\n if(actWord == \"waits\") {\n let waitTime = Number.parseInt(words[0])\n if(isNaN(waitTime)) {\n console.error(\"attempting to wait a non-number amount of time\", waitTime)\n }\n const commandLine = {}\n commandLine.command = \"wait\"\n commandLine.commandParameters = {\n \"waitTime\": waitTime,\n }\n return commandLine\n }\n }\n loadNextDialogue(stage) {\n const dialogues = []\n let portraitScene = {}\n let isBoxOpened = false\n let currentPerformerKey = undefined\n let openedDialogueBox = {}\n openedDialogueBox.data = {}\n\n while(this.story.canContinue) {\n portraitScene = structuredClone(portraitScene)\n const dialogue = {}\n dialogue.data = {}\n dialogue.directions = []\n\n // WORDS //\n let words = this.story.Continue()\n\n words = words.split(\" \").map((word) => word.trim())\n if((words[0].endsWith(\":\")\n && words[0].toUpperCase() === words[0])\n || words[0] == \">\") {\n if(words[0].endsWith(\":\")) {\n words[0] = words[0].slice(0, -1)\n }\n const keyword = words[0].toLowerCase()\n let actWord = undefined\n if(words[1] != undefined\n && words[1].toUpperCase() === words[1]) {\n actWord = words[1].toLowerCase()\n words.shift()\n }\n words.shift()\n // All cues create a new box\n if(isBoxOpened == true) {\n if(openedDialogueBox.text != \"\") {\n openedDialogueBox.data.scene = {\"units\": Object.values(portraitScene)}\n dialogues.push(openedDialogueBox)\n }\n\n isBoxOpened = false\n if(portraitScene[currentPerformerKey].isPoppingIn == true) {\n delete portraitScene[currentPerformerKey]\n }\n openedDialogueBox = {}\n }\n\n if(mapKeywordToPartyKey(keyword) != undefined) currentPerformerKey = mapKeywordToPartyKey(keyword)\n isBoxOpened = true\n openedDialogueBox.text = \"\"\n openedDialogueBox.data = {}\n openedDialogueBox.directions = []\n openedDialogueBox.data.speakerKey = currentPerformerKey\n openedDialogueBox.speakingCharacter = currentPerformerKey\n\n if(portraitScene[currentPerformerKey] == undefined) {\n portraitScene[currentPerformerKey] = {\n \"key\": currentPerformerKey,\n \"isPoppingIn\": true,\n }\n const sceneUnits = Object.values(portraitScene)\n if(sceneUnits.find((unit) => unit.position == \"2\") == undefined) {\n portraitScene[currentPerformerKey].position = \"2\"\n portraitScene[currentPerformerKey].direction = \"right\"\n } else if(sceneUnits.find((unit) => unit.position == \"3\") == undefined) {\n portraitScene[currentPerformerKey].position = \"3\"\n portraitScene[currentPerformerKey].direction = \"left\"\n } else if(sceneUnits.find((unit) => unit.position == \"4\") == undefined) {\n portraitScene[currentPerformerKey].position = \"4\"\n portraitScene[currentPerformerKey].direction = \"left\"\n } else {\n portraitScene[currentPerformerKey].position = \"1\"\n portraitScene[currentPerformerKey].direction = \"right\"\n }\n }\n // Commands\n const commandLine = this.convertRibbitToCommand(currentPerformerKey,keyword,actWord,words)\n if(commandLine != undefined) {\n dialogues.push(commandLine)\n words = []\n }\n // Entrances\n if(actWord == \"enters\") {\n if(currentPerformerKey == undefined) console.error(\"requesting character entrance without specifying the actor. Ignoring for now\")\n portraitScene[currentPerformerKey] = {\n \"key\": currentPerformerKey,\n }\n if(words[0] != undefined) {\n let position = words[0]\n if(position == \"stage_left\") position = \"2\"\n if(position == \"stage_right\") position = \"3\"\n if(position == \"stage_left_behind\") position = \"1\"\n if(position == \"stage_right_behind\") position = \"4\"\n portraitScene[currentPerformerKey][\"position\"] = position\n }\n words = []\n }\n // Exits\n if(actWord == \"exits\") {\n if(currentPerformerKey == undefined) console.error(\"requesting character exit without specifying the actor. Ignoring for now\")\n delete portraitScene[currentPerformerKey]\n words = []\n }\n // Plotscript Checks\n if(actWord == \"checks\") {\n let options = {}\n const plotscriptName = words[0]\n words.shift()\n for(let word of words) {\n const optionKey = word.split(\":\")[0]\n const optionValue = word.split(\":\")[1]\n options[optionKey] = optionValue\n }\n this.story.variablesState.returnedCheck = Plotscripts[plotscriptName](stage, options)\n words = []\n }\n }\n words = words.join(\" \")\n\n if(words != \"\" && words != \"\\n\") {\n if(isBoxOpened) {\n openedDialogueBox.text += words + \"\\n\"\n }\n dialogue.text = words\n }\n\n // TAGS //\n dialogue.tags = {}\n this.story.currentTags.forEach((tag) => {\n if(tag.includes(\"=\")) {\n const key = tag.split(\"=\")[0]\n const value = tag.split(\"=\")[1]\n dialogue.tags[key] = value\n if(isBoxOpened) openedDialogueBox.tags[key] = value\n } else {\n if(tag.includes(\":\")) {\n const propertyKey = tag.split(\":\")[0].trim()\n const value = tag.split(\":\")[1].trim()\n dialogue.tags[propertyKey] = value\n if(isBoxOpened) {\n portraitScene[currentPerformerKey][propertyKey] = value\n }\n } else {\n dialogue.tags[\"_\"] = tag\n if(isBoxOpened) openedDialogueBox.tags[\"_\"] = tag\n }\n }\n })\n\n // // CHOICES //\n // if(this.story.currentChoices != undefined\n // && this.story.currentChoices.length > 0) {\n // dialogue.choices = this.story.currentChoices.map(function(choice) {\n // return {\n // \"text\": choice.text,\n // \"function\": function() {\n // this.story.ChooseChoiceIndex(choice.index)\n // const nextDialogues = this.loadNextDialogue()\n // // TODO: Load these up next!!\n // }\n // }\n // })\n // }\n\n if(isBoxOpened == false\n && words != \"\") {\n console.log(words)\n dialogue.data.scene = {\"units\": Object.values(portraitScene)}\n dialogues.push(dialogue)\n }\n }\n\n if(isBoxOpened == true\n && openedDialogueBox.text != \"\") {\n openedDialogueBox.data.scene = {\"units\": Object.values(portraitScene)}\n dialogues.push(openedDialogueBox)\n\n isBoxOpened = false\n if(portraitScene[openedDialogueBox.speakingCharacter].isPoppingIn == true) {\n delete portraitScene[openedDialogueBox.speakingCharacter]\n }\n openedDialogueBox = {}\n }\n\n return dialogues\n }\n set(key, value) {\n try {\n this.story.variablesState[key] = value\n } catch(error) {\n console.log(error)\n console.log(\"Could not find state variable: \" + key)\n return []\n }\n }\n increment(key, value) {\n if(value === undefined) {\n value = 1\n }\n try {\n this.story.variablesState[key] = this.story.variablesState[key] || 0\n this.story.variablesState[key] = this.story.variablesState[key] + 1\n console.log(this.story.variablesState[key])\n } catch(error) {\n console.log(error)\n console.log(\"Could not find state variable: \" + key)\n return []\n }\n }\n}\n\n// story.BindExternalFunction(\"unlock\", (key) => {\n// console.log(\"UNLOCKING\", key)\n// })\n\n// function showAfter(delay, el, text, style = \"color: #000\") {\n// setTimeout(function() { console.log(\"%c \" + text, style) }, delay)\n// // setTimeout(function() { el.classList.add(\"show\") }, delay)\n// }\n\n////////////////////\n// Ink Dev Tools //\n//////////////////\n\nif(Dev.isEnabled == true && false) {\n document.getElementById(\"dev\").addEventListener(\"dragenter\", function(event) {\n document.getElementById(\"dev\").setAttribute(\"juiced\", true)\n })\n\n document.getElementById(\"dev\").addEventListener(\"dragleave\", function(event) {\n document.getElementById(\"dev\").setAttribute(\"juiced\", false)\n })\n\n document.getElementById(\"dev\").addEventListener(\"dragover\", function(event) {\n event.stopPropagation()\n event.preventDefault()\n })\n\n document.getElementById(\"dev\").addEventListener(\"contextmenu\", function(event) {\n event.stopPropagation()\n event.preventDefault()\n })\n\n document.getElementById(\"dev\").addEventListener(\"drop\", function(event) {\n event.stopPropagation()\n event.preventDefault()\n\n document.getElementById(\"dev\").setAttribute(\"juiced\", false)\n\n const files = event.dataTransfer.files\n Array.from(files).forEach((file) => {\n if(file.type.match(\"application/json\") == false) {\n return\n }\n const reader = new FileReader()\n reader.addEventListener(\"load\", function(event) {\n try {\n const json = JSON.parse(event.target.result)\n LocalStorage.set(\"ink\", json)\n window.location.reload()\n\n } catch(error) {\n console.error(\"Failed to parse the file as JSON:\", error)\n }\n })\n reader.readAsText(file)\n })\n })\n}\n", "import Ink from \"@frog/source/utility/integration/Ink.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Step from \"@frog/source/models/Step.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport App from \"@frog/source/models/App.js\"\n\nconst VALUE_BETWEEN_PARENTHESES = /\\(([^)]+)\\)/\n\nexport default function InkDialogue(knotname, stage) {\n const dialogues = Ink.loadDialogue(knotname, stage)\n // console.log(knotname, dialogues)\n if(dialogues.length == 0) return []\n\n const steps = dialogues.map((dialogue) => {\n if(dialogue.command == \"moveUnit\") {\n Stage.calculateActions(stage, {\"force\": true})\n const unit = stage.units[dialogue.commandParameters.performerKey]\n const actionlist = unit.actionmap[dialogue.commandParameters.targetPosition.x + \"x\" + dialogue.commandParameters.targetPosition.y]\n const indexedAction = actionlist.find((action) => {\n return action.type == \"move\"\n })\n if(indexedAction == undefined) {\n console.warn(\"scripted action is not reachable at load. Skipping\")\n return\n }\n return indexedAction.steps.slice(0,-1)\n\n // return {\n // \"type\": \"move\",\n // \"deltastages\": [\n // {\n // // \"dialogue\"\n // // \"turn\"\n // // \"player\"\n // // \"tag\"\n // \"unit\": {\n // \"key\": dialogue.commandParameters.performerKey,\n // \"position\": dialogue.commandParameters.targetPosition,\n // },\n // },\n // ]\n // }\n }\n if(dialogue.command == \"attackUnit\") {\n Stage.calculateActions(stage, {\"force\": true})\n const unit = stage.units[dialogue.commandParameters.performerKey]\n const actionlist = unit.actionmap[dialogue.commandParameters.targetPosition.x + \"x\" + dialogue.commandParameters.targetPosition.y]\n const indexedAction = actionlist?.find((action) => {\n return action.type == \"invoke skill\" && action.role == \"damage\"\n })\n if(indexedAction == undefined) {\n console.warn(\"scripted action is not reachable at load. Skipping\")\n return\n }\n return indexedAction.steps.slice(0,-1)\n }\n if(dialogue.command == \"supportUnit\") {\n Stage.calculateActions(stage, {\"force\": true})\n const unit = stage.units[dialogue.commandParameters.performerKey]\n const actionlist = unit.actionmap[dialogue.commandParameters.targetPosition.x + \"x\" + dialogue.commandParameters.targetPosition.y]\n const indexedAction = actionlist?.find((action) => {\n return action.type == \"invoke skill\" && action.role == \"support\"\n })\n if(indexedAction == undefined) {\n console.warn(\"scripted action is not reachable at load. Skipping\")\n return\n }\n return indexedAction.steps.slice(0,-1)\n }\n if(dialogue.command == \"wait\") {\n return Plotscripts.Wait(dialogue.commandParameters.waitTime)\n }\n if(dialogue.command == \"audio\") {\n return {\"func\": () => Audiomix.trigger(dialogue.commandParameters.soundCue)}\n }\n if(dialogue.command == \"titlecard\") {\n return {\n \"type\": \"chapter start\",\n \"data\": dialogue.commandParameters.lines\n }\n }\n if(dialogue.command == \"banner\") {\n if(dialogue.commandParameters.outcome == \"success\") return {\"type\": \"chapter success\"}\n if(dialogue.commandParameters.outcome == \"failure\") return {\"type\": \"chapter failure\"}\n }\n if(dialogue.command == \"execute\") {\n return Plotscripts[dialogue.commandParameters.scriptname]()(stage)\n }\n if(dialogue.command == \"scene\") {\n if(dialogue.commandParameters.motion == \"cuts\") {\n return {\"func\": () => Navigation.go(dialogue.commandParameters.destination)}\n }\n if(dialogue.commandParameters.motion == \"restarts\") {\n return {\"func\": () => App.game.chapter.restart()}\n }\n if(dialogue.commandParameters.motion == \"advances\") {\n return Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"\" + dialogue.commandParameters.encounterKey})(stage)\n }\n }\n return Step.instantiate({\n \"type\": \"StartDialogue\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": dialogue,\n }\n ]\n })\n }).concat([\n Step.instantiate({\n \"type\": \"KillDialogue\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined,\n }\n ]\n })\n ]).concat([\n Step.instantiate({\n \"name\": \"SavestateCapture\",\n \"alphastage\": stage,\n \"savestateSlug\": knotname,\n \"data\": {\n \"knotname\": knotname\n }\n })\n ])\n\n return steps\n}\n", "import Step from \"@frog/source/models/Step.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport skills from \"@frog/source/data/skills.js\"\nimport InkDialogue from \"@frog/source/utility/integration/InkDialogue.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport App from \"@frog/source/models/App.js\"\n\nconst EXPERIENCE_GAINED_FOR_ATTACKING = 100\n\nexport default class Reactions {\n static getSteps(stage) {\n let steps = []\n\n const deaths = Reactions.getDeaths(stage)\n deaths.forEach((death) => {\n const unit = stage.units[death.unitKey]\n\n unit.skills.forEach((skillKey) => {\n const skill = skills.get(skillKey)\n if(skill == undefined) return\n if(skill.type != \"death\") return\n if(skill.calculateStep instanceof Function) {\n const step = skill.calculateStep({\n \"performerKey\": unit.key,\n \"stage\": stage,\n })\n stage = step.omegastage\n steps.push(step)\n }\n })\n // TODO: what happens if multiple folks die at once, and i try to\n // run their skills all off the same stage (not a rolling omegastage)\n // I need to have something similiar to Step.add(step, deltastage)\n // but for Action.add(action, step)\n })\n\n deaths.forEach((death) => {\n // steps = steps.concat(Stage.getEventSteps(stage, \"death:\" + stage.units[death.unitKey].key))\n // stage = steps.length > 0 ? steps[steps.length-1].omegastage : stage\n //\n // steps = steps.concat(Stage.getEventSteps(stage, \"death:\" + stage.units[death.unitKey].type))\n // stage = steps.length > 0 ? steps[steps.length-1].omegastage : stage\n\n const unit = stage.units[death.unitKey]\n\n if(unit.dialogue != undefined\n && unit.dialogue[\"death\"] != undefined) {\n if(unit.dialogue[\"death\"] instanceof Array == false) {\n unit.dialogue[\"death\"] = new Array(unit.dialogue[\"death\"])\n }\n // steps.push(Step.instantiate({\n // \"type\": \"StartDialogue\",\n // \"isImportant\": true,\n // \"duration\": Infinity,\n // \"alphastage\": stage,\n // \"deltastages\": [\n // {\n // \"mark\": 0,\n // \"dialogue\": {\n // \"text\": (\"The \" + unit.jobName + \" has taken a fatal blow.\").toUpperCase(),\n // }\n // }\n // ]\n // }))\n unit.dialogue[\"death\"].forEach((line) => {\n steps.push(Step.instantiate({\n \"type\": \"StartDialogue\",\n \"isImportant\": true,\n \"duration\": Infinity,\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"text\": line,\n \"data\": {\n \"speakerKey\": unit.key,\n \"scene\": {\n \"units\": [\n {\"key\": unit.key}\n ]\n }\n }\n }\n }\n ]\n }))\n })\n // TODO: there is a weird flash between dialogue here.\n // TODO: at a later time, unify how we do dialogue with Plotscripts.Dialogue!!!!!!!!\n steps.push(Step.instantiate({\n \"type\": \"FinishDialogue\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n }))\n stage = steps.length > 0 ? steps[steps.length - 1].omegastage : stage\n }\n\n steps = steps.concat(InkDialogue(death.unitKey + \"_\" + \"death\", stage))\n stage = steps.length > 0 ? steps[steps.length - 1].omegastage : stage\n\n if(unit.hasSlowDeath == true) {\n steps.push(Step.instantiate({\n \"name\": \"death\",\n \"type\": \"invoke skill\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"unit\": {\n \"key\": death.unitKey,\n \"deathTimer\": 2,\n \"power\": 100,\n }\n }\n ]\n }))\n return\n }\n\n stage.conditions.forEach((condition) => {\n if(condition.type == \"death\"\n && condition.unitKey == death.unitKey) {\n steps = steps.concat(Stage.processEventSteps(stage, condition.events))\n stage = steps.length > 0 ? steps[steps.length - 1].omegastage : stage\n }\n })\n\n steps.push(Step.instantiate({\n \"name\": \"death\",\n \"type\": \"invoke skill\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"audio\": {\"triggerKey\": \"Unit:Death\"},\n },\n {\n \"mark\": 0,\n \"unit\": {\"key\": death.unitKey, \"opacity\": 1}\n },\n {\n \"mark\": 300,\n \"unit\": {\"key\": death.unitKey, \"opacity\": 0}\n },\n {\n \"mark\": 300,\n \"unit\": {\"key\": death.unitKey, \"isDead\": true}\n },\n // {\n // \"mark\": 300,\n // \"stage\": {\n // \"units\": {\n // [death.unitKey]: undefined,\n // },\n // }\n // },\n {\n \"mark\": 300,\n \"tag\": {\"name\": \"tutorial:hasKilled\", \"value\": true}\n }\n ]\n }))\n stage = steps.length > 0 ? steps[steps.length - 1].omegastage : stage\n })\n \n // One big death event for all the units dying? Or individual deaths?\n // TO THINK ABOUT: How to handle death text?\n // TO THINK ABOUT: How to overlap this and the death text with the killing blows?\n // TODO: change this to the new schema v2\n\n return steps\n }\n static getDeaths(stage) {\n const deaths = Object.values(stage.units).map((unit) => {\n if(unit.type == \"zone\" || unit.type == \"spot\") return // Zones can not be killed.\n if(unit.deathTimer != undefined) return // That which is dying can not be killed.\n if(unit.isDead == true) return // The dead can not be rekilled.\n if(unit.hasBeenRemoved == true) return\n\n if(unit.health <= 0) {\n return {\"unitKey\": unit.key, \"type\": \"death-by-damage\"}\n }\n\n const killzone = Object.values(stage.units).find((nextunit) => {\n return (nextunit.type == \"zone\" || nextunit.type == \"spot\")\n && nextunit.intent == \"kill\"\n && nextunit.position.x == unit.position.x\n && nextunit.position.y == unit.position.y\n })\n if(killzone != undefined) {\n return {\"unitKey\": unit.key, \"type\": \"death-by-falling\"}\n }\n\n const nextTerrain = World.getTerrain(stage.world, unit.position)\n if(nextTerrain == undefined) {\n return {\"unitKey\": unit.key, \"type\": \"death-by-falling\"}\n }\n // TODO: Death by leaving zone?\n // TODO: Death by change of height?\n // TODO: Death by being over \"z<0\"\n })\n\n return deaths.filter((death) => !!death)\n }\n}\n", "export default class Action {\n static addStep(action, step) {\n if(step == undefined) return\n if(step instanceof Array == false) {\n step = [step]\n }\n step.forEach((step) => {\n action.steps.push(step)\n if(step.omegastage != undefined) {\n action.omegastage = step.omegastage\n }\n })\n }\n}\n", "const units = {}\n\n/////////////\n// RANGER //\n///////////\n\nunits[\"dagger\"] = {\n \"jobKey\": \"dagger\",\n \"jobName\": \"Dagger\",\n \"fequivalent\": \"Thief\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"dagger\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"daggers\"\n}\n\nunits[\"bow\"] = {\n \"jobKey\": \"bow\",\n \"jobName\": \"Bow\",\n \"fequivalent\": \"Archer\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"bow\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"bow\"\n}\n\nunits[\"gun\"] = {\n \"jobKey\": \"gun\",\n \"jobName\": \"Gun\",\n \"fequivalent\": \"Pirate\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"gun\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"gun\"\n}\n\n//////////////\n// FIGHTER //\n////////////\n\nunits[\"sword\"] = {\n \"jobKey\": \"sword\",\n \"jobName\": \"Sword\",\n \"fequivalent\": \"Mercenary\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"sword\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"sword\"\n}\n\nunits[\"spear\"] = {\n \"jobKey\": \"spear\",\n \"jobName\": \"Spear\",\n \"fequivalent\": \"Soldier\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"spear\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"spear\"\n}\n\nunits[\"hammer\"] = {\n \"jobKey\": \"hammer\",\n \"jobName\": \"Axe\", // ??\n \"fequivalent\": \"Fighter\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"axe\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"hammer\"\n}\n\n//////////////////////\n// FIGHTER ARMORED //\n////////////////////\n\nunits[\"swordknight\"] = {\n \"jobKey\": \"swordknight\",\n \"jobName\": \"Swordknight\",\n \"fequivalent\": \"Swordknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"sword\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"red-shield\",\n \"weaponImageKey\": \"sword\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"swords-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 6,\n}\n\nunits[\"spearknight\"] = {\n \"jobKey\": \"spearknight\",\n \"jobName\": \"Spearknight\",\n \"fequivalent\": \"Lancerknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"spear\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"blue-shield\",\n \"weaponImageKey\": \"spear\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"swords-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 8,\n}\n\nunits[\"hammerknight\"] = {\n \"jobKey\": \"hammerknight\",\n \"jobName\": \"Axeknight\", // ??\n \"fequivalent\": \"Hammerknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"axe\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"green-shield\",\n \"weaponImageKey\": \"hammer\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"sword-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 8,\n}\n\n///////////\n// MAGE //\n/////////\n\nunits[\"mage\"] = {\n \"jobKey\": \"mage\",\n \"jobName\": \"Mage\",\n \"fequivalent\": \"Mage\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 5,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"red-staff\",\n}\n\nunits[\"priest\"] = {\n \"jobKey\": \"priest\",\n \"jobName\": \"Priest\",\n \"fequivalent\": \"Priest\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 5,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"blue-staff\",\n}\n\nunits[\"shaman\"] = {\n \"jobKey\": \"shaman\",\n \"jobName\": \"Shaman\",\n \"fequivalent\": \"Shaman\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 5,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"green-staff\",\n}\n\nexport default units\n", "export default class Frames {\n static run({images, keytime, tweentime, isOscillated}) {\n let time = 0\n let frames = []\n images.forEach((image, index) => {\n frames.push({\n \"time\": time,\n \"image\": image,\n })\n time += tweentime\n })\n if(isOscillated == true) {\n images.reverse().forEach((image, index) => {\n if(index == 0) {\n return\n }\n frames.push({\n \"time\": time,\n \"image\": image,\n })\n time += tweentime\n })\n }\n return frames\n }\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./lord-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-1.png\"),\n require(\"./lord-idle-2.png\"),\n require(\"./lord-idle-3.png\"),\n require(\"./lord-idle-4.png\"),\n require(\"./lord-idle-5.png\"),\n require(\"./lord-idle-6.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./lord-selected-1.png\"),\n require(\"./lord-selected-2.png\"),\n require(\"./lord-selected-3.png\"),\n require(\"./lord-selected-4.png\"),\n require(\"./lord-selected-5.png\"),\n require(\"./lord-selected-6.png\"),\n require(\"./lord-selected-7.png\"),\n require(\"./lord-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./bladesinger-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-1.png\"),\n require(\"./bladesinger-idle-2.png\"),\n require(\"./bladesinger-idle-3.png\"),\n require(\"./bladesinger-idle-4.png\"),\n require(\"./bladesinger-idle-5.png\"),\n require(\"./bladesinger-idle-6.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./bladesinger-selected-1.png\"),\n require(\"./bladesinger-selected-2.png\"),\n require(\"./bladesinger-selected-3.png\"),\n require(\"./bladesinger-selected-4.png\"),\n require(\"./bladesinger-selected-5.png\"),\n require(\"./bladesinger-selected-6.png\"),\n require(\"./bladesinger-selected-7.png\"),\n require(\"./bladesinger-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./mage-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-0.png\"),\n require(\"./mage-idle-1.png\"),\n require(\"./mage-idle-2.png\"),\n require(\"./mage-idle-3.png\"),\n require(\"./mage-idle-4.png\"),\n require(\"./mage-idle-5.png\"),\n require(\"./mage-idle-6.png\"),\n require(\"./mage-idle-7.png\"),\n require(\"./mage-idle-7.png\"),\n require(\"./mage-idle-7.png\"),\n require(\"./mage-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./mage-selected-1.png\"),\n require(\"./mage-selected-2.png\"),\n require(\"./mage-selected-3.png\"),\n require(\"./mage-selected-4.png\"),\n require(\"./mage-selected-5.png\"),\n require(\"./mage-selected-6.png\"),\n require(\"./mage-selected-7.png\"),\n require(\"./mage-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./sniper-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-0.png\"),\n require(\"./sniper-idle-1.png\"),\n require(\"./sniper-idle-2.png\"),\n require(\"./sniper-idle-3.png\"),\n require(\"./sniper-idle-4.png\"),\n require(\"./sniper-idle-5.png\"),\n require(\"./sniper-idle-6.png\"),\n require(\"./sniper-idle-7.png\"),\n require(\"./sniper-idle-7.png\"),\n require(\"./sniper-idle-7.png\"),\n require(\"./sniper-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./sniper-selected-1.png\"),\n require(\"./sniper-selected-2.png\"),\n require(\"./sniper-selected-3.png\"),\n require(\"./sniper-selected-4.png\"),\n require(\"./sniper-selected-5.png\"),\n require(\"./sniper-selected-6.png\"),\n require(\"./sniper-selected-7.png\"),\n require(\"./sniper-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./ranger-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-1.png\"),\n require(\"./ranger-idle-2.png\"),\n require(\"./ranger-idle-3.png\"),\n require(\"./ranger-idle-4.png\"),\n require(\"./ranger-idle-5.png\"),\n require(\"./ranger-idle-6.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./ranger-selected-1.png\"),\n require(\"./ranger-selected-2.png\"),\n require(\"./ranger-selected-3.png\"),\n require(\"./ranger-selected-4.png\"),\n require(\"./ranger-selected-5.png\"),\n require(\"./ranger-selected-6.png\"),\n require(\"./ranger-selected-7.png\"),\n require(\"./ranger-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./knight-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-1.png\"),\n require(\"./knight-idle-2.png\"),\n require(\"./knight-idle-3.png\"),\n require(\"./knight-idle-4.png\"),\n require(\"./knight-idle-5.png\"),\n require(\"./knight-idle-6.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"keytime\": 400,\n \"tweentime\": 100,\n \"images\": [\n require(\"./knight-selected-1.png\"),\n require(\"./knight-selected-2.png\"),\n require(\"./knight-selected-3.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-5.png\"),\n require(\"./knight-selected-6.png\"),\n require(\"./knight-selected-7.png\"),\n require(\"./knight-idle-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./general-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-1.png\"),\n require(\"./general-idle-2.png\"),\n require(\"./general-idle-3.png\"),\n require(\"./general-idle-4.png\"),\n require(\"./general-idle-5.png\"),\n require(\"./general-idle-6.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./general-selected-1.png\"),\n require(\"./general-selected-2.png\"),\n require(\"./general-selected-3.png\"),\n require(\"./general-selected-4.png\"),\n require(\"./general-selected-5.png\"),\n require(\"./general-selected-6.png\"),\n require(\"./general-selected-7.png\"),\n require(\"./general-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./paladin-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-0.png\"),\n require(\"./paladin-idle-1.png\"),\n require(\"./paladin-idle-2.png\"),\n require(\"./paladin-idle-3.png\"),\n require(\"./paladin-idle-4.png\"),\n require(\"./paladin-idle-5.png\"),\n require(\"./paladin-idle-6.png\"),\n require(\"./paladin-idle-7.png\"),\n require(\"./paladin-idle-7.png\"),\n require(\"./paladin-idle-7.png\"),\n require(\"./paladin-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./paladin-selected-1.png\"),\n require(\"./paladin-selected-2.png\"),\n require(\"./paladin-selected-3.png\"),\n require(\"./paladin-selected-4.png\"),\n require(\"./paladin-selected-5.png\"),\n require(\"./paladin-selected-6.png\"),\n require(\"./paladin-selected-7.png\"),\n require(\"./paladin-selected-0.png\"),\n ]\n })\n },\n}\n", "const units = {}\n\nunits[\"rogue\"] = {\n \"jobKey\": \"dagger\",\n \"jobName\": \"Dagger\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"imageUrl\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/rogue_bad.png\"),\n \"imageSize\": \"contained\",\n}\n\nunits[\"berserker\"] = {\n \"jobName\": \"Hammer\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"imageUrl\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/berserker_bad.png\"),\n \"imageSize\": \"contained\",\n}\n\nunits[\"calvary\"] = {\n \"jobName\": \"calvary\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 40,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can move 3 tiles\"\n ],\n\n \"imageUrl\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/cavalry_bad.png\"),\n \"imageSize\": \"contained\",\n}\n\nunits[\"cleric\"] = {\n \"jobName\": \"Priest\",\n \"skills\": [\"inflict-damage\", \"restore-health\"],\n \"element\": \"water\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can heal\"\n ],\n\n \"imageUrl\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/cleric_bad.png\"),\n \"imageSize\": \"contained\",\n\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/B-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/B-happy.png\"),\n \"serene\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/B-serene.png\"),\n \"sly\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/B-sly.png\"),\n }\n}\n\nunits[\"swordlord\"] = {\n \"jobKey\": \"swordlord\",\n \"jobName\": \"Swordlord\",\n \"skills\": [\"inflict-damage\", \"rally\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can rally an ally to move again.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/lord\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"bladesinger\"] = {\n \"jobKey\": \"bladesinger\",\n \"jobName\": \"Bladesinger\",\n \"skills\": [\"inflict-damage\"],\n \"properties\": [\"lifesteal\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 30,\n \"power\": 30,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Heals 10hp from attacking.\",\n \"Has increased attack power.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/bladesinger\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"firefist\"] = {\n \"jobKey\": \"firefist\",\n \"jobName\": \"Firefist\",\n \"skills\": [\"inflict-damage\"],\n \"properties\": [\"forceful\"],\n \"element\": \"fire\",\n \"attacktype\": \"magic\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Pushes 1 tile after attacking.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/mage\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"archer\"] = {\n \"jobKey\": \"archer\",\n \"jobName\": \"Archer\",\n \"skills\": [\"inflict-damage\", \"pull\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can attack from 2 tiles away.\"\n ],\n\n \"imageUrl\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/archer/archer-idle-0.png\"),\n \"imageSize\": \"buffered\",\n}\n\nunits[\"sniper\"] = {\n \"jobKey\": \"sniper\",\n \"jobName\": \"Sniper\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": {\"min\": 1, \"max\": 10, \"orthogonal\": true, \"diagonal\": false},\n \"moverange\": 2,\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can attack in any orthogonal direction.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/sniper\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"ranger\"] = {\n \"jobName\": \"Bow\",\n \"skills\": [\"inflict-damage\", \"suplex\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 0,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can move 3 tiles and attack from 2 tiles away.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/ranger\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"knight\"] = {\n \"jobKey\": \"knight\",\n \"jobName\": \"Knight\",\n \"skills\": [\"inflict-damage\", \"restore-health\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxhealth\": 20,\n \"power\": 20,\n \"defense\": 5,\n \"resistance\": 0,\n\n \"facts\": [\n \"Has high defense, decreasing all attacks by 5 damage.\",\n \"Can heal.\"\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/knight\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"general\"] = {\n \"jobKey\": \"general\",\n \"jobName\": \"General\",\n \"skills\": [\"inflict-damage\", \"pivot\"],\n \"properties\": [\"counter\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 5,\n \"resistance\": 0,\n\n \"facts\": [\n \"When attacked, does +20 damage on counterattacks.\",\n \"Has high defense, decreasing all attacks by 5 damage.\",\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/general\").default,\n \"imageSize\": \"buffered\",\n}\n\nunits[\"paladin\"] = {\n \"jobName\": \"Paladin\",\n \"skills\": [\"inflict-damage\", \"suplex\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 30,\n \"power\": 20,\n \"defense\": 5,\n \"resistance\": 0,\n\n \"facts\": [\n \"Can move 2 tiles.\",\n \"Has high defense, decreasing all attacks by 5 damage.\",\n ],\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/enemy/paladin\").default,\n \"imageSize\": \"buffered\",\n\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/EK-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/EK-happy.png\"),\n \"smug\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/EK-smug.png\"),\n }\n}\n\nexport default units\n", "const units = {}\n\n// === IMPORT LOCALLY-SCOPED JOBS === //\n//import games from \"@frog/source/data/games/index.js\"\n// Object.values(games).forEach((game) => {\n// if(game.localJobs != undefined) {\n// game.localJobs.forEach((job) => {units[game.slug + job.jobKey] = job})\n// }\n// })\nimport pirateJobs from \"@frog/source/data/games/pirates/unit-jobs.js\"\nObject.values(pirateJobs).forEach((job) => {\n units[\"pirates/\" + job.jobKey] = job\n})\nimport heroJobs from \"@frog/source/data/games/hero/unit-jobs.js\"\nObject.keys(heroJobs).forEach((jobKey) => {\n units[\"hero/\" + jobKey] = heroJobs[jobKey]\n})\n\n/////////////\n// RANGER //\n///////////\n\nunits[\"dagger\"] = {\n \"jobKey\": \"dagger\",\n \"jobName\": \"Daggercloak\",\n \"fequivalent\": \"Thief\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"daggers\",\n\n \"facts\": [\n \"Attacks from 2 tiles away. Strong against axes and guns.\",\n ]\n}\n\nunits[\"bow\"] = {\n \"jobKey\": \"bow\",\n \"jobName\": \"Archer\",\n \"fequivalent\": \"Archer\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"bow\",\n\n \"facts\": [\n \"Attacks from 2 tiles away. Strong against swords and daggers.\",\n ]\n}\n\nunits[\"gun\"] = {\n \"jobKey\": \"gun\",\n \"jobName\": \"Gunman\",\n \"fequivalent\": \"Pirate\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"gun\",\n\n \"facts\": [\n \"Attacks from 2 tiles away. Strong against spears and bows.\",\n ]\n}\n\n/////////////////////\n// RANGER MOUNTED //\n///////////////////\n\nunits[\"bowcavalier\"] = {\n \"jobKey\": \"bowcavalier\",\n \"jobName\": \"Bowcavalier\",\n \"fequivalent\": \"Nomad\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 2,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n}\n// TODO: daggerhorse?\n// TODO: gunhorse?\n\n//////////////\n// FIGHTER //\n////////////\n\nunits[\"sword\"] = {\n \"jobKey\": \"sword\",\n \"jobName\": \"Swordsman\",\n \"fequivalent\": \"Mercenary\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"sword\",\n\n \"facts\": [\n \"Strong against spears and bows.\",\n ]\n}\n\nunits[\"spear\"] = {\n \"jobKey\": \"spear\",\n \"jobName\": \"Spearman\",\n \"fequivalent\": \"Soldier\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"spear\",\n\n \"facts\": [\n \"Strong against axes and guns.\",\n ]\n}\n\nunits[\"hammer\"] = {\n \"jobKey\": \"hammer\",\n \"jobName\": \"Axeman\", // ??\n \"fequivalent\": \"Fighter\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"hammer\",\n\n \"facts\": [\n \"Strong against spears and bows.\",\n ]\n}\n\n//////////////////////\n// FIGHTER MOUNTED //\n////////////////////\n\nunits[\"swordcavalier\"] = {\n \"jobKey\": \"swordcavalier\",\n \"jobName\": \"Swordcavalier\",\n \"fequivalent\": \"Cavalier\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"red-helmet\",\n \"weaponImageKey\": \"sword\"\n}\n\nunits[\"spearcavalier\"] = {\n \"jobKey\": \"spearcavalier\",\n \"jobName\": \"Spearcavalier\",\n \"fequivalent\": \"Paladin\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"blue-helmet\",\n \"weaponImageKey\": \"spear\"\n}\n\nunits[\"hammercavalier\"] = {\n \"jobKey\": \"hammercavalier\",\n \"jobName\": \"Axecavalier\", // ??\n \"fequivalent\": \"Warlord\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"green-helmet\",\n \"weaponImageKey\": \"hammer\"\n}\n\n//////////////////////\n// FIGHTER ARMORED //\n////////////////////\n\nunits[\"swordknight\"] = {\n \"jobKey\": \"swordknight\",\n \"jobName\": \"Swordknight\",\n \"fequivalent\": \"Swordknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"red-shield\",\n \"weaponImageKey\": \"sword\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"swords-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 6,\n}\n\nunits[\"spearknight\"] = {\n \"jobKey\": \"spearknight\",\n \"jobName\": \"Spearknight\",\n \"fequivalent\": \"Lancerknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"blue-shield\",\n \"weaponImageKey\": \"spear\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"swords-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 8,\n}\n\nunits[\"hammerknight\"] = {\n \"jobKey\": \"hammerknight\",\n \"jobName\": \"Axeknight\", // ??\n \"fequivalent\": \"Hammerknight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"steel\",\n \"attackrange\": 1,\n \"moverange\": 1,\n \"movetype\": \"armored\",\n \"moveaudio\": \"Unit:Move:Armored\",\n \"maxarmor\": 10,\n \"armortype\": \"steel\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 3,\n \"resistance\": 0,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"green-shield\",\n \"weaponImageKey\": \"hammer\"\n\n // // specific to chapterB\n // \"skills\": [\"inflict-damage\", \"swords-up\", \"shields-up\"],\n // \"moverange\": 2,\n // \"defense\": 10,\n // \"resistance\": 5,\n // \"power\": 8,\n}\n\n////////////////////\n// FIGHTER FLIER //\n//////////////////\n\n// units[\"swordflier\"] = {\n// \"jobKey\": \"swordflier\",\n// \"jobName\": \"Swordflier\",\n// \"fequivalent\": \"Wyvern Rider\",\n// \"skills\": [\"inflict-damage\"],\n// \"element\": \"fire\",\n// \"attacktype\": \"steel\",\n// \"attackrange\": 1,\n// \"moverange\": 2,\n// \"movetype\": \"flying\",\n// \"moveaudio\": \"Unit:Move:Wyvern\",\n// \"maxhealth\": 20,\n// \"power\": 10,\n// \"defense\": 3,\n// \"resistance\": 0,\n// // \"attackspeed\": 5,\n// // \"luck\": 0,\n// \"sprites\": require(\"@frog/source/assets/images/fegba/units/red/swordcavalier\").default\n// }\n//\n// units[\"spearflier\"] = {\n// \"jobKey\": \"spearflier\",\n// \"jobName\": \"Spearflier\",\n// \"fequivalent\": \"Pegasus Rider\",\n// \"skills\": [\"inflict-damage\"],\n// \"element\": \"water\",\n// \"attacktype\": \"steel\",\n// \"attackrange\": 1,\n// \"moverange\": 2,\n// \"movetype\": \"flying\",\n// \"moveaudio\": \"Unit:Move:Wyvern\",\n// \"maxhealth\": 20,\n// \"power\": 10,\n// \"defense\": 3,\n// \"resistance\": 0,\n// // \"attackspeed\": 5,\n// // \"luck\": 0,\n// \"sprites\": require(\"@frog/source/assets/images/fegba/units/red/spearcavalier\").default\n// }\n//\n// units[\"hammerflier\"] = {\n// \"jobKey\": \"hammerflier\",\n// \"jobName\": \"Hammerflier\",\n// \"fequivalent\": \"Falcon Flier\",\n// \"skills\": [\"inflict-damage\"],\n// \"element\": \"earth\",\n// \"attacktype\": \"steel\",\n// \"attackrange\": 1,\n// \"moverange\": 2,\n// \"movetype\": \"flying\",\n// \"moveaudio\": \"Unit:Move:Wyvern\",\n// \"maxhealth\": 20,\n// \"power\": 10,\n// \"defense\": 3,\n// \"resistance\": 0,\n// // \"attackspeed\": 5,\n// // \"luck\": 0,\n// \"sprites\": require(\"@frog/source/assets/images/fegba/units/red/axecavalier\").default\n// }\n\n///////////\n// MAGE //\n/////////\n\nunits[\"mage\"] = {\n \"jobKey\": \"mage\",\n \"jobName\": \"Mage\",\n \"fequivalent\": \"Mage\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"red-staff\"\n}\n\nunits[\"priest\"] = {\n \"jobKey\": \"priest\",\n \"jobName\": \"Priest\",\n \"fequivalent\": \"Priest\",\n \"skills\": [\"inflict-damage\", \"restore-health\"],\n \"element\": \"water\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"blue-staff\",\n}\n\nunits[\"shaman\"] = {\n \"jobKey\": \"shaman\",\n \"jobName\": \"Shaman\",\n \"fequivalent\": \"Shaman\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 2,\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"weaponImageKey\": \"green-staff\",\n}\n\n///////////////////\n// MAGE MOUNTED //\n/////////////////\n\nunits[\"arcanecavalier\"] = {\n \"jobKey\": \"arcanecavalier\",\n \"jobName\": \"Arcane Cavalier\",\n \"fequivalent\": \"Mage Knight\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"fire\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"red-helmet\",\n \"weaponImageKey\": \"red-staff\",\n}\n\nunits[\"divinecavalier\"] = {\n \"jobKey\": \"divinecavalier\",\n \"jobName\": \"Divine Cavalier\",\n \"fequivalent\": \"Valykrie\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"water\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"blue-helmet\",\n \"weaponImageKey\": \"blue-staff\",\n}\n\nunits[\"eldritchcavalier\"] = {\n \"jobKey\": \"eldritchcavalier\",\n \"jobName\": \"Eldritch Cavalier\",\n \"fequivalent\": \"???\",\n \"skills\": [\"inflict-damage\"],\n \"element\": \"earth\",\n \"attacktype\": \"magic\",\n \"attackrange\": 2,\n \"moverange\": 3,\n \"movetype\": \"mounted\",\n \"moveaudio\": \"Unit:Move:Horse\",\n \"maxhealth\": 20,\n \"power\": 23,\n \"defense\": 0,\n \"resistance\": 3,\n // \"attackspeed\": 5,\n // \"luck\": 0,\n \"decalImageKey\": \"green-helmet\",\n \"weaponImageKey\": \"green-staff\",\n}\n\n\n\nexport default units\n", "import {nanoid} from \"nanoid\"\nimport Objdict from \"objdict\"\n\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Step from \"@frog/source/models/Step.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Reactions from \"@frog/source/models/Reactions.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport App from \"@frog/source/models/App.js\"\nimport Action from \"@frog/source/models/Action.js\"\n\nimport Speedtest from \"@frog/source/tests/utility/Speedtest.js\"\n\nconst MAX_INFLUENCE = 200 // this is duped in Stage.js\nconst INFLUENCE_ITERATIONS = 10\nconst INFLUENCE_DECAY = 20\n\nconst MOVE_COST = 1\n\nimport skills from \"@frog/source/data/skills.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\n\nimport World from \"@frog/source/models/World.js\"\n\nexport default class Unit {\n static instantiate({unit, player, gameSlug, chapterSlug}) {\n const baseUnit = {\n \"key\": nanoid(),\n \"energy\": {\"move\": true, \"invoke skill\": true},\n \"inventory\": {\"items\": {}},\n \"effects\": {},\n \"skills\": [],\n \"equippedSkills\": {},\n \"position\": {\"x\": 0, \"y\": 0, \"z\": 0},\n \"state\": \"idle\", // or \"aggroed\"\n \"maxhealth\": 5,\n }\n\n player = player || App?.game?.player\n let partyUnit = player?.party?.units[unit.key] || {}\n unit = Objdict.merge(partyUnit, unit)\n\n let unitJob = {}\n if(unit.randomJobKey != undefined) {\n const jobKeys = []\n unit.randomJobKey.split(\",\").forEach((jobKey) => {\n jobKey = jobKey.trim()\n jobKeys.push(jobKey)\n })\n unit.jobKey = Random.elementFromSeededKey(jobKeys, unit.key)\n }\n if(unit.jobKey != undefined) {\n unitJob = unitJobs[gameSlug + \"/\" + chapterSlug + \"/\" + unit.jobKey]\n || unitJobs[gameSlug + \"/\" + unit.jobKey]\n || unitJobs[unit.jobKey]\n if(unitJob == undefined) {\n console.log(\"Could not find unit class\", unit.jobKey, unit)\n unitJob = {}\n }\n }\n\n const mergedUnit = Objdict.merge(baseUnit, unitJob, unit)\n\n delete unit.actionmap // we do not instantiate action maps!!!\n\n mergedUnit.maxhealth = mergedUnit.maxhealth ?? 0\n mergedUnit.maxarmor = mergedUnit.maxarmor ?? 0\n if(mergedUnit.health === undefined) {\n mergedUnit.health = mergedUnit.maxhealth\n }\n if(mergedUnit.armor === undefined\n && mergedUnit.maxarmor !== undefined) {\n mergedUnit.armor = mergedUnit.maxarmor\n }\n\n // if(mergedUnit.position == undefined) {\n // throw new Error(\"Unit.instantiate needs position\")\n // }\n if(mergedUnit.skills == undefined) {\n throw new Error(\"Unit.instantiate needs skills\")\n }\n if(mergedUnit.equippedSkills == undefined) {\n throw new Error(\"Unit.instantiate needs skills\")\n }\n // if(mergedUnit.images == undefined) {\n // throw new Error(\"Unit.instantiate needs images\")\n // }\n\n // if(mergedUnit.unlockedSkills != undefined) {\n // mergedUnit.skills = mergedUnit.skills.concat(mergedUnit.unlockedSkills)\n // delete mergedUnit.unlockedSkills\n // }\n\n if(mergedUnit.maxexperience != undefined) {\n mergedUnit.experience = mergedUnit.experience || 0\n }\n\n return mergedUnit\n }\n static computeInfluenceMap(affiliation, stage, position) {\n let influence = {}\n\n Objdict.forEach(stage.units, (unit) => {\n if(unit.affiliation != affiliation\n && unit.affiliation != \"none\"\n && unit.type != \"zone\"\n && unit.type != \"spot\"\n && unit.isDead != true\n && unit.hasBeenRemoved != true) {\n influence[unit.position.x + \"x\" + unit.position.y] = MAX_INFLUENCE\n }\n })\n\n // Do a heatmap of heading towards goodies\n for(let i = 0; i < INFLUENCE_ITERATIONS; i += 1) {\n let nextInfluence = {}\n const INFLUENCE_ZONE = stage.encounters[stage.currentEncounterKey] || {}\n for(let x = INFLUENCE_ZONE.x; x <= INFLUENCE_ZONE.x + INFLUENCE_ZONE.width; x += 1) {\n for(let y = INFLUENCE_ZONE.y; y <= INFLUENCE_ZONE.y + INFLUENCE_ZONE.height; y += 1) {\n const terrain = stage.world.terrain[x + \"x\" + y]\n if(terrain == undefined) continue\n const z = terrain.position.z + terrain.size.z\n\n const position = {x, y, z}\n nextInfluence[position.x + \"x\" + position.y] = influence[position.x + \"x\" + position.y] || 0\n Geometry.getNeighborPoints(position).forEach((nextPosition) => {\n const collision = Stage.findCollision({\n \"stage\": stage,\n \"previousPosition\": position,\n \"nextPosition\": nextPosition\n })\n\n if(collision != undefined) {\n if(collision.type == \"world\") return\n }\n const value = (influence[nextPosition.x + \"x\" + nextPosition.y] || 0) - INFLUENCE_DECAY\n if(nextInfluence[position.x + \"x\" + position.y] < value) {\n nextInfluence[position.x + \"x\" + position.y] = value\n }\n })\n }\n }\n influence = nextInfluence\n }\n\n // // Do a heatmap of heading towards the center of the map.\n // const LONGEST_DISTANCE = 13\n // const zone = stage.encounters[stage.currentEncounterKey].zone || {}\n // const centerpoint = {\n // \"x\": zone.x + (zone.width / 2),\n // \"y\": zone.y + (zone.height / 2),\n // }\n // for(let x = 0; x <= stage.world.width; x += 1) {\n // for(let y = 0; y <= stage.world.height; y += 1) {\n // const terrain = stage.world.terrain[x + \"x\" + y]\n // if(terrain == undefined) continue\n // const z = terrain.position.z + terrain.size.z\n // const position = {x, y, z, \"key\": x + \"x\" + y}\n //\n // influence[position.key] = (1 - (Geometry.distance(position, centerpoint) / LONGEST_DISTANCE)) * MAX_INFLUENCE\n // }\n // }\n\n // // Do a heatmap of heading towards the CLOSEST goodie.\n // const LONGEST_DISTANCE = 13\n // const targetUnit = Object.values(stage.units).filter((unit) => {\n // return unit.affiliation == \"good\"\n // && unit.hasBeenRemoved != true\n // && unit.isDead != true\n // && unit.type != \"zone\"\n // }).map((unit) => {\n // return {unit, \"distance\": Geometry.distance(unit.position, position)}\n // }).sort((a, b) => {\n // if(a.distance < b.distance) return -1\n // if(a.distance > b.distance) return +1\n // return 0\n // })[0]\n // for(let x = 0; x <= stage.world.width; x += 1) {\n // for(let y = 0; y <= stage.world.height; y += 1) {\n // const terrain = stage.world.terrain[x + \"x\" + y]\n // if(terrain == undefined) continue\n // const z = terrain.position.z + terrain.size.z\n // const position = {x, y, z, \"key\": x + \"x\" + y}\n //\n // influence[position.key] = (1 - (Geometry.distance(position, targetUnit.position) / LONGEST_DISTANCE)) * MAX_INFLUENCE\n // }\n // }\n\n return influence\n }\n\n // This function will return an actionmap, a\n // hash of all the possible actions the given\n // unit could perform within range. An \"action\"\n // can be a move, an attack, an assist, etc.\n static calculateActions(performerKey, stage) {\n const mark = Speedtest.mark(\"Actions\", \"Unit.calculateActions\")\n\n if(stage == undefined) throw new Error(\"requires action.stage\")\n if(performerKey == undefined) throw new Error(\"requires action.performerKey\")\n\n const startingAction = {}\n\n const performer = stage.units[performerKey]\n if(performer == undefined) {\n throw new Error(\"Could not find unit \" + performerKey + \" in the stage.\")\n }\n\n if(performer.isDead) {\n return\n }\n\n startingAction.performerKey = performerKey\n startingAction.isStartingAction = true\n startingAction.type = performer.energy[\"move\"] == true ? \"wait\" : \"wait - invoke skill\"\n startingAction.position = performer.position\n startingAction.alphastage = startingAction.omegastage = Stage.copy(stage)\n startingAction.distance = performer.energy[\"move\"] == true ? 0 : performer.moverange.max\n startingAction.steps = []\n\n const submark = Speedtest.mark(\"Unit.calculateAction\", \"influence map\")\n startingAction.influenceMap = Unit.computeInfluenceMap(performer.affiliation, startingAction.alphastage, performer.position)\n submark()\n\n const actionmap = {}\n\n Unit.populateActionMap(actionmap, startingAction)\n Unit.pruneInternalActionMapData(actionmap)\n\n mark()\n return actionmap\n }\n static populateActionMap(actionmap, stubAction) {\n const calculatedAction = Unit.calculateAction(stubAction)\n if(calculatedAction == undefined) return\n Unit.saveAction(actionmap, calculatedAction)\n if(calculatedAction.nextActions != undefined) {\n calculatedAction.nextActions.forEach((nextAction) => {\n Unit.populateActionMap(actionmap, nextAction)\n })\n }\n }\n static calculateAction(action) {\n const mark1 = Speedtest.mark(\"Unit.calculateAction\", \"initialization\")\n\n if(action.type === undefined) throw new Error(\"requires action.type\")\n if(action.position === undefined) throw new Error(\"requires action.position\")\n if(action.performerKey === undefined) throw new Error(\"requires action.performerKey\")\n if(action.alphastage === undefined) throw new Error(\"requires action.alphastage\")\n\n action.alphastage = Stage.copy(action.alphastage)\n\n // If nothing else happens, the omegastage\n // will match the alphastage. But throughout\n // this action, the omegastage will be cloned\n // and edited via the game logic.\n action.omegastage = action.alphastage\n\n action.positions = [{...action.position, \"type\": action.type}]\n action.steps = []\n\n if(action.previousAction != undefined) {\n action.positions = action.positions.concat(action.previousAction.positions)\n\n // TODO: we really reusing these and not recomputing these?\n action.steps = action.steps.concat(action.previousAction.steps.filter((step) => {\n return step.type != \"exhaust energy\"\n && step.type != \"increment stage.actionMark\"\n && step.type != \"recalculate light\"\n }))\n // if(action.steps.length > 0) {\n // action.omegastage = action.steps[action.steps.length-1].omegastage\n // }\n // TODO: YOU REALLY CAN't JUST FILTER THE STEPS AND NOT ASSUME THE OMEGASTAGE\n // IS ALSO FILTERED; IT WAS BUIlT ON EACH OF THOSE STEPS IN TURN, SO IT IS\n // STILL TRUE EVEN IF YOU REMOVE THE STEPS!!\n }\n\n mark1()\n\n ///////////////////////////////\n // Unit-to-World Collision //\n /////////////////////////////\n\n const mark2 = Speedtest.mark(\"Unit.calculateAction\", \"unit-to-world collision\")\n\n const previousPosition = action.positions[1] || action.position\n const nextPosition = action.positions[0] || action.position\n\n if(action.type == \"invoke skill\") {\n if(World.isOutOfBounds(action.alphastage.world, nextPosition)) {\n mark2()\n return\n }\n if(Zone.isOutOfBounds(action.alphastage.encounters[action.alphastage.currentEncounterKey].zone, nextPosition)) {\n mark2()\n return\n }\n const skill = skills.get(action.skillKey)\n if(skill == undefined) {\n mark2()\n return\n }\n\n if(skill.range && skill.range.type != \"arc\") {\n if(Dev.isAllyCollisionEnabled == true\n && World.hasCollision({\n \"world\": action.alphastage.world,\n previousPosition, nextPosition,\n \"zone\": action.alphastage.encounters[action.alphastage.currentEncounterKey].zone,\n })) {\n mark2()\n return\n }\n\n // const previousTerrain = World.getTerrain(action.alphastage.world, previousPosition)\n // const nextTerrain = World.getTerrain(action.alphastage.world, nextPosition)\n // const zDistance = Math.abs((previousTerrain.position.z + previousTerrain.size.z) - (nextTerrain.position.z + nextTerrain.size.z))\n // // Let units move between blocks if there is only\n // // a half-block delta! (ramps are considered half-blocks)\n // const MOVEMENT_SIZE = 1\n // if(zDistance <= MOVEMENT_SIZE) {\n // action.position.z = nextTerrain.position.z + nextTerrain.size.z\n // }\n }\n\n // if(skill.range && skill.range.type == \"arc\") {\n // const nextTerrain = World.getTerrain(action.alphastage.world, nextPosition)\n // if(nextTerrain != undefined) {\n // // if(nextTerrain.shape == \"obstruction\") {\n // // mark2()\n // // return\n // // }\n // action.position.z = nextTerrain.position.z + nextTerrain.size.z\n // }\n // }\n }\n\n if(action.type == \"move\") {\n const alphaperformer = action.alphastage.units[action.performerKey]\n if(alphaperformer.movetype == \"flying\") {\n if(Dev.isAllyCollisionEnabled == true\n && World.isOutOfBounds(action.alphastage.world, nextPosition)) {\n mark2()\n return\n }\n } else {\n if(Dev.isAllyCollisionEnabled == true\n && World.hasCollision({\n \"world\": action.alphastage.world,\n previousPosition, nextPosition,\n \"zone\": action.alphastage.encounters[action.alphastage.currentEncounterKey].zone,\n })) {\n mark2()\n return\n }\n\n if(action.distance > 0) {\n const nextTerrain = World.getTerrain(action.alphastage.world, nextPosition)\n if(nextTerrain != undefined\n && nextTerrain.isTree == true) {\n if(alphaperformer.movetype == \"mounted\") {\n mark2()\n return\n }\n if(action.distance > MOVE_COST) {\n mark2()\n return\n }\n action.distance += MOVE_COST * 3\n }\n }\n }\n }\n\n mark2()\n\n /////////////////////////////\n // Unit-to-Unit Collision //\n ///////////////////////////\n\n const mark3 = Speedtest.mark(\"Unit.calculateAction\", \"unit-to-unit collision\")\n\n if(action.type == \"move\") {\n const performer = action.alphastage.units[action.performerKey]\n const positionedUnits = Stage.findUnitsByPosition(action.alphastage, action.position, {\"excludeUnitKey\": action.performerKey, \"includingZones\": true})\n let collidingUnit = positionedUnits.find((unit) => {\n if(Dev.isAllyCollisionEnabled != true\n && performer.affiliation == \"good\") {\n return false\n }\n\n if(unit == undefined) return\n if(unit.type == \"zone\" || unit.type == \"spot\") {\n return false\n }\n\n if(unit.affiliation == performer.affiliation) {\n action.type = \"move through\"\n return false\n } else {\n action.type = \"move - colliding unit\"\n return true\n }\n })\n\n if(collidingUnit != undefined) {\n mark3()\n return\n }\n }\n\n if(action.type == \"invoke skill\"\n && skills.get(action.skillKey).canTarget instanceof Function) {\n if(skills.get(action.skillKey).canTarget({\"performerKey\": action.performerKey, \"stage\": action.alphastage, \"position\": action.position}) == false) {\n action.type = \"invoke skill - can not target\"\n if(skills.get(action.skillKey).isRenderedEvenIfCanNotTarget != true) {\n mark3()\n return\n }\n }\n }\n\n mark3()\n\n ///////////////////////////////\n // Calculate the Omegastage //\n /////////////////////////////\n\n const mark4 = Speedtest.mark(\"Unit.calculateAction\", \"omegastage calculation\")\n\n if(action.type == \"wait\") {\n Action.addStep(action, Step.instantiate({\n \"type\": \"exhaust energy\",\n \"alphastage\": action.omegastage,\n \"deltastages\": [\n {\n \"units\": {\n [action.performerKey]: {\n \"energy\": {\n \"move\": false,\n // \"invoke skill\": true,\n }\n }\n }\n },\n ]\n }))\n }\n\n if(action.type == \"move\"\n || action.type == \"move through\") {\n if(action.direction != undefined) {\n Action.addStep(action, Step.instantiate({\n \"type\": \"turn\",\n \"alphastage\": action.omegastage,\n \"deltastages\": [\n {\n \"unit\": {\n \"key\": action.performerKey,\n \"direction\": action.direction,\n }\n }\n ]\n }))\n }\n const performer = action.omegastage.units[action.performerKey]\n Action.addStep(action, Step.instantiate({\n // \"type\": performer.affiliation != \"good\" ? \"move\" : \"move-without-animation\",\n \"type\": \"move\",\n \"affiliation\": performer.affiliation, // DEBUG\n \"alphastage\": action.omegastage,\n \"deltastages\": [\n {\n \"annotation\": {\n \"unitReference\": performer.reference,\n \"unitKey\": performer.key,\n },\n \"units\": {\n [action.performerKey]: {\n \"position\": {\n \"mode\": \"absolute\",\n \"x\": action.position.x,\n \"y\": action.position.y,\n \"z\": action.position.z,\n },\n }\n }\n }\n ]\n }))\n\n Action.addStep(action, Reactions.getSteps(action.omegastage))\n\n // TODO: why is there logic aroundthis? of course we exhaust the energy!!\n // const omegaperformer = action.omegastage.units.find((unit) => unit.key == action.performerKey)\n if(action.type == \"move\") {\n // && action.distance >= omegaperformer.moverange\n // && omegaperformer.energy.move != true) {\n Action.addStep(action, Step.instantiate({\n \"type\": \"exhaust energy\",\n \"alphastage\": action.omegastage,\n \"deltastages\": [\n {\n \"units\": {\n [action.performerKey]: {\n \"energy\": {\n \"move\": false,\n }\n }\n }\n },\n ]\n }))\n }\n }\n\n\n if(action.type == \"invoke skill\"\n && action.skillKey != undefined) {\n if(action.direction != undefined) {\n Action.addStep(action, Step.instantiate({\n \"type\": \"turn\",\n \"alphastage\": action.omegastage,\n \"deltastages\": [\n {\n \"unit\": {\n \"key\": action.performerKey,\n \"direction\": action.direction,\n }\n }\n ]\n }))\n }\n\n // const performer = action.omegastage.units[action.performerKey]\n // const target = Stage.findUnitAtPosition(action.omegastage, action.position)\n // if(target != undefined) {\n // action.targetAffiliation = target.affiliation\n // }\n //\n //\n // // CONVO // DEBUG\n // const conversation = getConversation(action)\n //\n // if(conversation != undefined\n // && conversation.dialogue != undefined) {\n // conversation.dialogue.forEach((dialogue) => {\n // Action.addStep(action, Step.instantiate({\n // \"type\": \"say\",\n // \"alphastage\": action.omegastage,\n //\n // \"deltastages\": [\n // {\n // \"mark\": 0,\n // \"dialogue\": {\n // \"text\": dialogue.text,\n // \"portrait\": dialogue.portrait,\n // }\n // }\n // ],\n // \"isImportant\": true,\n // \"duration\": Infinity,\n // }))\n // })\n // Action.addStep(action, Step.instantiate({\n // \"type\": \"unsay\",\n // \"alphastage\": action.omegastage,\n // \"deltastages\": [\n // {\n // \"mark\": 0,\n // \"dialogue\": null\n // }\n // ],\n // }))\n // }\n //\n // if(conversation != undefined\n // && conversation.changeTargetAffilationTo != undefined) {\n // Action.addStep(action, Step.instantiate({\n // \"alphastage\": action.omegastage,\n // \"deltastages\": [\n // {\n // \"mark\": 0,\n // \"unit\": {\n // \"key\": target.key,\n // \"affiliation\": conversation.changeTargetAffilationTo == \"me\" ? action.alphastage.units[action.performerKey].affiliation : conversation.changeTargetAffilationTo,\n // }\n // }\n // ],\n // }))\n // }\n //\n // if(conversation == undefined\n // || conversation.type == \"invoke skill\"\n // || conversation.alsoInvokeSkill == true) {\n const skill = skills.get(action.skillKey)\n\n action.role = skill.role\n\n if(skill.calculateStep instanceof Function) {\n const step = skill.calculateStep({\n \"performerKey\": action.performerKey,\n \"position\": action.position,\n \"stage\": action.omegastage,\n })\n Action.addStep(action, step)\n if(step.followupSteps != undefined) {\n step.followupSteps.forEach((followupStep) => {\n Action.addStep(action, followupStep)\n // TODO: Do we have any gaurentee that these\n // followup steps are respecting the invoke skill step.omegastage?\n // and that we can use it without killing and undoing the invoke skill?\n })\n }\n }\n\n /////////////\n // DEATHS //\n ///////////\n Action.addStep(action, Reactions.getSteps(action.omegastage, {\"actingUnitKey\": action.performerKey}))\n Action.addStep(action, Unit.calculateActionExperience(action.omegastage, action.performerKey, Stage.findUnitAtPosition(action.alphastage, action.position)?.key))\n\n if(action.omegastage.units[action.performerKey] == undefined) {\n return action\n }\n\n //////////////////////\n // COUNTER-ATTACKS //\n ////////////////////\n\n if(skills.get(action.skillKey).canBeCounterattacked) {\n const targetedUnit = Stage.findUnitAtPosition(action.alphastage, action.position)\n if(targetedUnit != undefined\n && action.omegastage.units[targetedUnit.key] != undefined\n && action.omegastage.units[targetedUnit.key].isDead != true) {\n const target = action.omegastage.units[targetedUnit.key]\n const performer = action.omegastage.units[action.performerKey]\n const counterattackSkillKey = Objdict.find(target.skills, (skillKey) => {\n return skills.get(skillKey) != undefined\n && (skills.get(skillKey).type == \"counterattack\" || (skills.get(skillKey).canCounterattack === true || (skills.get(skillKey).canCounterattack instanceof Function && skills.get(skillKey).canCounterattack({\"performerKey\": target.key, \"stage\": action.omegastage, \"position\": performer.position}))))\n && Geometry.isWithinRange(target.position, performer.position, skills.get(skillKey).range || target.attackrange) // DOES NOT RESPECT Z\n && (skills.get(skillKey).canTarget instanceof Function == false\n || skills.get(skillKey).canTarget({\"performerKey\": target.key, \"stage\": action.omegastage, \"position\": performer.position}) == true)\n // If you ever want this to be a \"on damage\" rather than a fire-emblem-style counterattack\n // then remove this Geometry.isWithinRange condition.\n })\n // const vector = Geometry.difference(performer.position, target.position)\n // const direction = {\"x\": 0, \"y\": 0}\n // if(vector.x == 0 && vector.y != 0) {\n // direction.y = Math.sign(vector.y)\n // } else if(vector.x != 0 && vector.y == 0) {\n // direction.x = Math.sign(vector.x)\n // } else if(vector.x != 0 && vector.y != 0) {\n // if(Math.abs(vector.x) > Math.abs(vector.y)) {\n // direction.x = Math.sign(vector.x)\n // } else {\n // direction.y = Math.sign(vector.y)\n // }\n // }\n // TODO: read a direction from the deltaunit, so the skills can define\n // the direction of damage instead of this ungrokable math equation.\n // const position = Geometry.add(target.position, direction)\n if(counterattackSkillKey != undefined) {\n const skill = skills.get(counterattackSkillKey)\n if(skill.calculateStep instanceof Function) {\n const step = skill.calculateStep({\n \"performerKey\": target.key,\n \"position\": performer.position,\n \"stage\": action.omegastage,\n })\n Action.addStep(action, step)\n }\n\n Action.addStep(action, Reactions.getSteps(action.omegastage, {\"actingUnitKey\": target.key}))\n Action.addStep(action, Unit.calculateActionExperience(action.omegastage, target.key, action.performerKey))\n }\n }\n\n if(action.omegastage.units[action.performerKey] == undefined) {\n return action\n }\n }\n\n /////////////\n // ENERGY //\n ///////////\n\n Action.addStep(action, Step.instantiate({\n \"type\": \"exhaust energy\",\n \"alphastage\": action.omegastage,\n \"deltastage\": {\n \"unit\": {\n \"key\": action.performerKey,\n \"energy\": {\"invoke skill\": false}\n }\n }\n }))\n }\n\n // const light = \"hello world\"\n // Action.addStep(action, Step.instantiate({\n // \"type\": \"recalculate light\",\n // \"alphastage\": action.omegastage,\n // \"deltastages\": [\n // {\n // \"light\": light\n // }\n // ]\n // }))\n\n // Action.addStep(action, Step.instantiate({\n // \"type\": \"increment stage.actionMark\",\n // \"alphastage\": action.omegastage,\n // \"deltastages\": [{\"actionMark\": (action.omegastage.actionMark || 0) + 1}]\n // }))\n\n // /////////////////////\n // // Passive Skills //\n // ///////////////////\n // // NONE OF THESE RESPECT .SKILLKEY (OVER .SKILL)\n // Speedtest.point(\"apply passives\")\n //\n // action.alphastage.units.forEach((shadowunit) => {\n // if(shadowunit.skills != undefined) {\n // shadowunit.skills.forEach((skill) => {\n // if(skill.type == \"passive\"\n // && skill.trigger == \"reaction\") {\n // skill.editResults(action, shadowunit)\n // }\n // })\n // }\n // })\n\n // //////////////////////\n // // Counter-Attacks //\n // ////////////////////\n // // NONE OF THESE RESPECT .SKILLKEY (OVER .SKILL)\n // // DON'T WE ALREADY HAVE THIS UP ABOVE?\n /// /// DOES NOT RESPECT ACTION.PERFORMERKEY\n // Speedtest.point(\"predict counter-attacks\")\n //\n // if(action.type === \"invoke\"\n // && action.skill.canBeCountered != true\n // && action.alphastage.units.target.health + ((action.results && action.results.target && action.results.target.health) || 0) > 0) {\n // let counterskill = action.target.skills.find((skill) => {\n // return skill.type == \"counterattack\"\n // && skill.canTarget(action.performer, action.target, action, action.stage)\n // })\n // if(!!counterskill) {\n // action.counterAction = {\n // \"type\": \"invoke\",\n // \"skill\": counterskill,\n // \"target\": action.performer,\n // \"performer\": action.target,\n // \"results\": counterskill.calculateDeltastages(action.performer, action.target, true /*isCounterAction*/, {\"units\": action.alphastage.units}, action)\n // }\n // }\n // }\n //\n // // // TODO: also shadow the counter actions\n // // if(action.counterAction != undefined) {\n // // if(action.counterAction.results != undefined\n // // && action.counterAction.results.target != undefined\n // // && action.counterAction.results.target.health != undefined) {\n // // shadowunit.health += action.counterAction.results.target.health\n // // }\n // // // TODO: am i reading this right? we only predict target health for\n // // // counteractions. no performer health, no target position.\n // // }\n\n // TODO: Aggregate all the step results into a common result object.\n\n // // TODO: Revisit calculating the FUTURE state of next turn if the\n // // players chose to end their turn right after this action, mostly\n // // including end-of-turn effects.\n // startTurnEffects.forEach((effect) => {\n // const results = effect.calculateDeltastages({\n // \"previousState\": action.quantumstate[\"turn:=0\"]\n // })\n // Object.keys(results).forEach((key) => {\n // const result = results[key]\n // const unit = action.quantumstate[\"turn:+1:start\"].units.find((unit) => unit.key == key)\n // if(unit != undefined) {\n // unit.health += result.health\n // unit.isDead = unit.health <= 0\n // }\n // })\n // })\n // action.quantumstate[\"turn:+1:start\"] = {\n // // \"units\": action.shadowunits.map((unit) => {\n // // return {\n // // \"key\": unit.key,\n // // \"delta\": {\"health\": 0},\n // // \"alpha\": clonedeep(unit),\n // // \"omega\": {/*to be computed*/}\n // // }\n // // }),\n // \"tiles\": clonedeep(action.shadowtiles),\n // \"units\": clonedeep(action.shadowunits),\n // }\n mark4()\n\n ///////////////////\n // FLOW ACTIONS //\n /////////////////\n\n // This is where we flow to all the neighboring\n // tiles. These checks do not verify whether the\n // unit can move to this tile or act on this tile,\n // but it does propagate the actions to check.\n\n action.nextActions = []\n\n const mark7 = Speedtest.mark(\"Unit.flowActions\", \"flow: move\")\n const omegaperformer = action.omegastage.units[action.performerKey]\n\n if(action.type == \"move\"\n || action.type == \"wait\"\n || action.type == \"move through\") {\n if(omegaperformer.isDead != true\n // && omegaperformer.state != \"idle\"\n // && omegaperformer.energy[\"move\"] == true\n && action.distance < omegaperformer.moverange\n && Unit.isFlinching(omegaperformer) == false) {\n Geometry.getNeighborPoints(action.position).forEach((neighborposition) => {\n if(action.positions.find((previousPosition) => Geometry.equals(previousPosition, neighborposition))) {\n return\n }\n const nextTerrain = World.getTerrain(action.alphastage.world, neighborposition)\n if(nextTerrain == undefined) return // TODO: SHOULD WE REALLY BE DOING THE WORLD COLLISION CHECK HERE?\n let distance = MOVE_COST\n if(nextTerrain.isPath) distance = MOVE_COST / 2\n // if(nextTerrain.isTree) distance = MOVE_COST * 2\n if(action.distance + distance > omegaperformer.moverange) return\n action.nextActions.push({\n \"type\": \"move\",\n \"performerKey\": action.performerKey,\n \"position\": neighborposition,\n \"distance\": action.distance + distance,\n \"alphastage\": action.omegastage,\n \"previousAction\": action, // used for steps and positions\n \"influenceMap\": action.influenceMap,\n \"direction\": Geometry.direction(neighborposition, action.position),\n })\n })\n }\n }\n mark7()\n\n const mark8 = Speedtest.mark(\"Unit.flowActions\", \"flow: invoke skill\")\n if(action.type == \"move\"\n || action.type == \"wait\"\n || action.type == \"wait - invoke skill\") {\n if(omegaperformer.isDead != true\n && omegaperformer.energy[\"invoke skill\"] == true\n && omegaperformer.skills != undefined) {\n // && Unit.isFlinching(omegaperformer) == false) {\n // const skillsToInvoke = [\"support1\", \"support2\", \"attack1\", \"attack2\", \"attack3\", \"attack4\", \"attack5\"]\n Object.values(omegaperformer.skills).forEach((skillKey) => {\n // const skillKey = omegaperformer.skills[skillSlot]\n if(skillKey == undefined\n || skills.get(skillKey) == undefined) {\n return\n }\n const skill = skills.get(skillKey)\n if(skill.type == \"invoke\") {\n let positions = []\n if(skill.range != undefined && skill.range.type == \"findCollisionInDirection\") {\n Object.values(Geometry.orthodirections).forEach((direction) => {\n positions = positions.concat(Stage.findCollisionInDirection({\n \"stage\": action.omegastage,\n \"position\": omegaperformer.position,\n \"direction\": direction,\n \"maxdistance\": (skill.range && skill.range.max) || omegaperformer.attackrange,\n \"options\": (skill.range && skill.range.options),\n }).positions)\n })\n } else {\n positions = Geometry.getNeighborPoints(action.position, skill.range || omegaperformer.attackrange)\n }\n\n positions.forEach((position) => {\n action.nextActions.push({\n \"type\": \"invoke skill\",\n \"skillKey\": skillKey,\n \"performerKey\": action.performerKey,\n \"position\": position,\n \"alphastage\": action.omegastage,\n \"previousAction\": action, // used for steps and positions\n \"influenceMap\": action.influenceMap,\n \"direction\": Geometry.direction(position, action.position),\n })\n })\n }\n })\n }\n }\n mark8()\n\n return action\n }\n static saveAction(actionmap, action) {\n const mark = Speedtest.mark(\"Unit.calculateAction\", \"save the action\")\n\n // What makes each action different, even if they share a position and performer?\n // distance is NOT the same\n // skill + type is NOT the same\n // prev actions are NOT the same\n // (probably more, now. this list is very old)\n\n action.key = action.type + \":\" + action.positions.map(Geometry.toString).reverse().join(\">\")\n\n const positionkey = action.position.x + \"x\" + action.position.y // + \"x\" + action.position.z // DEBUG DID A BAD THING HUH\n actionmap[positionkey] = actionmap[positionkey] || []\n actionmap[positionkey].push(action)\n\n mark()\n return actionmap\n }\n static calculateActionExperience(stage, performerUnitKey, targetUnitKey) {\n if(targetUnitKey != undefined\n && performerUnitKey != undefined\n && stage.units[targetUnitKey] != undefined\n && stage.units[performerUnitKey] != undefined) {\n const performer = stage.units[performerUnitKey]\n const target = stage.units[targetUnitKey]\n\n let experience = 10\n\n // if(target.affiliation == performer.affiliation) return\n if(target.isDead == true) experience *= 2\n\n // if(experience == 0) return\n let totalExperience = (performer.experience || 0) + experience\n \n return Step.instantiate({\n \"name\": \"get experience\",\n \"type\": \"invoke skill\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"unit\": {\"key\": performer.key, \"experience\": performer.experience}\n },\n {\n \"mark\": 10 * (totalExperience - performer.experience),\n \"unit\": {\"key\": performer.key, \"experience\": totalExperience}\n }\n ]\n })\n }\n }\n static pruneInternalActionMapData(actionmap) {\n Objdict.forEach(actionmap, (actionmaptile) => {\n actionmaptile.forEach((action) => {\n delete action.previousAction\n delete action.nextActions\n delete action.isStartingAction\n // distance\n // influenceMap\n // performerKey\n // skillKey\n // type\n // steps\n // omegastage\n // alphastage\n // positions\n // position\n })\n })\n return actionmap\n }\n\n static copy(unit) {\n if(unit == undefined) return undefined\n return {\n \"key\": unit.key, // unit's individual unique key\n \"reference\": unit.reference, // unit's shared base class key\n \"isDead\": unit.isDead || false,\n \"deathTimer\": unit.deathTimer,\n \"hasSlowDeath\": unit.hasSlowDeath,\n \"canBetray\": unit.canBetray,\n \"hasBeenRemoved\": unit.hasBeenRemoved, // todo: THIS IS VICTORY CONDITION SPECIFIC\n \"position\": unit.position && {\n \"x\": unit.position.x,\n \"y\": unit.position.y,\n \"z\": unit.position.z,\n },\n \"affiliation\": unit.affiliation,\n \"skills\": unit.skills,\n \"equippedSkills\": unit.equippedSkills,\n // \"unlockedSkills\": unit.unlockedSkills,\n // \"unlockableSkills\": unit.unlockableSkills,\n \"energy\": {\n \"move\": unit.energy && unit.energy[\"move\"],\n \"invoke skill\": unit.energy && unit.energy[\"invoke skill\"],\n \"1\": unit.energy && unit.energy[\"1\"],\n \"2\": unit.energy && unit.energy[\"2\"],\n },\n \"jobKey\": unit.jobKey,\n \"health\": unit.health,\n \"power\": unit.power,\n \"element\": unit.element,\n \"attacktype\": unit.attacktype,\n \"attackrange\": unit.attackrange,\n \"attackspeed\": unit.attackspeed,\n \"supereffectiveness\": unit.supereffectiveness,\n \"defense\": unit.defense,\n \"resistance\": unit.resistance,\n \"luck\": unit.luck,\n \"maxhealth\": unit.maxhealth,\n \"moverange\": unit.moverange,\n \"movetype\": unit.movetype,\n \"image\": unit.image,\n \"face\": unit.face,\n \"faceKey\": unit.faceKey,\n \"body\": unit.body,\n \"bodyKey\": unit.bodyKey,\n \"imageUrl\": unit.imageUrl,\n \"imageKey\": unit.imageKey,\n \"spriteKey\": unit.spriteKey,\n \"decalImageKey\": unit.decalImageKey,\n \"weaponImageKey\": unit.weaponImageKey,\n \"imageSize\": unit.imageSize,\n \"portrait\": unit.portrait,\n \"portrait_hidden\": unit.portrait_hidden,\n \"images\": unit.images,\n \"sprites\": unit.sprites,\n \"portraits\": unit.portraits,\n \"sounds\": unit.sounds,\n \"effects\": Objdict.map(unit.effects, (effect) => {\n const reeffect = {\n \"type\": effect.type,\n \"timer\": effect.timer,\n }\n for(let key in effect) {\n if(effect[key] != undefined) {\n reeffect[key] = effect[key]\n }\n }\n // if(effect[\"range\"] !== undefined) reeffect[\"range\"] = effect[\"range\"] // TODO: make this a deeper copy, not a shallow copy\n // if(effect[\"actionMark\"] !== undefined) reeffect[\"actionMark\"] = effect[\"actionMark\"]\n // if(effect[\"skillKey\"] !== undefined) reeffect[\"skillKey\"] = effect[\"skillKey\"]\n // if(effect[\"positions\"] !== undefined) reeffect[\"positions\"] = effect[\"positions\"]\n // // WE HAVE TO DO THIS TO SATISFY DUMB TEST COMPARES\n return reeffect\n }),\n \"name\": unit.name,\n // \"number\": unit.number, // THESE ARE STATIC DECORATOR META VALUES, WHICH WE\n // SHOULD SOMEDAY BE ABLE TO JUST READ FROM A REFERENCED PROTOTYPE PARENT.\n // \"family\": unit.family,\n \"inventory\": {\n \"count\": unit.inventory.count,\n \"items\": Objdict.map(unit.inventory.items, (item) => {\n const copiedItem = {}\n for(let key in item) {\n if(item[key] != undefined) {\n copiedItem[key] = item[key]\n }\n }\n return copiedItem\n }),\n },\n \"experience\": unit.experience,\n \"maxexperience\": unit.maxexperience,\n \"armor\": unit.armor,\n \"maxarmor\": unit.maxarmor,\n \"armortype\": unit.armortype,\n \"level\": unit.level,\n \"jobName\": unit.jobName,\n \"state\": unit.state,\n \"class\": unit.class,\n \"type\": unit.type,\n \"score\": unit.score,\n \"isVisible\": unit.isVisible,\n \"disableHealth\": unit.disableHealth, // YIKES I WISH WE JUST DIDN'T ADD HEALTH TO BEGIN WITH (WITHOUT DEATH KICKING IN FOR THE HEALTHLESS ENTITY)\n \"isHidingHealthbar\": unit.isHidingHealthbar,\n \"isNotRendered\": unit.isNotRendered, // bruh\n \"direction\": unit.direction,\n \"intent\": unit.intent, // JUST FOR KILLZONES...?\n \"canWalkOntoTheZone\": unit.canWalkOntoTheZone, // i mean like ok this too...??\n \"destination\": unit.destination, // this is, like, a \"generic\" variable for tiled objects.. but this should be less singular and support multiple params.\n \"spawnclass\": unit.spawnclass, // uh yeah thisi sjust for spawn zones?? why does every unit have this??\n \"properties\": unit.properties, // generic immutable dict for properties?\n \"item\": unit.item, // just using this for animating an item above a character's head.\n \"isRecruited\": unit.isRecruited,\n \"isRecruitable\": unit.isRecruitable,\n \"day\": unit.day, // used in town,\n \"subclasses\": unit.subclasses,\n \"tag\": unit.tag, // using this for spawn point groups. spawn left or right, for example.\n \"facts\": unit.facts,\n \"spawnspot\": unit.spawnspot,\n \"dialogue\": unit.dialogue,\n \"title\": unit.title,\n \"subtitle\": unit.subtitle,\n \"ai\": unit.ai,\n \"preferredAffilation\": unit.preferredAffilation,\n \"levelups\": unit.levelups,\n }\n }\n\n //////////////\n // Getters //\n ////////////\n static isFlinching(unit) {\n if(unit.effects != undefined) {\n return !!Objdict.find(unit.effects, (effect) => {\n return effect.type == \"flinch\"\n })\n }\n }\n}\n// // THIS IS PRETTY OUT OF DATE\n// const exampleAction = {\n// \"type\": String, // \"move\"|\"invoke\"|\"assist\"|\"move through\"|\"invoke skill\"\n// \"stage\": Stage,\n// \"performer\": Unit,\n// \"target\": Unit,\n// \"position\": Point, // position of this action\n// \"distance\": Number, // shortest orthogonal distance from the starting action.\n// \"isStartingAction\": Boolean,\n// // THE STATE **BEFORE** THE ACTION IS PERFORMED\n// \"alphastage\": {\n// \"units\": [{Unit}, {Unit}, {Unit}],\n// \"tiles\": [{Tile}, {Tile}, ..., {Tile}],\n// },\n// // THE STATE **AFTER** THE ACTION IS PERFORMED\n// \"omegastage\": {\n// \"units\": [{Unit}, {Unit}, {Unit}],\n// \"tiles\": [{Tile}, {Tile}, ..., {Tile}],\n// },\n// \"results\": {\n// \"target\": {\n// \"health\": -1, // remove one health\n// \"position\": {\"x\": -1, \"y\": 0}, // move left one tile\n// },\n// \"peformer\": {\n// \"health\": +1\n// },\n// },\n// \"counterAction\": Action,\n// }\n\n// TODO: hey is it documented anywhere that action.positions are in reverse order, so action.positions[0] is the current position, and action.positions[1] is the last position?\n\nimport Delta from \"@frog/source/models/Delta.js\"\n\n// ACTIONS is a single discrete input that the player/ai has\n// chosen. They are legal actions to perform from the current\n// state: within range, respecting targets, etc. They include\n// a list of steps/beats.\n\n// STEPS/BEATS are the execution of an action, or a script.\n// They include there own discrete edit onto the world, with\n// all the details necessary to perform it. It includes both\n// the state BEFORE and AFTER the step is performed. They can\n// be overlapped or combined by the director.\n", "\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n", "\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"\u2318\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n", "// http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\nvar round = Math.round\n\nmodule.exports = function (r, g, b) {\n var h, s, v\n var max = Math.max(r, g, b)\n var min = Math.min(r, g, b)\n var delta = max - min\n\n // hue\n if (delta === 0) {\n h = 0\n } else if (r === max) {\n h = ((g-b) / delta) % 6\n } else if (g === max) {\n h = (b-r) / delta + 2\n } else if (b === max) {\n h = (r-g) / delta + 4\n }\n\n h = round(h*60)\n if (h < 0) h += 360\n\n // saturation\n s = round((max === 0 ? 0 : (delta / max)) * 100)\n\n // value\n v = round(max/255*100)\n\n return [h, s, v]\n}\n", "// http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\nvar round = Math.round\n\nmodule.exports = function (h, s, v) {\n var s = s / 100, v = v / 100\n var c = v * s\n var hh = h / 60\n var x = c * (1 - Math.abs(hh % 2 - 1))\n var m = v - c\n\n var p = parseInt(hh, 10)\n var rgb = (\n p === 0 ? [c, x, 0] :\n p === 1 ? [x, c, 0] :\n p === 2 ? [0, c, x] :\n p === 3 ? [0, x, c] :\n p === 4 ? [x, 0, c] :\n p === 5 ? [c, 0, x] :\n []\n )\n\n return [\n round(255 * (rgb[0] + m)),\n round(255 * (rgb[1] + m)),\n round(255 * (rgb[2] + m))\n ]\n}\n", "module.exports = [\n {\n \"value\":\"#B0171F\",\n \"name\":\"indian red\"\n },\n {\n \"value\":\"#DC143C\",\n \"css\":true,\n \"name\":\"crimson\"\n },\n {\n \"value\":\"#FFB6C1\",\n \"css\":true,\n \"name\":\"lightpink\"\n },\n {\n \"value\":\"#FFAEB9\",\n \"name\":\"lightpink 1\"\n },\n {\n \"value\":\"#EEA2AD\",\n \"name\":\"lightpink 2\"\n },\n {\n \"value\":\"#CD8C95\",\n \"name\":\"lightpink 3\"\n },\n {\n \"value\":\"#8B5F65\",\n \"name\":\"lightpink 4\"\n },\n {\n \"value\":\"#FFC0CB\",\n \"css\":true,\n \"name\":\"pink\"\n },\n {\n \"value\":\"#FFB5C5\",\n \"name\":\"pink 1\"\n },\n {\n \"value\":\"#EEA9B8\",\n \"name\":\"pink 2\"\n },\n {\n \"value\":\"#CD919E\",\n \"name\":\"pink 3\"\n },\n {\n \"value\":\"#8B636C\",\n \"name\":\"pink 4\"\n },\n {\n \"value\":\"#DB7093\",\n \"css\":true,\n \"name\":\"palevioletred\"\n },\n {\n \"value\":\"#FF82AB\",\n \"name\":\"palevioletred 1\"\n },\n {\n \"value\":\"#EE799F\",\n \"name\":\"palevioletred 2\"\n },\n {\n \"value\":\"#CD6889\",\n \"name\":\"palevioletred 3\"\n },\n {\n \"value\":\"#8B475D\",\n \"name\":\"palevioletred 4\"\n },\n {\n \"value\":\"#FFF0F5\",\n \"name\":\"lavenderblush 1\"\n },\n {\n \"value\":\"#FFF0F5\",\n \"css\":true,\n \"name\":\"lavenderblush\"\n },\n {\n \"value\":\"#EEE0E5\",\n \"name\":\"lavenderblush 2\"\n },\n {\n \"value\":\"#CDC1C5\",\n \"name\":\"lavenderblush 3\"\n },\n {\n \"value\":\"#8B8386\",\n \"name\":\"lavenderblush 4\"\n },\n {\n \"value\":\"#FF3E96\",\n \"name\":\"violetred 1\"\n },\n {\n \"value\":\"#EE3A8C\",\n \"name\":\"violetred 2\"\n },\n {\n \"value\":\"#CD3278\",\n \"name\":\"violetred 3\"\n },\n {\n \"value\":\"#8B2252\",\n \"name\":\"violetred 4\"\n },\n {\n \"value\":\"#FF69B4\",\n \"css\":true,\n \"name\":\"hotpink\"\n },\n {\n \"value\":\"#FF6EB4\",\n \"name\":\"hotpink 1\"\n },\n {\n \"value\":\"#EE6AA7\",\n \"name\":\"hotpink 2\"\n },\n {\n \"value\":\"#CD6090\",\n \"name\":\"hotpink 3\"\n },\n {\n \"value\":\"#8B3A62\",\n \"name\":\"hotpink 4\"\n },\n {\n \"value\":\"#872657\",\n \"name\":\"raspberry\"\n },\n {\n \"value\":\"#FF1493\",\n \"name\":\"deeppink 1\"\n },\n {\n \"value\":\"#FF1493\",\n \"css\":true,\n \"name\":\"deeppink\"\n },\n {\n \"value\":\"#EE1289\",\n \"name\":\"deeppink 2\"\n },\n {\n \"value\":\"#CD1076\",\n \"name\":\"deeppink 3\"\n },\n {\n \"value\":\"#8B0A50\",\n \"name\":\"deeppink 4\"\n },\n {\n \"value\":\"#FF34B3\",\n \"name\":\"maroon 1\"\n },\n {\n \"value\":\"#EE30A7\",\n \"name\":\"maroon 2\"\n },\n {\n \"value\":\"#CD2990\",\n \"name\":\"maroon 3\"\n },\n {\n \"value\":\"#8B1C62\",\n \"name\":\"maroon 4\"\n },\n {\n \"value\":\"#C71585\",\n \"css\":true,\n \"name\":\"mediumvioletred\"\n },\n {\n \"value\":\"#D02090\",\n \"name\":\"violetred\"\n },\n {\n \"value\":\"#DA70D6\",\n \"css\":true,\n \"name\":\"orchid\"\n },\n {\n \"value\":\"#FF83FA\",\n \"name\":\"orchid 1\"\n },\n {\n \"value\":\"#EE7AE9\",\n \"name\":\"orchid 2\"\n },\n {\n \"value\":\"#CD69C9\",\n \"name\":\"orchid 3\"\n },\n {\n \"value\":\"#8B4789\",\n \"name\":\"orchid 4\"\n },\n {\n \"value\":\"#D8BFD8\",\n \"css\":true,\n \"name\":\"thistle\"\n },\n {\n \"value\":\"#FFE1FF\",\n \"name\":\"thistle 1\"\n },\n {\n \"value\":\"#EED2EE\",\n \"name\":\"thistle 2\"\n },\n {\n \"value\":\"#CDB5CD\",\n \"name\":\"thistle 3\"\n },\n {\n \"value\":\"#8B7B8B\",\n \"name\":\"thistle 4\"\n },\n {\n \"value\":\"#FFBBFF\",\n \"name\":\"plum 1\"\n },\n {\n \"value\":\"#EEAEEE\",\n \"name\":\"plum 2\"\n },\n {\n \"value\":\"#CD96CD\",\n \"name\":\"plum 3\"\n },\n {\n \"value\":\"#8B668B\",\n \"name\":\"plum 4\"\n },\n {\n \"value\":\"#DDA0DD\",\n \"css\":true,\n \"name\":\"plum\"\n },\n {\n \"value\":\"#EE82EE\",\n \"css\":true,\n \"name\":\"violet\"\n },\n {\n \"value\":\"#FF00FF\",\n \"vga\":true,\n \"name\":\"magenta\"\n },\n {\n \"value\":\"#FF00FF\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"fuchsia\"\n },\n {\n \"value\":\"#EE00EE\",\n \"name\":\"magenta 2\"\n },\n {\n \"value\":\"#CD00CD\",\n \"name\":\"magenta 3\"\n },\n {\n \"value\":\"#8B008B\",\n \"name\":\"magenta 4\"\n },\n {\n \"value\":\"#8B008B\",\n \"css\":true,\n \"name\":\"darkmagenta\"\n },\n {\n \"value\":\"#800080\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"purple\"\n },\n {\n \"value\":\"#BA55D3\",\n \"css\":true,\n \"name\":\"mediumorchid\"\n },\n {\n \"value\":\"#E066FF\",\n \"name\":\"mediumorchid 1\"\n },\n {\n \"value\":\"#D15FEE\",\n \"name\":\"mediumorchid 2\"\n },\n {\n \"value\":\"#B452CD\",\n \"name\":\"mediumorchid 3\"\n },\n {\n \"value\":\"#7A378B\",\n \"name\":\"mediumorchid 4\"\n },\n {\n \"value\":\"#9400D3\",\n \"css\":true,\n \"name\":\"darkviolet\"\n },\n {\n \"value\":\"#9932CC\",\n \"css\":true,\n \"name\":\"darkorchid\"\n },\n {\n \"value\":\"#BF3EFF\",\n \"name\":\"darkorchid 1\"\n },\n {\n \"value\":\"#B23AEE\",\n \"name\":\"darkorchid 2\"\n },\n {\n \"value\":\"#9A32CD\",\n \"name\":\"darkorchid 3\"\n },\n {\n \"value\":\"#68228B\",\n \"name\":\"darkorchid 4\"\n },\n {\n \"value\":\"#4B0082\",\n \"css\":true,\n \"name\":\"indigo\"\n },\n {\n \"value\":\"#8A2BE2\",\n \"css\":true,\n \"name\":\"blueviolet\"\n },\n {\n \"value\":\"#9B30FF\",\n \"name\":\"purple 1\"\n },\n {\n \"value\":\"#912CEE\",\n \"name\":\"purple 2\"\n },\n {\n \"value\":\"#7D26CD\",\n \"name\":\"purple 3\"\n },\n {\n \"value\":\"#551A8B\",\n \"name\":\"purple 4\"\n },\n {\n \"value\":\"#9370DB\",\n \"css\":true,\n \"name\":\"mediumpurple\"\n },\n {\n \"value\":\"#AB82FF\",\n \"name\":\"mediumpurple 1\"\n },\n {\n \"value\":\"#9F79EE\",\n \"name\":\"mediumpurple 2\"\n },\n {\n \"value\":\"#8968CD\",\n \"name\":\"mediumpurple 3\"\n },\n {\n \"value\":\"#5D478B\",\n \"name\":\"mediumpurple 4\"\n },\n {\n \"value\":\"#483D8B\",\n \"css\":true,\n \"name\":\"darkslateblue\"\n },\n {\n \"value\":\"#8470FF\",\n \"name\":\"lightslateblue\"\n },\n {\n \"value\":\"#7B68EE\",\n \"css\":true,\n \"name\":\"mediumslateblue\"\n },\n {\n \"value\":\"#6A5ACD\",\n \"css\":true,\n \"name\":\"slateblue\"\n },\n {\n \"value\":\"#836FFF\",\n \"name\":\"slateblue 1\"\n },\n {\n \"value\":\"#7A67EE\",\n \"name\":\"slateblue 2\"\n },\n {\n \"value\":\"#6959CD\",\n \"name\":\"slateblue 3\"\n },\n {\n \"value\":\"#473C8B\",\n \"name\":\"slateblue 4\"\n },\n {\n \"value\":\"#F8F8FF\",\n \"css\":true,\n \"name\":\"ghostwhite\"\n },\n {\n \"value\":\"#E6E6FA\",\n \"css\":true,\n \"name\":\"lavender\"\n },\n {\n \"value\":\"#0000FF\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"blue\"\n },\n {\n \"value\":\"#0000EE\",\n \"name\":\"blue 2\"\n },\n {\n \"value\":\"#0000CD\",\n \"name\":\"blue 3\"\n },\n {\n \"value\":\"#0000CD\",\n \"css\":true,\n \"name\":\"mediumblue\"\n },\n {\n \"value\":\"#00008B\",\n \"name\":\"blue 4\"\n },\n {\n \"value\":\"#00008B\",\n \"css\":true,\n \"name\":\"darkblue\"\n },\n {\n \"value\":\"#000080\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"navy\"\n },\n {\n \"value\":\"#191970\",\n \"css\":true,\n \"name\":\"midnightblue\"\n },\n {\n \"value\":\"#3D59AB\",\n \"name\":\"cobalt\"\n },\n {\n \"value\":\"#4169E1\",\n \"css\":true,\n \"name\":\"royalblue\"\n },\n {\n \"value\":\"#4876FF\",\n \"name\":\"royalblue 1\"\n },\n {\n \"value\":\"#436EEE\",\n \"name\":\"royalblue 2\"\n },\n {\n \"value\":\"#3A5FCD\",\n \"name\":\"royalblue 3\"\n },\n {\n \"value\":\"#27408B\",\n \"name\":\"royalblue 4\"\n },\n {\n \"value\":\"#6495ED\",\n \"css\":true,\n \"name\":\"cornflowerblue\"\n },\n {\n \"value\":\"#B0C4DE\",\n \"css\":true,\n \"name\":\"lightsteelblue\"\n },\n {\n \"value\":\"#CAE1FF\",\n \"name\":\"lightsteelblue 1\"\n },\n {\n \"value\":\"#BCD2EE\",\n \"name\":\"lightsteelblue 2\"\n },\n {\n \"value\":\"#A2B5CD\",\n \"name\":\"lightsteelblue 3\"\n },\n {\n \"value\":\"#6E7B8B\",\n \"name\":\"lightsteelblue 4\"\n },\n {\n \"value\":\"#778899\",\n \"css\":true,\n \"name\":\"lightslategray\"\n },\n {\n \"value\":\"#708090\",\n \"css\":true,\n \"name\":\"slategray\"\n },\n {\n \"value\":\"#C6E2FF\",\n \"name\":\"slategray 1\"\n },\n {\n \"value\":\"#B9D3EE\",\n \"name\":\"slategray 2\"\n },\n {\n \"value\":\"#9FB6CD\",\n \"name\":\"slategray 3\"\n },\n {\n \"value\":\"#6C7B8B\",\n \"name\":\"slategray 4\"\n },\n {\n \"value\":\"#1E90FF\",\n \"name\":\"dodgerblue 1\"\n },\n {\n \"value\":\"#1E90FF\",\n \"css\":true,\n \"name\":\"dodgerblue\"\n },\n {\n \"value\":\"#1C86EE\",\n \"name\":\"dodgerblue 2\"\n },\n {\n \"value\":\"#1874CD\",\n \"name\":\"dodgerblue 3\"\n },\n {\n \"value\":\"#104E8B\",\n \"name\":\"dodgerblue 4\"\n },\n {\n \"value\":\"#F0F8FF\",\n \"css\":true,\n \"name\":\"aliceblue\"\n },\n {\n \"value\":\"#4682B4\",\n \"css\":true,\n \"name\":\"steelblue\"\n },\n {\n \"value\":\"#63B8FF\",\n \"name\":\"steelblue 1\"\n },\n {\n \"value\":\"#5CACEE\",\n \"name\":\"steelblue 2\"\n },\n {\n \"value\":\"#4F94CD\",\n \"name\":\"steelblue 3\"\n },\n {\n \"value\":\"#36648B\",\n \"name\":\"steelblue 4\"\n },\n {\n \"value\":\"#87CEFA\",\n \"css\":true,\n \"name\":\"lightskyblue\"\n },\n {\n \"value\":\"#B0E2FF\",\n \"name\":\"lightskyblue 1\"\n },\n {\n \"value\":\"#A4D3EE\",\n \"name\":\"lightskyblue 2\"\n },\n {\n \"value\":\"#8DB6CD\",\n \"name\":\"lightskyblue 3\"\n },\n {\n \"value\":\"#607B8B\",\n \"name\":\"lightskyblue 4\"\n },\n {\n \"value\":\"#87CEFF\",\n \"name\":\"skyblue 1\"\n },\n {\n \"value\":\"#7EC0EE\",\n \"name\":\"skyblue 2\"\n },\n {\n \"value\":\"#6CA6CD\",\n \"name\":\"skyblue 3\"\n },\n {\n \"value\":\"#4A708B\",\n \"name\":\"skyblue 4\"\n },\n {\n \"value\":\"#87CEEB\",\n \"css\":true,\n \"name\":\"skyblue\"\n },\n {\n \"value\":\"#00BFFF\",\n \"name\":\"deepskyblue 1\"\n },\n {\n \"value\":\"#00BFFF\",\n \"css\":true,\n \"name\":\"deepskyblue\"\n },\n {\n \"value\":\"#00B2EE\",\n \"name\":\"deepskyblue 2\"\n },\n {\n \"value\":\"#009ACD\",\n \"name\":\"deepskyblue 3\"\n },\n {\n \"value\":\"#00688B\",\n \"name\":\"deepskyblue 4\"\n },\n {\n \"value\":\"#33A1C9\",\n \"name\":\"peacock\"\n },\n {\n \"value\":\"#ADD8E6\",\n \"css\":true,\n \"name\":\"lightblue\"\n },\n {\n \"value\":\"#BFEFFF\",\n \"name\":\"lightblue 1\"\n },\n {\n \"value\":\"#B2DFEE\",\n \"name\":\"lightblue 2\"\n },\n {\n \"value\":\"#9AC0CD\",\n \"name\":\"lightblue 3\"\n },\n {\n \"value\":\"#68838B\",\n \"name\":\"lightblue 4\"\n },\n {\n \"value\":\"#B0E0E6\",\n \"css\":true,\n \"name\":\"powderblue\"\n },\n {\n \"value\":\"#98F5FF\",\n \"name\":\"cadetblue 1\"\n },\n {\n \"value\":\"#8EE5EE\",\n \"name\":\"cadetblue 2\"\n },\n {\n \"value\":\"#7AC5CD\",\n \"name\":\"cadetblue 3\"\n },\n {\n \"value\":\"#53868B\",\n \"name\":\"cadetblue 4\"\n },\n {\n \"value\":\"#00F5FF\",\n \"name\":\"turquoise 1\"\n },\n {\n \"value\":\"#00E5EE\",\n \"name\":\"turquoise 2\"\n },\n {\n \"value\":\"#00C5CD\",\n \"name\":\"turquoise 3\"\n },\n {\n \"value\":\"#00868B\",\n \"name\":\"turquoise 4\"\n },\n {\n \"value\":\"#5F9EA0\",\n \"css\":true,\n \"name\":\"cadetblue\"\n },\n {\n \"value\":\"#00CED1\",\n \"css\":true,\n \"name\":\"darkturquoise\"\n },\n {\n \"value\":\"#F0FFFF\",\n \"name\":\"azure 1\"\n },\n {\n \"value\":\"#F0FFFF\",\n \"css\":true,\n \"name\":\"azure\"\n },\n {\n \"value\":\"#E0EEEE\",\n \"name\":\"azure 2\"\n },\n {\n \"value\":\"#C1CDCD\",\n \"name\":\"azure 3\"\n },\n {\n \"value\":\"#838B8B\",\n \"name\":\"azure 4\"\n },\n {\n \"value\":\"#E0FFFF\",\n \"name\":\"lightcyan 1\"\n },\n {\n \"value\":\"#E0FFFF\",\n \"css\":true,\n \"name\":\"lightcyan\"\n },\n {\n \"value\":\"#D1EEEE\",\n \"name\":\"lightcyan 2\"\n },\n {\n \"value\":\"#B4CDCD\",\n \"name\":\"lightcyan 3\"\n },\n {\n \"value\":\"#7A8B8B\",\n \"name\":\"lightcyan 4\"\n },\n {\n \"value\":\"#BBFFFF\",\n \"name\":\"paleturquoise 1\"\n },\n {\n \"value\":\"#AEEEEE\",\n \"name\":\"paleturquoise 2\"\n },\n {\n \"value\":\"#AEEEEE\",\n \"css\":true,\n \"name\":\"paleturquoise\"\n },\n {\n \"value\":\"#96CDCD\",\n \"name\":\"paleturquoise 3\"\n },\n {\n \"value\":\"#668B8B\",\n \"name\":\"paleturquoise 4\"\n },\n {\n \"value\":\"#2F4F4F\",\n \"css\":true,\n \"name\":\"darkslategray\"\n },\n {\n \"value\":\"#97FFFF\",\n \"name\":\"darkslategray 1\"\n },\n {\n \"value\":\"#8DEEEE\",\n \"name\":\"darkslategray 2\"\n },\n {\n \"value\":\"#79CDCD\",\n \"name\":\"darkslategray 3\"\n },\n {\n \"value\":\"#528B8B\",\n \"name\":\"darkslategray 4\"\n },\n {\n \"value\":\"#00FFFF\",\n \"name\":\"cyan\"\n },\n {\n \"value\":\"#00FFFF\",\n \"css\":true,\n \"name\":\"aqua\"\n },\n {\n \"value\":\"#00EEEE\",\n \"name\":\"cyan 2\"\n },\n {\n \"value\":\"#00CDCD\",\n \"name\":\"cyan 3\"\n },\n {\n \"value\":\"#008B8B\",\n \"name\":\"cyan 4\"\n },\n {\n \"value\":\"#008B8B\",\n \"css\":true,\n \"name\":\"darkcyan\"\n },\n {\n \"value\":\"#008080\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"teal\"\n },\n {\n \"value\":\"#48D1CC\",\n \"css\":true,\n \"name\":\"mediumturquoise\"\n },\n {\n \"value\":\"#20B2AA\",\n \"css\":true,\n \"name\":\"lightseagreen\"\n },\n {\n \"value\":\"#03A89E\",\n \"name\":\"manganeseblue\"\n },\n {\n \"value\":\"#40E0D0\",\n \"css\":true,\n \"name\":\"turquoise\"\n },\n {\n \"value\":\"#808A87\",\n \"name\":\"coldgrey\"\n },\n {\n \"value\":\"#00C78C\",\n \"name\":\"turquoiseblue\"\n },\n {\n \"value\":\"#7FFFD4\",\n \"name\":\"aquamarine 1\"\n },\n {\n \"value\":\"#7FFFD4\",\n \"css\":true,\n \"name\":\"aquamarine\"\n },\n {\n \"value\":\"#76EEC6\",\n \"name\":\"aquamarine 2\"\n },\n {\n \"value\":\"#66CDAA\",\n \"name\":\"aquamarine 3\"\n },\n {\n \"value\":\"#66CDAA\",\n \"css\":true,\n \"name\":\"mediumaquamarine\"\n },\n {\n \"value\":\"#458B74\",\n \"name\":\"aquamarine 4\"\n },\n {\n \"value\":\"#00FA9A\",\n \"css\":true,\n \"name\":\"mediumspringgreen\"\n },\n {\n \"value\":\"#F5FFFA\",\n \"css\":true,\n \"name\":\"mintcream\"\n },\n {\n \"value\":\"#00FF7F\",\n \"css\":true,\n \"name\":\"springgreen\"\n },\n {\n \"value\":\"#00EE76\",\n \"name\":\"springgreen 1\"\n },\n {\n \"value\":\"#00CD66\",\n \"name\":\"springgreen 2\"\n },\n {\n \"value\":\"#008B45\",\n \"name\":\"springgreen 3\"\n },\n {\n \"value\":\"#3CB371\",\n \"css\":true,\n \"name\":\"mediumseagreen\"\n },\n {\n \"value\":\"#54FF9F\",\n \"name\":\"seagreen 1\"\n },\n {\n \"value\":\"#4EEE94\",\n \"name\":\"seagreen 2\"\n },\n {\n \"value\":\"#43CD80\",\n \"name\":\"seagreen 3\"\n },\n {\n \"value\":\"#2E8B57\",\n \"name\":\"seagreen 4\"\n },\n {\n \"value\":\"#2E8B57\",\n \"css\":true,\n \"name\":\"seagreen\"\n },\n {\n \"value\":\"#00C957\",\n \"name\":\"emeraldgreen\"\n },\n {\n \"value\":\"#BDFCC9\",\n \"name\":\"mint\"\n },\n {\n \"value\":\"#3D9140\",\n \"name\":\"cobaltgreen\"\n },\n {\n \"value\":\"#F0FFF0\",\n \"name\":\"honeydew 1\"\n },\n {\n \"value\":\"#F0FFF0\",\n \"css\":true,\n \"name\":\"honeydew\"\n },\n {\n \"value\":\"#E0EEE0\",\n \"name\":\"honeydew 2\"\n },\n {\n \"value\":\"#C1CDC1\",\n \"name\":\"honeydew 3\"\n },\n {\n \"value\":\"#838B83\",\n \"name\":\"honeydew 4\"\n },\n {\n \"value\":\"#8FBC8F\",\n \"css\":true,\n \"name\":\"darkseagreen\"\n },\n {\n \"value\":\"#C1FFC1\",\n \"name\":\"darkseagreen 1\"\n },\n {\n \"value\":\"#B4EEB4\",\n \"name\":\"darkseagreen 2\"\n },\n {\n \"value\":\"#9BCD9B\",\n \"name\":\"darkseagreen 3\"\n },\n {\n \"value\":\"#698B69\",\n \"name\":\"darkseagreen 4\"\n },\n {\n \"value\":\"#98FB98\",\n \"css\":true,\n \"name\":\"palegreen\"\n },\n {\n \"value\":\"#9AFF9A\",\n \"name\":\"palegreen 1\"\n },\n {\n \"value\":\"#90EE90\",\n \"name\":\"palegreen 2\"\n },\n {\n \"value\":\"#90EE90\",\n \"css\":true,\n \"name\":\"lightgreen\"\n },\n {\n \"value\":\"#7CCD7C\",\n \"name\":\"palegreen 3\"\n },\n {\n \"value\":\"#548B54\",\n \"name\":\"palegreen 4\"\n },\n {\n \"value\":\"#32CD32\",\n \"css\":true,\n \"name\":\"limegreen\"\n },\n {\n \"value\":\"#228B22\",\n \"css\":true,\n \"name\":\"forestgreen\"\n },\n {\n \"value\":\"#00FF00\",\n \"vga\":true,\n \"name\":\"green 1\"\n },\n {\n \"value\":\"#00FF00\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"lime\"\n },\n {\n \"value\":\"#00EE00\",\n \"name\":\"green 2\"\n },\n {\n \"value\":\"#00CD00\",\n \"name\":\"green 3\"\n },\n {\n \"value\":\"#008B00\",\n \"name\":\"green 4\"\n },\n {\n \"value\":\"#008000\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"green\"\n },\n {\n \"value\":\"#006400\",\n \"css\":true,\n \"name\":\"darkgreen\"\n },\n {\n \"value\":\"#308014\",\n \"name\":\"sapgreen\"\n },\n {\n \"value\":\"#7CFC00\",\n \"css\":true,\n \"name\":\"lawngreen\"\n },\n {\n \"value\":\"#7FFF00\",\n \"name\":\"chartreuse 1\"\n },\n {\n \"value\":\"#7FFF00\",\n \"css\":true,\n \"name\":\"chartreuse\"\n },\n {\n \"value\":\"#76EE00\",\n \"name\":\"chartreuse 2\"\n },\n {\n \"value\":\"#66CD00\",\n \"name\":\"chartreuse 3\"\n },\n {\n \"value\":\"#458B00\",\n \"name\":\"chartreuse 4\"\n },\n {\n \"value\":\"#ADFF2F\",\n \"css\":true,\n \"name\":\"greenyellow\"\n },\n {\n \"value\":\"#CAFF70\",\n \"name\":\"darkolivegreen 1\"\n },\n {\n \"value\":\"#BCEE68\",\n \"name\":\"darkolivegreen 2\"\n },\n {\n \"value\":\"#A2CD5A\",\n \"name\":\"darkolivegreen 3\"\n },\n {\n \"value\":\"#6E8B3D\",\n \"name\":\"darkolivegreen 4\"\n },\n {\n \"value\":\"#556B2F\",\n \"css\":true,\n \"name\":\"darkolivegreen\"\n },\n {\n \"value\":\"#6B8E23\",\n \"css\":true,\n \"name\":\"olivedrab\"\n },\n {\n \"value\":\"#C0FF3E\",\n \"name\":\"olivedrab 1\"\n },\n {\n \"value\":\"#B3EE3A\",\n \"name\":\"olivedrab 2\"\n },\n {\n \"value\":\"#9ACD32\",\n \"name\":\"olivedrab 3\"\n },\n {\n \"value\":\"#9ACD32\",\n \"css\":true,\n \"name\":\"yellowgreen\"\n },\n {\n \"value\":\"#698B22\",\n \"name\":\"olivedrab 4\"\n },\n {\n \"value\":\"#FFFFF0\",\n \"name\":\"ivory 1\"\n },\n {\n \"value\":\"#FFFFF0\",\n \"css\":true,\n \"name\":\"ivory\"\n },\n {\n \"value\":\"#EEEEE0\",\n \"name\":\"ivory 2\"\n },\n {\n \"value\":\"#CDCDC1\",\n \"name\":\"ivory 3\"\n },\n {\n \"value\":\"#8B8B83\",\n \"name\":\"ivory 4\"\n },\n {\n \"value\":\"#F5F5DC\",\n \"css\":true,\n \"name\":\"beige\"\n },\n {\n \"value\":\"#FFFFE0\",\n \"name\":\"lightyellow 1\"\n },\n {\n \"value\":\"#FFFFE0\",\n \"css\":true,\n \"name\":\"lightyellow\"\n },\n {\n \"value\":\"#EEEED1\",\n \"name\":\"lightyellow 2\"\n },\n {\n \"value\":\"#CDCDB4\",\n \"name\":\"lightyellow 3\"\n },\n {\n \"value\":\"#8B8B7A\",\n \"name\":\"lightyellow 4\"\n },\n {\n \"value\":\"#FAFAD2\",\n \"css\":true,\n \"name\":\"lightgoldenrodyellow\"\n },\n {\n \"value\":\"#FFFF00\",\n \"vga\":true,\n \"name\":\"yellow 1\"\n },\n {\n \"value\":\"#FFFF00\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"yellow\"\n },\n {\n \"value\":\"#EEEE00\",\n \"name\":\"yellow 2\"\n },\n {\n \"value\":\"#CDCD00\",\n \"name\":\"yellow 3\"\n },\n {\n \"value\":\"#8B8B00\",\n \"name\":\"yellow 4\"\n },\n {\n \"value\":\"#808069\",\n \"name\":\"warmgrey\"\n },\n {\n \"value\":\"#808000\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"olive\"\n },\n {\n \"value\":\"#BDB76B\",\n \"css\":true,\n \"name\":\"darkkhaki\"\n },\n {\n \"value\":\"#FFF68F\",\n \"name\":\"khaki 1\"\n },\n {\n \"value\":\"#EEE685\",\n \"name\":\"khaki 2\"\n },\n {\n \"value\":\"#CDC673\",\n \"name\":\"khaki 3\"\n },\n {\n \"value\":\"#8B864E\",\n \"name\":\"khaki 4\"\n },\n {\n \"value\":\"#F0E68C\",\n \"css\":true,\n \"name\":\"khaki\"\n },\n {\n \"value\":\"#EEE8AA\",\n \"css\":true,\n \"name\":\"palegoldenrod\"\n },\n {\n \"value\":\"#FFFACD\",\n \"name\":\"lemonchiffon 1\"\n },\n {\n \"value\":\"#FFFACD\",\n \"css\":true,\n \"name\":\"lemonchiffon\"\n },\n {\n \"value\":\"#EEE9BF\",\n \"name\":\"lemonchiffon 2\"\n },\n {\n \"value\":\"#CDC9A5\",\n \"name\":\"lemonchiffon 3\"\n },\n {\n \"value\":\"#8B8970\",\n \"name\":\"lemonchiffon 4\"\n },\n {\n \"value\":\"#FFEC8B\",\n \"name\":\"lightgoldenrod 1\"\n },\n {\n \"value\":\"#EEDC82\",\n \"name\":\"lightgoldenrod 2\"\n },\n {\n \"value\":\"#CDBE70\",\n \"name\":\"lightgoldenrod 3\"\n },\n {\n \"value\":\"#8B814C\",\n \"name\":\"lightgoldenrod 4\"\n },\n {\n \"value\":\"#E3CF57\",\n \"name\":\"banana\"\n },\n {\n \"value\":\"#FFD700\",\n \"name\":\"gold 1\"\n },\n {\n \"value\":\"#FFD700\",\n \"css\":true,\n \"name\":\"gold\"\n },\n {\n \"value\":\"#EEC900\",\n \"name\":\"gold 2\"\n },\n {\n \"value\":\"#CDAD00\",\n \"name\":\"gold 3\"\n },\n {\n \"value\":\"#8B7500\",\n \"name\":\"gold 4\"\n },\n {\n \"value\":\"#FFF8DC\",\n \"name\":\"cornsilk 1\"\n },\n {\n \"value\":\"#FFF8DC\",\n \"css\":true,\n \"name\":\"cornsilk\"\n },\n {\n \"value\":\"#EEE8CD\",\n \"name\":\"cornsilk 2\"\n },\n {\n \"value\":\"#CDC8B1\",\n \"name\":\"cornsilk 3\"\n },\n {\n \"value\":\"#8B8878\",\n \"name\":\"cornsilk 4\"\n },\n {\n \"value\":\"#DAA520\",\n \"css\":true,\n \"name\":\"goldenrod\"\n },\n {\n \"value\":\"#FFC125\",\n \"name\":\"goldenrod 1\"\n },\n {\n \"value\":\"#EEB422\",\n \"name\":\"goldenrod 2\"\n },\n {\n \"value\":\"#CD9B1D\",\n \"name\":\"goldenrod 3\"\n },\n {\n \"value\":\"#8B6914\",\n \"name\":\"goldenrod 4\"\n },\n {\n \"value\":\"#B8860B\",\n \"css\":true,\n \"name\":\"darkgoldenrod\"\n },\n {\n \"value\":\"#FFB90F\",\n \"name\":\"darkgoldenrod 1\"\n },\n {\n \"value\":\"#EEAD0E\",\n \"name\":\"darkgoldenrod 2\"\n },\n {\n \"value\":\"#CD950C\",\n \"name\":\"darkgoldenrod 3\"\n },\n {\n \"value\":\"#8B6508\",\n \"name\":\"darkgoldenrod 4\"\n },\n {\n \"value\":\"#FFA500\",\n \"name\":\"orange 1\"\n },\n {\n \"value\":\"#FF8000\",\n \"css\":true,\n \"name\":\"orange\"\n },\n {\n \"value\":\"#EE9A00\",\n \"name\":\"orange 2\"\n },\n {\n \"value\":\"#CD8500\",\n \"name\":\"orange 3\"\n },\n {\n \"value\":\"#8B5A00\",\n \"name\":\"orange 4\"\n },\n {\n \"value\":\"#FFFAF0\",\n \"css\":true,\n \"name\":\"floralwhite\"\n },\n {\n \"value\":\"#FDF5E6\",\n \"css\":true,\n \"name\":\"oldlace\"\n },\n {\n \"value\":\"#F5DEB3\",\n \"css\":true,\n \"name\":\"wheat\"\n },\n {\n \"value\":\"#FFE7BA\",\n \"name\":\"wheat 1\"\n },\n {\n \"value\":\"#EED8AE\",\n \"name\":\"wheat 2\"\n },\n {\n \"value\":\"#CDBA96\",\n \"name\":\"wheat 3\"\n },\n {\n \"value\":\"#8B7E66\",\n \"name\":\"wheat 4\"\n },\n {\n \"value\":\"#FFE4B5\",\n \"css\":true,\n \"name\":\"moccasin\"\n },\n {\n \"value\":\"#FFEFD5\",\n \"css\":true,\n \"name\":\"papayawhip\"\n },\n {\n \"value\":\"#FFEBCD\",\n \"css\":true,\n \"name\":\"blanchedalmond\"\n },\n {\n \"value\":\"#FFDEAD\",\n \"name\":\"navajowhite 1\"\n },\n {\n \"value\":\"#FFDEAD\",\n \"css\":true,\n \"name\":\"navajowhite\"\n },\n {\n \"value\":\"#EECFA1\",\n \"name\":\"navajowhite 2\"\n },\n {\n \"value\":\"#CDB38B\",\n \"name\":\"navajowhite 3\"\n },\n {\n \"value\":\"#8B795E\",\n \"name\":\"navajowhite 4\"\n },\n {\n \"value\":\"#FCE6C9\",\n \"name\":\"eggshell\"\n },\n {\n \"value\":\"#D2B48C\",\n \"css\":true,\n \"name\":\"tan\"\n },\n {\n \"value\":\"#9C661F\",\n \"name\":\"brick\"\n },\n {\n \"value\":\"#FF9912\",\n \"name\":\"cadmiumyellow\"\n },\n {\n \"value\":\"#FAEBD7\",\n \"css\":true,\n \"name\":\"antiquewhite\"\n },\n {\n \"value\":\"#FFEFDB\",\n \"name\":\"antiquewhite 1\"\n },\n {\n \"value\":\"#EEDFCC\",\n \"name\":\"antiquewhite 2\"\n },\n {\n \"value\":\"#CDC0B0\",\n \"name\":\"antiquewhite 3\"\n },\n {\n \"value\":\"#8B8378\",\n \"name\":\"antiquewhite 4\"\n },\n {\n \"value\":\"#DEB887\",\n \"css\":true,\n \"name\":\"burlywood\"\n },\n {\n \"value\":\"#FFD39B\",\n \"name\":\"burlywood 1\"\n },\n {\n \"value\":\"#EEC591\",\n \"name\":\"burlywood 2\"\n },\n {\n \"value\":\"#CDAA7D\",\n \"name\":\"burlywood 3\"\n },\n {\n \"value\":\"#8B7355\",\n \"name\":\"burlywood 4\"\n },\n {\n \"value\":\"#FFE4C4\",\n \"name\":\"bisque 1\"\n },\n {\n \"value\":\"#FFE4C4\",\n \"css\":true,\n \"name\":\"bisque\"\n },\n {\n \"value\":\"#EED5B7\",\n \"name\":\"bisque 2\"\n },\n {\n \"value\":\"#CDB79E\",\n \"name\":\"bisque 3\"\n },\n {\n \"value\":\"#8B7D6B\",\n \"name\":\"bisque 4\"\n },\n {\n \"value\":\"#E3A869\",\n \"name\":\"melon\"\n },\n {\n \"value\":\"#ED9121\",\n \"name\":\"carrot\"\n },\n {\n \"value\":\"#FF8C00\",\n \"css\":true,\n \"name\":\"darkorange\"\n },\n {\n \"value\":\"#FF7F00\",\n \"name\":\"darkorange 1\"\n },\n {\n \"value\":\"#EE7600\",\n \"name\":\"darkorange 2\"\n },\n {\n \"value\":\"#CD6600\",\n \"name\":\"darkorange 3\"\n },\n {\n \"value\":\"#8B4500\",\n \"name\":\"darkorange 4\"\n },\n {\n \"value\":\"#FFA54F\",\n \"name\":\"tan 1\"\n },\n {\n \"value\":\"#EE9A49\",\n \"name\":\"tan 2\"\n },\n {\n \"value\":\"#CD853F\",\n \"name\":\"tan 3\"\n },\n {\n \"value\":\"#CD853F\",\n \"css\":true,\n \"name\":\"peru\"\n },\n {\n \"value\":\"#8B5A2B\",\n \"name\":\"tan 4\"\n },\n {\n \"value\":\"#FAF0E6\",\n \"css\":true,\n \"name\":\"linen\"\n },\n {\n \"value\":\"#FFDAB9\",\n \"name\":\"peachpuff 1\"\n },\n {\n \"value\":\"#FFDAB9\",\n \"css\":true,\n \"name\":\"peachpuff\"\n },\n {\n \"value\":\"#EECBAD\",\n \"name\":\"peachpuff 2\"\n },\n {\n \"value\":\"#CDAF95\",\n \"name\":\"peachpuff 3\"\n },\n {\n \"value\":\"#8B7765\",\n \"name\":\"peachpuff 4\"\n },\n {\n \"value\":\"#FFF5EE\",\n \"name\":\"seashell 1\"\n },\n {\n \"value\":\"#FFF5EE\",\n \"css\":true,\n \"name\":\"seashell\"\n },\n {\n \"value\":\"#EEE5DE\",\n \"name\":\"seashell 2\"\n },\n {\n \"value\":\"#CDC5BF\",\n \"name\":\"seashell 3\"\n },\n {\n \"value\":\"#8B8682\",\n \"name\":\"seashell 4\"\n },\n {\n \"value\":\"#F4A460\",\n \"css\":true,\n \"name\":\"sandybrown\"\n },\n {\n \"value\":\"#C76114\",\n \"name\":\"rawsienna\"\n },\n {\n \"value\":\"#D2691E\",\n \"css\":true,\n \"name\":\"chocolate\"\n },\n {\n \"value\":\"#FF7F24\",\n \"name\":\"chocolate 1\"\n },\n {\n \"value\":\"#EE7621\",\n \"name\":\"chocolate 2\"\n },\n {\n \"value\":\"#CD661D\",\n \"name\":\"chocolate 3\"\n },\n {\n \"value\":\"#8B4513\",\n \"name\":\"chocolate 4\"\n },\n {\n \"value\":\"#8B4513\",\n \"css\":true,\n \"name\":\"saddlebrown\"\n },\n {\n \"value\":\"#292421\",\n \"name\":\"ivoryblack\"\n },\n {\n \"value\":\"#FF7D40\",\n \"name\":\"flesh\"\n },\n {\n \"value\":\"#FF6103\",\n \"name\":\"cadmiumorange\"\n },\n {\n \"value\":\"#8A360F\",\n \"name\":\"burntsienna\"\n },\n {\n \"value\":\"#A0522D\",\n \"css\":true,\n \"name\":\"sienna\"\n },\n {\n \"value\":\"#FF8247\",\n \"name\":\"sienna 1\"\n },\n {\n \"value\":\"#EE7942\",\n \"name\":\"sienna 2\"\n },\n {\n \"value\":\"#CD6839\",\n \"name\":\"sienna 3\"\n },\n {\n \"value\":\"#8B4726\",\n \"name\":\"sienna 4\"\n },\n {\n \"value\":\"#FFA07A\",\n \"name\":\"lightsalmon 1\"\n },\n {\n \"value\":\"#FFA07A\",\n \"css\":true,\n \"name\":\"lightsalmon\"\n },\n {\n \"value\":\"#EE9572\",\n \"name\":\"lightsalmon 2\"\n },\n {\n \"value\":\"#CD8162\",\n \"name\":\"lightsalmon 3\"\n },\n {\n \"value\":\"#8B5742\",\n \"name\":\"lightsalmon 4\"\n },\n {\n \"value\":\"#FF7F50\",\n \"css\":true,\n \"name\":\"coral\"\n },\n {\n \"value\":\"#FF4500\",\n \"name\":\"orangered 1\"\n },\n {\n \"value\":\"#FF4500\",\n \"css\":true,\n \"name\":\"orangered\"\n },\n {\n \"value\":\"#EE4000\",\n \"name\":\"orangered 2\"\n },\n {\n \"value\":\"#CD3700\",\n \"name\":\"orangered 3\"\n },\n {\n \"value\":\"#8B2500\",\n \"name\":\"orangered 4\"\n },\n {\n \"value\":\"#5E2612\",\n \"name\":\"sepia\"\n },\n {\n \"value\":\"#E9967A\",\n \"css\":true,\n \"name\":\"darksalmon\"\n },\n {\n \"value\":\"#FF8C69\",\n \"name\":\"salmon 1\"\n },\n {\n \"value\":\"#EE8262\",\n \"name\":\"salmon 2\"\n },\n {\n \"value\":\"#CD7054\",\n \"name\":\"salmon 3\"\n },\n {\n \"value\":\"#8B4C39\",\n \"name\":\"salmon 4\"\n },\n {\n \"value\":\"#FF7256\",\n \"name\":\"coral 1\"\n },\n {\n \"value\":\"#EE6A50\",\n \"name\":\"coral 2\"\n },\n {\n \"value\":\"#CD5B45\",\n \"name\":\"coral 3\"\n },\n {\n \"value\":\"#8B3E2F\",\n \"name\":\"coral 4\"\n },\n {\n \"value\":\"#8A3324\",\n \"name\":\"burntumber\"\n },\n {\n \"value\":\"#FF6347\",\n \"name\":\"tomato 1\"\n },\n {\n \"value\":\"#FF6347\",\n \"css\":true,\n \"name\":\"tomato\"\n },\n {\n \"value\":\"#EE5C42\",\n \"name\":\"tomato 2\"\n },\n {\n \"value\":\"#CD4F39\",\n \"name\":\"tomato 3\"\n },\n {\n \"value\":\"#8B3626\",\n \"name\":\"tomato 4\"\n },\n {\n \"value\":\"#FA8072\",\n \"css\":true,\n \"name\":\"salmon\"\n },\n {\n \"value\":\"#FFE4E1\",\n \"name\":\"mistyrose 1\"\n },\n {\n \"value\":\"#FFE4E1\",\n \"css\":true,\n \"name\":\"mistyrose\"\n },\n {\n \"value\":\"#EED5D2\",\n \"name\":\"mistyrose 2\"\n },\n {\n \"value\":\"#CDB7B5\",\n \"name\":\"mistyrose 3\"\n },\n {\n \"value\":\"#8B7D7B\",\n \"name\":\"mistyrose 4\"\n },\n {\n \"value\":\"#FFFAFA\",\n \"name\":\"snow 1\"\n },\n {\n \"value\":\"#FFFAFA\",\n \"css\":true,\n \"name\":\"snow\"\n },\n {\n \"value\":\"#EEE9E9\",\n \"name\":\"snow 2\"\n },\n {\n \"value\":\"#CDC9C9\",\n \"name\":\"snow 3\"\n },\n {\n \"value\":\"#8B8989\",\n \"name\":\"snow 4\"\n },\n {\n \"value\":\"#BC8F8F\",\n \"css\":true,\n \"name\":\"rosybrown\"\n },\n {\n \"value\":\"#FFC1C1\",\n \"name\":\"rosybrown 1\"\n },\n {\n \"value\":\"#EEB4B4\",\n \"name\":\"rosybrown 2\"\n },\n {\n \"value\":\"#CD9B9B\",\n \"name\":\"rosybrown 3\"\n },\n {\n \"value\":\"#8B6969\",\n \"name\":\"rosybrown 4\"\n },\n {\n \"value\":\"#F08080\",\n \"css\":true,\n \"name\":\"lightcoral\"\n },\n {\n \"value\":\"#CD5C5C\",\n \"css\":true,\n \"name\":\"indianred\"\n },\n {\n \"value\":\"#FF6A6A\",\n \"name\":\"indianred 1\"\n },\n {\n \"value\":\"#EE6363\",\n \"name\":\"indianred 2\"\n },\n {\n \"value\":\"#8B3A3A\",\n \"name\":\"indianred 4\"\n },\n {\n \"value\":\"#CD5555\",\n \"name\":\"indianred 3\"\n },\n {\n \"value\":\"#A52A2A\",\n \"css\":true,\n \"name\":\"brown\"\n },\n {\n \"value\":\"#FF4040\",\n \"name\":\"brown 1\"\n },\n {\n \"value\":\"#EE3B3B\",\n \"name\":\"brown 2\"\n },\n {\n \"value\":\"#CD3333\",\n \"name\":\"brown 3\"\n },\n {\n \"value\":\"#8B2323\",\n \"name\":\"brown 4\"\n },\n {\n \"value\":\"#B22222\",\n \"css\":true,\n \"name\":\"firebrick\"\n },\n {\n \"value\":\"#FF3030\",\n \"name\":\"firebrick 1\"\n },\n {\n \"value\":\"#EE2C2C\",\n \"name\":\"firebrick 2\"\n },\n {\n \"value\":\"#CD2626\",\n \"name\":\"firebrick 3\"\n },\n {\n \"value\":\"#8B1A1A\",\n \"name\":\"firebrick 4\"\n },\n {\n \"value\":\"#FF0000\",\n \"vga\":true,\n \"name\":\"red 1\"\n },\n {\n \"value\":\"#FF0000\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"red\"\n },\n {\n \"value\":\"#EE0000\",\n \"name\":\"red 2\"\n },\n {\n \"value\":\"#CD0000\",\n \"name\":\"red 3\"\n },\n {\n \"value\":\"#8B0000\",\n \"name\":\"red 4\"\n },\n {\n \"value\":\"#8B0000\",\n \"css\":true,\n \"name\":\"darkred\"\n },\n {\n \"value\":\"#800000\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"maroon\"\n },\n {\n \"value\":\"#8E388E\",\n \"name\":\"sgi beet\"\n },\n {\n \"value\":\"#7171C6\",\n \"name\":\"sgi slateblue\"\n },\n {\n \"value\":\"#7D9EC0\",\n \"name\":\"sgi lightblue\"\n },\n {\n \"value\":\"#388E8E\",\n \"name\":\"sgi teal\"\n },\n {\n \"value\":\"#71C671\",\n \"name\":\"sgi chartreuse\"\n },\n {\n \"value\":\"#8E8E38\",\n \"name\":\"sgi olivedrab\"\n },\n {\n \"value\":\"#C5C1AA\",\n \"name\":\"sgi brightgray\"\n },\n {\n \"value\":\"#C67171\",\n \"name\":\"sgi salmon\"\n },\n {\n \"value\":\"#555555\",\n \"name\":\"sgi darkgray\"\n },\n {\n \"value\":\"#1E1E1E\",\n \"name\":\"sgi gray 12\"\n },\n {\n \"value\":\"#282828\",\n \"name\":\"sgi gray 16\"\n },\n {\n \"value\":\"#515151\",\n \"name\":\"sgi gray 32\"\n },\n {\n \"value\":\"#5B5B5B\",\n \"name\":\"sgi gray 36\"\n },\n {\n \"value\":\"#848484\",\n \"name\":\"sgi gray 52\"\n },\n {\n \"value\":\"#8E8E8E\",\n \"name\":\"sgi gray 56\"\n },\n {\n \"value\":\"#AAAAAA\",\n \"name\":\"sgi lightgray\"\n },\n {\n \"value\":\"#B7B7B7\",\n \"name\":\"sgi gray 72\"\n },\n {\n \"value\":\"#C1C1C1\",\n \"name\":\"sgi gray 76\"\n },\n {\n \"value\":\"#EAEAEA\",\n \"name\":\"sgi gray 92\"\n },\n {\n \"value\":\"#F4F4F4\",\n \"name\":\"sgi gray 96\"\n },\n {\n \"value\":\"#FFFFFF\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"white\"\n },\n {\n \"value\":\"#F5F5F5\",\n \"name\":\"white smoke\"\n },\n {\n \"value\":\"#F5F5F5\",\n \"name\":\"gray 96\"\n },\n {\n \"value\":\"#DCDCDC\",\n \"css\":true,\n \"name\":\"gainsboro\"\n },\n {\n \"value\":\"#D3D3D3\",\n \"css\":true,\n \"name\":\"lightgrey\"\n },\n {\n \"value\":\"#C0C0C0\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"silver\"\n },\n {\n \"value\":\"#A9A9A9\",\n \"css\":true,\n \"name\":\"darkgray\"\n },\n {\n \"value\":\"#808080\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"gray\"\n },\n {\n \"value\":\"#696969\",\n \"css\":true,\n \"name\":\"dimgray\"\n },\n {\n \"value\":\"#696969\",\n \"name\":\"gray 42\"\n },\n {\n \"value\":\"#000000\",\n \"vga\":true,\n \"css\":true,\n \"name\":\"black\"\n },\n {\n \"value\":\"#FCFCFC\",\n \"name\":\"gray 99\"\n },\n {\n \"value\":\"#FAFAFA\",\n \"name\":\"gray 98\"\n },\n {\n \"value\":\"#F7F7F7\",\n \"name\":\"gray 97\"\n },\n {\n \"value\":\"#F2F2F2\",\n \"name\":\"gray 95\"\n },\n {\n \"value\":\"#F0F0F0\",\n \"name\":\"gray 94\"\n },\n {\n \"value\":\"#EDEDED\",\n \"name\":\"gray 93\"\n },\n {\n \"value\":\"#EBEBEB\",\n \"name\":\"gray 92\"\n },\n {\n \"value\":\"#E8E8E8\",\n \"name\":\"gray 91\"\n },\n {\n \"value\":\"#E5E5E5\",\n \"name\":\"gray 90\"\n },\n {\n \"value\":\"#E3E3E3\",\n \"name\":\"gray 89\"\n },\n {\n \"value\":\"#E0E0E0\",\n \"name\":\"gray 88\"\n },\n {\n \"value\":\"#DEDEDE\",\n \"name\":\"gray 87\"\n },\n {\n \"value\":\"#DBDBDB\",\n \"name\":\"gray 86\"\n },\n {\n \"value\":\"#D9D9D9\",\n \"name\":\"gray 85\"\n },\n {\n \"value\":\"#D6D6D6\",\n \"name\":\"gray 84\"\n },\n {\n \"value\":\"#D4D4D4\",\n \"name\":\"gray 83\"\n },\n {\n \"value\":\"#D1D1D1\",\n \"name\":\"gray 82\"\n },\n {\n \"value\":\"#CFCFCF\",\n \"name\":\"gray 81\"\n },\n {\n \"value\":\"#CCCCCC\",\n \"name\":\"gray 80\"\n },\n {\n \"value\":\"#C9C9C9\",\n \"name\":\"gray 79\"\n },\n {\n \"value\":\"#C7C7C7\",\n \"name\":\"gray 78\"\n },\n {\n \"value\":\"#C4C4C4\",\n \"name\":\"gray 77\"\n },\n {\n \"value\":\"#C2C2C2\",\n \"name\":\"gray 76\"\n },\n {\n \"value\":\"#BFBFBF\",\n \"name\":\"gray 75\"\n },\n {\n \"value\":\"#BDBDBD\",\n \"name\":\"gray 74\"\n },\n {\n \"value\":\"#BABABA\",\n \"name\":\"gray 73\"\n },\n {\n \"value\":\"#B8B8B8\",\n \"name\":\"gray 72\"\n },\n {\n \"value\":\"#B5B5B5\",\n \"name\":\"gray 71\"\n },\n {\n \"value\":\"#B3B3B3\",\n \"name\":\"gray 70\"\n },\n {\n \"value\":\"#B0B0B0\",\n \"name\":\"gray 69\"\n },\n {\n \"value\":\"#ADADAD\",\n \"name\":\"gray 68\"\n },\n {\n \"value\":\"#ABABAB\",\n \"name\":\"gray 67\"\n },\n {\n \"value\":\"#A8A8A8\",\n \"name\":\"gray 66\"\n },\n {\n \"value\":\"#A6A6A6\",\n \"name\":\"gray 65\"\n },\n {\n \"value\":\"#A3A3A3\",\n \"name\":\"gray 64\"\n },\n {\n \"value\":\"#A1A1A1\",\n \"name\":\"gray 63\"\n },\n {\n \"value\":\"#9E9E9E\",\n \"name\":\"gray 62\"\n },\n {\n \"value\":\"#9C9C9C\",\n \"name\":\"gray 61\"\n },\n {\n \"value\":\"#999999\",\n \"name\":\"gray 60\"\n },\n {\n \"value\":\"#969696\",\n \"name\":\"gray 59\"\n },\n {\n \"value\":\"#949494\",\n \"name\":\"gray 58\"\n },\n {\n \"value\":\"#919191\",\n \"name\":\"gray 57\"\n },\n {\n \"value\":\"#8F8F8F\",\n \"name\":\"gray 56\"\n },\n {\n \"value\":\"#8C8C8C\",\n \"name\":\"gray 55\"\n },\n {\n \"value\":\"#8A8A8A\",\n \"name\":\"gray 54\"\n },\n {\n \"value\":\"#878787\",\n \"name\":\"gray 53\"\n },\n {\n \"value\":\"#858585\",\n \"name\":\"gray 52\"\n },\n {\n \"value\":\"#828282\",\n \"name\":\"gray 51\"\n },\n {\n \"value\":\"#7F7F7F\",\n \"name\":\"gray 50\"\n },\n {\n \"value\":\"#7D7D7D\",\n \"name\":\"gray 49\"\n },\n {\n \"value\":\"#7A7A7A\",\n \"name\":\"gray 48\"\n },\n {\n \"value\":\"#787878\",\n \"name\":\"gray 47\"\n },\n {\n \"value\":\"#757575\",\n \"name\":\"gray 46\"\n },\n {\n \"value\":\"#737373\",\n \"name\":\"gray 45\"\n },\n {\n \"value\":\"#707070\",\n \"name\":\"gray 44\"\n },\n {\n \"value\":\"#6E6E6E\",\n \"name\":\"gray 43\"\n },\n {\n \"value\":\"#666666\",\n \"name\":\"gray 40\"\n },\n {\n \"value\":\"#636363\",\n \"name\":\"gray 39\"\n },\n {\n \"value\":\"#616161\",\n \"name\":\"gray 38\"\n },\n {\n \"value\":\"#5E5E5E\",\n \"name\":\"gray 37\"\n },\n {\n \"value\":\"#5C5C5C\",\n \"name\":\"gray 36\"\n },\n {\n \"value\":\"#595959\",\n \"name\":\"gray 35\"\n },\n {\n \"value\":\"#575757\",\n \"name\":\"gray 34\"\n },\n {\n \"value\":\"#545454\",\n \"name\":\"gray 33\"\n },\n {\n \"value\":\"#525252\",\n \"name\":\"gray 32\"\n },\n {\n \"value\":\"#4F4F4F\",\n \"name\":\"gray 31\"\n },\n {\n \"value\":\"#4D4D4D\",\n \"name\":\"gray 30\"\n },\n {\n \"value\":\"#4A4A4A\",\n \"name\":\"gray 29\"\n },\n {\n \"value\":\"#474747\",\n \"name\":\"gray 28\"\n },\n {\n \"value\":\"#454545\",\n \"name\":\"gray 27\"\n },\n {\n \"value\":\"#424242\",\n \"name\":\"gray 26\"\n },\n {\n \"value\":\"#404040\",\n \"name\":\"gray 25\"\n },\n {\n \"value\":\"#3D3D3D\",\n \"name\":\"gray 24\"\n },\n {\n \"value\":\"#3B3B3B\",\n \"name\":\"gray 23\"\n },\n {\n \"value\":\"#383838\",\n \"name\":\"gray 22\"\n },\n {\n \"value\":\"#363636\",\n \"name\":\"gray 21\"\n },\n {\n \"value\":\"#333333\",\n \"name\":\"gray 20\"\n },\n {\n \"value\":\"#303030\",\n \"name\":\"gray 19\"\n },\n {\n \"value\":\"#2E2E2E\",\n \"name\":\"gray 18\"\n },\n {\n \"value\":\"#2B2B2B\",\n \"name\":\"gray 17\"\n },\n {\n \"value\":\"#292929\",\n \"name\":\"gray 16\"\n },\n {\n \"value\":\"#262626\",\n \"name\":\"gray 15\"\n },\n {\n \"value\":\"#242424\",\n \"name\":\"gray 14\"\n },\n {\n \"value\":\"#212121\",\n \"name\":\"gray 13\"\n },\n {\n \"value\":\"#1F1F1F\",\n \"name\":\"gray 12\"\n },\n {\n \"value\":\"#1C1C1C\",\n \"name\":\"gray 11\"\n },\n {\n \"value\":\"#1A1A1A\",\n \"name\":\"gray 10\"\n },\n {\n \"value\":\"#171717\",\n \"name\":\"gray 9\"\n },\n {\n \"value\":\"#141414\",\n \"name\":\"gray 8\"\n },\n {\n \"value\":\"#121212\",\n \"name\":\"gray 7\"\n },\n {\n \"value\":\"#0F0F0F\",\n \"name\":\"gray 6\"\n },\n {\n \"value\":\"#0D0D0D\",\n \"name\":\"gray 5\"\n },\n {\n \"value\":\"#0A0A0A\",\n \"name\":\"gray 4\"\n },\n {\n \"value\":\"#080808\",\n \"name\":\"gray 3\"\n },\n {\n \"value\":\"#050505\",\n \"name\":\"gray 2\"\n },\n {\n \"value\":\"#030303\",\n \"name\":\"gray 1\"\n },\n {\n \"value\":\"#F5F5F5\",\n \"css\":true,\n \"name\":\"whitesmoke\"\n }\n]\n", "/**\n * Module dependencies\n */\nvar colors = require('./colors')\n\nvar cssColors = colors.filter(function(color){\n return !! color.css\n})\n\nvar vgaColors = colors.filter(function(color){\n return !! color.vga\n})\n\n\n/**\n * Get color value for a certain name.\n * @param name {String}\n * @return {String} Hex color value\n * @api public\n */\n\nmodule.exports = function(name) {\n var color = module.exports.get(name)\n return color && color.value\n}\n\n/**\n * Get color object.\n *\n * @param name {String}\n * @return {Object} Color object\n * @api public\n */\n\nmodule.exports.get = function(name) {\n name = name || ''\n name = name.trim().toLowerCase()\n return colors.filter(function(color){\n return color.name.toLowerCase() === name\n }).pop()\n}\n\n/**\n * Get all color object.\n *\n * @return {Array}\n * @api public\n */\n\nmodule.exports.all = module.exports.get.all = function() {\n return colors\n}\n\n/**\n * Get color object compatible with CSS.\n *\n * @return {Array}\n * @api public\n */\n\nmodule.exports.get.css = function(name) {\n if (!name) return cssColors\n name = name || ''\n name = name.trim().toLowerCase()\n return cssColors.filter(function(color){\n return color.name.toLowerCase() === name\n }).pop()\n}\n\n\n\nmodule.exports.get.vga = function(name) {\n if (!name) return vgaColors\n name = name || ''\n name = name.trim().toLowerCase()\n return vgaColors.filter(function(color){\n return color.name.toLowerCase() === name\n }).pop()\n}\n", "import colornames from \"colornames\"\n\n// always returns an array of r, g, b, regardless of input format.\n// they are not 0 to 255, but 0 to 1.\nexport default function translateColor(color) {\n if(color == undefined) {\n return undefined\n }\n // [0.6, 0.7, 0.8]\n if(color instanceof Array) {\n return color\n }\n // 0xAABBCC\n if(isNaN(color) == false) {\n color = \"#\" + color.toString(16) // assuming this is a hex number.\n while(color.length < 7) {\n color += \"0\"\n }\n }\n color = colornames(color) || color\n // \"#AABBCC\"\n if(color[0] == \"#\"\n && color.length == 7) {\n return [\n color.substring(1, 3),\n color.substring(3, 5),\n color.substring(5, 7),\n ].map((colorpart) => {\n return parseInt(colorpart, 16) / 255\n })\n }\n // \"#ABC\"\n if(color[0] == \"#\"\n && color.length == 4) {\n return [\n color[1],\n color[2],\n color[3],\n ].map((colorpart) => {\n return parseInt(colorpart, 16) / 255\n })\n }\n throw new Error(\"Could not parse this color\", color)\n}\n", "export function tween(alpha, omega, progress) {\n return alpha + ((omega - alpha) * progress)\n}\nimport rgb2hsv from \"rgb-hsv\"\nimport hsv2rgb from \"hsv-rgb\"\n\nimport translateColor from \"@frog/source/juice/utility/translateColor.js\"\n\nexport function colortween(a, b, progress, format) {\n const aRGB = translateColor(a).map((num) => num * 255)\n const bRGB = translateColor(b).map((num) => num * 255)\n // const aRGB = [\n // a >> 16,\n // a >> 8 & 0xff,\n // a & 0xff,\n // ]\n // const bRGB = [\n // b >> 16,\n // b >> 8 & 0xff,\n // b & 0xff,\n // ]\n const aHSV = rgb2hsv(...aRGB)\n const bHSV = rgb2hsv(...bRGB)\n const cHSV = [\n tween(aHSV[0], bHSV[0], progress),\n tween(aHSV[1], bHSV[1], progress),\n tween(aHSV[2], bHSV[2], progress),\n ]\n const cRGB = hsv2rgb(...cHSV)\n\n if(format == \"hexstring\") {\n return \"#\" + cRGB.map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")\n }\n\n const c = ((1 << 24) + (cRGB[0] << 16) + (cRGB[1] << 8) + cRGB[2] | 0)\n return c\n}\n", "import {tween} from \"@frog/source/juice/utility/Tweens.js\"\nimport sizes from \"@frog/source/data/sizes.js\"\n\n// a <Point>\n// b <Point>\n// progress <Number> between 0 and 1\nexport function arc(height) {\n return (a, b, progress) => {\n a.x = a.x || 0\n a.y = a.y || 0\n a.z = a.z || 0\n b.x = b.x || 0\n b.y = b.y || 0\n b.z = b.z || 0\n const distance = {\n \"x\": b.x - a.x,\n \"y\": b.y - a.y,\n \"z\": b.z - a.z,\n }\n const direction = {\n \"x\": Math.sign(distance.x),\n \"y\": Math.sign(distance.y),\n \"z\": Math.sign(distance.z),\n }\n const midpoint = {\n \"x\": a.x + (distance.x / 2),\n \"y\": a.y + (distance.y / 2),\n \"z\": a.z + (distance.z / 2),\n }\n // const diameter = Math.sqrt((distance.x * distance.x) + (distance.y * distance.y))\n const angle = Math.atan2(distance.y, distance.x)\n const diameter = Math.hypot(distance.x, distance.y)\n const radius = {\n \"h\": (diameter / 2),\n \"v\": height || 1.25, // TODO: Shouldn't this be variable for the longer arcs?\n }\n const degree = (progress * Math.PI) - (Math.PI / 2)\n\n if(sizes.camera.type == \"isometric\") {\n return {\n \"x\": midpoint.x + (Math.sin(degree) * radius.h * Math.cos(angle)),\n \"y\": midpoint.y + (Math.sin(degree) * radius.h * Math.sin(angle)),\n \"z\": midpoint.z + 0.1 + (Math.cos(degree) * radius.v),\n }\n } else {\n return {\n \"x\": midpoint.x + (Math.sin(degree) * radius.h * Math.cos(angle)),\n \"y\": midpoint.y + (Math.sin(degree) * radius.h * Math.sin(angle)) - (Math.cos(degree) * radius.v),\n // \"z\": midpoint.z + 0.1 + (Math.cos(degree) * radius.v),\n \"z\": midpoint.z\n }\n }\n }\n}\n\n// a <Point>\n// b <Point>\n// progress <Number> between 0 and 1\nexport function line(a, b, progress) {\n a.x = a.x || 0\n a.y = a.y || 0\n a.z = a.z || 0\n b.x = b.x || 0\n b.y = b.y || 0\n b.z = b.z || 0\n return {\n \"x\": tween(a.x, b.x, progress),\n \"y\": tween(a.y, b.y, progress),\n \"z\": tween(a.z, b.z, progress),\n }\n}\n", "/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Ga\u00EBtan Renaudeau 2014 - 2015 \u2013 MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n", "// // http://greweb.me/bezier-easing-editor/example/\n// import bezier from \"bezier-easing\"\n// bezier(0, 0, 1, 1)\nimport bezier from \"bezier-easing\"\n\n// https://gist.github.com/gre/1650294\nexport default {\n \"bezier\": bezier,\n \"jump\": t => 1,\n \"linear\": t => t, // no easing, no acceleration\n \"easeInQuad\": t => t * t, // accelerating from zero velocity\n \"easeOutQuad\": t => t * (2 - t), // decelerating to zero velocity\n \"easeInOutQuad\": t => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t, // acceleration until halfway, then deceleration\n // \"easeInOutQuadRemix\": t => t < 0.5 ? t*(2-t) : t, // deceleration until halfway, then acceleration\n \"easeInCubic\": t => t * t * t, // accelerating from zero velocity\n \"easeOutCubic\": t => (--t) * t * t + 1, // decelerating to zero velocity\n \"easeInOutCubic\": t => t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1, // acceleration until halfway, then deceleration\n \"easeInQuart\": t => t * t * t * t, // accelerating from zero velocity\n \"easeOutQuart\": t => 1 - (--t) * t * t * t, // decelerating to zero velocity\n \"easeInOutQuart\": t => t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t, // acceleration until halfway, then deceleration\n \"easeInQuint\": t => t * t * t * t * t, // accelerating from zero velocity\n \"easeOutQuint\": t => 1 + (--t) * t * t * t * t, // decelerating to zero velocity\n \"easeInOutQuint\": t => t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t, // acceleration until halfway, then deceleration\n\n \"clampedLerp\": (min, max, value) => {\n if(value < min) {\n return 0\n } else if(value > max) {\n return 1\n } else {\n return (value - min) / (max - min)\n }\n }\n}\n", "import {nanoid} from \"nanoid\"\nimport Objdict from \"objdict\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport * as Motions from \"@frog/source/juice/utility/Motions.js\"\nimport Timings from \"@frog/source/juice/utility/Timings.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport sizes from \"@frog/source/data/sizes.js\"\n\nimport Unit from \"@frog/source/models/Unit.js\"\n\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nconst animations = {}\nexport default animations\n\nfunction Count(count) {\n let array = []\n for(let i = 0; i < count; i += 1) {\n array.push(i)\n }\n return array\n}\n\nfunction FlyInFlyOut({image, flyIn = true, flyOut = true, duration = 750, key}) {\n const OFFSET = sizes.frame.width\n key = key || nanoid()\n return [\n flyIn && {\n \"key\": key,\n \"type\": \"particle\",\n \"space\": \"screenspace\",\n \"mark\": 0,\n \"image\": image,\n \"stack\": 9999999,\n \"position\": {\n \"x\": 0 - OFFSET,\n \"y\": (sizes.frame.height / 2),\n // \"x\": sizes.frame.width / 2,\n // \"y\": sizes.frame.height / 2,\n },\n \"anchor\": {\n \"x\": \"50%\",\n \"y\": \"50%\"\n },\n },\n flyIn && {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": duration * (1 / 3),\n \"timing\": Timings.easeOutQuad,\n \"position\": {\n \"x\": (sizes.frame.width / 4),\n \"y\": (sizes.frame.height / 2),\n }\n },\n flyIn && {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": duration * (2 / 3),\n \"position\": {\n \"x\": (sizes.frame.width / 4),\n \"y\": (sizes.frame.height / 2),\n }\n },\n flyOut && {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": duration,\n \"timing\": Timings.easeInQuad,\n \"position\": {\n \"x\": sizes.frame.width + OFFSET,\n \"y\": (sizes.frame.height / 2),\n }\n },\n ]\n}\n\n// const endTurnFadeAnimation = require(\"@frog/source/assets/images/hero-tactics/ui/fe-end-turn-fade/animation.js\")\n\n// const BANNER_BAD = require(\"@frog/source/assets/images/apocalypse-tactics/ui/banners/enemy-turn.png\")\n// const BANNER_GOOD = require(\"@frog/source/assets/images/apocalypse-tactics/ui/banners/your-turn.png\")\n\nconst BANNER_BAD = require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-bad.png\")\nconst BANNER_GOOD = require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-good.png\")\nanimations[\"turn start\"] = (step) => {\n return {\n \"keyframes\": [\n FlyInFlyOut({\n \"image\": step.affiliation == \"bad\" ? BANNER_BAD : BANNER_GOOD,\n \"duration\": 2000,\n }),\n ]\n }\n}\n\nanimations[\"chapter failure\"] = (step) => {\n return {\n \"keyframes\": [\n FlyInFlyOut({\n // \"image\": require(\"@frog/source/assets/images/apocalypse-tactics/ui/banners/lose.png\"),\n \"image\": require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-failure.png\"),\n \"flyOut\": false,\n }),\n {\n \"mark\": 0,\n \"audio\": {\"triggerKey\": \"Music:Failure\"},\n },\n {\n \"mark\": Infinity,\n }\n ]\n }\n}\n\nanimations[\"chapter success\"] = (step) => {\n return {\n \"keyframes\": [\n FlyInFlyOut({\n \"key\": \"success\",\n // \"image\": require(\"@frog/source/assets/images/apocalypse-tactics/ui/banners/win.png\"),\n \"image\": require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-success.png\"),\n \"duration\": 100,\n \"flyOut\": false,\n }),\n // {\n // \"key\": \"success\",\n // \"type\": \"particle\",\n // \"space\": \"screenspace\",\n // \"mark\": 1000,\n // \"image\": require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-success-1.png\"),\n // },\n // {\n // \"key\": \"success\",\n // \"type\": \"particle\",\n // \"space\": \"screenspace\",\n // \"mark\": 1000,\n // \"image\": require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-success-2.png\"),\n // },\n // {\n // \"key\": \"success\",\n // \"type\": \"particle\",\n // \"space\": \"screenspace\",\n // \"mark\": 1000,\n // \"image\": require(\"@frog/source/assets/images/leviathan-tactics/ui/banner-success-3.png\"),\n // },\n\n\n {\n \"mark\": 0,\n \"audio\": {\"triggerKey\": \"Music:Success\"},\n },\n {\n \"mark\": Infinity,\n },\n ]\n }\n}\n\nanimations[\"chapter start\"] = (step) => {\n return {\n \"keyframes\": [\n FlyInFlyOut({\n \"image\": require(\"@frog/source/assets/images/apocalypse-tactics/ui/banners/lets-go.png\"),\n \"duration\": 1000 * 12,\n }),\n // TODO: I'm not even respecting this anymore,\n // I'm just using this to keep the chapter start step up while I run the HTML CSS banner.\n ]\n }\n}\n\nanimations[\"navigate\"] = (step) => {\n return {\n \"keyframes\": [\n {\n \"mark\": 0,\n \"do\": function() {\n console.log(\"Going!!\")\n Navigation.go(step.path, step.data)\n }\n }\n ]\n }\n}\n\nanimations[\"move-encounter\"] = (step) => {\n return {\n \"keyframes\": [\n {\n \"currentEncounterKey\": step.currentEncounterKey,\n }\n ]\n }\n}\n\nanimations[\"move\"] = (step) => {\n return {\n \"keyframes\": step.deltastages.map((deltastage) => {\n return Object.values(Objdict.map(deltastage.units, (unit, unitKey) => {\n const a = step.alphastage.units[unitKey].position\n const b = step.omegastage.units[unitKey].position\n const protounit = unitJobs[step.alphastage.units[unitKey].class] || {}\n return [\n {\n \"mark\": 0,\n \"unit\": {\n \"key\": unitKey,\n \"position\": a,\n }\n },\n {\n \"mark\": 125,\n \"timing\": Timings.easeOutQuad,\n \"motion\": Motions.arc(0.5),\n \"unit\": {\n \"key\": unitKey,\n \"position\": b\n }\n },\n {\n \"mark\": 0,\n \"audio\": {\n \"triggerKey\": protounit.moveaudio || \"Unit:Move\"\n },\n },\n\n // units[deltastage.annotation.unitReference].images.sprites.move.map((frame) => {\n // return {\n // \"key\": deltastage.unit.key,\n // \"mark\": 150 / frame.index,\n // \"image\": frame.image,\n // }\n // }),\n ]\n }))\n })\n }\n}\n\n// requires a direction and unit.key\nfunction NudgedMovement(deltastage) {\n return [\n {\n \"mark\": deltastage.mark + 0,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.position,\n }\n },\n {\n \"mark\": deltastage.mark + 100,\n \"timing\": Timings.easeOutQuad,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(deltastage.flourish.position, Geometry.multiply(deltastage.flourish.direction, 0.25)),\n }\n },\n {\n \"mark\": deltastage.mark + 133,\n \"timing\": Timings.easeInQuad,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.position,\n }\n },\n ]\n}\n\n// requires a mark, unit.key, unit.startPosition and unit.endPosition\nfunction PushedMovement(deltastage) {\n const mark = deltastage.mark ?? 0\n const endmark = deltastage.endmark ?? (mark + 166)\n const direction = Geometry.direction(deltastage.flourish.startPosition, deltastage.flourish.endPosition)\n return [\n {\n \"mark\": mark,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.startPosition,\n }\n },\n {\n \"mark\": endmark - 33,\n \"timing\": Timings.easeOutQuad,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(deltastage.flourish.endPosition, Geometry.multiply(direction, -0.25)),\n }\n },\n {\n \"mark\": endmark,\n \"timing\": Timings.easeInQuad,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.endPosition,\n }\n },\n ]\n}\n\n// requires a direction and unit.key\nfunction SwingBackMovement(deltastage) {\n const position = deltastage.flourish.position\n const backDirection = Geometry.multiply(deltastage.flourish.direction, -0.25)\n const forwardDirection = Geometry.multiply(deltastage.flourish.direction, +0.125)\n return [\n {\n \"mark\": deltastage.mark + 0,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": position,\n }\n },\n {\n \"mark\": deltastage.mark + 16,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(position, backDirection),\n }\n },\n {\n \"mark\": deltastage.mark + 133,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(position, backDirection),\n }\n },\n {\n \"mark\": deltastage.mark + 200,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(position, forwardDirection),\n }\n },\n {\n \"mark\": deltastage.mark + 200 + 33,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": Geometry.add(position, forwardDirection),\n }\n },\n {\n \"mark\": deltastage.mark + 200 + 100,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": position,\n }\n },\n ]\n}\n\nfunction JumpMovement(deltastage) {\n return [\n {\n \"mark\": deltastage.mark,\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.startPosition,\n }\n },\n {\n \"mark\": deltastage.endmark,\n \"motion\": Motions.arc(4.5),\n \"timing\": Timings.bezier(0, 1 - 0.2, 1, 0 + 0.2),\n \"unit\": {\n \"key\": deltastage.flourish.unit.key,\n \"position\": deltastage.flourish.endPosition,\n }\n }\n ]\n}\n\nfunction SpriteFrameAnimation(deltastage) {\n const animation = unitJobs[deltastage.flourish.unit.class]?.images?.sprites[deltastage.flourish.spriteSet]\n if(animation == undefined) {\n return\n }\n return animation.frames.map((frame) => {\n return {\n \"key\": deltastage.flourish.unit.key,\n \"mark\": deltastage.mark + frame.time,\n \"image\": frame.image,\n }\n })\n}\n\nfunction CombatSequence(deltastage) {\n const animation = unitJobs[deltastage.flourish.unit.class]?.images?.sprites?.combat\n if(animation != undefined) {\n const key = nanoid()\n return animation.frames.map((frame) => {\n return {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": deltastage.mark + frame.time,\n \"image\": frame.image,\n \"position\": {\"x\": -6, \"y\": -2},\n }\n })\n }\n}\n\nfunction TextFloat(deltastage) {\n const key = nanoid()\n return [\n {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": deltastage.mark,\n \"text\": {\n \"string\": deltastage.flourish.text,\n \"font\": deltastage.flourish.font || \"numbers\",\n },\n \"position\": Geometry.add(deltastage.flourish.position, {\"z\": 0}),\n },\n {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": deltastage.mark + 400,\n \"timing\": Timings.easeOutQuad,\n \"position\": Geometry.add(deltastage.flourish.position, {\"z\": 3}),\n },\n\n {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": deltastage.mark + 166,\n \"opacity\": 1,\n },\n {\n \"key\": key,\n \"type\": \"particle\",\n \"mark\": deltastage.mark + 333,\n \"timing\": Timings.easeOutQuad,\n \"opacity\": 0,\n },\n ]\n}\n\nfunction Audio(deltastage) {\n return {\n \"mark\": deltastage.mark,\n \"audio\": deltastage.flourish.audio,\n }\n}\n\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\n\nconst flourishes = {\n SwingBackMovement,\n JumpMovement,\n NudgedMovement,\n PushedMovement,\n CombatSequence,\n SpriteFrameAnimation,\n TextFloat,\n Audio,\n}\n\nanimations[\"invoke skill\"] = (step) => {\n return {\n \"isImportant\": true,\n \"keyframes\": step.deltastages.map((deltastage) => {\n // if(deltastage.mark == undefined) {\n // return undefined\n // }\n deltastage.mark = deltastage.mark || 0\n if(deltastage instanceof Function) {\n return deltastage()\n }\n if(deltastage.isSkipped == true) return\n if(deltastage.flourish != undefined\n && flourishes[deltastage.flourish.name] != undefined) {\n return flourishes[deltastage.flourish.name](deltastage)\n } else {\n return deltastage // just naively performs it\n // TODO: I wish the naive perform of it would include a delta.editStage, right??\n // I currently have to rewrite the setting of properties in the Director.performStage :<\n // I get that I need to tween it! But this is different, right?\n }\n })\n }\n}\n\nanimations[\"StartDialogue\"] = (step) => {\n const dialogue = step.deltastages[0].dialogue\n\n let mark = 0\n const keyframes = []\n if(dialogue.text != undefined) {\n const BLIP_SPEED = 25\n const COMMA_SPEED = 80\n const PUNCTUATION_SPEED = 200\n for(let index = 0; index < dialogue.text.length; index += 1) {\n const character = dialogue.text[index]\n // TODO: play sound effects with each new index blit (if it isn't whitespace)\n keyframes.push({\n \"mark\": mark,\n \"dialogue\": {\n \"text\": dialogue.text,\n \"tags\": dialogue.tags,\n \"data\": dialogue.data,\n \"speakingCharacter\": dialogue.speakingCharacter,\n \"index\": index,\n // TODO: Hey, if you want to animate MORE things in the text schema... you'll need to include it here?\n // or fix the dialogue delta to not override but mutate with a partial delta (just the progress)\n },\n })\n mark += BLIP_SPEED\n if(character == \",\") {\n mark += COMMA_SPEED\n }\n if(character == \".\"\n || character == \"!\") {\n mark += PUNCTUATION_SPEED\n }\n }\n keyframes.push({\n \"mark\": mark,\n \"duration\": Infinity,\n })\n\n return {\n // \"isImportant\": true,\n // \"duration\": Infinity,\n \"keyframes\": keyframes,\n \"minduration\": mark,\n // \"keyframes\": [\n // {\n // \"mark\": 0,\n // \"duration\": Infinity,\n // \"dialogue\": dialogue,\n // }\n // ]\n }\n } else {\n // keyframes.push({\n // \"mark\": mark,\n // \"dialogue\": dialogue\n // })\n }\n}\n\nanimations[\"Dialogue\"] = (step) => {\n const dialogue = step.deltastages[0].dialogue\n let duration = 0\n step.deltastages.forEach((deltastage) => {\n duration = Math.max(duration, deltastage.mark)\n })\n return {\n \"keyframes\": step.deltastages,\n \"minduration\": duration,\n }\n}\n", "import App from \"@frog/source/models/App.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Delta from \"@frog/source/models/Delta.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Objdict from \"objdict\"\n\nimport * as Motions from \"@frog/source/juice/utility/Motions.js\"\nimport Timings from \"@frog/source/juice/utility/Timings.js\"\nimport {colortween, tween} from \"@frog/source/juice/utility/Tweens.js\"\n\nimport skills from \"@frog/source/data/skills.js\"\nimport animations from \"@frog/source/juice/animations.js\"\nimport app from \"@frog/source/models/App.js\"\n\n// import FMODManager from \"@frog/source/utility/FMOD/FMODManager.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\n\nimport Step from \"@frog/source/juice/Step.js\"\n\nexport default new class Director {\n constructor() {\n this.steps = []\n }\n get isPerforming() {\n return App.game.chapter.sequence?.steps != undefined\n && App.game.chapter.sequence.steps.length > 0\n }\n // Director.updateSequence({sequence, delta})\n // const sequence = {\n // \"isLooping\": true,\n // \"steps\": [step, step, step]\n // }\n // TODO: Combine with App.js Sequence\n updateSequence({sequence, delta}) {\n if(sequence == undefined) return\n if(sequence.isInstantiated != true) {\n sequence.isInstantiated = true\n sequence.steps = sequence.steps.map((step) => {\n return Step.instantiate(Step.copy(step))\n })\n }\n\n // if(step.isPosted != true) {\n // step.isPosted = true\n // console.log(step)\n // }\n\n const MAX_STEPS_PER_FRAME = 10\n for(let index = 0; index <= MAX_STEPS_PER_FRAME; index += 1) {\n let step = sequence.steps[0]\n if(step == undefined) return\n step.time += delta.ms\n\n if(step.func != undefined) {\n let extrasteps = step.func(step.alphastage)\n Sequence.shift(sequence)\n if(extrasteps != undefined) {\n // BE WARNED! These extra steps don't affect\n // the end stage, because that stage has been\n // precomputed long before it was sent to the\n // director.\n // TODO: Either make this work, or make ink dialogue just return steps.\n if(extrasteps instanceof Array == false) {\n extrasteps = [extrasteps]\n }\n extrasteps = extrasteps.map((extrastep) => Step.instantiate(Step.copy(extrastep)))\n sequence.steps = extrasteps.concat(sequence.steps)\n }\n } else if(step.animation != undefined) {\n Step.executeAnimation({\n \"stage\": step.stage,\n \"animation\": step.animation,\n \"currentDuration\": step.time\n })\n\n if(step.time >= step.animation.maxmark) {\n Sequence.shift(sequence)\n } else {\n return\n }\n } else if(step.duration != undefined) {\n step.stage = step.omegastage // THIS SHOULD BE HAPPENING IN AN ANIMATION!!\n if(step.time >= step.duration) {\n Sequence.shift(sequence)\n } else {\n return\n }\n } else {\n Sequence.shift(sequence)\n }\n }\n }\n}\n\n// Combine with App.js Sequence\nclass Sequence {\n static shift(sequence) {\n const step = sequence.steps.shift()\n if(sequence.isLooping == true) {\n sequence.steps.push(Step.instantiate(step))\n }\n }\n}\n\n\n\n\n// Not yet in v2 schema.\n// Not that it needs to be.\n// But just listing it here\n// for posterity.\n// - isAnimating\n// - rotation\n// - grayscale\n", "import App from \"@frog/source/models/App.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\n\nimport Objdict from \"objdict\"\n\nconst devSelection = new class DevSelection {\n constructor() {\n }\n\n placeNewUnit(position) {\n if(Dev.selectedTemplate == undefined) return\n const baseUnit = {\n \"position\": {\n \"x\": position.x,\n \"y\": position.y,\n \"z\": 1\n },\n }\n const newUnit = Objdict.merge(baseUnit,Dev.selectedTemplate)\n Dev.createNewUnit(newUnit)\n\n const selection = App.game.chapter.selection\n selection.selectedUnitKey = newUnit.key\n selection.clearSelected()\n }\n}\n\nexport default devSelection\n", "const startTime = window.performance.now()\n\nexport function getTime() {\n const ms = window.performance.now() - startTime\n\n return {\n \"ms\": ms,\n \"s\": ms / 1000\n }\n}\n", "import Pointer from \"poin\"\nimport Objdict from \"objdict\"\nimport Speedtest from \"@frog/source/tests/utility/Speedtest.js\"\nimport Keyb from \"keyb\"\nimport Joyp from \"joyp\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport clipboard from \"copy-to-clipboard\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport DevSelection from \"@frog/source/models/admin/DevSelection.js\"\nimport App from \"@frog/source/models/App.js\"\nimport {getTime} from \"@frog/source/juice/utility/Time.js\"\nimport Unit from \"@frog/source/models/Unit.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport sizes from \"@frog/source/data/sizes.js\"\n\nconst MINIMUM_SELECTION_DURATION = 250 // in milliseconds.\nconst MAXIMUM_HOVERED_POSITIONS = 10\n\nconst PLAYER_AFFILIATION = \"good\"\n\nfunction calculateRelativePosition({x, y}, dom) {\n if(dom == undefined) return {\"x\": 0, \"y\": 0}\n const bounds = dom.getBoundingClientRect()\n x = ((x - bounds.left) / bounds.width) * sizes.frame.width\n y = ((y - bounds.top) / bounds.height) * sizes.frame.height\n\n return {x, y}\n}\n\nfunction accountForCamera({x, y}, camera) {\n return {\n \"x\": (x * camera.position.z) + camera.position.x,\n \"y\": (y * camera.position.z) + camera.position.y\n }\n}\n\nfunction convertCartesianToIsometric({x, y}) {\n return {\n \"x\": ((x / (sizes.grid.width / 2)) + (y / (sizes.grid.height / 2))) / 2,\n \"y\": ((y / (sizes.grid.height / 2)) - (x / (sizes.grid.width / 2))) / 2,\n \"z\": 0,\n }\n}\n\nfunction ortho2iso({x, y}) {\n return {\n \"x\": x - y,\n \"y\": (x + y) * 0.5,\n }\n}\n\nfunction iso2ortho({x, y}) {\n return {\n \"x\": (2 * y + x) * 0.5,\n \"y\": (2 * y - x) * 0.5,\n }\n}\n\nfunction convertCartesianToTiledCoordinates(position) {\n position.x /= sizes.grid.width\n position.y /= sizes.grid.height\n // position.x += 0 //sizesAnchor.x\n // position.y -= 0 // sizesAnchor.y // HOLD UP IS THIS DOING ANYTHING?? THIS REQUIRES THE ANCHOR TO BE 0.5 & 1, not \"50%\" & \"100%\"\n // position.x = Math.floor(position.x)\n // position.y = Math.floor(position.y)\n // position.z = 1\n return position\n}\n\nfunction clamp({x, y, z}) {\n return {\n \"x\": Math.floor(x),\n \"y\": Math.floor(y),\n // \"z\": Math.floor(z),\n // \"x\": Math.round(x),\n // \"y\": Math.round(y),\n // \"z\": Math.round(z),\n }\n}\n\n// const GOLDEN_RATIO = 1.618\n// const BLOCK_HEIGHT = 1 / GOLDEN_RATIO // ~0.618\n// const BLOCK_HEIGHT = sizes.grid.depth / sizes.grid.height // 0.875\n// const BLOCK_HEIGHT = sizes.grid.height / sizes.grid.depth // 1.142\n// const BLOCK_HEIGHT = 0.95 // Not sure how to get this magical number. I just fudged it until the cursor lit up good.\n// i still think depth / height is most correct (0.875), but our tiles are a little taller than they are along the grid.\n// const BLOCK_HEIGHT = 1\n\nfunction raycast(stage, position) {\n let castposition = {\n \"x\": position.x,\n \"y\": position.y,\n \"z\": position.z,\n }\n Objdict.forEach(stage.world.terrain, (terrain) => {\n // if(terrain.position.z == 0) {\n // return\n // }\n const z = terrain.position.z + terrain.size.z\n const weirdOffset = 1 - (z * 0.5) // no idea why this works. i just found that i have to add diff amounts here. and it is inverse to the size of the terrain.\n // z=3, weirdOffset is -0.5\n // z=2, weirdOffset is 0\n // z=1, weirdOffset is +0.5\n // z=0, weirdOffset is +1\n\n const superposition = {\n \"x\": Math.floor(position.x + z + weirdOffset),\n \"y\": Math.floor(position.y + z + weirdOffset),\n \"z\": Math.floor(position.z + z),\n }\n if(superposition.x == terrain.position.x\n && superposition.y == terrain.position.y) {\n castposition = superposition\n }\n })\n return castposition\n}\n\nexport default class Selection {\n constructor(that) {\n this.chapter = that.chapter\n\n this.selectedUnitKey = undefined\n this.multiselectedUnitKeys = new Set()\n this.hoveredUnitKey = undefined\n this.hoveredAction = undefined\n\n this.position = {\"x\": 0, \"y\": 0}\n this.previousPositions = []\n\n this.camera = {\n \"type\": sizes.camera.type,\n \"position\": this.calculateNextCameraPosition(this.chapter.stage),\n }\n\n this.watchedUnits = {}\n\n this.pointer = {\"position\": {\"x\": sizes.frame.width / 2, \"y\": sizes.frame.height / 2}}\n\n this.hasMovedMouse = false\n document.addEventListener(\"mousemove\", (event) => {\n this.hasMovedMouse = true\n })\n }\n update(delta) {\n this.pointer.speed = 4\n const DEADZONE = 0.1\n let x = Joyp.getAxis(0, \"left-stick-x\")\n let y = Joyp.getAxis(0, \"left-stick-y\")\n x = Math.max(Math.abs(x) - DEADZONE, 0) * Math.sign(x)\n y = Math.max(Math.abs(y) - DEADZONE, 0) * Math.sign(y)\n this.pointer.position.x += x * this.pointer.speed\n this.pointer.position.y += y * this.pointer.speed\n\n if(Keyb.wasJustPressed(\"A\")\n || Keyb.wasJustPressed(\"<left>\")\n || Joyp.wasJustPressed(0, \"west-dbutton\", delta.ms)) {\n this.pointer.position.x -= 1 / this.camera.position.z\n }\n if(Keyb.wasJustPressed(\"D\")\n || Keyb.wasJustPressed(\"<right>\")\n || Joyp.wasJustPressed(0, \"east-dbutton\", delta.ms)) {\n this.pointer.position.x += 1 / this.camera.position.z\n }\n if(Keyb.wasJustPressed(\"W\")\n || Keyb.wasJustPressed(\"<up>\")\n || Joyp.wasJustPressed(0, \"north-dbutton\", delta.ms)) {\n this.pointer.position.y -= 1 / this.camera.position.z\n }\n if(Keyb.wasJustPressed(\"S\")\n || Keyb.wasJustPressed(\"<down>\")\n || Joyp.wasJustPressed(0, \"south-dbutton\", delta.ms)) {\n this.pointer.position.y += 1 / this.camera.position.z\n }\n\n if(Keyb.isDown(\"W\")) {\n this.camera.position.y -= 0.5\n }\n if(Keyb.isDown(\"S\")) {\n this.camera.position.y += 0.5\n }\n if(Keyb.isDown(\"A\")) {\n this.camera.position.x -= 0.5\n }\n if(Keyb.isDown(\"D\")) {\n this.camera.position.x += 0.5\n }\n\n if(this.hasMovedMouse == true) {\n this.pointer.oldmouseposition = this.pointer.newmouseposition\n this.pointer.newmouseposition = calculateRelativePosition(Pointer.position, document.getElementById(\"frame\"))\n if(Geometry.equals(this.pointer.oldmouseposition, this.pointer.newmouseposition) == false) {\n this.pointer.position = this.pointer.newmouseposition\n }\n }\n\n if(this.camera.type == \"isometric\") {\n this.position = this.pointer.position\n this.position = accountForCamera(this.position, this.camera)\n this.positionBeforeProjection = this.position\n this.position = convertCartesianToIsometric(this.position)\n this.position = raycast(this.chapter.stage, this.position)\n // this.position = clamp(this.position)\n } else if(this.camera.type == \"top-down\") {\n this.position = this.pointer.position\n this.position = convertCartesianToTiledCoordinates(this.position)\n this.position = accountForCamera(this.position, this.camera)\n this.position = clamp(this.position)\n }\n if(Dev.inProtoMode == false) {\n this.position.z = this.chapter.stage.encounters[this.chapter.stage.currentEncounterKey].z\n }\n\n if(Dev.inProtoMode == false\n && Zone.isInBounds(this.chapter.stage.encounters[this.chapter.stage.currentEncounterKey].zone, this.position) == false) {\n this.position = {\"x\": 0, \"y\": 0}\n this.hoveredUnitKey = undefined\n this.hoveredTimestamp = undefined\n this.hoveredEncounterSlug = undefined\n this.hoveredAction = undefined\n }\n\n if(Dev.inProtoMode == false\n && App.getActiveStage().dialogue != undefined) {\n this.unselect()\n return\n }\n\n let isNewlyHovered = false\n if(this.previousPositions[0] == undefined\n || this.previousPositions[0].x != this.position.x\n || this.previousPositions[0].y != this.position.y) {\n if(World.isOutOfBounds(this.chapter.stage.world, this.position) == false\n && Zone.isInBounds(this.chapter.stage.encounters[this.chapter.stage.currentEncounterKey].zone, this.position)) {\n this.previousPositions.unshift({\"x\": this.position.x, \"y\": this.position.y, \"z\": this.position.z})\n if(this.previousPositions.length > MAXIMUM_HOVERED_POSITIONS) {\n this.previousPositions.pop()\n }\n isNewlyHovered = true\n this.hoveredTime = getTime().ms\n }\n }\n\n const encounter = Stage.findEncounterAtPosition(this.chapter.stage, this.position)\n if(encounter != undefined) {\n this.hoveredEncounterSlug = encounter.slug\n } else {\n this.hoveredEncounterSlug = undefined\n }\n\n if(Dev.inProtoMode == true\n || Zone.isInBounds(this.chapter.stage.encounters[this.chapter.stage.currentEncounterKey].zone, this.position, true) == true) {\n const unitKey = (Stage.findUnitByPosition(this.modedStage, this.position) || {}).key\n\n if(this.hoveredUnitKey != unitKey) {\n this.hoveredUnitKey = unitKey\n\n if(this.hoveredUnitKey == undefined) {\n this.hoveredTimestamp = undefined\n } else {\n this.hoveredTimestamp = Date.now()\n }\n }\n }\n\n if(Dev.inProtoMode == false\n && this.canAction(this.selectedUnitKey, this.chapter.stage)) {\n this.hoveredAction = this.findAction({\n \"unit\": this.selectedUnit,\n \"position\": this.position\n })\n } else {\n this.hoveredAction = undefined\n }\n\n // // DEBUG\n if(this.hoveredAction != undefined\n && this.hoveredAction.omegastage.nextTurn == undefined) {\n const mark = Speedtest.mark(\"Actions\", \"Selection.update\")\n // Stage.calculateNextTurn(this.hoveredAction.omegastage)\n // Stage.calculateNextTurn(this.hoveredAction.omegastage, {\"ignoreAI\": true})\n mark()//.log({\"maximum\": 100})\n }\n\n if(Dev.inProtoMode == false\n && this.hoveredUnit != undefined\n && this.hoveredUnit.actionmap == undefined) {\n this.hoveredUnit.actionmap = Unit.calculateActions(this.hoveredUnit.key, this.chapter.stage)\n }\n\n if(Keyb.wasJustPressed(\"<space>\")\n || Joyp.wasJustPressed(0, \"south-button\", delta.ms)) {\n this.start()\n }\n if(Keyb.wasJustPressed(\"<space>\")\n || Joyp.wasJustPressed(0, \"south-button\", delta.ms)) {\n this.finish()\n }\n if(Keyb.wasJustPressed(\"<escape>\", delta.ms)\n || Joyp.wasJustPressed(0, \"east-button\", delta.ms)) {\n this.cancel()\n }\n\n if(isNewlyHovered == true) {\n Audiomix.trigger(\"Selection:Move\")\n // if(this.selectedUnitKey != undefined\n // && this.hoveredAction != undefined) {\n // Audiomix.trigger(\"Selection:Move\")\n // } else if(this.hoveredUnitKey != undefined) {\n // Audiomix.trigger(\"Selection:Move\")\n // }\n }\n\n if(Pointer.wasJustPressed(\"auxiliary\", true, delta.ms)) {\n const position = this.position.x + \"x\" + this.position.y // + \"x\" + this.position.z\n clipboard(position)\n console.log(position)\n }\n\n // if(Pointer.wasJustPressed(\"primary\", true, delta.ms)\n // || Joyp.wasJustPressed(0, \"south-button\", delta.ms + 100)) {\n // if(this.chapter.stage.units[this.hoveredUnitKey] != undefined\n // && this.chapter.stage.units[this.hoveredUnitKey].affiliation == \"bad\") {\n // this.watchedUnits[this.hoveredUnitKey] = !this.watchedUnits[this.hoveredUnitKey]\n // }\n // }\n\n if(Dev.inProtoMode == false\n && this.selectedUnit != undefined\n && this.selectedUnit.skills != undefined) {\n Object.values(this.selectedUnit.skills).forEach((skillKey, index) => {\n if(Keyb.wasJustPressed(index + 1)) {\n this.selectedSkillKey = skillKey\n }\n })\n }\n\n if(this.selectedUnit != undefined) {\n if(Keyb.wasJustPressed(\"1\")) {\n this.selectedSubclassIndex = \"1\"\n }\n if(Keyb.wasJustPressed(\"2\")) {\n this.selectedSubclassIndex = \"2\"\n }\n }\n\n const nextPosition = this.calculateNextCameraPosition()\n if(Dev.inProtoMode == false\n && nextPosition != undefined) {\n const CAMERA_SPEED = 0.3\n const MIN_CAMERA_DELTA = 0.01\n const CAMERA_AXES = [\"x\", \"y\", \"z\"]\n CAMERA_AXES.forEach((axis) => {\n this.camera.position[axis] += (nextPosition[axis] - this.camera.position[axis]) * CAMERA_SPEED\n if(Math.abs(nextPosition[axis] - this.camera.position[axis]) < MIN_CAMERA_DELTA) {\n this.camera.position[axis] = nextPosition[axis]\n }\n })\n }\n this.camera.zone = {\n \"x\": this.camera.position.x,\n \"y\": this.camera.position.y,\n \"z\": this.camera.position.z,\n \"width\": sizes.frame.width,\n \"height\": sizes.frame.height,\n }\n this.camera.renderzone = {\n \"x\": this.camera.zone.x - 1,\n \"y\": this.camera.zone.y - 1,\n \"width\": this.camera.zone.width + 1,\n \"height\": this.camera.zone.height + 1,\n }\n\n this.maxendTurnCharge = 200\n this.endTurnCharge = this.endTurnCharge || 0\n if(Joyp.isPressed(0, \"north-button\")\n || Keyb.isPressed(\"<enter>\")) {\n this.endTurnCharge += delta.ms\n } else {\n this.endTurnCharge = 0\n }\n if(this.endTurnCharge >= this.maxendTurnCharge) {\n if(Director.isPerforming != true) {\n App.game.chapter.endPlayerTurn()\n }\n }\n\n if(App.game.chapter.stage.prompt != undefined) {\n const prompt = App.game.chapter.stage.prompt(App.game.chapter.stage)\n if(prompt.onClick != undefined) {\n if(Joyp.wasJustPressed(0, \"start-button\", delta.ms)) {\n prompt.onClick()\n this.evacuateCharge += delta.ms\n }\n }\n }\n }\n calculateNextCameraPosition(stage) {\n // return {\n // \"x\": -1 * sizes.grid.width * sizesAnchor.x,\n // \"y\": -1 * sizes.grid.height * sizesAnchor.y,\n // \"z\": 0\n // }\n\n // return {\n // \"x\": 0, \"y\": 0, \"z\": 0\n // }\n\n stage = stage || App.getActiveStage()\n if(stage == undefined) return\n if(stage.encounters[stage.currentEncounterKey] == undefined) return {\"x\": 0, \"y\": 0, \"z\": 0}\n const currentZone = stage.encounters[stage.currentEncounterKey]\n\n const position = {}\n\n position.x = currentZone.x\n position.y = currentZone.y\n position.z = currentZone.zoomout ?? 1\n\n position.x += currentZone.width / 2\n position.y += currentZone.height / 2\n\n position.x -= (sizes.frame.width / 2) * position.z\n position.y -= (sizes.frame.height / 2) * position.z\n\n // if(position.x < 0) position.x = 0\n // if(position.y < 0) position.y = 0\n // if(position.x > stage.world.width - sizes.frame.width) position.x = stage.world.width - sizes.frame.width\n // if(position.y > stage.world.height - sizes.frame.height) position.y = stage.world.height - sizes.frame.height\n\n return position\n\n // // stolen from views/utility/pixel.js\n // const nextPosition = {}\n // // nextPosition.x = (position.x - position.y) * (sizes.grid.width / 2),\n // // nextPosition.y = ((position.x + position.y) * (sizes.grid.height / 2)) - (position.z * sizes.grid.depth),\n // nextPosition.x = position.x\n // nextPosition.y = position.y\n //\n // // nextPosition.x -= sizes.canvas.width / 2\n // // nextPosition.y -= sizes.canvas.height / 2\n // // nextPosition.x -= sizes.grid.width * sizesAnchor.x // Why is this commented out? Why don't we use this??\n // // nextPosition.y -= sizes.grid.height * sizesAnchor.y\n // // nextPosition.y -= 7 // for artist's touch.\n //\n // return nextPosition\n }\n select(unitKey) {\n if(Keyb.isPressed(\"<shift>\")) {\n if(this.multiselectedUnitKeys.has(unitKey)) {\n this.multiselectedUnitKeys.delete(unitKey)\n if(this.selectedUnitKey == unitKey) this.selectedUnitKey = undefined\n } else {\n this.multiselectedUnitKeys.add(unitKey)\n if(this.selectedUnitKey != undefined) this.multiselectedUnitKeys.add(this.selectedUnitKey)\n this.selectedUnitKey = unitKey\n }\n } else {\n this.selectedUnitKey = unitKey\n this.multiselectedUnitKeys.clear()\n }\n // console.log(\"SELECTED\")\n this.clearSelected()\n\n if(App.game.player.tutorial == 0) {\n App.game.player.tutorial += 1\n }\n }\n unselect() {\n // console.log(\"UNSELECTED\")\n this.selectedUnitKey = undefined\n this.multiselectedUnitKeys.clear()\n this.clearSelected()\n }\n clearSelected() {\n this.selectedTime = getTime().ms\n this.selectedSkillKey = undefined\n this.selectedItemKey = undefined\n this.selectedProtoUnitKey = undefined\n this.selectedSubclassIndex = undefined\n }\n reset() {\n this.unselect()\n }\n start() {\n // Navigation.state.section = undefined\n\n if(this.chapter.phase == \"explore\") {\n const stage = this.chapter.stage\n const encounter = stage.encounters[stage.currentEncounterKey] // ACTUAL ENCOUNTER, NOT TO BE CONFUSED WITH CHAPTER.\n if(this.hoveredEncounterSlug != undefined\n && (stage.currentEncounterKey) != this.hoveredEncounterSlug) {\n stage.currentEncounterKey = this.hoveredEncounterSlug\n return\n }\n }\n if(this.chapter.phase == \"prepare\"\n || this.chapter.phase == \"play\") {\n if(this.selectedItemKey == undefined) {\n if(this.selectedUnitKey == undefined) {\n if(this.canSelect(this.hoveredUnitKey)) {\n this.select(this.hoveredUnitKey)\n Audiomix.trigger(\"Selection:Start\")\n // console.log(\"START\")\n }\n } else if(this.selectedUnitKey != undefined) {\n if(this.hoveredAction != undefined\n && Action.isNothing(this.hoveredAction) != true) {\n return\n }\n // You click on another selectable unit, you select\n // that unit instead. Note that this is blocked by\n // action tiles, so it'd rather invoke a selected\n // skill on that unit rather than select it.\n if(this.hoveredUnitKey != undefined\n && this.hoveredUnitKey != this.selectedUnitKey\n && this.canSelect(this.hoveredUnitKey)\n && this.hoveredUnit.affiliation != \"bad\"\n && this.hoveredUnit.type != \"plant\") {\n // During the prepare phase, selecting\n // another unit while you have another\n // already selected swaps their positions.\n if(this.chapter.phase == \"prepare\") {\n if(this.selectedUnit.type == \"plant\" || this.hoveredUnit.type == \"plant\") {\n return\n }\n const hoveredPosition = this.hoveredUnit.position\n this.hoveredUnit.position = this.selectedUnit.position\n this.selectedUnit.position = hoveredPosition\n }\n // console.log(\"RESTART TYPE 1\")\n this.select(this.hoveredUnitKey)\n Audiomix.trigger(\"Selection:Start\")\n return\n }\n }\n }\n }\n }\n finish() {\n // PROTO-UNIT-DEPLOY INTERACTIONS\n if(this.chapter.phase == \"prepare\") {\n if(this.selectedProtoUnitKey != undefined) {\n const partyunit = player.party.units[this.selectedProtoUnitKey]\n if(partyunit != undefined) {\n\n const stage = this.chapter.stage\n if(Stage.hasCollision({\"stage\": stage, \"position\": this.position}) == false) {\n this.unselect()\n stage.units[partyunit.key] = Unit.instantiate({\n \"unit\": {\n \"key\": partyunit.key,\n \"jobKey\": partyunit.jobKey,\n \"health\": partyunit.health,\n \"position\": this.position,\n }\n })\n }\n }\n }\n }\n // DEV - MAP EDITING INTERACTIONS\n if(this.hoveredUnitKey == undefined) {\n if(Dev.selectedTemplate != undefined) {\n DevSelection.placeNewUnit(this.position)\n } else {\n Dev.lastEmptyPositionClicked = this.position\n }\n }\n // ITEM INTERACTIONS\n if(this.selectedItemKey != undefined\n && this.chapter.stage.player.inventory.items[this.selectedItemKey] != undefined) {\n let item = this.chapter.stage.player.inventory.items[this.selectedItemKey]\n if(items[item.class] != undefined) {\n item = Objdict.merge(item, items[item.class])\n }\n\n if(item.interact instanceof Function) {\n if(this.chapter.saveStage instanceof Function) this.chapter.saveStage()\n const interaction = item.interact({\"encounter\": this.chapter, \"position\": this.position})\n\n if(interaction != undefined) {\n if(interaction.consumeItem == true) {\n if(this.chapter.stage.player.inventory.items[item.key].amount > 1) {\n this.chapter.stage.player.inventory.items[item.key].amount -= 1\n } else {\n delete this.chapter.stage.player.inventory.items[item.key]\n this.unselect()\n }\n }\n }\n\n if(this.chapter.phase == \"play\"\n && this.chapter.recalculateStage instanceof Function) {\n this.chapter.recalculateStage()\n }\n\n return\n }\n }\n // UNIT TALKING INTERACTIONS\n // TODO: Is it alright that unit-click-interactions are hardcoded to just the explore phase?\n if(this.chapter.phase == \"explore\") {\n if(this.selectedItemKey == undefined\n && this.hoveredUnitKey != undefined\n && this.canSelect(this.hoveredUnitKey)) { // TODO: Is this the right logic for what units can be talked to?\n Chapter.triggerEvent(this.chapter, \"select:\" + this.chapter.stage.units[this.hoveredUnitKey].classname)\n return\n }\n }\n // UNIT INTERACTIONS\n if(this.selectedUnitKey != undefined\n && getTime().ms - this.selectedTime >= MINIMUM_SELECTION_DURATION) {\n // UNIT REPOSITION-DURING-DEPLOY INTERACTIONS\n if(this.chapter.phase == \"prepare\") {\n if(World.isEmptyPosition(this.chapter.stage.world, this.position)) {\n return\n }\n if(this.selectedUnit.type == \"plant\"\n && this.chapter.stage.world.blocks[this.position.x + \"x\" + this.position.y + \"x\" + 0] != undefined\n && this.chapter.stage.world.blocks[this.position.x + \"x\" + this.position.y + \"x\" + 0].type != \"plot\") {\n return\n }\n const collidingUnit = Stage.findUnitByPosition(this.chapter.stage, this.position)\n if(collidingUnit != undefined\n && collidingUnit.affiliation == \"bad\") {\n return\n }\n if(collidingUnit != undefined\n && collidingUnit.type == \"plant\"\n && collidingUnit.key != this.selectedUnit.key) {\n return\n }\n\n this.selectedUnit.position = this.position\n this.unselect()\n return\n }\n // UNIT COMBAT INTERACTIONS\n // // You click on a unit to select it, you click on a unit\n // // again to unselect it. This is important for mobile.\n // if(this.selectedUnitKey == this.hoveredUnitKey) {\n // // // console.log(\"CANCEL: ON SELF\")\n // this.selectedUnitKey = undefined\n // this.selectedTime = undefined\n // Audiomix.trigger(\"Selection:Cancel\")\n // return\n // }\n // You click on an action tile, you perform that action.\n if(this.hoveredAction != undefined\n && Action.isNothing(this.hoveredAction) != true\n && Dev.isFreezingPlaying() != true) {\n const hoveredAction = this.hoveredAction\n\n const actionStub = {\n \"type\": hoveredAction.type,\n \"skillKey\": hoveredAction.skillKey,\n \"performerKey\": hoveredAction.performerKey,\n \"position\": hoveredAction.position,\n \"performerPosition\": hoveredAction.omegastage.units[hoveredAction.performerKey].position,\n \"distance\": hoveredAction.distance,\n }\n Dev.actionTrace.push(actionStub)\n Dev.recordSavestate(\"livePlaytest\")\n\n const savestateEvent = hoveredAction.steps.find((step) => step.name == \"SavestateCapture\")\n if(savestateEvent != undefined) {\n Dev.recordSavestate(savestateEvent.savestateSlug, savestateEvent.data)\n }\n\n this.hoveredAction = undefined\n const omegastage = this.chapter.performAction(hoveredAction)\n if(this.canSelect(this.selectedUnitKey, omegastage) == false) {\n this.selectedSkillKey = undefined\n this.selectedSubclassIndex = undefined\n this.unselect()\n }\n this.selectedSkillKey = undefined\n this.selectedSubclassIndex = undefined\n // console.log(\"FINISH\")\n // console.log(\"Selected Action\", this.hoveredAction)\n\n Audiomix.trigger(\"Selection:Finish\")\n return\n }\n // You click on another selectable unit, you select\n // that unit instead. Note that this is blocked by\n // action tiles, so it'd rather invoke a selected\n // skill on that unit rather than select it.\n if(this.hoveredUnitKey != undefined\n && this.canSelect(this.hoveredUnitKey)) {\n // console.log(\"RESTART TYPE 2\")\n this.hoveredAction = undefined\n this.select(this.hoveredUnitKey)\n Audiomix.trigger(\"Selection:Start\")\n return\n }\n // You click where there are no units or\n // action tiles, you unselect the unit.\n if(this.hoveredAction == undefined\n || Action.isNothing(this.hoveredAction) == true) {\n // console.log(\"CANCEL: ON NOTHING\")\n this.hoveredAction = undefined\n this.unselect()\n Audiomix.trigger(\"Selection:Cancel\")\n }\n }\n }\n cancel() {\n if(this.selectedSkillKey != undefined) {\n this.hoveredAction = undefined\n this.selectedSkillKey = undefined\n this.selectedSubclassIndex = undefined\n Audiomix.trigger(\"Selection:Cancel\")\n } else if(this.selectedUnitKey != undefined) {\n this.hoveredAction = undefined\n this.unselect()\n Audiomix.trigger(\"Selection:Cancel\")\n }\n\n if(this.selectedItemKey != undefined\n || this.selectedProtoUnitKey != undefined) {\n this.unselect()\n Audiomix.trigger(\"Selection:Cancel\")\n }\n }\n isSelected(unit) {\n return unit != undefined\n && this.selectedUnitKey == unit.key\n }\n canSelect(unitKey, stage) {\n const unit = this.modedStage.units[unitKey]\n if(unitKey == undefined\n || unit == undefined) {\n return false\n }\n if(this.chapter.phase == \"prepare\") {\n if(unit.affiliation == \"bad\") {\n return false\n }\n }\n return unitKey != undefined\n && unit != undefined\n && unit.isDead != true\n && unit.hasBeenRemoved != true\n && ((unit.type != \"zone\" && unit.type != \"spot\") || Dev.isFreezingPlaying() == true)\n // && World.isOutOfBounds(this.chapter.stage.world, unit.position) == false\n // && Zone.isInBounds(this.chapter.stage.encounters[this.chapter.stage.currentEncounterKey].zone, this.position) == true\n // && unit.affiliation == PLAYER_AFFILIATION\n }\n canAction(unitKey, stage) {\n stage = stage || this.chapter.stage\n const unit = stage.units[unitKey]\n return unitKey != undefined\n && unit != undefined\n && unit.affiliation == PLAYER_AFFILIATION\n }\n canSelectUnitSkill(unit, skill) {\n return unit != undefined\n // && unit.energy[\"invoke skill\"] == true\n && unit.energy[\"2\"] !== false\n }\n get selectedUnit() {\n return this.modedStage.units[this.selectedUnitKey]\n }\n get hoveredUnit() {\n return this.modedStage.units[this.hoveredUnitKey]\n }\n get activeUnitKey() {\n return this.hoveredUnitKey || this.selectedUnitKey\n }\n get activeUnit() {\n return this.selectedUnit || this.hoveredUnit\n }\n get activeSkillKey() {\n return this.hoveredSkillKey || this.selectedSkillKey\n }\n get modedStage() {\n if(Dev.inProtoMode == true) return Dev.loadedProtostage\n return this.chapter.stage\n }\n mode(unit) {\n if(unit == undefined) {\n return \"none\"\n }\n if(this.activeSkillKey != undefined) {\n return \"invoke skill only\"\n }\n\n // if(unit.energy[\"move\"] == true) {\n // return \"move only\"\n // } else if(unit.energy[\"invoke skill\"] == true) {\n // return \"invoke skill only\"\n // }\n\n // if(unit.energy[\"move\"] == false\n // && unit.energy[\"invoke skill\"] == true) {\n // return \"invoke skill only\"\n // } else if(unit.energy[\"move\"] == true) {\n // return \"move only\"\n // }\n\n // // NOT CHESS\n if(unit.energy != undefined) {\n if(unit.energy[\"move\"] == false\n && unit.energy[\"invoke skill\"] == true) {\n return \"invoke skill only\"\n } else if(unit.energy[\"move\"] == true) {\n return \"move and invoke skill\"\n }\n }\n\n // if(unit.energy[\"move\"] == false\n // && unit.energy[\"invoke skill\"] == true) {\n // return \"invoke skill only\"\n // } else if(unit.energy[\"move\"] == true) {\n // return \"move only\"\n // }\n // if(unit.energy[\"move\"] == true) {\n // return \"move only\"\n // }\n // if(unit.energy[\"invoke skill\"] == true) {\n // return \"invoke skill only\"\n // }\n\n return \"none\"\n }\n isSelectedSkill(skillKey, unit) {\n if(skillKey != undefined) {\n if(this.selectedSkillKey != undefined) {\n return skillKey == this.selectedSkillKey\n }\n }\n }\n // the difference between findActionInActionlistToActuallyUse and\n // findActionInActionlist is one is static and doesn't bother itself\n // with the currently selected unit, previous hover positions, etc.\n // I think the non-static one also concerns itself with move through\n static findActionInActionlistToActuallyUse({unit, actionlist, options = {}}) {\n const mode = options.mode || \"none\"\n\n let subactionlist = actionlist.filter((action) => {\n if(action.type == \"invoke skill\") {\n // // TODO: You should also check if this is\n // // a player unit and that the unit has\n // // this skill and is selected.\n // if(this.activeSkillKey != undefined\n // && options.ignoreActiveSkill != true) {\n // if(action.skillKey != this.activeSkillKey) {\n // return false\n // }\n // } else {\n // if(action.targetAffiliation != unit.affiliation\n // && action.skillKey != unit.equippedSkills[\"attack1\"]) {\n // return false\n // }\n // if(action.targetAffiliation == unit.affiliation\n // && action.skillKey != unit.equippedSkills[\"support1\"]) {\n // return false\n // }\n // }\n }\n if(mode == \"invoke skill only\") {\n return (action.type == \"invoke skill\")\n && Geometry.equals(action.positions[1], unit.position)\n }\n if(mode == \"move only\") {\n return action.type == \"move\"\n // || action.type == \"wait\"\n // || action.type == \"wait-for-attack\"\n }\n if(mode == \"move and invoke skill\") {\n return true\n }\n })\n\n subactionlist.forEach((action) => {\n action.recentlyHoveredScore = Infinity\n if(action.type == \"move through\"\n || action.type == \"no move\") {\n return action\n }\n if(action.positions != undefined\n && action.positions.length > 1) {\n // for(let index in this.previousPositions) {\n // let previousPosition = this.previousPositions[index]\n // if(Geometry.equals({\"x\": previousPosition.x, \"y\": previousPosition.y}, {\"x\": action.positions[1].x, \"y\": action.positions[1].y})) { // IGNORING THE Z AXIS\n // // if(Geometry.equals(previousPosition, action.positions[1])) {\n // action.recentlyHoveredScore = index\n // return action\n // }\n // }\n }\n // if(action.type == \"move\") {\n // action.recentlyHoveredScore = -10\n // }\n })\n subactionlist.sort((a, b) => {\n if(a.recentlyHoveredScore < b.recentlyHoveredScore) return -1\n if(a.recentlyHoveredScore > b.recentlyHoveredScore) return +1\n if(a.distance < b.distance) return -1\n if(a.distance > b.distance) return +1\n return 0\n })\n const moveActionlist = subactionlist.filter((action) => {\n return action.type == \"move\"\n // || action.type == \"wait\"\n // || action.type == \"wait-for-attack\"\n })\n if(moveActionlist[0] != undefined) {\n return moveActionlist[0]\n }\n if(subactionlist[0] != undefined) {\n return subactionlist[0]\n }\n }\n findSubactionsInActionlist({unit, actionlist, options = {}}) {\n const mode = options.mode || this.mode(unit)\n\n let subclassIndex = undefined\n if(unit.subclasses != undefined) {\n if(this.selectedSubclassIndex != undefined) {\n subclassIndex = this.selectedSubclassIndex\n } else if(unit.energy[\"1\"] != false) {\n subclassIndex = \"1\"\n } else {\n subclassIndex = \"2\"\n }\n }\n\n let subactionlist = actionlist.filter((action) => {\n if(action.type == \"invoke skill\"\n && options.ignoreActiveSkill != true\n && this.activeSkillKey != undefined\n && this.activeSkillKey != action.skillKey) {\n return false\n }\n // if(mode == \"move and invoke skill\"\n // || mode == \"invoke skill only\") {\n // if(action.type == \"invoke skill\") {\n // // TODO: You should also check if this is\n // // a player unit and that the unit has\n // // this skill and is selected.\n // if(this.activeSkillKey != undefined\n // && options.ignoreActiveSkill != true) {\n // if(action.skillKey != this.activeSkillKey) {\n // return false\n // }\n // } else {\n // return true\n // // if(action.targetAffiliation != unit.affiliation\n // // && action.skillKey != unit.equippedSkills[\"attack1\"]) {\n // // return false\n // // }\n // // if(action.targetAffiliation == unit.affiliation\n // // && action.skillKey != unit.equippedSkills[\"support1\"]) {\n // // return false\n // // }\n // }\n // }\n // }\n if(subclassIndex != undefined\n && subclassIndex != action.subclassIndex) {\n return false\n }\n if(mode == \"invoke skill only\") {\n return (action.type == \"invoke skill\" || action.type == \"invoke skill - can not target\")\n && Geometry.equals(action.positions[1], unit.position)\n }\n if(mode == \"move only\") {\n return action.type == \"move\"\n || action.type == \"move through\"\n // || action.type == \"wait\"\n // || action.type == \"wait-for-attack\"\n }\n if(mode == \"move and invoke skill\") {\n return true\n }\n })\n\n subactionlist.forEach((action) => {\n action.recentlyHoveredScore = Infinity\n if(action.type == \"move through\"\n || action.type == \"no move\") {\n return action\n }\n if(action.positions != undefined\n && action.positions.length > 1) {\n for(let index in this.previousPositions) {\n let previousPosition = this.previousPositions[index]\n if(Geometry.equals({\"x\": previousPosition.x, \"y\": previousPosition.y}, {\"x\": action.positions[1].x, \"y\": action.positions[1].y})) { // IGNORING THE Z AXIS\n action.recentlyHoveredScore = index\n return action\n }\n }\n }\n })\n subactionlist.sort((a, b) => {\n if(a.recentlyHoveredScore < b.recentlyHoveredScore) return -1\n if(a.recentlyHoveredScore > b.recentlyHoveredScore) return +1\n if(a.distance < b.distance) return -1\n if(a.distance > b.distance) return +1\n return 0\n })\n return subactionlist\n }\n findActionInActionlist({unit, actionlist, options = {}}) {\n const subactionlist = this.findSubactionsInActionlist({unit, actionlist, options})\n\n const moveAction = subactionlist.filter((action) => action.type == \"move\")[0]\n const supportAction = subactionlist.filter((action) => action.role == \"support\")[0]\n const attackAction = subactionlist[0]\n\n return moveAction\n || supportAction\n || attackAction\n }\n findAction({unit, position}) {\n if(unit == undefined\n || unit.actionmap == undefined\n || unit.actionmap[position.x + \"x\" + position.y/* + \"x\" + position.z*/] == undefined\n || unit.actionmap[position.x + \"x\" + position.y/* + \"x\" + position.z*/] instanceof Array == false) {\n return\n }\n const actionlist = unit.actionmap[position.x + \"x\" + position.y/* + \"x\" + position.z*/]\n return this.findActionInActionlist({unit, actionlist})\n }\n isOnCamera(position) {\n const BUFFER = 2\n if(position.x < Math.floor(this.camera.position.x / sizes.grid.width) - BUFFER\n || position.x > Math.floor(this.camera.position.x / sizes.grid.width) + (sizes.frame.width * this.camera.position.z) + BUFFER\n || position.y < Math.floor(this.camera.position.y / sizes.grid.height) - BUFFER\n || position.y > Math.floor(this.camera.position.y / sizes.grid.height) + (sizes.frame.height * this.camera.position.z) + BUFFER) {\n return false\n }\n return true\n }\n centerPositionInCamera(position) {\n this.camera.position.x = (position.x - (sizes.frame.width * this.camera.position.z) / 2 + 0.5) * sizes.grid.width\n this.camera.position.y = (position.y - (sizes.frame.height * this.camera.position.z) / 2 + 0.5) * sizes.grid.height\n }\n}\n\nclass Action {\n static isNothing(action) {\n if(action.type == \"no move\"\n // || action.type == \"wait\"\n || action.type == \"invoke skill - can not target\"\n || action.type == \"move through\") {\n return true\n }\n const performer = action.alphastage.units[action.performerKey]\n if(action.type == \"move\"\n && performer.position.x == action.position.x\n && performer.position.y == action.position.y) {\n // && performer.position.z == action.position.z) {\n return true\n }\n }\n}\n", "import {nanoid} from \"nanoid\"\nimport merge from \"lodash.merge\"\nimport Speedtest from \"@frog/source/tests/utility/Speedtest.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport deepclone from \"lodash.clonedeep\"\nimport Objdict from \"objdict\"\n\nimport Unit from \"@frog/source/models/Unit.js\"\nimport Reactions from \"@frog/source/models/Reactions.js\"\nimport Selection from \"@frog/source/models/Selection.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Delta from \"@frog/source/models/Delta.js\"\nimport Action from \"@frog/source/models/Action.js\"\nimport InkDialogue from \"@frog/source/utility/integration/InkDialogue.js\"\n\nimport Dev from \"@frog/source/models/admin/Dev.js\"\n\n// import worlds from \"@frog/source/data/worlds.js\"\nconst worlds = {}\n// import chapters from \"@frog/source/data/encounters/chapters.js\" // imported for loading encounters.\nimport skills from \"@frog/source/data/skills.js\"\n// import * as deathzone from \"@frog/source/data/deathzone.js\"\nimport Step from \"@frog/source/models/Step.js\"\nimport Random from \"@frog/source/utility/Random.js\"\n\nconst MAX_INFLUENCE = 200 // TODO: this is duped from Unit.js\n\nfunction fill(percentage, digits = 3) {\n if(digits == 0) {\n return \"\"\n }\n let string = \"\"\n string += Math.round(percentage * Math.pow(10, digits - 1))\n while(string.length < digits) {\n string = \"0\" + string\n }\n return string\n}\n\nexport default class Stage {\n static load({stage, player, hasPreparePhase, isRandomized, startingEncounter, chapterSlug, gameSlug}) {\n stage = deepclone(stage)\n stage.chapterSlug = chapterSlug\n\n Dev.actionTrace = []\n\n // if(stage.reference != undefined) {\n // if(stages[stage.reference] == undefined) {\n // throw \"Could not find stage with reference \" + stage.reference\n // }\n //\n // // TODO: Even if the stage is referenced, it should merge\n // // any overriding child properties on top of the reference!\n // // But it should do it intelligently, like merging units instead\n // // of replacing units?\n //\n // stage = stages[stage.reference]\n // }\n\n let units = []\n if(stage.units != undefined) {\n units = stage.units\n } else {\n units = units.concat(Object.values(stage.world.units))\n }\n\n stage.units = {}\n Objdict.forEach(Objdict.convert(units), (unit) => {\n if(unit.day != undefined\n && unit.day > player.day) {\n return\n }\n stage.units[unit.key] = Unit.instantiate({\n unit, player, gameSlug, chapterSlug\n })\n })\n\n stage.player = Player.copy(player)\n\n // // Instantiate out-of-zone instances of every unit for repositioning during prepare phase\n // if(hasPreparePhase == true) {\n // Object.values(player.party.units).forEach((unit) => {\n // stage.units[unit.key] = Unit.instantiate({player, chapterParty, \"unit\": {\n // \"key\": unit.key,\n // \"position\": {\"x\": -10, \"y\": -10, \"z\": 0},\n // \"hasBeenRemoved\": true,\n // }})\n // })\n // }\n\n // // TODO: THIS SHOULDN'T JUST NUKE IT, IT SHOULD MERGE\n // // IT WITH ANY CHANGES...? THE PROTOSTAGE HAS DECLARED.\n // // ALSO, WE SHOULD MOVE THIS TO A WORLD STATIC LOAD CLASS!\n // if(stage.world.reference != undefined) {\n // if(worlds[stage.world.reference] == undefined) {\n // throw new Error(\"Could not find world with reference \" + stage.world.reference)\n // }\n // let mergedWorld = deepclone(worlds[stage.world.reference])\n //\n // const alteredWorld = {\"reference\": stage.world.reference}\n // mergedWorld = merge(mergedWorld, alteredWorld)\n //\n // // if(stage.world.terrain != undefined) {\n // // // const alteredTerrain = stage.world.terrain.map((terrain, key) => {\n // // // if(terrain.position == undefined) {\n // // // throw \"Could not instantiate terrain without position\"\n // // // }\n // // // terrain.position = terrain.position\n // // // terrain.shape = terrain.shape || \"block\"\n // // // terrain.z = terrain.position.z // AREN'T WE OBSOLETING THIS?\n // // // terrain.key = terrain.key || terrain.position.x + \"x\" + terrain.position.y\n // // // return terrain\n // // // })\n // // // console.log(alteredTerrain, mergedWorld)\n // // // mergedWorld.terrain = Objdict.merge(mergedWorld.terrain, alteredTerrain)\n // // }\n // // MERGE IN MORE PROPERTIES, BUT DEEPLY!!\n //\n // stage.world = mergedWorld\n // }\n\n stage.world.blocks = stage.world.blocks || []\n stage.world.edges = stage.world.edges || []\n stage.world.terrain = stage.world.terrain || {}\n stage.world.spots = stage.world.spots || {}\n // world setup!!\n // \"blocks\": {\"x\": 0, \"y\": 0, \"z\": 0, xy, xyz},\n // \"edges\": {\"0x0x0/0x+1\": {}},\n // terrain: {\"0x0\": {\"position\": {\"x\": 0, \"y\": 0, \"z\": 0}, \"size\": {\"x\": 1, \"y\": 1, \"z\": 1}}}\n // \"spots\": {\"name\": {\"position\": {\"x\": 0, \"y\": 0, \"z\": 1}}}\n // zones\n // x1, x2, y1, y2\n // center\n // area\n // color?? name?\n // conditions?? events???\n\n Dev.havePlayunitsBeenModified = false\n\n if(stage.world.zones != undefined) {\n stage.encounters = stage.world.zones\n Object.values(stage.encounters).forEach((encounter) => {\n encounter.conditions = stage.conditions\n encounter.events = stage.events\n })\n }\n\n if(startingEncounter != undefined) {\n stage.currentEncounterKey = startingEncounter\n } else {\n stage.currentEncounterKey = \"1\" // TODO: how to define the default starting encounter?\n }\n stage.turn = {\"number\": 0, \"affiliation\": \"good\", \"phase\": \"start\"}\n // stage.actionMark = 0\n // stage.zone = 0\n\n // stage.success = stage.success || {\"type\": \"defeat-all-units\"} // TODO: qualify this as the player's success?\n // stage.failure = stage.failure || {\"type\": \"defeat-all-units\"} // TODO: qualify this as the player's failure?\n\n // TODO: Even if a stage is passed, search it for properties\n // that need to be deserialized or defaulted like base stats on units!\n // Or maybe the stage is defined but the map is a reference.\n\n stage.tags = stage.tags || {}\n\n return stage\n }\n static findUnitAtPosition(stage, position, options) {\n return Stage.findUnitsByPosition(stage, position, options)[0]\n }\n static findUnitByPosition(stage, position, options = {}) {\n return Stage.findUnitsByPosition(stage, position, options)[0]\n }\n static findUnitsByPosition(stage, position, options = {}) {\n if(options.excludeUnitKey instanceof Array == false) {\n if(options.excludeUnitKey != undefined) {\n options.excludeUnitKey = [options.excludeUnitKey]\n } else {\n options.excludeUnitKey = []\n }\n }\n return Object.values(stage.units).filter((unit) => {\n if(unit.isDead) return false\n if(unit.hasBeenRemoved) return false\n if(options.excludeUnitKey.includes(unit.key)) return false\n if((unit.type == \"zone\" || unit.type == \"spot\")\n && Dev.inProtoMode == false) {\n if(!(options.includingSpawnZones && unit.type == \"spawn-zone\")\n || !options.includingZones) {\n return false\n }\n }\n return unit.position.x == position.x\n && unit.position.y == position.y\n && (unit.position.z == position.z || position.z == undefined)\n })\n }\n static findUnitInDirection(stage, position, direction, range) {\n let distance = 0\n let previousPosition = Geometry.add(position, {\"x\": 0, \"y\": 0})\n let nextPosition = Geometry.add(position, direction)\n\n while(Stage.hasCollision({stage, previousPosition, nextPosition, \"options\": {\"isIgnoringLedges\": true}}) == false) {\n distance += 1\n if(range != undefined && distance >= range.max) break\n vector = Geometry.multiply(direction, distance)\n previousPosition = Geometry.add(position, vector)\n nextPosition = Geometry.add(position, vector, direction)\n }\n\n // if(distance == 0) couldn't go far in any direction, but did find a direction\n if(World.hasCollision({\n \"world\": stage.world, previousPosition, nextPosition,\n \"options\": {\"isIgnoringLedges\": true},\n \"zone\": stage.encounters[stage.currentEncounterKey].zone,\n }) == true) {\n // FOUND A COLLISION\n } else if(Stage.findUnitByPosition(stage, nextPosition) != undefined) {\n return Stage.findUnitByPosition(stage, nextPosition)\n }\n }\n // returns a collision raycast.\n // the positions are a raycast. the end position is the last good position before the collision position.\n // startPosition -----> endPosition || collisionPosition\n // can return no collision if a maxdistance is provided.\n // ignores any collision on the tile it is leaving from\n static findCollisionInDirection({stage, position, direction, maxdistance = Infinity, options}) {\n const ray = {\n \"startPosition\": position,\n \"direction\": direction,\n\n \"endPosition\": Geometry.copy(position),\n \"vector\": {\"x\": 0, \"y\": 0},\n \"distance\": 0,\n\n \"positions\": [], // THIS ONE INCLUDES THE COLLISION!!\n \"castedPositions\": [], // THIS ONE DOES NOT INCLUDE THE COLLISION, AND INCLUDES THE CAST START LOCATION\n }\n\n while(ray.distance < maxdistance) {\n const previousPosition = ray.endPosition\n const nextPosition = Geometry.add(ray.endPosition, ray.direction)\n ray.positions.push(nextPosition)\n ray.castedPositions.push(previousPosition)\n\n const collision = Stage.findCollision({stage, previousPosition, nextPosition, options})\n if(collision != undefined) {\n ray.collisionPosition = nextPosition\n ray.collision = collision\n break\n }\n\n ray.distance += 1\n ray.vector = Geometry.add(ray.vector, direction)\n ray.endPosition = Geometry.add(ray.endPosition, direction)\n\n if(ray.distance >= maxdistance) {\n ray.castedPositions.push(nextPosition)\n break\n }\n }\n\n return ray\n }\n static findCollision({stage, previousPosition, nextPosition, options}) {\n if(World.hasCollision({\n \"world\": stage.world,\n \"previousPosition\": previousPosition,\n \"nextPosition\": nextPosition,\n \"options\": options,\n \"zone\": stage.encounters[stage.currentEncounterKey].zone,\n })) {\n return {\"type\": \"world\", \"position\": nextPosition}\n }\n const unit = Stage.findUnitByPosition(stage, nextPosition)\n if(unit != undefined) {\n return {\"type\": \"unit\", \"position\": nextPosition, \"unit\": unit}\n }\n }\n static hasCollision({stage, previousPosition, nextPosition, position, options}) {\n nextPosition = nextPosition || position\n previousPosition = previousPosition || position\n if(World.hasCollision({\n \"world\": stage.world,\n \"previousPosition\": previousPosition,\n \"nextPosition\": nextPosition,\n \"options\": options,\n \"zone\": stage.encounters[stage.currentEncounterKey].zone,\n })) {\n return true\n }\n if(Stage.findUnitByPosition(stage, nextPosition, options)) {\n return true\n }\n return false\n }\n\n static hasMetCondition(stage, condition, zone) {\n if(condition == undefined\n || stage == undefined) {\n return false\n }\n\n if(condition.encounterKey != undefined\n && condition.encounterKey != stage.currentEncounterKey) {\n return false\n }\n\n if(condition.condition instanceof Function) {\n if(condition.condition(stage) == false) {\n return false\n }\n }\n if(condition.type == \"condition\") {\n return true\n }\n if(condition.type == \"exit\") {\n const units = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == condition.affiliation\n && (zone == undefined || Zone.isInBounds(zone, unit.position))\n })\n const remainingUnits = units.filter((unit) => unit.isDead != true && unit.hasBeenRemoved != true)\n const removedUnits = units.filter((unit) => unit.hasBeenRemoved)\n if(removedUnits.length > 0\n && remainingUnits == 0) {\n return true\n }\n return false\n }\n if(condition.type == \"defeat-unit\"\n && condition.unitKey != undefined) {\n return stage.units[condition.unitKey] != undefined\n && stage.units[condition.unitKey].isDead == true\n }\n if(condition.type == \"defeat-all-other-units\"\n && condition.unitKey !== undefined) {\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.isDead != true\n && unit.hasBeenRemoved != true\n && (zone == undefined || Zone.isInBounds(zone, unit.position))\n })\n return remainingUnits.length == 1\n && remainingUnits[0].key == condition.unitKey\n }\n if(condition.type == \"defeat-all-units-of-type\"\n && condition.unitType !== undefined) {\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.type == condition.unitType\n && (unit.isDead != true && unit.hasBeenRemoved != true)\n && (zone == undefined || Zone.isInBounds(zone, unit.position))\n })\n return remainingUnits.length == 0\n }\n if(condition.type == \"defeat-all-units-of-affiliation\"\n && condition.affiliation !== undefined) {\n let currentZone = stage.encounters[condition.encounterKey] || zone\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == condition.affiliation\n && (unit.isDead != true && unit.hasBeenRemoved != true)\n && Zone.isInBounds(currentZone, unit.position)\n })\n return remainingUnits.length == 0\n }\n if(condition.type == \"defeat-all-unaffiliated-units\"\n && condition.affiliation !== undefined) {\n const undefeatedUnit = Objdict.find(stage.units, (unit) => {\n return unit.affiliation != condition.affiliation\n && unit.affiliation != \"none\"\n && unit.isDead != true\n && (zone == undefined || Zone.isInBounds(zone, unit.position))\n })\n return undefeatedUnit == undefined\n }\n if(condition.type == \"wait-x-turns\"\n && condition.turnNumber != undefined) {\n return stage.turn.number >= condition.turnNumber\n }\n }\n\n static copy(alphastage) {\n const omegastage = {\n \"units\": Objdict.map(alphastage.units, (unit) => Unit.copy(unit)),\n \"world\": alphastage.world,\n\n \"turn\": {\n \"number\": alphastage.turn && alphastage.turn.number || 0,\n \"affiliation\": alphastage.turn && alphastage.turn.affiliation,\n \"phase\": alphastage.turn && alphastage.turn.phase,\n },\n \"tags\": Objdict.map(alphastage.tags || {}, (tag) => {\n return {\n \"name\": tag.name,\n \"value\": tag.value,\n }\n }),\n // \"zone\": alphastage.zone,\n // \"actionMark\": alphastage.actionMark, // we still using this?\n // \"light\": alphastage.light,\n \"player\": Player.copy(alphastage.player),\n\n \"encounters\": alphastage.encounters,\n \"currentEncounterKey\": alphastage.currentEncounterKey,\n \"events\": alphastage.events,\n\n \"chapterSlug\": alphastage.chapterSlug,\n\n // TO DEPRECATE, ALL OF THE BELOW:\n \"conditions\": alphastage.conditions,\n \"success\": alphastage.success,\n \"failure\": alphastage.failure,\n \"phase\": alphastage.phase,\n \"prompt\": alphastage.prompt,\n \"dialogue\": alphastage.dialogue && {\n \"text\": alphastage.dialogue.text,\n \"data\": alphastage.dialogue.data,\n \"index\": alphastage.dialogue.index,\n \"type\": alphastage.dialogue.type,\n \"speakingCharacter\": alphastage.dialogue.speakingCharacter,\n \"tags\": Objdict.map(alphastage.dialogue.tags, (value, key) => value),\n \"characters\": Objdict.map(alphastage.dialogue.characters, (character) => {\n return {\n \"tags\": Objdict.map(character.tags, (value, key) => value)\n }\n }),\n },\n \"slug\": alphastage.slug,\n \"image\": alphastage.image,\n \"images\": alphastage.images,\n \"loopCount\": alphastage.loopCount,\n \"configuration\": alphastage.configuration,\n \"text\": alphastage.text,\n }\n // TODO: suport a less embedded test stubbing for skill id gen???\n if(alphastage.idgen !== undefined) {\n omegastage.idgen = alphastage.idgen\n }\n return omegastage\n }\n\n //////////////\n // SCORING //\n ////////////\n\n // static deltascore(alphastage, omegastage, affiliation) {\n // const TARGET_PRIORITY = {\n // \"good\": 100,\n // \"bad\": 100,\n // \"none\": 50,\n // }\n // const alphascore = Stage.score(alphastage, affiliation)\n // const omegascore = Stage.score(omegastage, affiliation)\n // let score = alphascore - omegascore\n // // score = Math.min(1, score / MAX_SCORE)\n //\n // return score\n // }\n\n // Does not (yet) set the action.score, just returns the score.\n // Lets you pass in a different stage from action.stage for predictive logic.\n static score({action, stage, alliedAffiliation}) {\n stage = stage || action.omegastage\n\n const scores = {}\n\n // INFLUENCES //\n let influenceScore = 0\n // let influenceCount = 0\n if(action.influenceMap != undefined) {\n const omegaperformer = stage.units[action.performerKey]\n if(omegaperformer != undefined) {\n influenceScore = Stage.getInfluenceScore(action.influenceMap, omegaperformer.position)\n }\n // influenceCount += 1\n\n // if(omegaperformer.effects != undefined) {\n // Objdict.forEach(omegaperformer.effects, (effect) => {\n // if(effect.type == \"trap\") {\n // effect.positions.forEach((position) => {\n // influenceScore += Stage.getInfluenceScore(action.influenceMap, position)\n // influenceCount += 1\n // })\n // }\n // })\n // }\n }\n // Note well! A smaller influence percent is a better influence!!\n scores.influence = influenceScore / MAX_INFLUENCE // (MAX_INFLUENCE * influenceCount)\n\n // ACTION TYPE //\n scores.type = action.type\n\n // PROGRESS TOWARDS GOALS //\n function calculateProgressScore(units, isIncluded) {\n const status = {\"maxhealth\": 0, \"health\": 0, \"maxcount\": 0, \"count\": 0, \"score\": 0}\n\n Objdict.forEach(stage.units, (unit) => {\n if(isIncluded(unit) != true) return\n\n status.maxhealth += unit.maxhealth\n status.health += unit.health\n status.maxhealth += unit.maxarmor || 0\n status.health += unit.armor || 0\n\n status.maxcount += 1\n status.count += unit.isDead || unit.deathTimer != undefined ? 0 : 1\n\n status.score += unit.score || 0\n })\n\n return {\n \"count\": status.count, // / status.maxcount,\n \"health\": status.health, // / status.maxhealth,\n \"score\": status.score,\n \"status\": status,\n }\n }\n\n scores[\"enemy\"] = calculateProgressScore(stage.units, (unit) => unit.affiliation != alliedAffiliation && unit.affiliation != \"none\" && unit.affiliation != \"inanimate\")\n scores[\"ally\"] = calculateProgressScore(stage.units, (unit) => unit.affiliation == alliedAffiliation && unit.affiliation != \"none\")\n scores[\"plant\"] = calculateProgressScore(stage.units, (unit) => unit.type == \"plant\")\n scores[\"none\"] = calculateProgressScore(stage.units, (unit) => unit.affiliation == \"none\")\n\n // All other factions are considered an enemy faction and will be targeted.\n // Do we want to eventually let factions by allies to each other? Like the\n // green faction won't target your units, but you don't control them? Then\n // we'll need a faction data set for who targets who.\n // The none faction is an exception. Is neither ally or enemy. Is this a\n // faction that is considered a lesser target? Are they still targetable\n // by a faction in the who targets who? The same might apply for other\n // factions later, like a red ai who targets your blue faction over the\n // npc green faction\n\n return scores\n }\n static getInfluenceScore(influenceMap, position) {\n return influenceMap[position.x + \"x\" + position.y]\n }\n static flattenActionMap(actionmap) {\n let actions = []\n Objdict.forEach(actionmap, (actionmaplist) => {\n actions = actions.concat(actionmaplist)\n })\n return actions\n // // By flattening a unit's action map, each possible position\n // // will have one and only one action, scored as the \"best.\"\n // // In most cases, this is just different directions of approaching\n // // that same action type from different previous positions.\n // return Objdict.map(actionmap, (actionmaplist) => {\n // return actionmaplist[0]\n // })\n }\n // Stage.isBetterScore(a, b)\n // returns true if (a) is a better score than (b)\n static isBetterScore(a, b, unit) {\n // if(a.ally.score < b.ally.score) return true\n // if(a.ally.score > b.ally.score) return false\n\n if(unit?.ai?.behaviors != undefined\n && unit.ai.behaviors.includes(\"healing first\")) {\n if(a.ally.health > b.ally.health) return true\n if(a.ally.health < b.ally.health) return false\n }\n\n if(a.enemy.count < b.enemy.count) return true\n if(a.enemy.count > b.enemy.count) return false\n if(a.enemy.health < b.enemy.health) return true\n if(a.enemy.health > b.enemy.health) return false\n\n\n if(unit.state != \"idle\") {\n if(unit?.ai?.behaviors != undefined\n && unit.ai.behaviors.includes(\"avoiding\")) {\n if(a.influence > b.influence) return false\n if(a.influence < b.influence) return true\n } else {\n if(a.influence > b.influence) return true\n if(a.influence < b.influence) return false\n }\n }\n\n if(a.ally.count > b.ally.count) return true\n if(a.ally.count < b.ally.count) return false\n if(a.ally.health > b.ally.health) return true\n if(a.ally.health < b.ally.health) return false\n\n const types = [\"invoke skill\", \"move\", \"wait\"]\n if(types.indexOf(a.type) > types.indexOf(b.type)) return true\n if(types.indexOf(a.type) < types.indexOf(b.type)) return false\n\n if(a.distance < b.distance) return -1\n if(a.distance > b.distance) return +1\n\n // TODO: filter out a and b for .type == -1?\n // or just leave that to a separate isInvalidAction?\n }\n static isInvalidAction(action) {\n // TODO: why do we even keep these invalid actions around?\n if(action.type == \"move through\") {\n return true\n }\n }\n\n ////////////////\n // NEXT TURN //\n //////////////\n\n static calculateNextTurn(stage, options = {}) {\n stage.nextTurn = Stage.getNonPlayerSteps(stage, options)\n }\n static getNonPlayerSteps(stage, options = {}) {\n const action = {\n \"steps\": [],\n \"omegastage\": stage,\n \"aiActions\": [],\n }\n\n // END PLAYER TURN\n Action.addStep(action, Stage.getEndOfTurnSkillSteps(action.omegastage))\n Action.addStep(action, Stage.getEndTurnSteps(\"good\", action.omegastage))\n Action.addStep(action, Stage.getEnergyRefresh(action.omegastage))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every:end\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every-even:end\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:\" + action.omegastage.turn.number + \":end\"))\n Action.addStep(action, Stage.getConditionalSteps(action))\n if(action.isTerminated) return action\n\n // START ENEMY TURN\n Action.addStep(action, Stage.getStartOfTurnSkillSteps(action.omegastage))\n Action.addStep(action, Stage.getStartTurnSteps(\"bad\", action.omegastage))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every:start\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every-odd:start\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:\" + action.omegastage.turn.number + \":start\"))\n Action.addStep(action, Stage.getConditionalSteps(action))\n if(action.isTerminated) return action\n\n const aiAffiliations = [\"bad\", \"neutral\", \"orange\", \"blue\", \"red\"]\n if(options.ignoreAI != true) {\n aiAffiliations.forEach((affiliation) => {\n const ai = Stage.getAiSteps(affiliation, action.omegastage)\n action.aiActions = action.aiActions.concat(ai.actions)\n Action.addStep(action, ai.steps)\n })\n }\n\n // END ENEMY TURN\n Action.addStep(action, Stage.getEndOfTurnSkillSteps(action.omegastage))\n Action.addStep(action, Stage.getEndTurnSteps(\"bad\", action.omegastage))\n Action.addStep(action, Stage.getEnergyRefresh(action.omegastage))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every:end\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every-odd:end\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:\" + action.omegastage.turn.number + \":end\"))\n Action.addStep(action, Stage.getConditionalSteps(action))\n if(action.isTerminated) return action\n\n // START PLAYER TURN\n Action.addStep(action, Stage.getStartOfTurnSkillSteps(action.omegastage))\n Action.addStep(action, Stage.getStartTurnSteps(\"good\", action.omegastage))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every:start\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:every-even:start\"))\n Action.addStep(action, Stage.getEventSteps(action.omegastage, \"turn:\" + action.omegastage.turn.number + \":start\"))\n Action.addStep(action, Stage.getConditionalSteps(action))\n if(action.isTerminated) return action\n\n return action\n }\n static getConditionalSteps(action) {\n if(action.omegastage.encounters[action.omegastage.currentEncounterKey] != undefined\n && action.omegastage.encounters[action.omegastage.currentEncounterKey].conditions != undefined) {\n const encounter = action.omegastage.encounters[action.omegastage.currentEncounterKey]\n encounter.conditions.forEach((condition) => {\n if(Stage.hasMetCondition(action.omegastage, condition, encounter.zone)) {\n if(condition.events != undefined) {\n Action.addStep(action, Stage.processEventSteps(action.omegastage, condition.events))\n }\n }\n })\n if(action.steps.find((step) => step.type == \"restart\")) {\n action.isTerminated = true\n }\n if(encounter != action.omegastage.encounters[action.omegastage.currentEncounterKey]) {\n action.isTerminated = true\n }\n if(action.omegastage.phase == \"success\") {\n action.isTerminated = true\n }\n }\n }\n static getEnergyRefresh(stage) {\n return [\n Step.instantiate({\n \"type\": \"refresh\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"units\": Objdict.map(stage.units, (unit) => {\n return {\n \"energy\": {\"move\": true, \"invoke skill\": true, \"1\": true, \"2\": true},\n }\n })\n }\n ]\n })\n ]\n }\n static getStartTurnSteps(affiliation, stage) {\n return [\n Step.instantiate({\n \"type\": \"turn start\",\n \"affiliation\": affiliation,\n \"message\": affiliation == \"bad\" ? \"ENEMY TURN\" : \"YOUR TURN\",\n \"alphastage\": stage,\n \"deltastages\": []\n }),\n Step.instantiate({\n \"type\": \"refresh\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"turn\": {\n \"affiliation\": affiliation,\n \"number\": stage.turn.number + 1,\n \"phase\": \"start\",\n },\n }\n ]\n })\n ]\n }\n static getEndTurnSteps(affiliation, stage) {\n return [\n Step.instantiate({\n \"type\": \"refresh\",\n \"alphastage\": stage,\n \"deltastages\": [\n {\n \"turn\": {\n \"affiliation\": stage.turn.affiliation,\n \"number\": stage.turn.number,\n \"phase\": \"end\",\n },\n }\n ]\n })\n ]\n }\n static getEndOfTurnTileSteps(stage) {\n const steps = []\n let alphastage = stage\n // if(stage.success != undefined\n // && stage.success.condition == \"escape\") {\n // stage.success.positions.forEach((position) => {\n // Objdict.forEach(alphastage.units, (unit) => {\n // if(unit.isDead != true\n // && Geometry.equals(unit.position, position)\n // && unit.affiliation == stage.success.affiliation) {\n // const step = Step.instantiate({\n // \"type\": \"escape\",\n // \"alphastage\": alphastage,\n // \"deltastages\": [{\n // \"annotation\": {\"type\": \"escape\", \"startPosition\": unit.position},\n // \"units\": {\n // [unit.key]: {\n // \"isDead\": true,\n // \"hasBeenRemoved\": true,\n // }\n // }\n // }]\n // })\n //\n // alphastage = step.omegastage\n // steps.push(step)\n // }\n // })\n // })\n // }\n return steps\n }\n static getStartOfTurnSkillSteps(stage, options = {}) {\n let steps = []\n let alphastage = stage\n\n // TODO: what is the order of unit and skills at the end-of-turn?\n Objdict.forEach(stage.units, (unit) => {\n const alphaunit = alphastage.units[unit.key]\n if(alphaunit.isDead == true) return\n if(alphaunit.hasBeenRemoved == true) return\n Objdict.forEach(alphaunit.skills, (skillKey) => {\n const skill = skills.get(skillKey)\n if(skill != undefined) {\n if(skill.type == \"at-start-of-turn\"\n || (skill.type == \"at-start-of-my-turn\" && alphastage.turn.affiliation == alphaunit.affiliation)\n || (skill.type == \"at-start-of-player-turn\" && alphastage.turn.affiliation == \"good\")) {\n if(skill.canTarget instanceof Function == false\n || skill.canTarget({\"performerKey\": alphaunit.key, \"position\": alphaunit.position, \"stage\": alphastage}) == true) {\n if(skill.calculateStep instanceof Function) {\n const step = skill.calculateStep({\n \"performerKey\": alphaunit.key,\n \"stage\": alphastage,\n })\n\n alphastage = step.omegastage\n steps.push(step)\n }\n }\n }\n }\n })\n })\n\n steps = steps.concat(Reactions.getSteps(alphastage))\n\n return steps\n }\n static getEndOfTurnSkillSteps(stage, options = {}) {\n let steps = []\n let alphastage = stage\n\n // TODO: what is the order of unit and skills at the end-of-turn?\n Objdict.forEach(stage.units, (unit) => {\n const alphaunit = alphastage.units[unit.key]\n if(alphaunit.isDead == true) return\n if(alphaunit.hasBeenRemoved == true) return\n Objdict.forEach(unit.effects, (effect, effectKey) => {\n const alphaeffect = alphaunit.effects[effectKey]\n if(alphaeffect.timer != undefined) {\n if(alphaeffect.timer - 1 <= 0) {\n // if(alphaeffect.type == \"fuse\"\n // && alphaeffect.skillKey != undefined\n // && skills.get(alphaeffect.skillKey) != undefined) {\n // const step = skills.get(alphaeffect.skillKey).calculateStep({\n // \"performerKey\": alphaunit.key,\n // \"effectKey\": effectKey,\n // \"position\": alphaunit.position,\n // \"stage\": alphastage,\n // })\n // step.skillKey = alphaeffect.skillKey\n // step.type = \"invoke skill\"\n //\n // Objdict.forEach(step.omegastage.units, (unit) => {\n // if(unit.health <= 0\n // && unit.isDead != true) {\n // Step.add(step, {\"units\": {[unit.key]: {\"isDead\": true}}})\n // }\n // })\n //\n // alphastage = step.omegastage\n // steps.push(step)\n // } else {\n const step = Step.instantiate({\n \"type\": \"remove effect\",\n \"alphastage\": alphastage,\n \"deltastages\": [{\n \"units\": {\n [alphaunit.key]: {\n \"effects\": {\n [effectKey]: undefined\n }\n }\n }\n }]\n })\n\n alphastage = step.omegastage\n steps.push(step)\n } else {\n const step = Step.instantiate({\n \"type\": \"decrement effect timer\",\n \"alphastage\": alphastage,\n \"deltastages\": [{\n \"units\": {\n [alphaunit.key]: {\n \"effects\": {\n [effectKey]: { // TODO: why isn't alphaeffect.key not defined :<\n \"timer\": alphaeffect.timer - 1,\n }\n }\n }\n }\n }]\n })\n\n alphastage = step.omegastage\n steps.push(step)\n }\n }\n\n // // this doesn't work, for whatever reason.\n // // just going to do something different.\n if(alphaeffect.type == \"at-end-of-turn\"\n && alphaeffect.skillKey != undefined) {\n const skill = skills.get(alphaeffect.skillKey)\n if(skill != undefined) {\n if(skill.canTarget instanceof Function == false\n || skill.canTarget({\"performerKey\": alphaunit.key, \"position\": alphaunit.position, \"stage\": alphastage}) == true) {\n if(skill.calculateDeltastages instanceof Function) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": alphastage,\n \"skillKey\": alphaeffect.skillKey, // wait do i still need to do this? i don't think we do.\n \"deltastages\": skill.calculateDeltastages({\n \"performerKey\": alphaunit.key, // wait, you're performing it on yourself? because it's your effect?\n \"position\": alphaunit.position,\n \"stage\": alphastage,\n })\n })\n } else if(skill.calculateStep instanceof Function) {\n step = skill.calculateStep({\n \"performerKey\": alphaunit.key,\n \"position\": alphaunit.position,\n \"stage\": alphastage,\n })\n }\n\n alphastage = step.omegastage\n steps.push(step)\n }\n }\n }\n })\n Objdict.forEach(alphaunit.skills, (skillKey) => {\n const skill = skills.get(skillKey)\n if(skill != undefined) {\n // && (alphastage.turn.number + (options.turnNumber || 0)) % 2 == 1) {\n // && (alphaunit.affiliation == \"good\" && alphastage.turn.number % 2 == 0\n // || alphaunit.affiliation == \"bad\" && alphastage.turn.number % 2 != 0)) {\n if(skill.type == \"at-end-of-turn\"\n || (skill.type == \"at-end-of-my-turn\" && alphastage.turn.affiliation == alphaunit.affiliation)\n || (skill.type == \"at-end-of-player-turn\" && alphastage.turn.affiliation == \"good\")) {\n if(skill.canTarget instanceof Function == false\n || skill.canTarget({\"performerKey\": alphaunit.key, \"position\": alphaunit.position, \"stage\": alphastage}) == true) {\n let step = undefined\n if(skill.calculateDeltastages instanceof Function) {\n step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": alphastage,\n \"skillKey\": skillKey, // I hate this\n \"deltastages\": skill.calculateDeltastages({\n \"performerKey\": alphaunit.key,\n \"position\": alphaunit.position,\n \"stage\": alphastage,\n })\n })\n } else if(skill.calculateStep instanceof Function) {\n step = skill.calculateStep({\n \"performerKey\": alphaunit.key,\n \"stage\": alphastage,\n })\n }\n\n // TODO: this is making a step & animation\n // for every unitzone that has this skill.\n // can we return undefined if there is\n // no step to be performed?\n\n alphastage = step.omegastage\n steps.push(step)\n }\n }\n }\n })\n })\n\n // deaths and stuff:\n steps = steps.concat(Reactions.getSteps(alphastage))\n if(steps.length > 0) {\n alphastage = steps[steps.length - 1].omegastage\n }\n\n return steps\n }\n\n static getAiSteps(affiliation, stage) {\n const turn = {\n \"steps\": [],\n \"actions\": {} // by unit key\n }\n\n const units = []\n Objdict.forEach(stage.units, (unit) => {\n if(unit.affiliation == affiliation\n && unit.isDead != true\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey].zone, unit.position)) {\n units.push(unit)\n }\n })\n\n let alphastage = stage\n units.forEach((unit) => {\n const actionmap = Unit.calculateActions(unit.key, alphastage) // we really recalculating this huh\n let actions = Stage.flattenActionMap(actionmap)\n\n if(actions.length == 0) return\n\n actions.sort((a, b) => {\n if(a.distance < b.distance) return -1\n if(a.distance > b.distance) return +1\n return 0\n })\n\n let bestAction = undefined\n actions.forEach((action) => {\n if(Stage.isInvalidAction(action)) {\n return action\n }\n\n // TODO: This should be far less verbose... Pull in the Step.js class?? as Sequence.js?\n // action.predictiveSteps = action.steps.concat(Stage.getEndOfTurnSkillSteps(action.omegastage))\n // action.predictiveOmegastage = action.predictiveSteps[action.predictiveSteps.length-1].omegastage\n // // action.predictiveSteps = action.predictiveSteps.concat(Stage.getEndOfTurnSkillSteps(action.predictiveOmegastage, {\"turnNumber\": +1}))\n // // action.predictiveOmegastage = action.predictiveSteps[action.predictiveSteps.length-1].omegastage\n\n action.score = Stage.score({\n \"stage\": action.omegastage,\n // \"stage\": action.predictiveOmegastage, // ADDED FOR BOMBER\n \"action\": action,\n \"alliedAffiliation\": affiliation,\n \"unit\": unit,\n })\n\n if(action.type == \"move through\") {\n return\n }\n\n if(bestAction == undefined\n || Stage.isBetterScore(action.score, bestAction.score, unit)) {\n bestAction = action\n }\n })\n if(bestAction != undefined) {\n turn.actions[unit.key] = {\"action\": bestAction, \"actionmap\": actionmap}\n turn.steps = turn.steps.concat(bestAction.steps)\n alphastage = turn.steps[turn.steps.length - 1].omegastage\n }\n })\n\n return turn\n\n // TODO: Address the hangover of returning actions alongside steps.\n // We need them to render the enemy ui. We really just use action type\n // and action position. We are currently hurting because we're not\n // returning the entire action map (to show enemy range). We need to\n // eventually include order of actions as well, to match the order\n // of steps, so we can maybe animate the enemy intention ui with some\n // slight order-of-operations delay in how it renders out.\n\n // RECENT //\n\n // const affiliatedUnits = {}\n // let steps = []\n // let alphastage = stage\n // Objdict.forEach(stage.units, (unit) => {\n // const alphaunit = alphastage.units[unit.key]\n // if(alphaunit.affiliation == \"bad\"\n // && alphaunit.isDead != true) {\n // const actionmap = Unit.calculateActions(unit.key, alphastage)\n // const action = Unit.getBestAction(actionmap)\n // steps = steps.concat(action.steps)\n // affiliatedUnits[unit.key] = {action, actionmap}\n //\n // if(action != undefined) {\n // alphastage = action.omegastage\n // }\n // }\n // })\n // // TODO: ONCe WE HAVE THE BEST ACTION, WE CAN PROBABLY DUMP ALLLLL THE OTHER POSSIBILITIES AS USELESS.\n // return {\"affiliatedUnits\": affiliatedUnits, \"affiliatedSteps\": steps}\n\n // OLDER //\n\n // this.influence[affiliation] = this.getInfluence(affiliation, shadowunits)\n // TODO: uuuuh if there is any meaningful state change in stage vs\n // alphastagewithheavycomputation, then we need to recompute here.\n\n // // this is so wasteful, given that\n // // alphastage at the start of this getnonplyaeractions process should have already\n // // computed all of this. or most of this (it doesn't have the start of turn state\n // // changes like effects wearing off)\n // // UUH IS THIS STILL TRUE I REFACTORED IT SO IT ONLY CALCULATES ONCE\n //\n // Objdict.forEach(stage.units, (unit) => {\n // if(unit.affiliation == affiliation && unit.isDead != true) {\n // steps = steps.concat(unit.bestAction.steps)\n // // THIS DOES NOT RESPECT THE ORDER OF THE\n // // BEST ACTIONS, SO IF YOU EVER CHANGE IT\n // // SO UNIT ORDER IS DYNAMIC, THIS MUST BE\n // // RESTRUCTURED ACCORDINGLY\n // }\n // })\n }\n static getEventSteps(stage, eventKey) {\n let events = []\n\n if(stage == undefined) {\n // || stage.encounters == undefined\n // || stage.encounters[stage.currentEncounterKey] == undefined) {\n return events\n }\n\n // If there is an ink knot by this name, we'll run it!!\n // console.log(stage.slug + \"_encounter\" + (stage.currentEncounterKey) + \"_\" + eventKey.replaceAll(\":\", \"\"))\n events = events.concat(Stage.processEventSteps(stage, [\n InkDialogue(\"chapter\" + stage.chapterSlug + \"_encounter\" + (stage.currentEncounterKey) + \"_\" + eventKey.replaceAll(\":\", \"\"), stage)\n ]))\n\n const encounter = stage.encounters[stage.currentEncounterKey]\n if(encounter != undefined) {\n if(encounter.conditions != undefined) {\n const condition = encounter.conditions.find((condition) => condition.type == eventKey)\n if(condition != undefined) {\n events = events.concat(Stage.processEventSteps(stage, condition.events))\n }\n }\n\n if(encounter.events != undefined\n && encounter.events[eventKey] != undefined) {\n events = events.concat(Stage.processEventSteps(stage, encounter.events[eventKey]))\n }\n }\n\n if(stage.events != undefined) {\n events = events.concat(Stage.processEventSteps(stage, stage.events))\n }\n\n return events\n }\n // accepts: an array of either events or subarrays of events.\n // outputs: an new array of all events\n static flattenEventSteps(events) {\n let output = []\n events.forEach((event) => {\n if(event instanceof Array) {\n output = output.concat(Stage.flattenEventSteps(event))\n } else {\n output.push(event)\n }\n })\n return output\n }\n // inputs in an array of steps.\n // you can embed those steps in subarrays.\n // you can return those steps from jit functions (passed the stage).\n // you can also calculate the entire top-level array using a jit function.\n static processEventSteps(alphastage, inputs) {\n let steps = []\n\n\n if(inputs == undefined) return []\n if(inputs instanceof Function) {\n inputs = inputs(alphastage)\n }\n if(inputs instanceof Array != true) {\n inputs = [inputs]\n }\n inputs.forEach((input) => {\n if(input instanceof Function) {\n input = input(alphastage)\n }\n if(input == undefined) {\n return undefined\n }\n if(input instanceof Array == false) {\n input = new Array(input)\n }\n // TODO: Make this recursive for functions and arrays all the way down!!\n input = Stage.flattenEventSteps(input)\n\n input.forEach((step) => {\n if(step == undefined) return\n\n step = Step.copy(step)\n\n step.alphastage = alphastage\n step = Step.instantiate(step)\n alphastage = step.omegastage\n\n steps.push(step)\n })\n })\n\n return steps\n }\n\n ////////////////\n // YOUR TURN //\n //////////////\n\n static calculateActions(stage, {force} = {}) {\n const mark = Speedtest.mark(\"Actions\", \"Stage.calculateActions\")\n\n if(stage.hasPerformedActionCalculation == true && force != true) {\n return\n }\n\n Objdict.forEach(stage.units, (unit) => {\n if(stage.encounters[stage.currentEncounterKey] == undefined) return\n if(Zone.isInBounds(stage.encounters[stage.currentEncounterKey].zone, unit.position)) {\n if(unit.affiliation == \"good\") {\n unit.actionmap = Unit.calculateActions(unit.key, stage)\n }\n // DEUBG: We're not calculating it for all units, depending on affiliation.\n // if(unit.affiliation == \"good\") {\n // unit.actionmap = Unit.calculateActions(unit.key, stage)\n // DEBUG // We're now calculating this just-in-time for when you hover over this actionmap option.\n // Object.values(unit.actionmap).forEach((actionlist) => actionlist.forEach((action) => {\n // Stage.calculateNextTurn(action.omegastage)\n // }))\n // }\n }\n })\n // // We're removing this and only calculating these just before you end your turn.\n // Stage.calculateNextTurn(stage) // DEBUG\n\n stage.hasPerformedActionCalculation = true\n Stage.calculateLight(stage)\n\n mark()\n\n return stage\n }\n static calculateLight(stage) {\n stage.light = {}\n Objdict.forEach(stage.units, (unit) => {\n if(unit.affiliation != \"bad\") return\n if(unit.type == \"zone\" || unit.type == \"spot\") return\n\n let actionmap = unit.actionmap\n // if(stage.nextTurn != undefined\n // && stage.nextTurn.aiActions != undefined\n // && stage.nextTurn.aiActions[unit.key] != undefined\n // && stage.nextTurn.aiActions[unit.key].actionmap != undefined) {\n // actionmap = stage.nextTurn.aiActions[unit.key].actionmap\n // }\n // if(actionmap == undefined) return\n\n Objdict.forEach(actionmap, (actionlist, positionKey) => {\n // const action = Selection.findActionInActionlistToActuallyUse({unit, actionlist, \"options\": {\"ignoreActiveSkill\": true}})\n // if(action == undefined) return\n stage.light[positionKey] = true // action.position\n })\n })\n }\n\n static getScore(stage) {\n let score = undefined\n Object.values(stage.units).forEach((unit) => {\n if(unit.affiliation == \"good\"\n && unit.score != undefined) {\n score = score || 0\n if(unit.isDead != true\n && unit.hasBeenRemoved != true) {\n score += unit.score\n }\n }\n })\n return score\n }\n\n static findEncounterAtPosition(stage, position) {\n return Objdict.find(stage.encounters, (encounter, encounterSlug) => {\n return Zone.isInBounds(encounter.zone, position)\n })\n }\n\n static addUnit(stage, unit) {\n stage.units[unit.key] = unit\n }\n static addItemToInventory(stage, item) {\n item = Stage.readyItemForInventory(stage.player.inventory, item)\n stage.player.inventory.items[item.key] = item\n }\n static readyItemForInventory(inventory, newItem) {\n if(newItem.class == undefined) throw new Error(\"Item must have a class.\")\n newItem.amount = newItem.amount || 1\n\n const items = Object.values(inventory.items).sort((a, b) => a.slot - b.slot)\n const oldItem = items.find((oldItem) => oldItem.class == newItem.class)\n if(oldItem != undefined) {\n newItem.key = oldItem.key\n newItem.slot = oldItem.slot\n newItem.amount += oldItem.amount || 0\n }\n\n if(oldItem == undefined) {\n newItem.key = newItem.key || nanoid()\n newItem.slot = 10\n for(let slot = 0; slot < 10; slot += 1) {\n let slotItem = items.find((item) => item.slot == slot)\n if(slotItem == undefined) {\n newItem.slot = slot\n break\n }\n }\n }\n\n return newItem\n }\n}\n\n// const directions = [{\"x\": +1}, {\"x\": -1}, {\"y\": +1}, {\"y\": -1}]\n// // TODO: merge this with utilities/Directions.js? Pull them from Geometry.north/etc?\n//\n\nclass Player {\n static copy(alphaplayer) {\n if(alphaplayer == undefined) return undefined\n return {\n \"score\": alphaplayer.score,\n \"affiliation\": alphaplayer.affiliation,\n \"perks\": alphaplayer.perks && Object.values(alphaplayer.perks),\n \"inventory\": alphaplayer.inventory && {\n \"gold\": alphaplayer.inventory.gold,\n \"items\": Objdict.map(alphaplayer.inventory.items, (item) => {\n const copiedItem = {}\n for(let key in item) {\n if(item[key] != undefined) {\n copiedItem[key] = item[key]\n }\n }\n return copiedItem\n })\n },\n \"party\": {\n \"units\": Objdict.map(alphaplayer.party.units, (unit) => unit)\n }\n }\n }\n}\n", "const Elements = {\n \"sword\": {\n \"key\": \"sword\",\n \"name\": \"Sword\",\n \"strengths\": [\"gun\", \"axe\"],\n \"weaknesses\": [\"spear\", \"bow\"],\n \"color\": \"#d54b33\",\n },\n \"dagger\": {\n \"key\": \"dagger\",\n \"name\": \"Dagger\",\n \"strengths\": [\"axe\", \"gun\"],\n \"weaknesses\": [\"spear\", \"bow\"],\n \"color\": \"#d54b33\",\n },\n \"axe\": {\n \"key\": \"axe\",\n \"name\": \"Axe\",\n \"strengths\": [\"spear\", \"bow\"],\n \"weaknesses\": [\"sword\", \"dagger\"],\n \"color\": \"#62C370\",\n },\n \"gun\": {\n \"key\": \"gun\",\n \"name\": \"Gun\",\n \"strengths\": [\"spear\", \"bow\"],\n \"weaknesses\": [\"sword\", \"dagger\"],\n \"color\": \"#62C370\",\n },\n \"spear\": {\n \"key\": \"spear\",\n \"name\": \"Spear\",\n \"strengths\": [\"sword\", \"dagger\"],\n \"weaknesses\": [\"axe\", \"gun\"],\n \"color\": \"#639bff\",\n },\n \"bow\": {\n \"key\": \"bow\",\n \"name\": \"Bow\",\n \"strengths\": [\"sword\", \"dagger\"],\n \"weaknesses\": [\"axe\", \"gun\"],\n \"color\": \"#639bff\",\n },\n\n\n\n \"fire\": {\n \"key\": \"fire\",\n \"name\": \"Fire\",\n \"strengths\": [\"earth\"],\n \"weaknesses\": [\"water\"],\n \"color\": \"#d54b33\",\n // \"color\": \"#FFA0AC\",\n },\n \"earth\": {\n \"key\": \"earth\",\n \"name\": \"Earth\",\n \"strengths\": [\"water\"],\n \"weaknesses\": [\"fire\"],\n \"color\": \"#62C370\",\n // \"color\": \"#6D466B\",\n },\n \"water\": {\n \"key\": \"water\",\n \"name\": \"Water\",\n \"strengths\": [\"fire\"],\n \"weaknesses\": [\"earth\"],\n \"color\": \"#639bff\",\n // \"color\": \"#F2CC8F\",\n },\n \"light\": {\n \"key\": \"light\",\n \"name\": \"Light\",\n \"strengths\": [\"dark\"],\n \"weaknesses\": [\"dark\"],\n \"color\": \"#F2CC8F\",\n },\n \"dark\": {\n \"key\": \"dark\",\n \"name\": \"Dark\",\n \"strengths\": [\"light\"],\n \"weaknesses\": [\"light\"],\n \"color\": \"#6D466B\",\n },\n \"undefined\": {\n \"key\": undefined,\n \"name\": \"Null\",\n \"strengths\": [],\n \"weaknesses\": [],\n \"color\": \"gray\"\n }\n}\n\nElements.getEffectiveness = function(defensiveElements, offensiveElements) {\n defensiveElements = defensiveElements instanceof Array ? defensiveElements : [defensiveElements]\n offensiveElements = offensiveElements instanceof Array ? offensiveElements : [offensiveElements]\n\n if(Elements[offensiveElements[0]] == undefined) {\n return 0\n }\n if(Elements[offensiveElements[0]].strengths.includes(defensiveElements[0])) {\n return +1\n }\n if(Elements[offensiveElements[0]].weaknesses.includes(defensiveElements[0])) {\n return -1\n }\n return 0\n}\n\nElements.getDamage = function(defensiveElements, offensiveElements, potency) {\n const effectiveness = Elements.getEffectiveness(defensiveElements, offensiveElements)\n\n if(potency == \"mad\") {\n if(effectiveness < 0) return +2\n if(effectiveness > 0) return -2\n return 0\n }\n if(potency == \"mild\") {\n if(effectiveness < 0) return +1\n if(effectiveness > 0) return -1\n return 0\n }\n\n // potency == \"standard\"\n if(effectiveness < 0) return 0 // +0.5\n if(effectiveness > 0) return -1\n return 0\n}\n\nexport default Elements\n", "import Objdict from \"objdict\"\nimport {nanoid} from \"nanoid\"\n\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Step from \"@frog/source/models/Step.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport Elements from \"@frog/source/data/elements.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport * as Motions from \"@frog/source/juice/utility/Motions.js\"\nimport InkDialogue from \"@frog/source/utility/integration/InkDialogue.js\"\n\nimport { Dialogue } from \"@frog/source/data/plotscripts.js\"\nimport App from \"@frog/source/models/App.js\"\nimport Timings from \"@frog/source/juice/utility/Timings.js\"\n\nfunction canTargetAlly({performerKey, stage, position}) {\n const performer = stage.units[performerKey]\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return false\n if(target.affiliation != performer.affiliation) return false\n return true\n}\n\nconst skills = {}\n\nskills[\"inflict-damage\"] = {\n \"key\": \"inflict-damage\",\n \"name\": \"Attack\",\n \"role\": \"damage\",\n\n \"type\": \"invoke\",\n \"range\": null, // will default to the player's attackrange.\n\n \"canBeCounterattacked\": true,\n \"canCounterattack\": ({performerKey, stage, position}) => {\n const performer = stage.units[performerKey]\n if(performer?.ai?.isNotCounterattacking == true) return false\n return true\n },\n\n \"isRenderedEvenIfCanNotTarget\": true,\n\n \"power\": 0, // will default to the player's power.\n \"isIgnoringArmor\": false,\n \"isIgnoringElements\": false,\n\n \"isHidden\": true,\n\n \"canTarget\": function({performerKey, stage, position}) {\n const performer = stage.units[performerKey]\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return false\n if(target.affiliation == \"none\") return false\n if(performer.canBetray != true && target.affiliation == performer.affiliation) return false\n return true\n },\n\n \"calculateStep\": function({stage, position, performerKey, effectKey}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = step.omegastage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n const distance = Geometry.distance(position, performer.position)\n\n Step.add(step, {\"mark\": 0, \"flourish\": {\"name\": \"SwingBackMovement\", \"unit\": {\"key\": performer.key}, \"direction\": direction, \"position\": performer.position}})\n Step.add(step, {\"mark\": 180, \"audio\": {\"triggerKey\": \"Unit:Attack:Melee\"}})\n\n const target = Stage.findUnitByPosition(step.omegastage, position)\n\n if(target == undefined) {\n return step\n }\n\n step.followupSteps = []\n\n // PIRATES-SPECIFIC\n if(stage.currentEncounterKey == \"2.1\"\n && target.key == \"mercenary\"\n && target.affiliation == \"bad\"\n && stage.tags[\"hasRecruitedMercenary\"] == undefined) {\n Step.add(step, {\"mark\": 0, \"unit\": {\"key\": target.key, \"affiliation\": \"good\"}})\n step.followupSteps.push(Dialogue({\n \"text\": \"...Odds don't look good, I reckon.\",\n \"data\": {\n \"speakerKey\": target.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"direction\": \"left\", \"expression\": \"neutral\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n let lines = {\n \"bard\": \"I don't reckon so.\",\n }\n step.followupSteps.push(Dialogue({\n \"text\": lines[performer.key] || \"What's that?\",\n \"data\": {\n \"speakerKey\": performer.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"direction\": \"left\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n if(stage.units[\"viking\"].isDead != true) {\n step.followupSteps.push(Dialogue({\n \"text\": \"Odds are Captain Flint gets reckoned.\",\n \"data\": {\n \"speakerKey\": target.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"direction\": \"left\", \"expression\": \"flavor\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n lines = {\n \"bard\": \"And what then?\",\n \"swashbuckler\": \"I will reckon him myself.\",\n \"knight\": \"By all the power I hold, yes.\"\n }\n step.followupSteps.push(Dialogue({\n \"text\": lines[performer.key] || \"Yes.\",\n \"data\": {\n \"speakerKey\": performer.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"direction\": \"left\", \"expression\": \"flavor\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n }\n step.followupSteps.push(Dialogue({\n \"text\": \"Let me fight alongside you. I ain't cheap, but I'll cut you a good rate.\",\n \"data\": {\n \"speakerKey\": target.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"expression\": \"happy\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n lines = {\n \"bard\": \"If you please. :]\",\n \"swashbuckler\": \"Deal. My word is gold.\",\n \"knight\": \"So be it. Do not fall behind.\"\n }\n step.followupSteps.push(Dialogue({\n \"text\": lines[performer.key] || \"Yes.\",\n \"data\": {\n \"speakerKey\": performer.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key, \"expression\": \"happy\"},\n {\"key\": performer.key, \"position\": 4, \"direction\": \"left\"},\n ]\n }\n }\n }))\n step.followupSteps.push(Dialogue({\n \"type\": \"CharacterSplashBox\",\n \"data\": {\"unitKey\": \"mercenary\"}\n }))\n step.followupSteps.push(Step.instantiate({\n \"type\": \"FinishDialogue\",\n \"alphastage\": step.omegastage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n }))\n function Dialogue(dialogue) {\n return Step.instantiate({\n \"type\": \"StartDialogue\",\n \"alphastage\": step.omegastage,\n \"isImportant\": true,\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": dialogue\n }\n ]\n })\n }\n return step\n }\n\n /////////////\n // DAMAGE //\n ///////////\n\n const range = (this.range && this.range.max) || (performer.attackrange && performer.attackrange.max) || 1\n let hitmark = 200 + ((distance - 1) * 50)\n\n let innatePower = performer.power || 0\n if(performer.power == 0) innatePower = 0\n\n if(performer.properties != undefined\n && performer.properties.includes(\"counter\")) {\n if(performer.affiliation == \"good\" && stage.turn.number % 2 != 0\n || performer.affiliation != \"good\" && stage.turn.number % 2 == 0) {\n innatePower += 20\n }\n }\n\n let damage = innatePower\n\n if(damage == 0) {\n return\n }\n\n if(performer.attacktype == \"steel\") {\n damage -= target.defense || 0\n }\n if(performer.attacktype == \"magic\") {\n damage -= target.resistance || 0\n }\n\n const attackElement = performer.element || performer.attackelement\n let isSuperEffective = false\n let isIneffective = false\n if(attackElement != undefined) {\n if(Elements[target.element]?.weaknesses != undefined\n && Elements[target.element].weaknesses.includes(attackElement)) {\n // damage += Math.ceil(damage * (1 / 2))\n isSuperEffective = true\n }\n if(Elements[target.element]?.strengths != undefined\n && Elements[target.element].strengths.includes(attackElement)) {\n damage -= Math.ceil(damage * (1 / 4))\n isIneffective = true\n }\n }\n\n // PERFORMING ANIMATION HERE //\n\n if(damage == 0) {\n Step.add(step, {\n \"mark\": hitmark,\n \"audio\": {\"triggerKey\": \"Unit:Attack:NoDamage\"}\n })\n }\n if(damage > 0) {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": target.key,\n \"health\": Math.min(target.maxhealth, Math.max(0, target.health - damage)),\n },\n })\n\n if(isSuperEffective != true\n && performer.properties != undefined\n && performer.properties.includes(\"forceful\")) {\n const direction = Geometry.direction(position, performer.position)\n const vector = Geometry.vector(position, performer.position)\n\n const previousPosition = position\n const nextPosition = Geometry.add(position, vector)\n\n const collision = Stage.findCollision({\n stage, previousPosition, nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": previousPosition,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": nextPosition,\n }\n })\n } else if(collision != undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n })\n\n const damage = 1\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": target.key,\n \"health\": target.health - damage\n },\n })\n\n if(collision.unit != undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": collision.unit.key,\n \"health\": collision.unit.health - damage\n },\n })\n }\n }\n } else {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n }\n })\n }\n\n Step.add(step, {\n \"mark\": hitmark,\n \"audio\": {\"triggerKey\": target.health < 0 ? \"Unit:Attack:FinalHit\" : \"Unit:Attack:Hit\"}\n })\n\n if(performer.properties != undefined\n && performer.properties.includes(\"lifesteal\")) {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": performer.key,\n \"health\": Math.min(performer.maxhealth, Math.max(0, performer.health + 1)),\n },\n })\n }\n }\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"TextFloat\",\n \"type\": \"damage\",\n \"unitKey\": target.key,\n \"position\": target.position,\n \"text\": (damage > 0 ? \"-\" : \"\") + damage,\n }\n })\n\n if(isSuperEffective) {\n damage -= Math.ceil(damage * (1 / 2))\n let mark = hitmark + 133\n\n Step.add(step, {\n \"mark\": mark + 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"direction\": direction,\n \"position\": performer.position\n }\n })\n Step.add(step, {\n \"mark\": mark + 180,\n \"audio\": {\"triggerKey\": \"Unit:Attack:Melee\"}\n })\n\n if(damage == 0) {\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"audio\": {\"triggerKey\": \"Unit:Attack:NoDamage\"}\n })\n }\n if(damage > 0) {\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"unit\": {\n \"key\": target.key,\n \"health\": Math.min(target.maxhealth, Math.max(0, target.health - damage)),\n },\n })\n\n if(performer.properties != undefined\n && performer.properties.includes(\"forceful\")) {\n const direction = Geometry.direction(position, performer.position)\n const vector = Geometry.vector(position, performer.position)\n\n const previousPosition = position\n const nextPosition = Geometry.add(position, vector)\n\n const collision = Stage.findCollision({\n stage, previousPosition, nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": previousPosition,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": nextPosition,\n }\n })\n } else if(collision != undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n })\n\n const damage = 1\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": target.key,\n \"health\": target.health - damage\n },\n })\n\n if(collision.unit != undefined) {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": collision.unit.key,\n \"health\": collision.unit.health - damage\n },\n })\n }\n }\n } else {\n Step.add(step, {\n \"mark\": hitmark,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n }\n })\n }\n\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n }\n })\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"audio\": {\"triggerKey\": target.health < 0 ? \"Unit:Attack:FinalHit\" : \"Unit:Attack:Hit\"}\n })\n\n if(performer.properties != undefined\n && performer.properties.includes(\"lifesteal\")) {\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"unit\": {\n \"key\": performer.key,\n \"health\": Math.min(performer.maxhealth, Math.max(0, performer.health + 1)),\n },\n })\n }\n }\n Step.add(step, {\n \"mark\": mark + hitmark,\n \"flourish\": {\n \"name\": \"TextFloat\",\n \"type\": \"damage\",\n \"unitKey\": target.key,\n \"position\": target.position,\n \"text\": (damage > 0 ? \"-\" : \"\") + damage,\n }\n })\n }\n\n const encounter = Object.values(stage.world.zones).find((zone) => {\n return Zone.isInBounds(zone, target.position)\n })\n\n Object.values(stage.units).forEach((unit) => {\n if(unit.affiliation == \"bad\"\n && Zone.isInBounds(encounter, unit.position)) {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": unit.key,\n \"state\": \"aggroed\",\n }\n })\n }\n })\n\n if(performer.affiliation == \"good\") {\n if(stage.tags[\"tutorial:hasAttacked\"]?.value != true) {\n Step.add(step, {\"mark\": hitmark, \"tag\": {\"name\": \"tutorial:hasAttacked\", \"value\": true}})\n }\n if(isIneffective == true\n && stage.tags[\"tutorial:hasAttackedIneffectivel\"]?.value != true) {\n Step.add(step, {\"mark\": hitmark, \"tag\": {\"name\": \"tutorial:hasAttackedIneffectively\", \"value\": true}})\n }\n if((performer.element == \"earth\" || performer.element == \"axe\" || performer.element == \"gun\")\n && (target.element == \"water\" || target.element == \"spear\" || target.element == \"bow\")\n && stage.tags[\"tutorial:hasAttackedEffectivelyWithEarth\"]?.value != true) {\n Step.add(step, {\"mark\": hitmark, \"tag\": {\"name\": \"tutorial:hasAttackedEffectivelyWithEarth\", \"value\": true}})\n }\n if((target.element == \"water\" || performer.element == \"spear\" || performer.element == \"bow\")\n && stage.tags[\"tutorial:hasAttackedWithWater\"]?.value != true) {\n Step.add(step, {\"mark\": hitmark, \"tag\": {\"name\": \"tutorial:hasAttackedWithWater\", \"value\": true}})\n }\n }\n\n if(performer.canBetray == true) {\n if(performer.affiliation == \"good\"\n && target.affiliation == \"good\") {\n Step.add(step, {\n \"mark\": hitmark,\n \"unit\": {\n \"key\": target.key,\n \"affiliation\": \"neutral\",\n \"bodyKey\": \"neutral\",\n }\n })\n step.followupSteps.push(Stage.processEventSteps(step.omegastage, InkDialogue(target.key + \"_\" + \"betrayed\", Stage.copy(step.omegastage))))\n if(target.dialogue != undefined\n && target.dialogue[\"betrayed\"] != undefined) {\n if(target.dialogue[\"betrayed\"] instanceof Array != true) {\n target.dialogue[\"betrayed\"] = [target.dialogue[\"betrayed\"]]\n }\n target.dialogue[\"betrayed\"].forEach((line) => {\n step.followupSteps.push(Step.instantiate({\n \"type\": \"StartDialogue\",\n \"alphastage\": step.omegastage,\n \"isImportant\": true,\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"text\": line,\n \"data\": {\n \"speakerKey\": target.key,\n \"scene\": {\n \"units\": [\n {\"key\": target.key}\n ]\n }\n }\n }\n }\n ]\n }))\n })\n step.followupSteps.push(Step.instantiate({\n \"type\": \"FinishDialogue\",\n \"alphastage\": step.omegastage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n }))\n }\n }\n }\n\n return step\n }\n}\n\nskills[\"restore-health\"] = {\n \"key\": \"restore-health\",\n \"name\": \"Heal\",\n \"role\": \"support\",\n\n \"description\": \"Heal: Can restore health of an ally.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"power\": 0,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, effectKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n\n const direction = Geometry.direction(position, performer.position)\n\n const deltastages = []\n const HIT_MARK = 0\n\n Step.add(step, {\"mark\": HIT_MARK, \"flourish\": {\"name\": \"NudgedMovement\", \"unit\": {\"key\": performer.key}, \"direction\": direction, \"position\": performer.position}})\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Heal\"}})\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n let healing = this.power + (performer.power || 0)\n // if(target.health + healing > target.maxhealth) {\n // healing = target.maxhealth - target.health\n // }\n\n Step.add(step, {\n \"mark\": HIT_MARK,\n \"unit\": {\n \"key\": target.key,\n \"health\": Math.min(target.maxhealth, target.health + healing)\n },\n })\n\n if(performer.properties != undefined\n && performer.properties.includes(\"mutually-healing\")) {\n Step.add(step, {\n \"mark\": HIT_MARK,\n \"unit\": {\n \"key\": performer.key,\n \"health\": Math.min(performer.maxhealth, performer.health + healing)\n },\n })\n }\n\n if(target.effects.burning != undefined) {\n Step.add(step, {\n \"mark\": HIT_MARK,\n \"unit\": {\n \"key\": target.key,\n \"effects\": {\n \"burning\": undefined,\n }\n },\n })\n }\n\n Step.add(step, {\"mark\": HIT_MARK, \"flourish\": {\"name\": \"NudgedMovement\", \"unit\": {\"key\": target.key}, \"direction\": Geometry.flip(direction), \"position\": target.position}})\n Step.add(step, {\"mark\": HIT_MARK, \"flourish\": {\"name\": \"TextFloat\", \"position\": target.position, \"text\": healing}})\n\n return step\n }\n}\n\nskills[\"recruit\"] = {\n \"key\": \"recruit\",\n \"name\": \"Recruit\",\n \"role\": \"support\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"isHidden\": true,\n\n \"canTarget\": function({performerKey, stage, position}) {\n const performer = stage.units[performerKey]\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return false\n if(target.affiliation != \"none\") return false\n return true\n },\n\n \"calculateStep\": function({stage, position, performerKey, effectKey}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = step.omegastage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n const distance = Geometry.distance(position, performer.position)\n\n Step.add(step, {\"mark\": 0, \"flourish\": {\"name\": \"SwingBackMovement\", \"unit\": {\"key\": performer.key}, \"direction\": direction, \"position\": performer.position}})\n Step.add(step, {\"mark\": 180, \"audio\": {\"triggerKey\": \"Unit:Attack:Melee\"}})\n\n const target = Stage.findUnitByPosition(step.omegastage, position)\n\n if(target == undefined\n || target.affiliation != \"none\") {\n return step\n }\n\n Step.add(step, {\n \"mark\": 200,\n \"unit\": {\n \"key\": target.key,\n \"affiliation\": performer.affiliation,\n },\n })\n step.followupSteps = []\n step.followupSteps.push(Stage.processEventSteps(step.omegastage, Dialogue({\n \"type\": \"CharacterSplashBox\",\n \"data\": {\"unitKey\": target.key}\n })))\n\n step.followupSteps.push(Step.instantiate({\n \"type\": \"FinishDialogue\",\n \"alphastage\": step.omegastage,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n }))\n\n return step\n }\n}\n\nskills[\"rally\"] = {\n \"key\": \"rally\",\n \"name\": \"Rally\",\n \"role\": \"support\",\n\n \"description\": \"Rally: Can inspire an ally to act again.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n \"canTarget\": function({performerKey, stage, position}) {\n const performer = stage.units[performerKey]\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return false\n if(target.affiliation != performer.affiliation) return false\n if(target.energy[\"invoke skill\"] == true && target.energy[\"move\"] == true) return false\n return true\n },\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}})\n Step.add(step, {\"mark\": 200, \"audio\": {\"triggerKey\": \"Unit:Attack\"}})\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n \"unit\": {\n \"key\": target.key,\n \"energy\": {\"move\": true, \"invoke skill\": true},\n }\n })\n\n return step\n }\n}\n\nskills[\"push\"] = {\n \"key\": \"push\",\n \"name\": \"Push\",\n \"role\": \"support\",\n\n \"description\": \"Push: Can push an ally 1 tile.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n const vector = Geometry.vector(position, performer.position)\n\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n\n const previousPosition = position\n const nextPosition = Geometry.add(position, vector)\n\n Step.add(step, {\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": [previousPosition, nextPosition]\n },\n })\n\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}})\n Step.add(step, {\"mark\": 200, \"audio\": {\"triggerKey\": \"Unit:Attack\"}})\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n const collision = Stage.findCollision({\n stage, previousPosition, nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": previousPosition,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": nextPosition,\n }\n })\n } else if(collision != undefined) {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n })\n\n const damage = 1\n Step.add(step, {\n \"mark\": 200,\n \"unit\": {\n \"key\": target.key,\n \"health\": target.health - damage\n },\n })\n\n if(collision.unit != undefined) {\n Step.add(step, {\n \"mark\": 200,\n \"unit\": {\n \"key\": collision.unit.key,\n \"health\": collision.unit.health - damage\n },\n })\n }\n }\n\n return step\n }\n}\n\nskills[\"swap\"] = {\n \"key\": \"swap\",\n \"name\": \"Swap\",\n \"role\": \"support\",\n\n \"description\": \"Swap: Can swap places with an ally.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) {\n Step.add(step, [\n {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n },\n {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}}\n ])\n return step\n }\n\n Step.add(step, [\n {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": performer.key},\n \"startPosition\": performer.position,\n \"endPosition\": target.position,\n },\n \"unit\": {\n \"key\": performer.key,\n \"position\": target.position,\n }\n },\n {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": target.position,\n \"endPosition\": performer.position,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": performer.position,\n }\n },\n {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}}\n ])\n\n return step\n }\n}\n\nskills[\"pull\"] = {\n \"key\": \"pull\",\n \"name\": \"Pullback\",\n \"role\": \"support\",\n\n \"description\": \"Pullback: Can pull an ally back a tile.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n const oppositeDirection = Geometry.flip(direction)\n\n if(direction.x != 0\n && direction.y != 0) {\n console.log(\"Cannot calculate pull skill with non-orthogonal direction.\")\n return\n }\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) {\n return step\n }\n\n const previousPosition = performer.position\n const nextPosition = Geometry.add(performer.position, oppositeDirection)\n\n const previousTargetPosition = target.position\n const nextTargetPosition = Geometry.add(target.position, oppositeDirection)\n\n Step.add(step, {\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": [previousPosition, nextPosition]\n },\n })\n Step.add(step, {\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": [previousTargetPosition, nextTargetPosition]\n },\n })\n\n const collision = Stage.findCollision({\n \"stage\": stage,\n previousPosition,\n nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": performer.key},\n \"startPosition\": previousPosition,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": performer.key,\n \"position\": nextPosition,\n },\n })\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": previousTargetPosition,\n \"endPosition\": nextTargetPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": nextTargetPosition,\n }\n })\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}})\n } else if(collision != undefined) {\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n }\n })\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}})\n }\n\n return step\n }\n}\n\nskills[\"suplex\"] = {\n \"key\": \"suplex\",\n \"name\": \"Suplex\",\n \"role\": \"support\",\n\n \"description\": \"Suplex: Can flip an ally to your other side.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\"type\": \"invoke skill\", \"alphastage\": stage})\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"Audio\",\n \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}\n }\n })\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n const previousPosition = performer.position\n const nextPosition = Geometry.add(performer.position, Geometry.flip(direction))\n\n const collision = Stage.findCollision({\n stage, previousPosition, nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": target.position,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": nextPosition,\n },\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": [target.position, performer.position, nextPosition]\n },\n })\n } else {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n })\n }\n\n return step\n }\n}\n\nskills[\"pivot\"] = {\n \"key\": \"pivot\",\n \"name\": \"Hop\",\n \"role\": \"support\",\n\n \"description\": \"Hop: Can hop over an ally.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"Audio\",\n \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}\n }\n })\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n const previousPosition = performer.position\n const nextPosition = Geometry.add(target.position, direction)\n\n const collision = Stage.findCollision({\n stage, previousPosition, nextPosition,\n })\n\n if(collision == undefined) {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": performer.key},\n \"startPosition\": performer.position,\n \"endPosition\": nextPosition,\n },\n \"unit\": {\n \"key\": performer.key,\n \"position\": nextPosition,\n },\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": [performer.position, target.position, nextPosition]\n },\n })\n } else {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n },\n })\n }\n\n return step\n }\n}\n\nskills[\"smite\"] = {\n \"key\": \"smite\",\n \"name\": \"Push\",\n \"role\": \"support\",\n\n \"description\": \"Smite: Push an ally two tiles.\",\n\n \"type\": \"invoke\",\n \"range\": 1,\n\n \"canTarget\": canTargetAlly,\n\n \"calculateStep\": function({performerKey, stage, position}) {\n const step = Step.instantiate({\n \"type\": \"invoke skill\",\n \"alphastage\": stage\n })\n\n const performer = stage.units[performerKey]\n const direction = Geometry.direction(position, performer.position)\n\n Step.add(step, {\n \"mark\": 0,\n \"flourish\": {\n \"name\": \"SwingBackMovement\",\n \"unit\": {\"key\": performer.key},\n \"position\": performer.position,\n \"direction\": direction,\n }\n })\n\n Step.add(step, {\"mark\": 0, \"audio\": {\"triggerKey\": \"Unit:Attack:Utility\"}})\n Step.add(step, {\"mark\": 200, \"audio\": {\"triggerKey\": \"Unit:Attack\"}})\n\n const intendedDistance = 2\n const ray = Stage.findCollisionInDirection({\n \"stage\": stage,\n \"position\": position,\n \"direction\": direction,\n \"maxdistance\": intendedDistance,\n })\n\n Step.add(step, {\n \"mark\": 0,\n \"intent\": {\n \"type\": \"reposition\",\n \"positions\": ray.castedPositions\n }\n })\n\n const target = Stage.findUnitByPosition(stage, position)\n if(target == undefined) return step\n\n if(ray.distance > 0) {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"PushedMovement\",\n \"unit\": {\"key\": target.key},\n \"startPosition\": ray.startPosition,\n \"endPosition\": ray.endPosition,\n },\n \"unit\": {\n \"key\": target.key,\n \"position\": ray.endPosition,\n },\n })\n } else {\n Step.add(step, {\n \"mark\": 200,\n \"flourish\": {\n \"name\": \"NudgedMovement\",\n \"unit\": {\"key\": target.key},\n \"position\": target.position,\n \"direction\": direction,\n },\n })\n }\n\n // if(ray.distance < intendedDistance) {\n // const damage = intendedDistance - ray.distance\n // Step.add(step, {\n // \"mark\": 200,\n // \"unit\": {\n // \"key\": target.key,\n // \"health\": target.health - damage\n // },\n // })\n //\n // if(ray?.collision?.unit != undefined) {\n // Step.add(step, {\n // \"mark\": 200,\n // \"unit\": {\n // \"key\": ray.collision.unit.key,\n // \"health\": ray.collision.unit.health - damage\n // },\n // })\n // }\n // }\n\n return step\n }\n}\n\nskills.get = function(skillKey) {\n return skills[skillKey]\n}\n\nexport default skills\n", "import {nanoid} from \"nanoid\"\nwindow.nanoid = nanoid\nimport Objdict from \"objdict\"\nimport skills from \"@frog/source/data/skills.js\"\nimport isString from \"@frog/source/utility/isString.js\"\nimport * as Motions from \"@frog/source/juice/utility/Motions.js\"\nimport Timings from \"@frog/source/juice/utility/Timings.js\"\n\nimport Step from \"@frog/source/models/Step.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport App from \"@frog/source/models/App.js\"\nimport Game from \"@frog/source/models/Game.js\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport InkDialogue from \"@frog/source/utility/integration/InkDialogue.js\"\n\nexport function ChapterSuccessModal(stage) {\n function step({phase, duration}) {\n return {\n \"duration\": duration || Infinity,\n \"isImportant\": true,\n \"deltastages\": [\n {\n \"dialogue\": {\n \"type\": \"ChapterSuccessModal\",\n \"data\": {\"phase\": phase, \"time\": Date.now()}\n }\n }\n ]\n }\n }\n const steps = [\n step({\"phase\": 0, \"duration\": 100}), // blank\n step({\"phase\": 1, \"duration\": 1000}), // fade in\n step({\"phase\": 1.5, \"duration\": 1000}), // victory\n step({\"phase\": 2}), // stars\n step({\"phase\": 3}), // enemies\n step({\"phase\": 4, \"duration\": 1000}), // allies\n step({\"phase\": 5}), // allies dead\n step({\"phase\": 6, \"duration\": 1000}), // show xp bar\n ]\n\n const units = Object.values(stage.units).filter((unit) => {\n return unit.isDead == false\n && unit.affiliation == \"good\"\n && unit.type != \"spot\" && unit.type != \"zone\"\n })\n steps.push({\"func\": () => {\n units.forEach((unit) => {\n if(App.game.player.party.units[unit.key] != undefined) {\n App.game.player.party.units[unit.key].experience = stage.units[unit.key].experience\n // TODO: also preserve the unit\n }\n })\n }})\n\n steps.push(step({\"phase\": 7})) // show xp\n\n // TODO: handle leveling up twice in one chapter.\n units.forEach((unit) => {\n if(stage.units[unit.key].experience >= stage.units[unit.key].maxexperience\n && stage.units[unit.key]?.levelups[unit.level + 1] != undefined) {\n steps.push({\"func\": () => {\n Audiomix.trigger(\"Unit:Heal\")\n }})\n steps.push({\n \"duration\": Infinity,\n \"isImportant\": true,\n \"deltastages\": [\n {\n \"dialogue\": {\n \"type\": \"UnitLevelUpModal\",\n \"data\": {\n \"unitKey\": unit.key\n }\n }\n }\n ]\n })\n }\n })\n\n units.forEach((unit) => {\n if(stage.units[unit.key].experience >= stage.units[unit.key].maxexperience\n && stage.units[unit.key]?.levelups[unit.level + 1] != undefined) {\n steps.push({\"func\": () => {\n stage.units[unit.key]?.levelups[unit.level + 1].map((levelupPerk) => {\n if(levelupPerk.key == \"maxhealth\") {\n App.game.player.party.units[unit.key].maxhealth += levelupPerk.value\n } else if(levelupPerk.key == \"maxexperience\") {\n App.game.player.party.units[unit.key].maxexperience += levelupPerk.value\n } else if(levelupPerk.key == \"skill\") {\n App.game.player.party.units[unit.key].skills.push(levelupPerk.value)\n } else if(levelupPerk.key == \"jobKey\") {\n App.game.player.party.units[unit.key].jobKey = levelupPerk.value\n } else if(levelupPerk.key == \"sprites\") {\n App.game.player.party.units[unit.key].sprites = levelupPerk.value\n }\n })\n App.game.player.party.units[unit.key].experience -= App.game.player.party.units[unit.key].maxexperience\n App.game.player.party.units[unit.key].level += 1\n }})\n }\n })\n\n return steps\n}\n\nexport function Ink(inkKey) {\n return function(stage) {\n return InkDialogue(inkKey, stage)\n }\n}\n\nexport function Wait(milliseconds) {\n return {\n \"type\": \"Dialogue\",\n \"deltastages\": [\n {\n \"mark\": 0,\n },\n {\n \"mark\": milliseconds,\n },\n ]\n }\n}\n\nexport function ChangeCurrentEncounter({currentEncounterKey}) {\n return {\"deltastages\": [{\"currentEncounterKey\": currentEncounterKey}]}\n}\n\nexport function PerformAiActions({aiAffiliations} = {}) {\n return function(stage) {\n aiAffiliations = aiAffiliations || [\"bad\", \"neutral\"]\n\n let steps = []\n aiAffiliations.forEach((affiliation) => {\n const ai = Stage.getAiSteps(affiliation, stage)\n steps = steps.concat(ai.steps)\n stage = steps.length > 0 ? steps[steps.length - 1].omegastage : stage\n })\n\n return steps\n }\n}\n\nexport function RespawnDeadUnits({encounterKey, protounits}) {\n return function(stage) {\n const units = Object.values(stage.units).filter((unit) => {\n return Zone.isInBounds(stage.encounters[encounterKey].zone, unit.position)\n && unit.affiliation == \"bad\"\n })\n\n return {\n \"deltastages\": [\n units.map((unit, index) => {\n return {\n \"unit\": {\n \"key\": unit.key,\n \"isDead\": false,\n \"maxhealth\": unit.maxhealth,\n \"health\": unit.maxhealth,\n \"position\": {\n \"x\": protounits[unit.key].position.x,\n \"y\": protounits[unit.key].position.y,\n }\n }\n }\n })\n ]\n }\n }\n}\n\nexport function SlowDeath() {\n return function(stage) {\n const dyingUnits = Object.values(stage.units).filter((unit) => {\n return unit.deathTimer !== undefined\n && unit.isDead != true\n })\n\n const steps = []\n dyingUnits.map((unit) => {\n if(unit.deathTimer > 1) {\n steps.push({\n \"deltastages\": [\n {\n \"unit\": {\n \"key\": unit.key,\n \"deathTimer\": unit.deathTimer - 1,\n },\n },\n {\n \"func\": () => {\n console.log(unit.deathTimer)\n }\n }\n ]\n })\n } else {\n const SHUDDER = 0.1\n\n steps.push({\n \"type\": \"invoke skill\",\n \"deltastages\": Random.shuffle([\n {\"x\": 0, \"y\": -SHUDDER},\n {\"x\": 0, \"y\": SHUDDER},\n {\"x\": SHUDDER, \"y\": 0},\n {\"x\": -SHUDDER, \"y\": 0},\n {\"x\": SHUDDER, \"y\": -SHUDDER},\n {\"x\": -SHUDDER, \"y\": SHUDDER},\n {\"x\": SHUDDER, \"y\": -SHUDDER},\n {\"x\": -SHUDDER, \"y\": SHUDDER},\n {\"x\": 0, \"y\": -SHUDDER},\n {\"x\": 0, \"y\": SHUDDER},\n {\"x\": SHUDDER, \"y\": 0},\n {\"x\": -SHUDDER, \"y\": 0},\n {\"x\": SHUDDER, \"y\": -SHUDDER},\n {\"x\": -SHUDDER, \"y\": SHUDDER},\n {\"x\": SHUDDER, \"y\": -SHUDDER},\n {\"x\": -SHUDDER, \"y\": SHUDDER},\n ]).map((deltaposition, index) => {\n return {\n \"mark\": index * 25,\n \"unit\": {\n \"key\": unit.key,\n \"position\": Geometry.add(unit.position, deltaposition)\n }\n }\n })\n })\n if(unit.dialogue[\"slowdeath\"] != undefined) {\n if(unit.dialogue[\"slowdeath\"] instanceof Array == false) {\n unit.dialogue[\"slowdeath\"] = new Array(unit.dialogue[\"slowdeath\"])\n }\n }\n // TODO: unify dialogue plotscript.\n unit.dialogue[\"slowdeath\"].forEach((line) => {\n steps.push({\n \"type\": \"StartDialogue\",\n \"isImportant\": true,\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"text\": line,\n \"data\": {\n \"unitKey\": unit.key,\n }\n }\n }\n ]\n })\n })\n steps.push({\n \"type\": \"FinishDialogue\",\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n })\n\n steps.push({\n \"type\": \"invoke skill\",\n \"deltastages\": [\n // TODO: Call a similiar thing in Reactions.js\n {\n \"mark\": 500,\n \"audio\": {\"triggerKey\": \"Unit:Death\"},\n },\n {\n \"mark\": 500,\n \"func\": () => Audiomix.kill({\"label\": \"music\"})\n },\n {\n \"mark\": 500,\n \"unit\": {\"key\": unit.key, \"opacity\": 1}\n },\n {\n \"mark\": 1500,\n \"unit\": {\"key\": unit.key, \"opacity\": 0}\n },\n {\n \"mark\": 2500,\n \"unit\": {\"key\": unit.key, \"isDead\": true}\n },\n ]\n })\n }\n })\n return steps\n }\n}\n\nexport function UpdatePlayerPartyScript(options = {\"permadeath\": true}) {\n return function(stage) {\n const currentEncounterKey = stage.encounters[stage.currentEncounterKey]\n\n const alliedUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == \"good\"\n })\n\n alliedUnits.forEach((unit) => {\n if(App.game.player.party.units[unit.key] == undefined) {\n return\n }\n App.game.player.party.units[unit.key].isRecruited = true\n\n if(options.permadeath == true) {\n if(unit.isDead == true) {\n App.game.player.party.units[unit.key].isDead = true\n delete App.game.player.party.units[unit.key]\n }\n }\n })\n }\n}\n\nexport function SpawnPlayerPartyScript(options = {}) {\n return function(stage) {\n const currentEncounterKey = stage.encounters[stage.currentEncounterKey]\n\n const partyUnits = Object.values(stage.player.party.units).filter((unit) => {\n return stage.units[unit.key] == undefined\n && unit.isRecruited == true\n && unit.isDead != true\n })\n\n let spawnSpots = Object.values(stage.units).filter((unit) => {\n return (unit.type == \"zone\" || unit.type == \"spot\")\n && (Zone.isInBounds(currentEncounterKey, unit.position) || options.isIgnoringEncounterBounds)\n })\n\n let spots = stage.world.spots[options.spotKey]\n if(spots != undefined) {\n spots = spots.filter((spot) => {\n const collidingUnits = Object.values(stage.units).filter((unit) => {\n return unit.position.x == spot.position.x\n && unit.position.y == spot.position.y\n })\n\n return collidingUnits.length == 0\n && (Zone.isInBounds(currentEncounterKey, spot.position) || options.isIgnoringEncounterBounds)\n })\n\n spawnSpots = spawnSpots.concat(spots)\n }\n\n return {\n \"deltastages\": [\n spawnSpots.map((spot, index) => {\n let unit = partyUnits[index]\n if(unit == undefined) return\n unit = Objdict.merge(unit, {\"position\": spot.position})\n unit.spawnspot = spot\n return {\n \"unit\": unit\n }\n })\n ]\n }\n }\n}\n\nexport function HealPlayerPartyScript({percent} = {}) {\n percent = percent || 0.5\n return function(stage) {\n const currentEncounterKey = stage.encounters[stage.currentEncounterKey]\n const alliedUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == \"good\"\n && unit.isDead == false\n && Zone.isInBounds(currentEncounterKey, unit.position)\n })\n\n return [\n {\n \"name\": \"HealUnits\",\n \"deltastages\": [\n alliedUnits.map((unit, index) => {\n return {\n \"unit\": {\n \"key\": unit.key,\n \"isDead\": false,\n \"health\": Math.min(unit.maxhealth, unit.health + (unit.maxhealth * percent)),\n }\n }\n }),\n ]\n },\n ]\n }\n}\n\nfunction Dialogue(dialogue) {\n if(dialogue.data != undefined\n && dialogue.data.speakerKey != undefined\n && dialogue.data.scene == undefined) {\n dialogue.data.scene = {\"units\": [{\"key\": dialogue.data.speakerKey}]}\n }\n return [\n {\n \"type\": \"StartDialogue\",\n \"isImportant\": true,\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": dialogue\n }\n ]\n },\n ]\n}\n\nfunction CloseDialogue(dialogue) {\n return {\n \"type\": \"FinishDialogue\",\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": undefined\n }\n ]\n }\n}\n\nfunction EditUnit(unit) {\n return {\"deltastages\": [{\"unit\": unit}]}\n}\n\nfunction TeleportUnit({unitKey, position}) {\n return {\n \"deltastages\": [\n {\n \"unit\": {\n \"key\": unitKey,\n \"position\": position,\n }\n }\n ]\n }\n}\n\nfunction MoveUnit({unitKey, position}) {\n return function(stage) {\n if(stage.units[unitKey] == undefined) return\n return {\n \"name\": \"MoveUnit\",\n \"type\": \"invoke skill\",\n \"deltastages\": [\n {\n \"mark\": 0,\n \"unit\": {\n \"key\": unitKey,\n \"position\": stage.units[unitKey].position,\n }\n },\n {\n \"mark\": 100,\n \"timing\": Timings.easeOutQuad,\n \"motion\": Motions.arc(0.5),\n \"unit\": {\n \"key\": unitKey,\n \"position\": position,\n }\n },\n {\n \"mark\": 0,\n \"audio\": {\n \"triggerKey\": stage.units[unitKey].moveaudio || \"Unit:Move\"\n },\n },\n ]\n }\n }\n}\n\nfunction MoveEncounterScript({nextEncounterKey, spawnTag, spotKey} = {}) {\n return function(stage) {\n const currentEncounter = stage.encounters[stage.currentEncounterKey]\n const nextEncounter = stage.encounters[nextEncounterKey]\n\n const alliedUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == \"good\"\n && unit.isDead != true\n && Zone.isInBounds(currentEncounter, unit.position)\n })\n\n let spawnSpots = Object.values(stage.units).filter((unit) => {\n return (unit.type == \"zone\" || unit.type == \"spot\")\n && (unit.tag == spawnTag || spawnTag == undefined)\n && Zone.isInBounds(nextEncounter, unit.position)\n })\n\n let spots = stage.world.spots[spotKey]\n if(spots != undefined) {\n spots = spots.filter((spot) => {\n const collidingUnits = Object.values(stage.units).filter((unit) => {\n return unit.position.x == spot.position.x\n && unit.position.y == spot.position.y\n })\n\n return collidingUnits.length == 0\n && (Zone.isInBounds(nextEncounter, spot.position))\n })\n\n spawnSpots = spawnSpots.concat(spots)\n }\n\n return [\n {\n \"name\": \"SavestateCapture\",\n \"savestateSlug\": \"advanceToEncounter\" + nextEncounterKey,\n },\n {\n \"name\": \"MoveUnits\",\n \"deltastages\": [\n alliedUnits.map((unit, index) => {\n const spawnSpot = spawnSpots[index]\n if(spawnSpot == undefined) return undefined\n return {\"unit\": {\"key\": unit.key, \"position\": spawnSpot.position, \"hasBeenRemoved\": false}}\n }),\n ]\n },\n {\n \"func\": (stage) => {\n if(stage.encounters[nextEncounterKey] != undefined) {\n stage.encounters[nextEncounterKey].hasBeenSeen = true\n }\n if(stage.encounters[stage.currentEncounterKey] != undefined) {\n stage.encounters[stage.currentEncounterKey].hasBeenSeen = true\n }\n }\n },\n {\n \"name\": \"JumpToDifferentChapterEncounter\",\n \"duration\": 2000,\n \"deltastages\": [\n {\"currentEncounterKey\": nextEncounterKey},\n {\"turn\": {\"number\": 0}}\n ]\n },\n ]\n }\n}\n\nfunction EscapeScript({spotKey} = {}) {\n return function(stage) {\n const currentEncounterKey = stage.encounters[stage.currentEncounterKey]\n\n let spots = stage.world.spots[spotKey]\n if(spots == undefined) return\n\n const escapingUnits = Object.values(stage.units).filter((unit) => {\n return unit.isDead != true\n && unit.hasBeenRemoved != true\n && unit.affiliation == \"good\"\n && Zone.isInBounds(currentEncounterKey, unit.position)\n && spots.find((spot) => spot.position.x == unit.position.x && spot.position.y == spot.position.y)\n })\n\n return {\n \"deltastages\": [\n escapingUnits.map((unit, index) => {\n return {\n \"unit\": {\n \"key\": unit.key,\n \"hasBeenRemoved\": true\n }\n }\n })\n ]\n }\n }\n}\n\nexport function SpawnUnitAtSpot({spotKey, protounit}) {\n return function(stage) {\n let spots = stage.world.spots[spotKey]\n if(spots == undefined) return\n\n spots = spots.filter((spot) => {\n const collidingUnits = Object.values(stage.units).filter((unit) => {\n return unit.position.x == spot.position.x\n && unit.position.y == spot.position.y\n })\n\n return collidingUnits.length == 0\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey], spot.position)\n })\n\n if(spots.length == 0) return\n spots = Random.shuffle(spots)\n const spot = spots[0]\n\n return {\n \"deltastages\": [\n {\n \"unit\": {\n ...protounit,\n \"key\": protounit.key || nanoid(),\n \"position\": {\n \"x\": spot.position.x,\n \"y\": spot.position.y,\n \"z\": spot.position.z\n }\n }\n }\n ]\n }\n }\n}\n\nexport function SpawnUnit(protounit) {\n return function(stage) {\n const collidingUnits = Object.values(stage.units).filter((unit) => {\n return unit.position.x == protounit.position.x\n && unit.position.y == protounit.position.y\n })\n\n if(collidingUnits.length > 0) return\n\n protounit.key = protounit.key || nanoid()\n if(protounit.jobKey == undefined) delete protounit.jobKey\n\n return {\n \"deltastages\": [{\"unit\": protounit}]\n }\n }\n}\n\nfunction SpawnUnitsScript({spotKey, unit, count} = {}) {\n return function(stage) {\n const zones = Object.values(stage.units).filter((unit) => {\n return (unit.type == \"zone\" || unit.type == \"spot\")\n && unit.tag == spotKey\n // && Zone.isInBounds(currentEncounterKey, unit.position)\n })\n\n return [\n {\n \"name\": \"SpawnUnits\",\n \"deltastages\": [\n zones.map((zone, index) => {\n if(count !== undefined\n && count > 0) {\n return\n }\n\n const collision = Stage.findUnitByPosition(stage, zone.position)\n if(collision != undefined) return\n\n count -= 1\n\n return {\n \"unit\": { // THIS IS ALL HARDCODED!\n \"key\": nanoid(),\n \"jobKey\": Random.element([\"spear\", \"hammer\", \"sword\"]), // TODO: swap over to Random.elementFromSeededKey()\n \"position\": zone.position,\n \"affiliation\": \"bad\",\n }\n }\n }),\n ]\n },\n ]\n }\n}\n\nfunction areAllUnaffiliatedUnitsDefeated(stage, {affiliation, encounterKey}) {\n encounterKey = encounterKey || stage.currentEncounterKey\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation != affiliation\n && unit.affiliation != \"none\"\n && (unit.isDead != true && unit.hasBeenRemoved != true)\n && (encounterKey == undefined || Zone.isInBounds(stage.encounters[encounterKey], unit.position))\n })\n return remainingUnits.length == 0\n}\n\nfunction areAllAffiliatedUnitsDefeated(stage, {affiliation, encounterKey}) {\n encounterKey = encounterKey || stage.currentEncounterKey\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == affiliation\n && (unit.isDead != true && unit.hasBeenRemoved != true)\n && (encounterKey == undefined || Zone.isInBounds(stage.encounters[encounterKey], unit.position))\n })\n return remainingUnits.length == 0\n}\n\nfunction areAllAffiliatedUnitsDead(stage, {affiliation, encounterKey}) {\n encounterKey = encounterKey || stage.currentEncounterKey\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == affiliation\n && unit.isDead != true\n && Zone.isInBounds(stage.encounters[encounterKey], unit.position)\n })\n return remainingUnits.length == 0\n}\n\nfunction hasEscaped(stage, {affiliation, encounterKey}) {\n encounterKey = encounterKey || stage.currentEncounterKey\n const alliedUnits = Object.values(stage.units).filter((unit) => {\n return unit.affiliation == affiliation\n && unit.isDead != true\n && Zone.isInBounds(stage.encounters[encounterKey], unit.position)\n })\n if(alliedUnits.length == 0) return false\n const escapedUnits = alliedUnits.filter((unit) => unit.hasBeenRemoved == true)\n return alliedUnits.length == escapedUnits.length\n}\n\n// This replaces the old \"defeat-all-units-of-affiliation\" condition type.\n// Returns true if all units of a given affiliation have been defeated.\nfunction DefeatAllUnitsOfAffiliation({stage, affiliation, encounterKey}) {\n if(stage == undefined) return false\n if(affiliation == undefined) return false\n if(encounterKey != undefined\n && encounterKey != stage.currentEncounterKey) {\n return false\n }\n const remainingUnits = Object.values(stage.units).filter((unit) => {\n if(encounterKey != undefined) {\n const currentEncounterKey = stage.encounters[encounterKey]\n if(Zone.isInBounds(currentEncounterKey.zone, unit.position) == false) {\n return false\n }\n }\n if(unit.affiliation != affiliation) return false\n if(unit.isDead) return false\n if(unit.hasBeenRemoved) return false\n return true\n })\n return remainingUnits.length == 0\n}\n\nfunction EncounterVictories({encounterKeys, nextURL}) {\n return encounterKeys.map((encounterKey, index) => {\n if(encounterKeys[index + 1] != undefined) {\n return {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == encounterKey\n && areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\"})\n },\n \"events\": [\n HealPlayerPartyScript(),\n MoveEncounterScript({\"nextEncounterKey\": encounterKeys[index + 1]})\n ]\n }\n } else {\n return {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == encounterKey\n && areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\"})\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(nextURL)},\n ]\n }\n }\n })\n}\n\nfunction ChapterFailure() {\n return {\n \"type\": \"condition\",\n \"condition\": function(stage) {\n return areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n }\n}\n\nexport { ChapterFailure, EncounterVictories, areAllAffiliatedUnitsDead, hasEscaped, areAllAffiliatedUnitsDefeated, areAllUnaffiliatedUnitsDefeated, Dialogue, CloseDialogue, EditUnit, MoveUnit, TeleportUnit, MoveEncounterScript, EscapeScript, SpawnUnitsScript, DefeatAllUnitsOfAffiliation }\n", "{\n \"wWcsbLd9K\": {\n \"position\": {\n \"x\": 29,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"wWcsbLd9K\"\n },\n \"9wC7TkZp5\": {\n \"position\": {\n \"x\": 29,\n \"y\": 20,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"9wC7TkZp5\"\n },\n \"8fEXctu9s\": {\n \"position\": {\n \"x\": 29,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"8fEXctu9s\"\n },\n \"ocY3Di1tb\": {\n \"position\": {\n \"x\": 25,\n \"y\": 21,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"ocY3Di1tb\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"Jxv54efq7\": {\n \"position\": {\n \"x\": 27,\n \"y\": 22,\n \"z\": 1\n },\n \"templateKey\": \"jobs/dagger\",\n \"jobKey\": \"pirates/dagger\",\n \"affiliation\": \"bad\",\n \"key\": \"Jxv54efq7\",\n \"imageKey\": \"viking\"\n },\n \"2oHXw5rWt\": {\n \"position\": {\n \"x\": 33,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"2oHXw5rWt\"\n },\n \"GWZUStOYL\": {\n \"position\": {\n \"x\": 33,\n \"y\": 20,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"GWZUStOYL\"\n },\n \"viking\": {\n \"position\": {\n \"x\": 35,\n \"y\": 21,\n \"z\": 1\n },\n \"templateKey\": \"player/viking\",\n \"key\": \"viking\",\n \"affiliation\": \"bad\"\n },\n \"mercenary\": {\n \"position\": {\n \"x\": 27,\n \"y\": 8,\n \"z\": 1\n },\n \"ai\": {\"isNotCounterattacking\": true},\n \"templateKey\": \"pirates/player/mercenary\",\n \"key\": \"mercenary\",\n \"affiliation\": \"bad\"\n },\n \"swashbuckler\": {\n \"position\": {\n \"x\": 38,\n \"y\": 20,\n \"z\": 1\n },\n \"templateKey\": \"player/swashbuckler\",\n \"key\": \"swashbuckler\",\n \"affiliation\": \"none\"\n },\n \"UH34OujQFJ_PSrsTM2g2R\": {\n \"position\": {\n \"x\": 35,\n \"y\": 20,\n \"z\": 1\n },\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"UH34OujQFJ_PSrsTM2g2R\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"bard\": {\n \"position\": {\n \"x\": 37,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"player/bard\",\n \"key\": \"bard\"\n },\n \"4G_8Iy0ZusJ4w0x4r7e2M\": {\n \"position\": {\n \"x\": 36,\n \"y\": 19,\n \"z\": 1\n },\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"4G_8Iy0ZusJ4w0x4r7e2M\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"N5adK-s4BKtr1gQYhVvO5\": {\n \"position\": {\n \"x\": 36,\n \"y\": 21,\n \"z\": 1\n },\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"N5adK-s4BKtr1gQYhVvO5\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"S8tMTnxVeCge-EdFxRa2T\": {\n \"position\": {\n \"x\": 31,\n \"y\": 19,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"pirates/spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"S8tMTnxVeCge-EdFxRa2T\",\n \"imageKey\": \"viking\"\n },\n \"ekehuYY5zNxMcWdQg3TBK\": {\n \"position\": {\n \"x\": 30,\n \"y\": 21,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"pirates/spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"ekehuYY5zNxMcWdQg3TBK\",\n \"imageKey\": \"viking\"\n },\n \"knight\": {\n \"position\": {\n \"x\": 32,\n \"y\": 23,\n \"z\": 1\n },\n \"templateKey\": \"player/knight\",\n \"element\": \"axe\",\n \"weaponImageKey\": \"hammer\",\n \"key\": \"knight\",\n \"affiliation\": \"none\"\n },\n \"lyXG5YFKm66gB0WLYs562\": {\n \"position\": {\n \"x\": 28,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"bad\",\n \"key\": \"lyXG5YFKm66gB0WLYs562\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"U5CgX9Pc7FLwBHMsXhyrA\": {\n \"position\": {\n \"x\": 27,\n \"y\": 20,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"U5CgX9Pc7FLwBHMsXhyrA\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n },\n \"qPT4zr6ZXIuWncrWryhSF\": {\n \"position\": {\n \"x\": 26,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/gun\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"qPT4zr6ZXIuWncrWryhSF\",\n \"imageKey\": \"viking\",\n \"maxhealth\": 30\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":60,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 7, 7, 7, 13, 13, 13, 13, 7, 7, 7, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 13, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 13, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13],\n \"height\":60,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":60,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 9, 9, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":60,\n \"id\":3,\n \"name\":\"data:edges\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":60,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":60,\n \"id\":4,\n \"name\":\"masts\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":false,\n \"width\":60,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":2,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":160,\n \"id\":59,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2.2\"\n }, \n {\n \"name\":\"zoomout\",\n \"type\":\"string\",\n \"value\":\"1.5\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":960,\n \"y\":608\n }, \n {\n \"height\":0,\n \"id\":64,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":160\n }, \n {\n \"x\":-128,\n \"y\":160\n }, \n {\n \"x\":-128,\n \"y\":128\n }, \n {\n \"x\":-192,\n \"y\":128\n }, \n {\n \"x\":-192,\n \"y\":96\n }, \n {\n \"x\":-256,\n \"y\":96\n }, \n {\n \"x\":-256,\n \"y\":64\n }, \n {\n \"x\":-192,\n \"y\":64\n }, \n {\n \"x\":-192,\n \"y\":32\n }, \n {\n \"x\":-128,\n \"y\":32\n }, \n {\n \"x\":-128,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2.1\"\n }, \n {\n \"name\":\"zoomout\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":960,\n \"y\":576\n }, \n {\n \"height\":0,\n \"id\":66,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":128,\n \"y\":0\n }, \n {\n \"x\":128,\n \"y\":32\n }, \n {\n \"x\":192,\n \"y\":32\n }, \n {\n \"x\":192,\n \"y\":128\n }, \n {\n \"x\":128,\n \"y\":128\n }, \n {\n \"x\":128,\n \"y\":160\n }, \n {\n \"x\":0,\n \"y\":160\n }],\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2.3\"\n }, \n {\n \"name\":\"zoomout\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":1088,\n \"y\":576\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:spots\",\n \"objects\":[\n {\n \"ellipse\":true,\n \"height\":32,\n \"id\":131,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"starboard\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1024,\n \"y\":608\n }, \n {\n \"ellipse\":true,\n \"height\":32,\n \"id\":133,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"aft\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1248,\n \"y\":640\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":false,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":7,\n \"nextobjectid\":135,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":32,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/tileset.json\"\n }],\n \"tilewidth\":32,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":60\n}", "{ \"columns\":0,\n \"grid\":\n {\n \"height\":1,\n \"orientation\":\"orthogonal\",\n \"width\":1\n },\n \"margin\":0,\n \"name\":\"tileset\",\n \"spacing\":0,\n \"tilecount\":12,\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":32,\n \"tiles\":[\n {\n \"id\":0,\n \"image\":\"tiles\\/2.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":1,\n \"image\":\"tiles\\/1.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":2,\n \"image\":\"tiles\\/3.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":3,\n \"image\":\"tiles\\/4.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":4,\n \"image\":\"tiles\\/5.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":5,\n \"image\":\"tiles\\/7.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":6,\n \"image\":\"tiles\\/8.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":7,\n \"image\":\"tiles\\/9.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":8,\n \"image\":\"tiles\\/railing.png\",\n \"imageheight\":32,\n \"imagewidth\":32,\n \"properties\":[\n {\n \"name\":\"shape\",\n \"type\":\"string\",\n \"value\":\"south-edge\"\n }]\n }, \n {\n \"id\":9,\n \"image\":\"tiles\\/ledge.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":11,\n \"image\":\"tiles\\/ledge2.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }, \n {\n \"id\":12,\n \"image\":\"tiles\\/water.png\",\n \"imageheight\":32,\n \"imagewidth\":32\n }],\n \"tilewidth\":32,\n \"type\":\"tileset\",\n \"version\":\"1.8\"\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Step from \"@frog/source/models/Step.js\"\n\nimport player from \"@frog/source/data/games/pirates/player.js\"\nconst PLAYER_CHARACTER = \"swashbuckler\"\n\nexport default {\n \"slug\": \"ship\",\n \"hasPreparePhase\": false,\n \"startingEncounter\": \"2.3\",\n\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"configuration\": {\n \"darkness\": \"none\",\n },\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat:Normal\")},\n Step.deltastage({\"tag\": {\"name\": \"hud\", \"value\": \"hidden\"}}),\n {\n \"type\": \"chapter start\",\n \"data\": [\n \"Chapter 4\",\n \"The Stowaway\",\n \"In Which\",\n \"Oriana refuses to give up\",\n \"and recruits an unlikely crewmate\"\n ]\n },\n {\"func\": () => App.unskippable = true},\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\"},\n \"text\": \"You fought well, but not well enough.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\"},\n \"text\": \"Any last words?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"viking\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Maybe someday.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\", \"scene\": {\"units\": [{\"key\": \"viking\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Throw her over board.\",\n }),\n Plotscripts.MoveUnit({\"unitKey\": \"viking\", \"position\": {\"x\": 34, \"y\": 21}}),\n Plotscripts.MoveUnit({\"unitKey\": \"viking\", \"position\": {\"x\": 33, \"y\": 21}}),\n Plotscripts.TeleportUnit({\"unitKey\": \"viking\", \"position\": {\"x\": 22, \"y\": 20}}),\n Plotscripts.Wait(500),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\"},\n \"text\": \"I'll do the honors :)\",\n }),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 37, \"y\": 19}}),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 38, \"y\": 19}}),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 39, \"y\": 19}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Tell me, lass; know you how to hold a blade?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"What?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Away from me, I guess.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Good enough for me~\",\n }),\n Step.deltastage({\"unit\": {\"key\": \"swashbuckler\", \"affiliation\": \"good\"}}),\n Step.deltastage({\"unit\": {\"key\": \"bard\", \"hasBeenRemoved\": true}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Who are you? Why are you helping me?\",\n }),\n Plotscripts.Dialogue({\n \"speakerName\": \"Pirate\",\n \"text\": \"What?? Who released the prisoner??\",\n }),\n Plotscripts.Dialogue({\n \"speakerName\": \"Pirate\",\n \"text\": \"And who gave her a sword??\",\n }),\n Plotscripts.CloseDialogue(),\n Step.deltastage({\"tag\": {\"name\": \"hud\", \"value\": undefined}}),\n {\"func\": () => App.unskippable = false},\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2.3\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\", \"encounterKey\": \"2.3\"})\n },\n \"events\": [\n Plotscripts.EditUnit({\"key\": \"bard\", \"hasBeenRemoved\": false, \"position\": {\"x\": 33, \"y\": 20, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 34, \"y\": 20, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"bard\"}]}},\n \"text\": \"Well done~ You might take the ship yet.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"And who are you?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"A friend. Take this potion, it'll heal you up.\",\n }),\n Plotscripts.Dialogue({\n \"type\": \"CharacterSplashBox\",\n \"data\": {\"unitKey\": \"bard\"}\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"bard\"}, {\"key\": \"swashbuckler\", \"position\": 4}]}},\n \"text\": \"Your knight is locked up in the mid-deck, follow me.\",\n }),\n Plotscripts.HealPlayerPartyScript({\"percent\": 1}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2.2\"}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"knight\", \"scene\": {\"units\": [{\"key\": \"knight\"}]}},\n \"text\": \"My lady!! Please help me!\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2.2\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\", \"encounterKey\": \"2.2\"})\n },\n \"events\": [\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"knight\", \"scene\": {\"units\": [{\"key\": \"knight\", \"direction\": \"left\", \"position\": 1}]}},\n \"text\": \"That's the last of the midgaurds.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"knight\", \"scene\": {\"units\": [{\"key\": \"knight\", \"direction\": \"right\", \"position\": 1}]}},\n \"text\": \"What are your orders, my lady?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4}, {\"key\": \"knight\", \"direction\": \"right\", \"position\": 1}]}},\n \"text\": \"We defeat the captain and his crew, and we take this ship.\",\n }),\n Plotscripts.HealPlayerPartyScript({\"percent\": 1}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2.1\"}),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2.1\"\n && stage.turn.number == 1\n && stage.turn.affiliation == \"bad\"\n && stage.turn.phase == \"end\"\n && stage.units[PLAYER_CHARACTER].isDead != true\n },\n \"events\": [\n Plotscripts.Wait(1000),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\"},\n \"text\": \"Why is she still alive? Can you scallywags do nothing right?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\"},\n \"text\": \"Bring me Boots.\",\n }),\n Plotscripts.TeleportUnit({\"unitKey\": \"mercenary\", \"position\": {\"x\": 25, \"y\": 18, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"mercenary\", \"position\": {\"x\": 25, \"y\": 19, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"mercenary\", \"scene\": {\"units\": [{\"key\": \"viking\"}, {\"key\": \"mercenary\", \"position\": \"4\", \"direction\": \"left\"}]}},\n \"text\": \"You called, captain?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\", \"scene\": {\"units\": [{\"key\": \"viking\"}, {\"key\": \"mercenary\", \"position\": \"4\", \"direction\": \"left\"}]}},\n \"text\": \"Take them out.\",\n }),\n Plotscripts.CloseDialogue(),\n // Plotscripts.SpawnUnit({\"key\": \"gunner\", \"jobKey\": \"pirates/gun\", \"imageKey\": \"viking\", \"position\": {\"x\": 24, \"y\": 18, \"z\": 1}, \"affiliation\": \"bad\"}),\n // Plotscripts.MoveUnit({\"unitKey\": \"gunner\", \"position\": {\"x\": 24, \"y\": 19, \"z\": 1}}),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2.1\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\", \"encounterKey\": \"2.1\"})\n },\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Menu\")},\n Plotscripts.Dialogue({\n \"text\": \"Huzzah! This ship is ours. Onwards to the treasure!!\",\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n }),\n Plotscripts.CloseDialogue(),\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/pirates/chapters/wild\")},\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": function(stage) {\n return stage.units[PLAYER_CHARACTER].isDead == true\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n },\n // {\n // \"type\": \"condition\",\n // \"condition\": function(stage) {\n // return Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n // },\n // \"events\": [\n // {\"type\": \"chapter failure\"},\n // {\"func\": () => App.game.chapter.restart()},\n // ]\n // },\n ]\n },\n}\n", "{\n \"ohBKwl4BK\": {\n \"position\": {\n \"x\": 10,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ohBKwl4BK\"\n },\n \"Mr_xY_M93N\": {\n \"position\": {\n \"x\": 10,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"Mr_xY_M93N\"\n },\n \"6KDIaOajm\": {\n \"position\": {\n \"x\": 9,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"6KDIaOajm\"\n },\n \"kuqYjRyPu\": {\n \"position\": {\n \"x\": 7,\n \"y\": 15,\n \"z\": 2\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"kuqYjRyPu\"\n },\n \"azsv-m2Xw\": {\n \"position\": {\n \"x\": 7,\n \"y\": 16,\n \"z\": 2\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"azsv-m2Xw\"\n },\n \"xCLeFW8db\": {\n \"position\": {\n \"x\": 7,\n \"y\": 17,\n \"z\": 2\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"xCLeFW8db\"\n },\n \"D1-Lb-toF\": {\n \"position\": {\n \"x\": 8,\n \"y\": 15,\n \"z\": 3\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"D1-Lb-toF\"\n },\n \"1TyH514z_\": {\n \"position\": {\n \"x\": 8,\n \"y\": 14,\n \"z\": 3\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"1TyH514z_\"\n },\n \"oBEV8ZeiW\": {\n \"position\": {\n \"x\": 8,\n \"y\": 13,\n \"z\": 3\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"oBEV8ZeiW\"\n },\n \"Zuq4k3Lo6\": {\n \"position\": {\n \"x\": 10,\n \"y\": 12,\n \"z\": 4\n },\n \"templateKey\": \"jobs/spearknight\",\n \"jobKey\": \"spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"Zuq4k3Lo6\",\n \"maxhealth\": 40\n },\n \"10VsMsIUf\": {\n \"position\": {\n \"x\": 8,\n \"y\": 11,\n \"z\": 4\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"10VsMsIUf\"\n },\n \"acpSdSlBJ\": {\n \"position\": {\n \"x\": 8,\n \"y\": 12,\n \"z\": 4\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"acpSdSlBJ\"\n },\n \"pnVwO6vdo\": {\n \"position\": {\n \"x\": 9,\n \"y\": 11,\n \"z\": 4\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"pnVwO6vdo\"\n },\n \"Z_at3zJ2QyanhJWquCUNu\": {\n \"position\": {\n \"x\": 7,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/swordknight\",\n \"jobKey\": \"pirates/swordknight\",\n \"affiliation\": \"bad\",\n \"key\": \"Z_at3zJ2QyanhJWquCUNu\"\n },\n \"JcWMSVVuD7s4xI9pFIE-w\": {\n \"position\": {\n \"x\": 8,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/hammer\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"JcWMSVVuD7s4xI9pFIE-w\"\n },\n \"toDeql_-bkFGnhFWZoIt5\": {\n \"position\": {\n \"x\": 6,\n \"y\": 19,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/spear\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"toDeql_-bkFGnhFWZoIt5\"\n },\n \"pjwGVVv8JtCDWnMpABKU2\": {\n \"position\": {\n \"x\": 9,\n \"y\": 16,\n \"z\": 2\n },\n \"templateKey\": \"jobs/pirates/spearknight\",\n \"jobKey\": \"pirates/spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"pjwGVVv8JtCDWnMpABKU2\"\n },\n \"CuygdRjthFVjmCYQkWbXn\": {\n \"position\": {\n \"x\": 10,\n \"y\": 17,\n \"z\": 2\n },\n \"templateKey\": \"jobs/pirates/shaman\",\n \"jobKey\": \"pirates/shaman\",\n \"affiliation\": \"bad\",\n \"key\": \"CuygdRjthFVjmCYQkWbXn\"\n },\n \"IVu0ToNOtLinC46Xn0m47\": {\n \"position\": {\n \"x\": 10,\n \"y\": 15,\n \"z\": 2\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"IVu0ToNOtLinC46Xn0m47\"\n },\n \"5EF6xQxhnnOWLRZw2WMP1\": {\n \"position\": {\n \"x\": 9,\n \"y\": 14,\n \"z\": 3\n },\n \"templateKey\": \"jobs/pirates/hammer\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"5EF6xQxhnnOWLRZw2WMP1\"\n },\n \"YqtlysAbua0fADLqP52-G\": {\n \"position\": {\n \"x\": 9,\n \"y\": 15,\n \"z\": 3\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"YqtlysAbua0fADLqP52-G\"\n },\n \"f4XZ8Hst181vS1pORGJ7n\": {\n \"position\": {\n \"x\": 10,\n \"y\": 13,\n \"z\": 3\n },\n \"templateKey\": \"jobs/pirates/priest\",\n \"jobKey\": \"pirates/priest\",\n \"affiliation\": \"bad\",\n \"key\": \"f4XZ8Hst181vS1pORGJ7n\"\n }\n}", "{ \"compressionlevel\":-1,\n \"height\":23,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":23,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":24,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":2,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":96,\n \"id\":28,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"color\",\n \"type\":\"string\",\n \"value\":\"#5a5c5f\"\n }, \n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"3\"\n }, \n {\n \"name\":\"z\",\n \"type\":\"int\",\n \"value\":3\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":96,\n \"x\":256,\n \"y\":416\n }, \n {\n \"height\":96,\n \"id\":29,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"color\",\n \"type\":\"string\",\n \"value\":\"#393b3d\"\n }, \n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2\"\n }, \n {\n \"name\":\"z\",\n \"type\":\"int\",\n \"value\":2\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":224,\n \"y\":480\n }, \n {\n \"height\":96,\n \"id\":32,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"color\",\n \"type\":\"string\",\n \"value\":\"#989ba0\"\n }, \n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"5\"\n }, \n {\n \"name\":\"z\",\n \"type\":\"int\",\n \"value\":5\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":320,\n \"y\":288\n }, \n {\n \"height\":96,\n \"id\":40,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"color\",\n \"type\":\"string\",\n \"value\":\"#252627\"\n }, \n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"1\"\n }, \n {\n \"name\":\"z\",\n \"type\":\"int\",\n \"value\":1\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":160,\n \"x\":192,\n \"y\":544\n }, \n {\n \"height\":96,\n \"id\":48,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"color\",\n \"type\":\"string\",\n \"value\":\"#7c7f83\"\n }, \n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"4\"\n }, \n {\n \"name\":\"z\",\n \"type\":\"int\",\n \"value\":4\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":96,\n \"x\":256,\n \"y\":352\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":3,\n \"nextobjectid\":54,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":32,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/tileset.json\"\n }],\n \"tilewidth\":32,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":24\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\n// GET PRISONERS!!!\n// GET BETRAYED!!!\n// GET OUT BY OTHER TOWER!!!\n// SEE BECKETT AS BOSS\n\nexport default {\n \"slug\": \"prison\",\n \"hasPreparePhase\": false,\n\n \"stage\": {\n \"image\": require(\"./image.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Pirate:Music:Combat:3\")},\n Plotscripts.SpawnPlayerPartyScript(),\n // Plotscripts.Dialogue({\"text\": \"TO WAR\"}),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"1\"\n && stage.tags[\"hasDefeatedBoss\"]?.value != true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"1\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2\"\n && stage.tags[\"hasDefeatedBoss\"]?.value != true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"2\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"3\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"3\"\n && stage.tags[\"hasDefeatedBoss\"]?.value != true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"3\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"4\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && stage.tags[\"hasDefeatedBoss\"]?.value != true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"4\"})\n },\n \"events\": [\n {\n \"deltastages\": [\n {\n \"tag\": {\n \"name\": \"hasDefeatedBoss\",\n \"value\": true,\n }\n }\n ]\n },\n Plotscripts.RespawnDeadUnits({\"encounterKey\": \"3\", \"protounits\": require(\"./units.json\")}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"3\"}),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"3\"\n && stage.tags[\"hasDefeatedBoss\"]?.value == true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"3\"})\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript(),\n Plotscripts.RespawnDeadUnits({\"encounterKey\": \"2\", \"protounits\": require(\"./units.json\")}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2\"\n && stage.tags[\"hasDefeatedBoss\"]?.value == true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"2\"})\n },\n \"events\": [\n Plotscripts.RespawnDeadUnits({\"encounterKey\": \"1\", \"protounits\": require(\"./units.json\")}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"1\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"1\"\n && stage.tags[\"hasDefeatedBoss\"]?.value == true\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"1\"})\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/pirates\")},\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": function(stage) {\n return Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n },\n ]\n },\n}\n", "{\n \"Hnb2WiC2F\": {\n \"position\": {\n \"x\": 16,\n \"y\": 23,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"Hnb2WiC2F\"\n },\n \"uKSBYZyznL\": {\n \"position\": {\n \"x\": 16,\n \"y\": 24,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"uKSBYZyznL\"\n },\n \"0FiFyFMeT\": {\n \"position\": {\n \"x\": 17,\n \"y\": 24,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"0FiFyFMeT\"\n },\n \"ysR4RFer4\": {\n \"position\": {\n \"x\": 14,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ysR4RFer4\"\n },\n \"eSUxlgIgC0\": {\n \"position\": {\n \"x\": 14,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"eSUxlgIgC0\"\n },\n \"r3Adbj-Pch\": {\n \"position\": {\n \"x\": 15,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"r3Adbj-Pch\"\n },\n \"5yarueq6Z\": {\n \"position\": {\n \"x\": 15,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"5yarueq6Z\"\n },\n \"mdmBujtHa\": {\n \"position\": {\n \"x\": 21,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"mdmBujtHa\"\n },\n \"vhsL9d0wcA\": {\n \"position\": {\n \"x\": 20,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"vhsL9d0wcA\"\n },\n \"i2X-Gr2DDq\": {\n \"position\": {\n \"x\": 21,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"i2X-Gr2DDq\"\n },\n \"BQ6nvtHQ6\": {\n \"position\": {\n \"x\": 20,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"BQ6nvtHQ6\"\n },\n \"viking\": {\n \"position\": {\n \"x\": 10,\n \"y\": 25,\n \"z\": 1\n },\n \"templateKey\": \"pirates/player/viking\",\n \"spriteKey\": \"purple\",\n \"key\": \"viking\"\n },\n \"swashbuckler\": {\n \"position\": {\n \"x\": 11,\n \"y\": 25,\n \"z\": 1\n },\n \"maxhealth\": 50,\n \"templateKey\": \"pirates/player/swashbuckler\",\n \"key\": \"swashbuckler\"\n },\n \"mercenary\": {\n \"position\": {\n \"x\": 11,\n \"y\": 26,\n \"z\": 1\n },\n \"templateKey\": \"pirates/player/mercenary\",\n \"spriteKey\": \"purple\",\n \"key\": \"mercenary\"\n },\n \"5ntpXEeT6\": {\n \"position\": {\n \"x\": 13,\n \"y\": 25,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"5ntpXEeT6\",\n \"imageKey\": \"skeleton\",\n \"decalKey\": \"blueshield\",\n \"maxhealth\": 40\n },\n \"1aVyE6Bkm\": {\n \"position\": {\n \"x\": 14,\n \"y\": 23,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/hammerknight\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"1aVyE6Bkm\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"MJyrhULmC\": {\n \"position\": {\n \"x\": 12,\n \"y\": 23,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/gun\",\n \"jobKey\": \"pirates/gun\",\n \"affiliation\": \"bad\",\n \"key\": \"MJyrhULmC\",\n \"imageKey\": \"skeleton\"\n },\n \"FOceUhG0G\": {\n \"position\": {\n \"x\": 16,\n \"y\": 20,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"FOceUhG0G\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"65roNm3UT\": {\n \"position\": {\n \"x\": 18,\n \"y\": 22,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"65roNm3UT\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"g0kJERfLU\": {\n \"position\": {\n \"x\": 20,\n \"y\": 21,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"g0kJERfLU\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"fDdIqm-jzA2\": {\n \"position\": {\n \"x\": 16,\n \"y\": 15,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"fDdIqm-jzA2\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"bERjTMiJz\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/bow\",\n \"jobKey\": \"pirates/hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"bERjTMiJz\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"vPFKbmGA8\": {\n \"position\": {\n \"x\": 16,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"vPFKbmGA8\"\n },\n \"DC1M_cNhw\": {\n \"position\": {\n \"x\": 14,\n \"y\": 16,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"DC1M_cNhw\"\n },\n \"mpE0lBhuJ\": {\n \"position\": {\n \"x\": 22,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"mpE0lBhuJ\"\n },\n \"ZT33Dps6pN\": {\n \"position\": {\n \"x\": 20,\n \"y\": 12,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ZT33Dps6pN\"\n },\n \"FAzndYwQD\": {\n \"position\": {\n \"x\": 19,\n \"y\": 20,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/bow\",\n \"jobKey\": \"pirates/dagger\",\n \"affiliation\": \"bad\",\n \"key\": \"FAzndYwQD\",\n \"imageKey\": \"skeleton\"\n },\n \"IFcjVZyGv\": {\n \"position\": {\n \"x\": 22,\n \"y\": 12,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/hammerknight\",\n \"jobKey\": \"pirates/hammerknight\",\n \"affiliation\": \"bad\",\n \"key\": \"IFcjVZyGv\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": 50\n },\n \"s-GofCsFOonKFtFRO5MfS\": {\n \"position\": {\n \"x\": 20,\n \"y\": 23,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/spear\",\n \"affiliation\": \"bad\",\n \"key\": \"s-GofCsFOonKFtFRO5MfS\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"LK1j-fMXQVom4j8cp1J2d\": {\n \"position\": {\n \"x\": 18,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/sword\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"LK1j-fMXQVom4j8cp1J2d\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n },\n \"s74UTAZyTalctz8gx2INm\": {\n \"position\": {\n \"x\": 17,\n \"y\": 13,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/bow\",\n \"jobKey\": \"pirates/dagger\",\n \"affiliation\": \"bad\",\n \"key\": \"s74UTAZyTalctz8gx2INm\",\n \"imageKey\": \"skeleton\"\n },\n \"YCuGiNUdyb9X2azDVRYR4\": {\n \"position\": {\n \"x\": 15,\n \"y\": 13,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/bow\",\n \"jobKey\": \"pirates/gun\",\n \"affiliation\": \"bad\",\n \"key\": \"YCuGiNUdyb9X2azDVRYR4\",\n \"imageKey\": \"skeleton\"\n },\n \"2qFc4RXxuXy_eYXG5kbcd\": {\n \"position\": {\n \"x\": 18,\n \"y\": 15,\n \"z\": 1\n },\n \"templateKey\": \"jobs/pirates/bow\",\n \"jobKey\": \"pirates/sword\",\n \"affiliation\": \"bad\",\n \"key\": \"2qFc4RXxuXy_eYXG5kbcd\",\n \"imageKey\": \"skeleton\",\n \"maxhealth\": \"30\"\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":33,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13],\n \"height\":33,\n \"id\":6,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,\n 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,\n 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,\n 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,\n 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 13, 13, 13, 0, 13, 13, 13, 13, 0, 0, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":33,\n \"id\":8,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 12, 12, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 12, 12, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 8, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 8, 12, 12, 7, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 12, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 7, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 8, 7, 8, 12, 8, 7, 8, 7, 8, 12, 12, 12, 8, 7, 12, 12, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 8, 12, 0, 12, 8, 7, 12, 12, 0, 0, 8, 7, 8, 7, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 12, 12, 0, 0, 0, 12, 8, 0, 0, 0, 8, 7, 12, 12, 12, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":33,\n \"id\":4,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 3, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 3, 5, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 5, 0, 10, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 5, 5, 3, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 5, 10, 5, 3, 5, 3, 5, 5, 5, 3, 5, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 3, 5, 3, 5, 3, 5, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 5, 3, 10, 3, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":33,\n \"id\":5,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 8, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 8, 4, 0, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 8, 4, 8, 10, 8, 4, 8, 4, 8, 4, 8, 4, 8, 10, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 4, 8, 4, 8, 4, 8, 4, 8, 10, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 8, 4, 8, 4, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 4, 8, 4, 8, 4, 3, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 4, 8, 4, 10, 5, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 8, 4, 10, 0, 10, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":33,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":33,\n \"id\":10,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":false,\n \"width\":33,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":2,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":160,\n \"id\":54,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"4\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":160,\n \"x\":640,\n \"y\":320\n }, \n {\n \"height\":0,\n \"id\":61,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":64\n }, \n {\n \"x\":-32,\n \"y\":64\n }, \n {\n \"x\":-32,\n \"y\":96\n }, \n {\n \"x\":-96,\n \"y\":96\n }, \n {\n \"x\":-96,\n \"y\":128\n }, \n {\n \"x\":-160,\n \"y\":128\n }, \n {\n \"x\":-160,\n \"y\":32\n }, \n {\n \"x\":-96,\n \"y\":32\n }, \n {\n \"x\":-96,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":480,\n \"y\":736\n }, \n {\n \"height\":0,\n \"id\":62,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":160,\n \"y\":0\n }, \n {\n \"x\":160,\n \"y\":160\n }, \n {\n \"x\":96,\n \"y\":160\n }, \n {\n \"x\":96,\n \"y\":224\n }, \n {\n \"x\":64,\n \"y\":224\n }, \n {\n \"x\":64,\n \"y\":192\n }, \n {\n \"x\":32,\n \"y\":192\n }, \n {\n \"x\":32,\n \"y\":160\n }, \n {\n \"x\":0,\n \"y\":160\n }],\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"2\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":512,\n \"y\":640\n }, \n {\n \"height\":192,\n \"id\":65,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"3\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":160,\n \"x\":448,\n \"y\":416\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":4,\n \"name\":\"data:spots\",\n \"objects\":[],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":11,\n \"nextobjectid\":67,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":32,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/tileset.json\"\n }],\n \"tilewidth\":32,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":33\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Step from \"@frog/source/models/Step.js\"\n\nimport player from \"@frog/source/data/games/pirates/player.js\"\nconst PLAYER_CHARACTER = \"swashbuckler\"\n\nexport default {\n \"slug\": \"wild\",\n \"hasPreparePhase\": false,\n\n \"stage\": {\n \"images\": [\n require(\"./tiles.png\"),\n // require(\"./tiles2.png\"),\n ],\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"configuration\": {\n \"darkness\": \"none\",\n },\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat:Normal\")},\n {\n \"type\": \"chapter start\",\n \"data\": [\n \"Chapter 5\",\n \"The Treasure\",\n \"In Which\",\n \"everyone works together\",\n \"until they don't\"\n ]\n },\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"right\"}]}},\n \"text\": \"This is it, the legendary treasure island.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"left\"}]}},\n \"text\": \"These shores are cursed with hordes of undead. But if we work together, we can reach the treasure!\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"mercenary\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"left\"}, {\"key\": \"mercenary\"}]}},\n \"text\": \"And what of Flint? Should I take him out now?\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"left\"}, {\"key\": \"viking\", \"position\": 1}]}},\n \"text\": \"Give me a weapon, and I will help you reach the treasure.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"viking\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"left\"}, {\"key\": \"viking\", \"position\": 1}]}},\n \"text\": \"Give me at least the honor of dying in battle.\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\", \"scene\": {\"units\": [{\"key\": \"swashbuckler\", \"position\": 4, \"direction\": \"left\"}, {\"key\": \"viking\", \"position\": 1}]}},\n \"text\": \"If you cross me, I will give it to you myself.\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"1\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"1\", \"affiliation\": \"good\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2\"\n && stage.turn.number == 2\n && stage.turn.phase == \"start\"\n },\n \"events\": [\n Plotscripts.SpawnUnit({\"key\": \"knight\", \"affiliation\": \"good\", \"spriteKey\": \"purple\", \"position\": {\"x\": 21, \"y\": 23, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"knight\", \"position\": {\"x\": 20, \"y\": 23, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"knight\", \"scene\": {\"units\": [{\"key\": \"knight\", \"position\": 4, \"direction\": \"left\"}]}},\n \"text\": \"My lady, I have come with reinforcements.\",\n }),\n Plotscripts.SpawnUnit({\"key\": \"bard\", \"affiliation\": \"good\", \"spriteKey\": \"purple\", \"position\": {\"x\": 21, \"y\": 24, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 20, \"y\": 24, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"bard\", \"position\": {\"x\": 19, \"y\": 24, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"bard\", \"scene\": {\"units\": [{\"key\": \"knight\", \"position\": 4, \"direction\": \"left\"}, {\"key\": \"bard\", \"direction\": \"left\", \"position\": 2}]}},\n \"text\": \"We're here to help!!\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"2\", \"affiliation\": \"good\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"3\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"3\"\n && stage.turn.number == 2\n && stage.turn.phase == \"start\"\n },\n \"events\": [\n Plotscripts.SpawnUnit({\"key\": \"castaway\", \"affiliation\": \"good\", \"spriteKey\": \"purple\", \"position\": {\"x\": 17, \"y\": 12, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"castaway\", \"affiliation\": \"good\", \"spriteKey\": \"purple\", \"position\": {\"x\": 17, \"y\": 13, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"castaway\", \"scene\": {\"units\": [{\"key\": \"castaway\", \"position\": 4, \"direction\": \"left\"}]}},\n \"text\": \"*mumble* *mumble*\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"3\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"3\", \"affiliation\": \"good\"})\n },\n \"events\": [\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"4\"}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"Finally, the lost treasure. X marks the spot.\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"})\n && stage.tags[\"twist4\"]?.value != true\n && getUnitCount(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"}) > 1\n },\n \"events\": [\n Plotscripts.Dialogue({\"text\": \"...\"}),\n Plotscripts.Dialogue({\"text\": \".....\"}),\n Plotscripts.Dialogue({\"text\": \".......\"}),\n {\"func\": () => Audiomix.trigger(\"Music:Combat:Epic\")},\n Betrayal(0.5, [\"blue\", \"orange\", \"blue\", \"orange\", \"blue\", \"orange\"]),\n\n ConditionalDialogue({\"unitKey\": \"knight\", \"affiliation\": \"blue\", \"text\": \"My lady, this is as far as you go. This treasure is ours.\"}),\n ConditionalDialogue({\"unitKey\": \"mercenary\", \"affiliation\": \"blue\", \"text\": \"Sorry, princess. The money is too good.\"}),\n ConditionalDialogue({\"unitKey\": \"bard\", \"affiliation\": \"blue\", \"text\": \"Such a pile of treasure. Too much to share.\"}),\n ConditionalDialogue({\"unitKey\": \"castaway\", \"affiliation\": \"blue\", \"text\": \"You know not what this treasure can do. Leave it to me.\"}),\n\n ConditionalDialogue({\"unitKey\": \"viking\", \"affiliation\": \"orange\", \"text\": \"Hold back! This treasure is mine.\"}),\n ConditionalDialogue({\"unitKey\": \"bard\", \"affiliation\": \"orange\", \"text\": \"All for one, and one for all~\"}),\n ConditionalDialogue({\"unitKey\": \"mercenary\", \"affiliation\": \"orange\", \"text\": \"Sorry, princess. The money is too good.\"}),\n ConditionalDialogue({\"unitKey\": \"castaway\", \"affiliation\": \"orange\", \"text\": \"You know not what this treasure can do. Leave it to me.\"}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"What is this?\",\n }),\n ConditionalDialogue({\"unitKey\": \"castaway\", \"affiliation\": \"good\", \"text\": \"...Mutiny again?\"}),\n ConditionalDialogue({\"unitKey\": \"knight\", \"affiliation\": \"good\", \"text\": \"I'm at your call, my lady. I will fell these traitorous dogs.\"}),\n ConditionalDialogue({\"unitKey\": \"mercenary\", \"affiliation\": \"good\", \"text\": \"If your word is still good, I'm still good.\"}),\n ConditionalDialogue({\"unitKey\": \"viking\", \"affiliation\": \"good\", \"text\": \"It's been a pleasure fighting alongside you, lass.\"}),\n ConditionalDialogue({\"unitKey\": \"bard\", \"affiliation\": \"good\", \"text\": \"Oho, such drama.\"}),\n Plotscripts.CloseDialogue(),\n Step.deltastage({\"tag\": {\"name\": \"twist4\", \"value\": true}}),\n Step.deltastage({\"turn\": {\"number\": 0, \"phase\": \"start\", \"affiliation\": \"good\"}}),\n {\"type\": \"restart\"},\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && stage.turn.number == 2\n && stage.turn.phase == \"start\"\n },\n \"events\": [\n Plotscripts.SpawnUnit({\"key\": \"yakuza\", \"position\": {\"x\": 25, \"y\": 11, \"z\": 1}, \"affiliation\": \"bad\"}),\n Plotscripts.MoveUnit({\"unitKey\": \"yakuza\", \"position\": {\"x\": 24, \"y\": 11, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"yakuza\"},\n \"text\": \"Aha, excellent work. You have led us right to the treasure.\",\n }),\n Plotscripts.SpawnUnit({\"key\": \"a\", \"jobKey\": \"pirates/gun\", \"imageKey\": \"mafioso\", \"position\": {\"x\": 25, \"y\": 10, \"z\": 1}, \"affiliation\": \"bad\"}),\n Plotscripts.MoveUnit({\"unitKey\": \"a\", \"position\": {\"x\": 24, \"y\": 10, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"a\", \"position\": {\"x\": 23, \"y\": 10, \"z\": 1}}),\n Plotscripts.SpawnUnit({\"key\": \"b\", \"jobKey\": \"pirates/gun\", \"imageKey\": \"mafioso\", \"position\": {\"x\": 25, \"y\": 12, \"z\": 1}, \"affiliation\": \"bad\"}),\n Plotscripts.MoveUnit({\"unitKey\": \"b\", \"position\": {\"x\": 24, \"y\": 12, \"z\": 1}}),\n Plotscripts.MoveUnit({\"unitKey\": \"b\", \"position\": {\"x\": 23, \"y\": 12, \"z\": 1}}),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"yakuza\"},\n \"text\": \"Now perish\",\n }),\n Plotscripts.CloseDialogue(),\n ]\n },\n\n // {\n // \"type\": \"condition\",\n // \"condition\": (stage) => {\n // return stage.currentEncounterKey == \"4\"\n // && stage.tags[\"twist4\"]?.value == true\n // && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"}) == false\n // && stage.units[PLAYER_CHARACTER].isDead == false\n // && stage.turn.affiliation == \"bad\"\n // && stage.turn.phase == \"end\"\n // && stage.turn.number >= 1\n // },\n // \"events\": [\n // Revive(\"bad\", [\n // {\"unitKey\": \"bard\", \"position1\": {\"x\": 24, \"y\": 9}, \"position2\": {\"x\": 24, \"y\": 10}, \"text\": \"bard back\"},\n // {\"unitKey\": \"mercenary\", \"position1\": {\"x\": 19, \"y\": 11}, \"position2\": {\"x\": 20, \"y\": 11}, \"text\": \"merc back\"},\n // {\"unitKey\": \"knight\", \"position1\": {\"x\": 25, \"y\": 13}, \"position2\": {\"x\": 24, \"y\": 13}, \"text\": \"knight back\"},\n // {\"unitKey\": \"viking\", \"position1\": {\"x\": 23, \"y\": 15}, \"position2\": {\"x\": 23, \"y\": 14}, \"text\": \"viking back\"},\n // ])\n // ]\n // },\n // {\n // \"type\": \"condition\",\n // \"condition\": (stage) => {\n // return stage.currentEncounterKey == \"4\"\n // && stage.tags[\"twist4\"]?.value == true\n // && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"}) == false\n // && stage.units[PLAYER_CHARACTER].isDead == false\n // && stage.turn.affiliation == \"good\"\n // && stage.turn.phase == \"start\"\n // && stage.turn.number >= 1\n // },\n // \"events\": [\n // Revive(\"good\", [\n // {\"unitKey\": \"bard\", \"position1\": {\"x\": 24, \"y\": 9}, \"position2\": {\"x\": 24, \"y\": 10}, \"text\": \"bard back\"},\n // {\"unitKey\": \"mercenary\", \"position1\": {\"x\": 19, \"y\": 11}, \"position2\": {\"x\": 20, \"y\": 11}, \"text\": \"merc back\"},\n // {\"unitKey\": \"knight\", \"position1\": {\"x\": 25, \"y\": 13}, \"position2\": {\"x\": 24, \"y\": 13}, \"text\": \"knight back\"},\n // {\"unitKey\": \"viking\", \"position1\": {\"x\": 23, \"y\": 15}, \"position2\": {\"x\": 23, \"y\": 14}, \"text\": \"viking back\"},\n // ])\n // ]\n // },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && stage.tags[\"twist4\"]?.value == true\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"})\n && stage.units[PLAYER_CHARACTER].isDead == false\n && getUnitCount(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"}) > 1\n },\n \"events\": [\n Betrayal(1.0, [\"neutral\"]),\n Plotscripts.Dialogue({\n \"text\": \"...\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"Oh no, not you too\",\n }),\n ConditionalDialogue({\"unitKey\": \"bard\", \"affiliation\": \"neutral\", \"text\": \"Did you think it'd go any other way?\"}),\n ConditionalDialogue({\"unitKey\": \"mercenary\", \"affiliation\": \"neutral\", \"text\": \"Sorry, princess. The money is too good.\"}),\n ConditionalDialogue({\"unitKey\": \"knight\", \"affiliation\": \"neutral\", \"text\": \"Your father has sent me to retrieve you. Now that you've had your fun, we must now return.\"}),\n ConditionalDialogue({\"unitKey\": \"viking\", \"affiliation\": \"neutral\", \"text\": \"I thank you for getting me this far. Now engarde!!\"}),\n ConditionalDialogue({\"unitKey\": \"castaway\", \"affiliation\": \"neutral\", \"text\": \"This gold be cursed. I cannot let its evil spread.\"}),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && stage.tags[\"twist4\"]?.value == true\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"encounterKey\": \"4\", \"affiliation\": \"good\"})\n && stage.units[PLAYER_CHARACTER].isDead == false\n && getUnitCount(stage, {\"encounterKey\": \"4\"}) == 1\n },\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Menu\")},\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"Ha!! That should do it!!\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"...\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": \"swashbuckler\"},\n \"text\": \"Now how am I going to get all this back to the ship??\",\n }),\n Plotscripts.CloseDialogue(),\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/pirates\")},\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": function(stage) {\n return stage.units[PLAYER_CHARACTER].isDead == true\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n },\n ]\n },\n}\n\nfunction Revive(affiliation, revivals) {\n return (stage) => {\n revivals = Random.shuffle(revivals.filter((revival) => {\n const unit = stage.units[revival.unitKey]\n return unit != undefined\n && unit.isDead == true\n && unit.affiliation == \"good\"\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey], unit.position) == false\n }))\n if(revivals.length == 0) return\n const revival = revivals.pop()\n revival.position1.z = 1\n revival.position2.z = 1\n return [\n Step.deltastage({\n \"unit\": {\n \"key\": revival.unitKey,\n \"isDead\": false,\n \"health\": 10,\n \"affiliation\": affiliation,\n \"position\": revival.position2,\n }\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": revival.unitKey},\n \"text\": revival.text,\n }),\n Plotscripts.CloseDialogue(),\n // Plotscripts.MoveUnit({\n // \"unitKey\": revival.unitKey,\n // \"position\": {\n // \"x\": revival.position2.x,\n // \"y\": revival.position2.y,\n // \"z\": revival.position2.z ?? 1,\n // }\n // }),\n ]\n }\n}\n\nfunction Betrayal(percentage, betrayalAffiliations) {\n betrayalAffiliations = betrayalAffiliations || [\"bad\"]\n percentage = percentage ?? 1.0\n return (stage) => {\n\n const step = {\"deltastages\": []}\n\n const remainingUnits = Random.shuffle(Object.values(stage.units).filter((unit) => {\n return unit.isDead != true\n && unit.affiliation == \"good\"\n && unit.key != PLAYER_CHARACTER\n }))\n\n const betrayingUnits = []\n for(let index = 0; index < Math.ceil(remainingUnits.length * percentage); index += 1) {\n const unit = remainingUnits[index]\n if(unit == undefined) continue\n\n let affiliation = unit.preferredAffilation\n if(affiliation == undefined) {\n affiliation = betrayalAffiliations[0]\n betrayalAffiliations.push(betrayalAffiliations.unshift())\n }\n\n step.deltastages.push({\n \"unit\": {\n \"key\": unit.key,\n \"affiliation\": affiliation,\n }\n })\n }\n\n return step\n }\n}\n\nfunction ConditionalDialogue({unitKey, affiliation, text}) {\n return function(stage) {\n if(stage.units[unitKey] == undefined) return\n if(stage.units[unitKey].affiliation != affiliation) return\n if(stage.units[unitKey].isDead == true) return\n return [\n affiliation != \"good\" && Step.deltastage({\n \"unit\": {\n \"key\": unitKey,\n \"spriteKey\": affiliation\n }\n }),\n affiliation != \"good\" && Plotscripts.Dialogue({\n \"text\": stage.units[unitKey].name.toUpperCase() + \" HAS MUTINIED\",\n }),\n Plotscripts.Dialogue({\n \"data\": {\"speakerKey\": unitKey},\n \"text\": text,\n })\n ]\n }\n}\n\nfunction getUnitCount(stage, {affiliation}) {\n return Object.values(stage.units).filter((unit) => {\n return (unit.affiliation == affiliation || affiliation == undefined)\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey], unit.position) == true\n && unit.isDead != true\n && unit.type != \"zone\"\n }).length\n}\n", "{\n \"fl7LF7OMw\": {\n \"position\": {\n \"x\": 8,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"fl7LF7OMw\"\n },\n \"P-I4kAjX1\": {\n \"position\": {\n \"x\": 9,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"P-I4kAjX1\"\n },\n \"jBQyzTyt5G\": {\n \"position\": {\n \"x\": 8,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"jBQyzTyt5G\"\n },\n \"6xzGZX30N\": {\n \"position\": {\n \"x\": 9,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"6xzGZX30N\"\n },\n \"B6d_21K7W\": {\n \"position\": {\n \"x\": 10,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"B6d_21K7W\"\n },\n \"H09gzlm5u2\": {\n \"position\": {\n \"x\": 10,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"H09gzlm5u2\"\n },\n \"RevRaS5Po\": {\n \"position\": {\n \"x\": 11,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"RevRaS5Po\"\n },\n \"kCF9iJMYUt\": {\n \"position\": {\n \"x\": 11,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"kCF9iJMYUt\"\n },\n \"TzRLMzWD2\": {\n \"position\": {\n \"x\": 15,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"TzRLMzWD2\"\n },\n \"BKzs6UA3a\": {\n \"position\": {\n \"x\": 16,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"BKzs6UA3a\"\n },\n \"TCBnFIoEBC\": {\n \"position\": {\n \"x\": 15,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"TCBnFIoEBC\"\n },\n \"I0qP2ks9D\": {\n \"position\": {\n \"x\": 16,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"I0qP2ks9D\"\n },\n \"w8VA8Ng-N\": {\n \"position\": {\n \"x\": 22,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"w8VA8Ng-N\"\n },\n \"ox8N8DK7UK\": {\n \"position\": {\n \"x\": 22,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ox8N8DK7UK\"\n },\n \"2r8zbiHNk\": {\n \"position\": {\n \"x\": 23,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"2r8zbiHNk\"\n },\n \"fCBFIbGbSr\": {\n \"position\": {\n \"x\": 23,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"zone\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"fCBFIbGbSr\"\n },\n \"wZ9fnBZRF\": {\n \"position\": {\n \"x\": 8,\n \"y\": 11,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"wZ9fnBZRF\"\n },\n \"uQGbK3XKc2\": {\n \"position\": {\n \"x\": 9,\n \"y\": 11,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"uQGbK3XKc2\"\n },\n \"ZoxS6TCtk\": {\n \"position\": {\n \"x\": 13,\n \"y\": 9,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"ZoxS6TCtk\"\n },\n \"RAdVd0SVx0\": {\n \"position\": {\n \"x\": 13,\n \"y\": 10,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"RAdVd0SVx0\"\n },\n \"pHAkHx5M5\": {\n \"position\": {\n \"x\": 15,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"pHAkHx5M5\"\n },\n \"CVftyP9bXK\": {\n \"position\": {\n \"x\": 16,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"CVftyP9bXK\"\n },\n \"GWV0Pn0tN\": {\n \"position\": {\n \"x\": 20,\n \"y\": 9,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"GWV0Pn0tN\"\n },\n \"bhwKJKj61r\": {\n \"position\": {\n \"x\": 20,\n \"y\": 10,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"bhwKJKj61r\"\n },\n \"cRnhYhoPU\": {\n \"position\": {\n \"x\": 22,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"cRnhYhoPU\"\n },\n \"5r9sayYLQ\": {\n \"position\": {\n \"x\": 23,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"5r9sayYLQ\"\n }\n}", "{ \"compressionlevel\":-1,\n \"height\":23,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,\n 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,\n 4, 4, 0, 4, 0, 4, 0, 4, 4, 4, 4, 0, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4,\n 0, 4, 4, 4, 4, 4, 0, 4, 4, 0, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 0,\n 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0, 4, 4, 0,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 3221225478, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3,\n 3221225478, 5, 5, 6, 6, 6, 6, 6, 5, 5, 6, 6, 6, 6, 6, 5, 5, 6, 6, 6, 6, 6, 5, 5, 6, 6, 6, 6, 6, 5, 5, 6, 6, 6,\n 3221225478, 5, 5, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0,\n 3221225478, 5, 5, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 3, 3, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 3, 3, 6, 0, 0,\n 3221225478, 3, 3, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 6, 6, 6, 6, 0, 0,\n 6, 6, 6, 6, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 6, 5, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 6, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":23,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":34,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":2,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":64,\n \"id\":61,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":160,\n \"x\":320,\n \"y\":288\n }, \n {\n \"height\":224,\n \"id\":67,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":64,\n \"x\":256,\n \"y\":288\n }, \n {\n \"height\":0,\n \"id\":69,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":-160\n }, \n {\n \"x\":224,\n \"y\":-160\n }, \n {\n \"x\":224,\n \"y\":-96\n }, \n {\n \"x\":64,\n \"y\":-96\n }, \n {\n \"x\":64,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"3\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":480,\n \"y\":448\n }, \n {\n \"height\":0,\n \"id\":70,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":160\n }, \n {\n \"x\":64,\n \"y\":160\n }, \n {\n \"x\":64,\n \"y\":64\n }, \n {\n \"x\":224,\n \"y\":64\n }, \n {\n \"x\":224,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"4\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":704,\n \"y\":288\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":3,\n \"nextobjectid\":71,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":32,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/tileset.json\"\n }],\n \"tilewidth\":32,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":34\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nexport default {\n \"slug\": \"tavern\",\n \"hasPreparePhase\": false,\n\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"configuration\": {\n \"darkness\": \"none\",\n },\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Pirate:Music:Combat:3\")},\n Plotscripts.SpawnPlayerPartyScript(),\n Plotscripts.CloseDialogue(),\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"1\"\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"1\"})\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript(),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"2\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"2\"\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"2\"})\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript(),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"3\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"3\"\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"3\"})\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript(),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": \"4\"})\n ]\n },\n {\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n return stage.currentEncounterKey == \"4\"\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\", \"encounterKey\": \"4\"})\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/pirates\")},\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": function(stage) {\n return Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n },\n ]\n },\n}\n", "export default {\n \"slug\": \"pirates\",\n \"title\": \"This Be Mutiny!\",\n \"firstChapterKey\": \"ship\",\n \"player\": require(\"./player.js\").default,\n \"chapters\": {\n \"ship\": require(\"./ship\").default,\n \"prison\": require(\"./prison\").default,\n \"wild\": require(\"./wild\").default,\n \"tavern\": require(\"./tavern\").default,\n },\n \"configuration\": {\n \"darkness\": false,\n \"squigglevision\": false,\n },\n}\n", "const unitTemplates = {}\n\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nObject.keys(unitJobs).forEach((unitJobKey) => {\n const unit = unitJobs[unitJobKey]\n unitTemplates[\"jobs/\" + unitJobKey] = {\n \"templateKey\": \"jobs/\" + unitJobKey,\n \"jobKey\": unitJobKey,\n \"affiliation\": \"bad\",\n }\n})\n\nexport const UNIT_JOB_LISTS = {\n \"infantry\": [\"sword\", \"spear\", \"hammer\"],\n \"ranged\": [\"dagger\", \"bow\", \"gun\"],\n \"mounted\": [\"swordcavalier\", \"spearcavalier\", \"hammercavalier\"],\n \"armored\": [\"swordknight\", \"spearknight\", \"hammerknight\"],\n \"swordhavers\": [\"sword\", \"dagger\", \"swordknight\", \"swordcavalier\"],\n \"spearhavers\": [\"spear\", \"bow\", \"spearknight\", \"spearcavalier\"],\n \"hammerhavers\": [\"hammer\", \"gun\", \"hammerknight\", \"hammercavalier\"],\n \"melee\": [\n \"sword\", \"spear\", \"hammer\",\n \"swordknight\", \"spearknight\", \"hammerknight\",\n \"swordcavalier\", \"spearcavalier\", \"hammercavalier\"\n ],\n \"basic\": [\n \"sword\", \"spear\", \"hammer\",\n \"dagger\", \"bow\"\n ],\n \"advanced\": [\n \"sword\", \"spear\", \"hammer\", \"dagger\", \"bow\",\n \"sword\", \"spear\", \"hammer\", \"dagger\", \"bow\",\n \"swordknight\", \"spearknight\", \"hammerknight\",\n \"swordcavalier\", \"spearcavalier\", \"hammercavalier\",\n ]\n}\nfor (const [key, value] of Object.entries(UNIT_JOB_LISTS)) {\n unitTemplates[\"randoms/\" + key] = {\n \"randomJobKey\": value.join(\",\"),\n \"templateKey\": \"randoms/\" + key,\n \"affiliation\": \"bad\",\n }\n}\n\nunitTemplates[\"spawnspot\"] = {\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n}\n\nimport game from \"@frog/source/data/games/pirates/index.js\"\nObject.keys(game.player.party.units).forEach((unitKey) => {\n unitTemplates[\"player/pirates/\" + unitKey] = {\n \"templateKey\": \"player/pirates/\" + unitKey,\n \"key\": unitKey\n }\n})\n\nexport default unitTemplates\n", "const palettes = {\n \"red\": {\n \"colors\": [\n {\n \"r\": 128,\n \"g\": 160,\n \"b\": 128,\n \"a\": 0\n },\n {\n \"r\": 104,\n \"g\": 72,\n \"b\": 96\n },\n {\n \"r\": 192,\n \"g\": 168,\n \"b\": 184\n },\n {\n \"r\": 224,\n \"g\": 224,\n \"b\": 224\n },\n {\n \"r\": 112,\n \"g\": 96,\n \"b\": 96\n },\n {\n \"r\": 176,\n \"g\": 144,\n \"b\": 88\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 208\n },\n {\n \"r\": 96,\n \"g\": 40,\n \"b\": 32\n },\n {\n \"r\": 168,\n \"g\": 48,\n \"b\": 40\n },\n {\n \"r\": 224,\n \"g\": 16,\n \"b\": 16\n },\n {\n \"r\": 248,\n \"g\": 80,\n \"b\": 72\n },\n {\n \"r\": 56,\n \"g\": 208,\n \"b\": 48\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 64\n },\n {\n \"r\": 128,\n \"g\": 136,\n \"b\": 112\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 248\n },\n {\n \"r\": 64,\n \"g\": 56,\n \"b\": 56\n }\n ]\n },\n \"blue\": {\n \"colors\": [\n {\n \"r\": 128,\n \"g\": 160,\n \"b\": 128,\n \"a\": 0\n },\n {\n \"r\": 88,\n \"g\": 72,\n \"b\": 120\n },\n {\n \"r\": 144,\n \"g\": 184,\n \"b\": 232\n },\n {\n \"r\": 216,\n \"g\": 232,\n \"b\": 240\n },\n {\n \"r\": 112,\n \"g\": 96,\n \"b\": 96\n },\n {\n \"r\": 176,\n \"g\": 144,\n \"b\": 88\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 208\n },\n {\n \"r\": 56,\n \"g\": 56,\n \"b\": 144\n },\n {\n \"r\": 56,\n \"g\": 80,\n \"b\": 224\n },\n {\n \"r\": 40,\n \"g\": 160,\n \"b\": 248\n },\n {\n \"r\": 24,\n \"g\": 240,\n \"b\": 248\n },\n {\n \"r\": 232,\n \"g\": 16,\n \"b\": 24\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 64\n },\n {\n \"r\": 128,\n \"g\": 136,\n \"b\": 112\n },\n {\n \"r\": 248,\n \"g\": 248,\n \"b\": 248\n },\n {\n \"r\": 64,\n \"g\": 56,\n \"b\": 56\n }\n ]\n }\n}\n\nfunction areSameColor(a, b) {\n return a.r == b.r\n && a.g == b.g\n && a.b == b.b\n}\n\nfunction getColorAtIndex(array, index) {\n return {\n \"r\": array[index + 0],\n \"g\": array[index + 1],\n \"b\": array[index + 2],\n \"a\": array[index + 3],\n }\n}\n\nfunction setColorAtIndex(array, index, color) {\n array[index + 0] = color.r ?? 0\n array[index + 1] = color.g ?? 0\n array[index + 2] = color.b ?? 0\n array[index + 3] = color.a ?? 255\n}\n\nexport default function PaletteSwapped(imageElement, paletteKey) {\n if(imageElement == undefined) return undefined\n if(imageElement.isLoaded != true) return undefined\n\n if(paletteKey == undefined) return undefined\n if(palettes[paletteKey] == undefined) return undefined\n\n const canvas = document.createElement(\"canvas\")\n canvas.context = canvas.getContext(\"2d\")\n canvas.width = 64\n canvas.height = 48\n\n canvas.context.drawImage(imageElement, 0, 0)\n\n if(paletteKey == \"blue\") return canvas.toDataURL()\n\n const pixels = canvas.context.getImageData(0, 0, canvas.width, canvas.height)\n for(let index = 0; index < pixels.data.length; index += 4) {\n const sampledColor = getColorAtIndex(pixels.data, index)\n\n const BASE_PALETTE = palettes[\"blue\"]\n BASE_PALETTE.colors.find((color, colorIndex) => {\n if(areSameColor(color, sampledColor)) {\n setColorAtIndex(pixels.data, index, palettes[paletteKey].colors[colorIndex])\n }\n })\n }\n canvas.context.putImageData(pixels, 0, 0)\n\n return canvas.toDataURL()\n}\n", "import PaletteSwap from \"@frog/source/juice/utility/PaletteSwap.js\"\n\nexport default class Preload {\n constructor(preload) {\n this.images = preload.images\n\n this.loadedImageCount = 0\n this.totalImageCount = Object.values(this.images).length\n\n window.frog = window.frog || {}\n window.frog.preload = this\n\n this.callbacks = []\n\n Object.values(this.images).forEach((image) => {\n image.element = new Image()\n image.element.src = image.url\n image.element.addEventListener(\"load\", () => {\n image.element.isLoaded = true\n\n if(image.paletteKeys != undefined) {\n image.palettes = {}\n image.paletteKeys.forEach((paletteKey) => {\n image.palettes[paletteKey] = PaletteSwap(image.element, paletteKey)\n })\n }\n\n image.isLoaded = true\n this.loadedImageCount += 1\n\n if(this.loadedImageCount >= this.totalImageCount) {\n this.callbacks.forEach((callback) => callback())\n }\n })\n })\n }\n get isLoading() {\n // if(audiotriggers[\"Hell:Opening:Music\"].readyState < 4) return true\n // if(audiotriggers[\"Hell:Opening:Narration\"].readyState < 4) return true\n if(document.fonts.check(\"12px base\") == false) return true\n if(document.fonts.check(\"12px header\") == false) return true\n if((this.loadedImageCount / this.totalImageCount) < 1) return true\n return false\n }\n onLoad(callback) {\n if(this.isLoading == true) {\n this.callbacks.push(callback)\n } else {\n callback()\n }\n }\n}\n", "import Objdict from \"objdict\"\nimport Preload from \"@frog/source/utility/Preload.js\"\n\nconst preload = new Preload({\n \"images\": Objdict.convert(Object.values({\n \"0\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/0.png\"),\n \"1\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/1.png\"),\n \"2\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/2.png\"),\n \"3\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/3.png\"),\n \"4\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/4.png\"),\n \"5\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/5.png\"),\n \"6\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/6.png\"),\n \"7\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/7.png\"),\n \"8\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/8.png\"),\n \"9\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/9.png\"),\n \"10\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/10.png\"),\n \"11\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/11.png\"),\n \"12\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/12.png\"),\n \"13\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/13.png\"),\n \"14\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/14.png\"),\n \"15\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/15.png\"),\n }).map((imageURL) => {\n return {\"url\": imageURL}\n }), \"url\")\n})\n\nexport default preload\n", "import Dev from \"@frog/source/models/admin/Dev.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport unitTemplates from \"@frog/source/data/unitTemplates.js\"\nimport {nanoid} from \"nanoid\"\nimport Objdict from \"objdict\"\nimport Random from \"@frog/source/utility/Random.js\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport { DefeatAllUnitsOfAffiliation, HealPlayerPartyScript, Dialogue, MoveUnit, MoveEncounterScript, EscapeScript, SpawnUnitsScript } from \"@frog/source/data/plotscripts.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nimport preload from \"@frog/source/data/games/dungeon/preload.js\"\n\n// import procedurallyGenerateChapters from \"@frog/source/data/games/dungeon/chapters.js\"\n// import games from \"@frog/source/data/games/index.js\"\n\nconst tilesize = 96\nconst gridMax = 5\nconst roomSize = 6\nconst gridMargin = 2\nconst chapterWidth = gridMax * (roomSize + 1) + gridMargin * 2\nconst chapterHeight = gridMax * (roomSize + 1) + gridMargin * 2\n\nfunction DungeonDeathModal(stage,) {\n function step({phase, duration}) {\n return {\n \"duration\": duration || Infinity,\n \"isImportant\": true,\n \"deltastages\": [\n {\n \"dialogue\": {\n \"type\": \"DungeonDeathModal\",\n \"data\": {\"phase\": phase, \"time\": Date.now()}\n }\n }\n ]\n }\n }\n const steps = [\n step({\"phase\": 0, \"duration\": 100}), // blank\n step({\"phase\": 1, \"duration\": 1000}), // fade in\n step({\"phase\": 1.5, \"duration\": 1000}), // victory\n step({\"phase\": 2}), // stars\n step({\"phase\": 3}), // enemies\n step({\"phase\": 4, \"duration\": 1000}), // allies\n ]\n\n // steps.push({\"func\": () => {\n // console.log(\"RESTARTING GAME\")\n // App.game.player.party.units[\"swordlich\"].skills = [\n // \"inflict-damage\",\n // \"rally\",\n // \"recruit\",\n // ]\n // const newGame = {\n // \"slug\": \"dungeon\",\n // \"title\": \"Grimrawr\",\n // \"firstChapterKey\": \"wrath\",\n // \"chapters\": procedurallyGenerateChapters(),\n // \"configuration\": App.game.configuration,\n // \"player\": App.game.player.party,\n // }\n // const chapter = newGame.chapters[\"1\"]\n // games[\"dungeon\"] = newGame\n // App.load({\"game\": {...newGame, chapter}})\n // Navigation.state = {\"screen\": \"ChapterScreen\", \"gameSlug\": \"dungeon\", \"chapterSlug\": \"1\"}\n // }})\n\n return steps\n}\n\nexport class Dungeon {\n constructor(level) {\n this.rooms = []\n this.roomGrid = [...Array(gridMax)].map(e => Array(gridMax))\n this.level = level\n this.color = level.groundColor\n\n let encounterX = 2\n let encounterY = 2\n let previousRoom = undefined\n for(let roomNumber = 0; roomNumber < (level.roomCount || 6); roomNumber++) {\n const newRoom = new StationgridRoom(roomNumber + 1,\n gridMargin + encounterX * (roomSize + 1),\n gridMargin + encounterY * (roomSize + 1),roomSize,roomSize,level)\n this.rooms.push(newRoom)\n this.roomGrid[encounterX][encounterY] = newRoom\n\n // TODO: place doors\n // newRoom.doorX = (previousRoom.x-newRoom.x)\n\n newRoom.previousRoom = previousRoom\n previousRoom = newRoom\n\n let nextDirections = [[1,0],[0,1],[-1,0],[0,-1]]\n nextDirections = nextDirections.filter((direction) => {\n return (\n encounterX + direction[0] < gridMax\n && encounterX + direction[0] >= 0\n && encounterY + direction[1] < gridMax\n && encounterY + direction[1] >= 0\n && this.roomGrid[encounterX + direction[0]][encounterY + direction[1]] == undefined\n )\n })\n if(nextDirections.length == 0) break\n const randomDirection = nextDirections[Math.floor(Math.random() * nextDirections.length)]\n encounterX += randomDirection[0]\n encounterY += randomDirection[1]\n }\n }\n drawEnvironment(color) {\n const myCanvas = document.createElement(\"canvas\")\n const ctx = myCanvas.getContext(\"2d\")\n //ctx.imageSmoothingEnabled = false\n // /ctx.translate(0.5, 0.5)\n ctx.canvas.width = chapterWidth * tilesize\n ctx.canvas.height = chapterHeight * tilesize\n\n ctx.fillStyle = \"rgb(\" + color.R / 3 + \",\" + color.G / 3 + \",\" + color.B / 3 + \")\"\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n\n this.rooms.forEach((room) => {\n room.drawEnvironment(ctx,color)\n })\n\n return myCanvas.toDataURL()\n }\n generateUnits() {\n let generatedUnits = []\n\n this.rooms.forEach((room) => {\n generatedUnits = Object.assign({}, generatedUnits, room.units)\n })\n\n return generatedUnits\n }\n generateWorld() {\n const world = {\n \"width\": chapterWidth,\n \"height\": chapterHeight,\n \"zones\": {},\n }\n\n this.rooms.forEach((room) => {\n world.zones[room.encounter.slug] = room.encounter\n world.terrain = Object.assign({}, world.terrain, room.terrain)\n })\n\n return world\n }\n generateChapter({chapterSlug, nextURL, openingMessage}) {\n const chapter = {\n \"slug\": chapterSlug,\n \"hasPreparePhase\": false,\n \"startingEncounter\": \"1\",\n\n \"stage\": {\n \"world\": this.generateWorld(),\n \"units\": this.generateUnits(),\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n Plotscripts.SpawnPlayerPartyScript(),\n {\"func\": () => Audiomix.trigger(\"Hell:Opening:Music\")},\n // {\n // \"type\": \"chapter start\",\n // \"data\": openingMessage\n // },\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"good\",\n })\n },\n \"events\": [\n {\"deltastages\": [{\"phase\": \"success\"}]},\n DungeonDeathModal,\n ]\n },\n ],\n },\n }\n\n preload.onLoad(() => {\n chapter.stage.image = this.drawEnvironment(this.color)\n })\n\n for(let index = 1; index <= this.level.roomCount; index += 1) {\n if(index < this.level.roomCount) {\n chapter.stage.conditions.push({\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": index,\n })\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript({\"percent\": 0.5}),\n MoveEncounterScript({\"nextEncounterKey\": index + 1}),\n ]\n })\n } else if(index == this.level.roomCount) {\n chapter.stage.conditions.push({\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": index,\n })\n },\n \"events\": [\n {\"deltastages\": [{\"phase\": \"success\"}]},\n {\"func\": () => Audiomix.trigger(\"Hell:Music:Victory\")},\n Plotscripts.ChapterSuccessModal,\n Plotscripts.UpdatePlayerPartyScript(),\n (stage) => {\n const unitJobKeys = {}\n Object.values(stage.units).forEach((unit) => {\n if(unit.affiliation == \"bad\") {\n unitJobKeys[unit.jobKey] = true\n }\n })\n if(Object.values(App.game.player.party.units).length > 4) return\n return {\n \"type\": \"StartDialogue\",\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"type\": \"CharacterDraftBox\",\n \"data\": {\n \"unitJobKeys\": Random.shuffle(Object.keys(unitJobKeys)).slice(0, 3),\n \"maskUnit\": {\n \"faceKey\": this.level.maskUnit.faceKey + \"zombie\",\n \"skills\": this.level.maskUnit.skills,\n },\n \"nextURL\": nextURL\n }\n }\n }\n ]\n }\n }\n ]\n })\n }\n }\n\n return chapter\n }\n}\n\nfunction fillTilesRectangle(ctx,leftCornerX,topCornerY, width,height) {\n ctx.fillRect(leftCornerX * tilesize,topCornerY * tilesize,\n width * tilesize,height * tilesize)\n}\nfunction drawTileLine(ctx, x1, y1, x2, y2) {\n ctx.beginPath()\n ctx.moveTo(Math.floor(x1 * tilesize), Math.floor(y1 * tilesize))\n ctx.lineTo(Math.floor(x2 * tilesize), Math.floor(y2 * tilesize))\n ctx.lineWidth = 10\n ctx.strokeStyle = 'rgba(0,0,0,1.0)'\n ctx.stroke()\n}\nfunction drawRoughTileLine(ctx, x1, y1, x2, y2) {\n ctx.beginPath()\n let ySkew = 0\n let xSkew = 0\n const MARGIN = Math.floor(Math.random() * 15)\n const JITTER = 7\n const JITTER_MEAN = Math.ceil(JITTER/2)\n if(y1 == y2) {\n ctx.moveTo(Math.floor(x1 * tilesize + MARGIN), Math.floor(y1 * tilesize + Math.random() * JITTER - JITTER_MEAN))\n ctx.lineTo(Math.floor(x2 * tilesize - MARGIN), Math.floor(y2 * tilesize + Math.random() * JITTER - JITTER_MEAN))\n }\n if(x1 == x2) {\n ctx.moveTo(Math.floor(x1 * tilesize + Math.random() * JITTER - JITTER_MEAN), Math.floor(y1 * tilesize + MARGIN))\n ctx.lineTo(Math.floor(x2 * tilesize + Math.random() * JITTER - JITTER_MEAN), Math.floor(y2 * tilesize - MARGIN))\n }\n ctx.lineWidth = 4\n ctx.strokeStyle = `rgba(0,0,0,0.2)`\n ctx.stroke()\n}\nfunction randomStationLayout(stationLayouts) {\n const keys = Object.keys(stationLayouts)\n let station = stationLayouts[keys[Math.floor(keys.length * Math.random())]]\n if(Math.random() < 0.5) {\n let flippedStation = structuredClone(station)\n flippedStation[0][0] = station[1][0]\n flippedStation[1][0] = station[0][0]\n flippedStation[0][1] = station[1][1]\n flippedStation[1][1] = station[0][1]\n station = flippedStation\n }\n const randomRotationPull = Math.random()\n if(randomRotationPull < 0.25) {\n let flippedStation = structuredClone(station)\n flippedStation[0][0] = station[1][0]\n flippedStation[1][0] = station[1][1]\n flippedStation[1][1] = station[0][1]\n flippedStation[0][1] = station[0][0]\n station = flippedStation\n return station\n }\n if(randomRotationPull < 0.5) {\n let flippedStation = structuredClone(station)\n flippedStation[0][0] = station[1][1]\n flippedStation[1][0] = station[0][1]\n flippedStation[1][1] = station[0][0]\n flippedStation[0][1] = station[1][0]\n station = flippedStation\n return station\n }\n if(randomRotationPull < 0.75) {\n let flippedStation = structuredClone(station)\n flippedStation[0][0] = station[0][1]\n flippedStation[1][0] = station[0][0]\n flippedStation[1][1] = station[1][0]\n flippedStation[0][1] = station[1][1]\n station = flippedStation\n return station\n }\n return station\n}\nfunction calculateSquareEncounter({slug, cornerX, cornerY, width, height}) {\n const points = []\n const corners = [\n {\"x\": 0, \"y\": 0},\n {\"x\": 1, \"y\": 0},\n {\"x\": 1, \"y\": 1},\n {\"x\": 0, \"y\": 1}\n ]\n corners.forEach((corner) => {\n points.push({\n \"x\": corner.x * width + cornerX,\n \"y\": corner.y * height + cornerY,\n })\n })\n const encounter = {\n \"slug\": slug,\n \"name\": slug == 6 ? \"The Boss\" : undefined,\n \"zoomout\": 1,\n \"points\": points,\n }\n\n return calculateEncounterGeometryFromPolygon(encounter)\n}\nfunction calculatePolygonalEncounterWithTerrain({slug, terrain, cornerX, cornerY, width, height}) {\n const encounter = {\n \"slug\": slug,\n \"name\": slug == 6 ? \"The Boss\" : undefined,\n \"zoomout\": 1,\n \"points\": [],\n }\n const corners = [\n {\"x\": 0, \"y\": 0},\n {\"x\": 1, \"y\": 0},\n {\"x\": 1, \"y\": 1},\n {\"x\": 0, \"y\": 1}\n ]\n corners.forEach((corner) => {\n encounter.points.push({\n \"x\": cornerX + corner.x * width,\n \"y\": cornerY + corner.y * height,\n })\n })\n\n return calculateEncounterGeometryFromPolygon(encounter)\n}\nexport function calculateEncounterGeometryFromPolygon(encounter) {\n\n // We expect all points to be defined in clockwise\n // order, particularly for rendering the polygon.\n // If the encounter was defined counterclockwise,\n // go ahead and reverse the order of the points.\n // We can check if the encounter was defined in\n // counterclockwise order by computing the area.\n // If its area is negative, it is counterclockwise.\n encounter.area = Geometry.area(encounter.points)\n if(encounter.area < 0) encounter.points.reverse()\n\n encounter.points.forEach((point, index) => {\n const a = encounter.points[(index + 0) % encounter.points.length]\n const b = encounter.points[(index + 1) % encounter.points.length]\n const c = encounter.points[(index + 2) % encounter.points.length]\n b.internalAngle = Geometry.direction(a, c)\n b.internalAngle = Geometry.rotate(b.internalAngle, 90)\n })\n\n encounter.x1 = Math.min(...encounter.points.map((point) => point.x))\n encounter.x2 = Math.max(...encounter.points.map((point) => point.x))\n encounter.y1 = Math.min(...encounter.points.map((point) => point.y))\n encounter.y2 = Math.max(...encounter.points.map((point) => point.y))\n encounter.z = 1\n encounter.x = encounter.x1\n encounter.y = encounter.y1\n encounter.width = encounter.x2 - encounter.x1\n encounter.height = encounter.y2 - encounter.y1\n encounter.center = {\n \"x\": encounter.x + ((encounter.x2 - encounter.x1) / 2) + 0.5,\n \"y\": encounter.y + ((encounter.y2 - encounter.y1) / 2) + 0.5\n }\n encounter.zone = encounter\n\n return encounter\n}\nfunction proscribeTerrainFromStationsAndTiles({stations, tiles, cornerX, cornerY}) {\n const terrain = {}\n tiles.forEach((tile) => {\n terrain[tile.x + \"x\" + tile.y] = {\n \"position\": {\"x\": tile.x, \"y\": tile.y, \"z\": 0},\n \"size\": {\"x\": 1, \"y\": 1, \"z\": 1},\n }\n terrain[tile.x + \"x\" + tile.y].hasCollision = false\n })\n Object.entries(stations).forEach(([key,value]) => {\n const stationCornerX = cornerX + value.position.x\n const stationCornerY = cornerY + value.position.y\n let y = stationCornerY\n value.layout.forEach((row) => {\n let x = stationCornerX\n row.forEach((element) => {\n if(element.collision == true) {\n terrain[x + \"x\" + y].hasCollision = true\n }\n x += 1\n })\n y += 1\n })\n })\n\n return terrain\n}\n\nloadedImages = {\n \"0\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/0.png\"),\n \"1\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/1.png\"),\n \"2\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/2.png\"),\n \"3\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/3.png\"),\n \"4\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/4.png\"),\n \"5\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/5.png\"),\n \"6\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/6.png\"),\n \"7\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/7.png\"),\n \"8\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/8.png\"),\n \"9\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/9.png\"),\n \"10\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/10.png\"),\n \"11\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/11.png\"),\n \"12\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/12.png\"),\n \"13\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/13.png\"),\n \"14\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/14.png\"),\n \"15\": require(\"@frog/source/assets/images/dungeon-tactics/tiles/15.png\"),\n}\nconst tileImages = []\nfor(let wangIndex = 0; wangIndex < 16; wangIndex++) {\n tileImages[wangIndex] = new Image()\n tileImages[wangIndex].src = loadedImages[wangIndex+\"\"]\n}\nfunction checkPositionAgainstPolygonAndTerrain(position, terrain, zone) {\n return (Zone.isOutOfBounds(zone, position)\n || terrain[position.x + \"x\" + position.y].hasCollision == true)\n}\nexport function drawTiledRoom({canvas, color, terrain, border}) {\n const checkOccupancy = border.outOfZoneCheck || checkPositionAgainstPolygonAndTerrain\n\n for(var x = border.x1 - 1; x < border.x2 + 1; x++) {\n for(var y = border.y1 - 1; y < border.y2 + 1; y++) {\n terrain[x + \"x\" + y] = terrain[x + \"x\" + y] || {\n \"position\": {\"x\": x, \"y\": y, \"z\": 1},\n \"size\": {\"x\": 1, \"y\": 1, \"z\": 1},\n \"hasCollision\": true,\n }\n }\n }\n for(var x = border.x1 - 1; x < border.x2 + 1; x++) {\n for(var y = border.y1 - 1; y < border.y2 + 1; y++) {\n const thisTerrain = terrain[x + \"x\" + y]\n thisTerrain.neighbors = {}\n thisTerrain.neighbors.hasNorth = checkOccupancy({\"x\": x, \"y\": y - 1}, terrain, border)\n thisTerrain.neighbors.hasEast = checkOccupancy({\"x\": x + 1, \"y\": y}, terrain, border)\n thisTerrain.neighbors.hasSouth = checkOccupancy({\"x\": x, \"y\": y + 1}, terrain, border)\n thisTerrain.neighbors.hasWest = checkOccupancy({\"x\": x - 1, \"y\": y}, terrain, border)\n thisTerrain.wangIndex = 0\n if(thisTerrain.neighbors.hasNorth) thisTerrain.wangIndex += 1\n if(thisTerrain.neighbors.hasEast) thisTerrain.wangIndex += 2\n if(thisTerrain.neighbors.hasSouth) thisTerrain.wangIndex += 4\n if(thisTerrain.neighbors.hasWest) thisTerrain.wangIndex += 8\n\n terrain[x + \"x\" + y] = thisTerrain\n }\n }\n\n canvas.fillStyle = \"rgb(\" + color.R + \",\" + color.G + \",\" + color.B + \")\"\n canvas.globalCompositeOperation = \"source-over\"\n fillTilesRectangle(canvas, border.x1, border.y1, border.x2 - border.x1, border.y2 - border.y1)\n\n Object.values(terrain).forEach((tile) => {\n const x = tile.position.x\n const y = tile.position.y\n if(checkOccupancy({\"x\": x, \"y\": y}, terrain,border) == false) {\n if(checkOccupancy({\"x\": x - 1, \"y\": y}, terrain, border) == false) {\n drawRoughTileLine(canvas, x, y, x, y + 1)\n }\n if(checkOccupancy({\"x\": x, \"y\": y - 1}, terrain, border) == false) {\n drawRoughTileLine(canvas, x, y, x + 1, y)\n }\n }\n if(checkOccupancy({\"x\": x, \"y\": y}, terrain, border) == true) {\n canvas.globalCompositeOperation = \"source-over\"\n canvas.drawImage(tileImages[tile.wangIndex], x * tilesize, y * tilesize)\n canvas.fillStyle = \"rgba(\" + color.R / 3 + \",\" + color.G / 3 + \",\" + color.B / 3 + \", 0.8)\"\n canvas.globalCompositeOperation = \"multiply\"\n fillTilesRectangle(canvas,x,y,1,1)\n }\n })\n}\n//tileImage.src = require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.red.png\")\nclass StationgridRoom {\n constructor(slug, leftCornerX,topCornerY, width, height, level) {\n this.cornerX = leftCornerX\n this.cornerY = topCornerY\n this.width = level.stationsWide*2\n this.height = level.stationsHigh*2\n this.slug = slug\n\n this.groundColor = []\n this.groundColor.R = 80\n this.groundColor.G = 50\n this.groundColor.B = 100\n\n this.doorX = 0\n this.doorY = 0\n\n this.tiles = new Tiles\n for(let tileX = 0; tileX < this.width; tileX++) {\n for(let tileY = 0; tileY < this.height; tileY++) {\n this.tiles.push({\n \"x\": this.cornerX + tileX,\n \"y\": this.cornerY + tileY\n })\n }\n }\n this.generateRoom(level)\n }\n generateRoom(level) {\n this.stations = {}\n for(var stationX = 0; stationX < level.stationsWide; stationX++) {\n for(var stationY = 0; stationY < level.stationsHigh; stationY++) {\n const key = stationX+\"x\"+stationY\n this.stations[key] = {}\n this.stations[key].layout = randomStationLayout([\n [\n [{\"unit\": true},{\"collision\": true}],\n [{\"unit\": true},{\"collision\": true}]\n ],\n [\n [{\"collision\": true},{\"unit\": true}],\n [{\"unit\": true},{}]\n ],\n [\n [{\"unit\": true},{\"collision\": true}],\n [{\"collision\": true},{}]\n ],\n [\n [{\"unit\": true},{\"collision\": true}],\n [{\"collision\": true},{\"collision\": true}]\n ],\n [\n [{}, {\"unit\": true}],\n [{\"unit\": true}, {}]\n ],\n ])\n this.stations[key].position = {\n \"x\": stationX*2,\n \"y\": stationY*2,\n }\n }\n }\n\n this.terrain = proscribeTerrainFromStationsAndTiles({\n \"stations\": this.stations,\n \"tiles\": this.tiles,\n \"cornerX\": this.cornerX,\n \"cornerY\": this.cornerY,\n })\n this.tiles.forEach((tile) => {\n tile.terrain = this.terrain[tile.x + \"x\" + tile.y]\n })\n this.units = this.generateUnits(level)\n\n this.encounter = calculatePolygonalEncounterWithTerrain({\n \"slug\": this.slug,\n \"terrain\": this.terrain,\n \"cornerX\": this.cornerX,\n \"cornerY\": this.cornerY,\n \"width\": this.width,\n \"height\": this.height,\n })\n\n const fromTile = this.tiles.sampleRandomTile()\n const reachableTiles = computeReachability(fromTile,this.tiles)\n Object.entries(this.units).forEach(([key,unit]) => {\n if(reachableTiles.tileAt(unit.position.x,unit.position.y)?.reachableDistance == undefined) {\n this.generateRoom(level)\n }\n })\n }\n drawPolygon(ctx, polygon) {\n ctx.beginPath()\n ctx.moveTo(polygon[polygon.length - 1].x * tilesize, polygon[polygon.length - 1].y * tilesize)\n for(var nodeNumber = 0; nodeNumber < polygon.length; nodeNumber++) {\n ctx.lineTo(polygon[nodeNumber].x * tilesize, polygon[nodeNumber].y * tilesize)\n }\n ctx.lineTo(polygon[0].x * tilesize, polygon[0].y * tilesize)\n ctx.lineWidth = 3\n ctx.stroke()\n }\n drawEnvironment(ctx, color) {\n drawTiledRoom({\n \"canvas\": ctx,\n \"color\": color,\n \"terrain\": this.terrain,\n \"border\": this.encounter\n })\n }\n generateUnits(level) {\n const units = []\n const mobs = [\"dwarf\", \"kobold\", \"orc\", \"goblin\"]\n this.tiles.forEach((tile) => {\n tile.randomizationWeight = 1\n })\n let entityCounter = 0\n let hasSpawnedHobgoblin = false\n Object.entries(this.stations).forEach(([key,value]) => {\n const stationCornerX = this.cornerX + value.position.x\n const stationCornerY = this.cornerY + value.position.y\n let y = stationCornerY\n value.layout.forEach((row) => {\n let x = stationCornerX\n row.forEach((element) => {\n if(element.unit == true) {\n const TOTAL_NUMBER_OF_PLAYER_UNITS = 4\n if(entityCounter < TOTAL_NUMBER_OF_PLAYER_UNITS) {\n placeNewUnit(units,unitTemplates[\"spawnspot\"],x,y)\n this.tiles.tileAt(x,y).randomizationWeight = 0\n } else {\n if(entityCounter < TOTAL_NUMBER_OF_PLAYER_UNITS + (level.numberOfEnemies || 4)) {\n const baseUnit = {\n \"randomJobKey\": level.enemyJobs,\n \"affiliation\": \"bad\",\n }\n const maskUnit = level.maskUnit || {}\n let newUnit = Objdict.merge(baseUnit, maskUnit)\n if(this.slug == \"6\"\n && hasSpawnedHobgoblin == false) {\n newUnit.faceKey = \"hobgoblin\"\n newUnit.maxhealth = 20\n hasSpawnedHobgoblin = true\n }\n placeNewUnit(units,newUnit,x,y)\n this.tiles.tileAt(x,y).randomizationWeight = 0\n }\n }\n entityCounter += 1\n }\n x += 1\n })\n y += 1\n })\n })\n return units\n }\n}\n\nfunction computeReachability(goalTile,reachableTiles) {\n reachableTiles.forEach((tile) => {\n tile.reachableDistance = undefined\n })\n\n reachableTiles.tileAt(goalTile.x,goalTile.y).reachableDistance = 0\n for(let counter = 0; counter < 10; counter++) {\n let reachableTilesAtPreviousStep = reachableTiles.copy()\n reachableTiles.forEach((tile) => {\n const directions = [\n [1,0],\n [0,1],\n [-1,0],\n [0,-1]\n ]\n directions.forEach((direction) => {\n const neighborTile = reachableTilesAtPreviousStep.tileAt(tile.x + direction[0],tile.y + direction[1])\n if(neighborTile == undefined) return\n if(neighborTile.terrain.hasCollision == true) return\n\n const distanceToReachNeighbor = 1 + neighborTile.reachableDistance\n if(isNaN(distanceToReachNeighbor)) return\n\n if(tile.reachableDistance == undefined\n || tile.reachableDistance > distanceToReachNeighbor) {\n tile.reachableDistance = distanceToReachNeighbor\n }\n })\n })\n }\n\n return reachableTiles\n}\n\nclass Tiles {\n constructor() {\n this.list = []\n }\n tileAt(x,y) {\n return this.list.filter((tile) => (tile.x == x && tile.y == y))[0]\n }\n push(tile) {\n this.list.push(tile)\n }\n forEach(handler) {\n this.list.forEach(handler)\n }\n sampleRandomTile() {\n let totalTileWeight = 0\n this.list.forEach((tile) => {\n totalTileWeight += tile.randomizationWeight\n })\n const pulledCumulativeMass = Math.random() * totalTileWeight\n let weightCounter = 0\n let sampledTile = undefined\n this.list.forEach((tile) => {\n if(weightCounter < pulledCumulativeMass) {\n weightCounter += tile.randomizationWeight\n if(weightCounter > pulledCumulativeMass) {\n sampledTile = tile\n }\n }\n })\n if(sampledTile == undefined) console.log(\"failed to sample a tile\")\n return sampledTile\n }\n copy() {\n const copyTiles = new Tiles\n copyTiles.list = structuredClone(this.list)\n return copyTiles\n }\n}\n\n// === SUPPORT FUNCTIONS === //\n\nfunction placeNewUnit(units,template,x,y,isPartyMember = false) {\n const baseUnit = {\n \"position\": {\n \"x\": x,\n \"y\": y,\n \"z\": 1\n },\n }\n const newUnit = Objdict.merge(baseUnit,template)\n newUnit.key = newUnit.key || nanoid()\n units[newUnit.key] = newUnit\n}\nfunction findUnitsAtPosition(units,x,y) {\n return Object.values(units).filter((unit) => {\n return unit.position.x == x\n && unit.position.y == y\n })\n}\n", "/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 16;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 17;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { EMPTY_ARR } from './constants';\n\nexport const isArray = Array.isArray;\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-expect-error We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {preact.ContainerNode} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {VNode[\"type\"]} type The node name or Component constructor for this\n * virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the\n * virtual node\n * @returns {VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\t/** @type {VNode} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original,\n\t\t_index: -1,\n\t\t_flags: 0\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor == undefined;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet oldVNode = component._vnode,\n\t\toldDom = oldVNode._dom,\n\t\tcommitQueue = [],\n\t\trefQueue = [];\n\n\tif (component._parentDom) {\n\t\tconst newVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {Component} a\n * @param {Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c;\n\trerenderQueue.sort(depthSort);\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile ((c = rerenderQueue.shift())) {\n\t\tif (c._dirty) {\n\t\t\tlet renderQueueLength = rerenderQueue.length;\n\t\t\trenderComponent(c);\n\t\t\tif (rerenderQueue.length > renderQueueLength) {\n\t\t\t\t// When i.e. rerendering a provider additional new items can be injected, we want to\n\t\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t\t// single pass\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n", "import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value == null ? '' : value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture =\n\t\t\tname !== (name = name.replace(/(PointerCapture)$|Capture$/i, '$1'));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (\n\t\t\tname.toLowerCase() in dom ||\n\t\t\tname === 'onFocusOut' ||\n\t\t\tname === 'onFocusIn'\n\t\t)\n\t\t\tname = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue._attached = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue._attached = oldValue._attached;\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == 'http://www.w3.org/2000/svg') {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname != 'popover' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name[4] === '-')) {\n\t\t\tdom.setAttribute(name, name == 'popover' && value == true ? '' : value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e._dispatched == null) {\n\t\t\t\te._dispatched = eventClock++;\n\n\t\t\t\t// When `e._dispatched` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e._dispatched < eventHandler._attached) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n", "import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\t/** @type {Component[] | null} */\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.componentWillUnmount = () => {\n\t\t\t\t\tsubs = null;\n\t\t\t\t};\n\n\t\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\tsubs.some(c => {\n\t\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tif (subs) {\n\t\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType =\n\t\tcontext);\n}\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR, INSERT_VNODE, MATCHED } from '../constants';\nimport { isArray } from '../util';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {PreactElement} parentDom The DOM element whose children are being\n * diffed\n * @param {ComponentChildren[]} renderResult\n * @param {VNode} newParentVNode The new virtual node whose children should be\n * diff'ed against oldParentVNode\n * @param {VNode} oldParentVNode The old virtual node whose children should be\n * diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\tlet i,\n\t\t/** @type {VNode} */\n\t\toldVNode,\n\t\t/** @type {VNode} */\n\t\tchildVNode,\n\t\t/** @type {PreactElement} */\n\t\tnewDom,\n\t\t/** @type {PreactElement} */\n\t\tfirstChildDom;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\t/** @type {VNode[]} */\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet newChildrenLength = renderResult.length;\n\n\tnewParentVNode._nextDom = oldDom;\n\tconstructNewChildrenArray(newParentVNode, renderResult, oldChildren);\n\toldDom = newParentVNode._nextDom;\n\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\tchildVNode = newParentVNode._children[i];\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// At this point, constructNewChildrenArray has assigned _index to be the\n\t\t// matchingIndex for this VNode's oldVNode (or -1 if there is no oldVNode).\n\t\tif (childVNode._index === -1) {\n\t\t\toldVNode = EMPTY_OBJ;\n\t\t} else {\n\t\t\toldVNode = oldChildren[childVNode._index] || EMPTY_OBJ;\n\t\t}\n\n\t\t// Update childVNode._index to its final index\n\t\tchildVNode._index = i;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\n\t\t// Adjust DOM nodes\n\t\tnewDom = childVNode._dom;\n\t\tif (childVNode.ref && oldVNode.ref != childVNode.ref) {\n\t\t\tif (oldVNode.ref) {\n\t\t\t\tapplyRef(oldVNode.ref, null, childVNode);\n\t\t\t}\n\t\t\trefQueue.push(\n\t\t\t\tchildVNode.ref,\n\t\t\t\tchildVNode._component || newDom,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t}\n\n\t\tif (firstChildDom == null && newDom != null) {\n\t\t\tfirstChildDom = newDom;\n\t\t}\n\n\t\tif (\n\t\t\tchildVNode._flags & INSERT_VNODE ||\n\t\t\toldVNode._children === childVNode._children\n\t\t) {\n\t\t\tif (\n\t\t\t\toldDom &&\n\t\t\t\ttypeof childVNode.type == 'string' &&\n\t\t\t\t// @ts-expect-error olDom should be present on a DOM node\n\t\t\t\t!parentDom.contains(oldDom)\n\t\t\t) {\n\t\t\t\toldDom = getDomSibling(oldVNode);\n\t\t\t}\n\t\t\toldDom = insert(childVNode, oldDom, parentDom);\n\t\t} else if (\n\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\tchildVNode._nextDom !== undefined\n\t\t) {\n\t\t\t// Since Fragments or components that return Fragment like VNodes can\n\t\t\t// contain multiple DOM nodes as the same level, continue the diff from\n\t\t\t// the sibling of last DOM child of this child VNode\n\t\t\toldDom = childVNode._nextDom;\n\t\t} else if (newDom) {\n\t\t\toldDom = newDom.nextSibling;\n\t\t}\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because it\n\t\t// is only used by `diffChildren` to determine where to resume the diff\n\t\t// after diffing Components and Fragments. Once we store it the nextDOM\n\t\t// local var, we can clean up the property. Also prevents us hanging on to\n\t\t// DOM nodes that may have been unmounted.\n\t\tchildVNode._nextDom = undefined;\n\n\t\t// Unset diffing flags\n\t\tchildVNode._flags &= ~(INSERT_VNODE | MATCHED);\n\t}\n\n\t// TODO: With new child diffing algo, consider alt ways to diff Fragments.\n\t// Such as dropping oldDom and moving fragments in place\n\t//\n\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t// _nextDom property to the nextSibling of its last child DOM node.\n\t//\n\t// `oldDom` contains the correct value here because if the last child\n\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t// node's nextSibling.\n\tnewParentVNode._nextDom = oldDom;\n\tnewParentVNode._dom = firstChildDom;\n}\n\n/**\n * @param {VNode} newParentVNode\n * @param {ComponentChildren[]} renderResult\n * @param {VNode[]} oldChildren\n */\nfunction constructNewChildrenArray(newParentVNode, renderResult, oldChildren) {\n\t/** @type {number} */\n\tlet i;\n\t/** @type {VNode} */\n\tlet childVNode;\n\t/** @type {VNode} */\n\tlet oldVNode;\n\n\tconst newChildrenLength = renderResult.length;\n\tlet oldChildrenLength = oldChildren.length,\n\t\tremainingOldChildren = oldChildrenLength;\n\n\tlet skew = 0;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\t// @ts-expect-error We are reusing the childVNode variable to hold both the\n\t\t// pre and post normalized childVNode\n\t\tchildVNode = renderResult[i];\n\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint' ||\n\t\t\tchildVNode.constructor == String\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode.constructor === undefined && childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t// const reuse = <div />\n\t\t\t// <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\tconst skewedIndex = i + skew;\n\n\t\t// Handle unmounting null placeholders, i.e. VNode => null in unkeyed children\n\t\tif (childVNode == null) {\n\t\t\toldVNode = oldChildren[skewedIndex];\n\t\t\tif (\n\t\t\t\toldVNode &&\n\t\t\t\toldVNode.key == null &&\n\t\t\t\toldVNode._dom &&\n\t\t\t\t(oldVNode._flags & MATCHED) === 0\n\t\t\t) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode, false);\n\n\t\t\t\t// Explicitly nullify this position in oldChildren instead of just\n\t\t\t\t// setting `_match=true` to prevent other routines (e.g.\n\t\t\t\t// `findMatchingIndex` or `getDomSibling`) from thinking VNodes or DOM\n\t\t\t\t// nodes in this position are still available to be used in diffing when\n\t\t\t\t// they have actually already been unmounted. For example, by only\n\t\t\t\t// setting `_match=true` here, the unmounting loop later would attempt\n\t\t\t\t// to unmount this VNode again seeing `_match==true`. Further,\n\t\t\t\t// getDomSibling doesn't know about _match and so would incorrectly\n\t\t\t\t// assume DOM nodes in this subtree are mounted and usable.\n\t\t\t\toldChildren[skewedIndex] = null;\n\t\t\t\tremainingOldChildren--;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\tconst matchingIndex = findMatchingIndex(\n\t\t\tchildVNode,\n\t\t\toldChildren,\n\t\t\tskewedIndex,\n\t\t\tremainingOldChildren\n\t\t);\n\n\t\t// Temporarily store the matchingIndex on the _index property so we can pull\n\t\t// out the oldVNode in diffChildren. We'll override this to the VNode's\n\t\t// final index after using this property to get the oldVNode\n\t\tchildVNode._index = matchingIndex;\n\n\t\toldVNode = null;\n\t\tif (matchingIndex !== -1) {\n\t\t\toldVNode = oldChildren[matchingIndex];\n\t\t\tremainingOldChildren--;\n\t\t\tif (oldVNode) {\n\t\t\t\toldVNode._flags |= MATCHED;\n\t\t\t}\n\t\t}\n\n\t\t// Here, we define isMounting for the purposes of the skew diffing\n\t\t// algorithm. Nodes that are unsuspending are considered mounting and we detect\n\t\t// this by checking if oldVNode._original === null\n\t\tconst isMounting = oldVNode == null || oldVNode._original === null;\n\n\t\tif (isMounting) {\n\t\t\tif (matchingIndex == -1) {\n\t\t\t\tskew--;\n\t\t\t}\n\n\t\t\t// If we are mounting a DOM VNode, mark it for insertion\n\t\t\tif (typeof childVNode.type != 'function') {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t} else if (matchingIndex !== skewedIndex) {\n\t\t\tif (matchingIndex == skewedIndex - 1) {\n\t\t\t\tskew = matchingIndex - skewedIndex;\n\t\t\t} else if (matchingIndex == skewedIndex + 1) {\n\t\t\t\tskew++;\n\t\t\t} else if (matchingIndex > skewedIndex) {\n\t\t\t\t// Our matched DOM-node is further in the list of children than\n\t\t\t\t// where it's at now.\n\n\t\t\t\t// When the remaining old children is bigger than the new-children\n\t\t\t\t// minus our skewed index we know we are dealing with a shrinking list\n\t\t\t\t// we have to increase our skew with the matchedIndex - the skewed index\n\t\t\t\tif (remainingOldChildren > newChildrenLength - skewedIndex) {\n\t\t\t\t\tskew += matchingIndex - skewedIndex;\n\t\t\t\t} else {\n\t\t\t\t\t// If we have matched all the children just decrease the skew\n\t\t\t\t\tskew--;\n\t\t\t\t}\n\t\t\t} else if (matchingIndex < skewedIndex) {\n\t\t\t\t// When our new position is in front of our old position than we increase the skew\n\t\t\t\tskew++;\n\t\t\t}\n\n\t\t\t// Move this VNode's DOM if the original index (matchingIndex) doesn't\n\t\t\t// match the new skew index (i + new skew)\n\t\t\tif (matchingIndex !== i + skew) {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove remaining oldChildren if there are any. Loop forwards so that as we\n\t// unmount DOM from the beginning of the oldChildren, we can adjust oldDom to\n\t// point to the next child, which needs to be the first DOM node that won't be\n\t// unmounted.\n\tif (remainingOldChildren) {\n\t\tfor (i = 0; i < oldChildrenLength; i++) {\n\t\t\toldVNode = oldChildren[i];\n\t\t\tif (oldVNode != null && (oldVNode._flags & MATCHED) === 0) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} parentVNode\n * @param {PreactElement} oldDom\n * @param {PreactElement} parentDom\n * @returns {PreactElement}\n */\nfunction insert(parentVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\n\tif (typeof parentVNode.type == 'function') {\n\t\tlet children = parentVNode._children;\n\t\tfor (let i = 0; children && i < children.length; i++) {\n\t\t\tif (children[i]) {\n\t\t\t\t// If we enter this code path on sCU bailout, where we copy\n\t\t\t\t// oldVNode._children to newVNode._children, we need to update the old\n\t\t\t\t// children's _parent pointer to point to the newVNode (parentVNode\n\t\t\t\t// here).\n\t\t\t\tchildren[i]._parent = parentVNode;\n\t\t\t\toldDom = insert(children[i], oldDom, parentDom);\n\t\t\t}\n\t\t}\n\n\t\treturn oldDom;\n\t} else if (parentVNode._dom != oldDom) {\n\t\tparentDom.insertBefore(parentVNode._dom, oldDom || null);\n\t\toldDom = parentVNode._dom;\n\t}\n\n\tdo {\n\t\toldDom = oldDom && oldDom.nextSibling;\n\t} while (oldDom != null && oldDom.nodeType === 8);\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {ComponentChildren} children The unflattened children of a virtual\n * node\n * @returns {VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\n/**\n * @param {VNode} childVNode\n * @param {VNode[]} oldChildren\n * @param {number} skewedIndex\n * @param {number} remainingOldChildren\n * @returns {number}\n */\nfunction findMatchingIndex(\n\tchildVNode,\n\toldChildren,\n\tskewedIndex,\n\tremainingOldChildren\n) {\n\tconst key = childVNode.key;\n\tconst type = childVNode.type;\n\tlet x = skewedIndex - 1;\n\tlet y = skewedIndex + 1;\n\tlet oldVNode = oldChildren[skewedIndex];\n\n\t// We only need to perform a search if there are more children\n\t// (remainingOldChildren) to search. However, if the oldVNode we just looked\n\t// at skewedIndex was not already used in this diff, then there must be at\n\t// least 1 other (so greater than 1) remainingOldChildren to attempt to match\n\t// against. So the following condition checks that ensuring\n\t// remainingOldChildren > 1 if the oldVNode is not already used/matched. Else\n\t// if the oldVNode was null or matched, then there could needs to be at least\n\t// 1 (aka `remainingOldChildren > 0`) children to find and compare against.\n\tlet shouldSearch =\n\t\tremainingOldChildren >\n\t\t(oldVNode != null && (oldVNode._flags & MATCHED) === 0 ? 1 : 0);\n\n\tif (\n\t\toldVNode === null ||\n\t\t(oldVNode &&\n\t\t\tkey == oldVNode.key &&\n\t\t\ttype === oldVNode.type &&\n\t\t\t(oldVNode._flags & MATCHED) === 0)\n\t) {\n\t\treturn skewedIndex;\n\t} else if (shouldSearch) {\n\t\twhile (x >= 0 || y < oldChildren.length) {\n\t\t\tif (x >= 0) {\n\t\t\t\toldVNode = oldChildren[x];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn x;\n\t\t\t\t}\n\t\t\t\tx--;\n\t\t\t}\n\n\t\t\tif (y < oldChildren.length) {\n\t\t\t\toldVNode = oldChildren[y];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn y;\n\t\t\t\t}\n\t\t\t\ty++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1;\n}\n", "import {\n\tEMPTY_OBJ,\n\tMODE_HYDRATE,\n\tMODE_SUSPENDED,\n\tRESET_MODE\n} from '../constants';\nimport { BaseComponent, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { setProperty } from './props';\nimport { assign, isArray, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {PreactElement} parentDom The parent of the DOM element\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\t/** @type {any} */\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._flags & MODE_SUSPENDED) {\n\t\tisHydrating = !!(oldVNode._flags & MODE_HYDRATE);\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\touter: if (typeof newType == 'function') {\n\t\ttry {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\t\t\tconst isClassComponent =\n\t\t\t\t'prototype' in newType && newType.prototype.render;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif (isClassComponent) {\n\t\t\t\t\t// @ts-expect-error The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-expect-error Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new BaseComponent(\n\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (isClassComponent && c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (isClassComponent && newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!c._force &&\n\t\t\t\t\t((c.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\t\tnewVNode._original === oldVNode._original)\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\t\t\tc._force = false;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif (isClassComponent) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (isClassComponent && !isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tisArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnamespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._flags &= RESET_MODE;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnewVNode._original = null;\n\t\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\t\tnewVNode._dom = oldDom;\n\t\t\t\tnewVNode._flags |= isHydrating\n\t\t\t\t\t? MODE_HYDRATE | MODE_SUSPENDED\n\t\t\t\t\t: MODE_HYDRATE;\n\t\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t\t// ^ could possibly be simplified to:\n\t\t\t\t// excessDomChildren.length = 0;\n\t\t\t} else {\n\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t}\n\t\t\toptions._catchError(e, newVNode, oldVNode);\n\t\t}\n\t} else if (\n\t\texcessDomChildren == null &&\n\t\tnewVNode._original === oldVNode._original\n\t) {\n\t\tnewVNode._children = oldVNode._children;\n\t\tnewVNode._dom = oldVNode._dom;\n\t} else {\n\t\tnewVNode._dom = diffElementNodes(\n\t\t\toldVNode._dom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\t}\n\n\tif ((tmp = options.diffed)) tmp(newVNode);\n}\n\n/**\n * @param {Array<Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {VNode} root\n */\nexport function commitRoot(commitQueue, root, refQueue) {\n\troot._nextDom = undefined;\n\n\tfor (let i = 0; i < refQueue.length; i++) {\n\t\tapplyRef(refQueue[i], refQueue[++i], refQueue[++i]);\n\t}\n\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-expect-error Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-expect-error See above comment on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {PreactElement} dom The DOM element representing the virtual nodes\n * being diffed\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n * @returns {PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating,\n\trefQueue\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = /** @type {string} */ (newVNode.type);\n\t/** @type {any} */\n\tlet i;\n\t/** @type {{ __html?: string }} */\n\tlet newHtml;\n\t/** @type {{ __html?: string }} */\n\tlet oldHtml;\n\t/** @type {ComponentChildren} */\n\tlet newChildren;\n\tlet value;\n\tlet inputValue;\n\tlet checked;\n\n\t// Tracks entering and exiting namespaces when descending through the tree.\n\tif (nodeType === 'svg') namespace = 'http://www.w3.org/2000/svg';\n\telse if (nodeType === 'math')\n\t\tnamespace = 'http://www.w3.org/1998/Math/MathML';\n\telse if (!namespace) namespace = 'http://www.w3.org/1999/xhtml';\n\n\tif (excessDomChildren != null) {\n\t\tfor (i = 0; i < excessDomChildren.length; i++) {\n\t\t\tvalue = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tvalue &&\n\t\t\t\t'setAttribute' in value === !!nodeType &&\n\t\t\t\t(nodeType ? value.localName === nodeType : value.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = value;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tdom = document.createElementNS(\n\t\t\tnamespace,\n\t\t\tnodeType,\n\t\t\tnewProps.is && newProps\n\t\t);\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in\n\t\t// case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\t// If we are in a situation where we are not hydrating but are using\n\t\t// existing DOM (e.g. replaceNode) we should read the existing DOM\n\t\t// attributes to diff them\n\t\tif (!isHydrating && excessDomChildren != null) {\n\t\t\toldProps = {};\n\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\tvalue = dom.attributes[i];\n\t\t\t\toldProps[value.name] = value.value;\n\t\t\t}\n\t\t}\n\n\t\tfor (i in oldProps) {\n\t\t\tvalue = oldProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (i !== 'key' && !(i in newProps)) {\n\t\t\t\tif (\n\t\t\t\t\t(i == 'value' && 'defaultValue' in newProps) ||\n\t\t\t\t\t(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tsetProperty(dom, i, null, value, namespace);\n\t\t\t}\n\t\t}\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tfor (i in newProps) {\n\t\t\tvalue = newProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t\tnewChildren = value;\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\tnewHtml = value;\n\t\t\t} else if (i == 'value') {\n\t\t\t\tinputValue = value;\n\t\t\t} else if (i == 'checked') {\n\t\t\t\tchecked = value;\n\t\t\t} else if (\n\t\t\t\ti !== 'key' &&\n\t\t\t\t(!isHydrating || typeof value == 'function') &&\n\t\t\t\toldProps[i] !== value\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, value, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\tif (\n\t\t\t\t!isHydrating &&\n\t\t\t\t(!oldHtml ||\n\t\t\t\t\t(newHtml.__html !== oldHtml.__html &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML))\n\t\t\t) {\n\t\t\t\tdom.innerHTML = newHtml.__html;\n\t\t\t}\n\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\tif (oldHtml) dom.innerHTML = '';\n\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tisArray(newChildren) ? newChildren : [newChildren],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnodeType === 'foreignObject'\n\t\t\t\t\t? 'http://www.w3.org/1999/xhtml'\n\t\t\t\t\t: namespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// As above, don't diff props during hydration\n\t\tif (!isHydrating) {\n\t\t\ti = 'value';\n\t\t\tif (\n\t\t\t\tinputValue !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(inputValue !== dom[i] ||\n\t\t\t\t\t(nodeType === 'progress' && !inputValue) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && inputValue !== oldProps[i]))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, inputValue, oldProps[i], namespace);\n\t\t\t}\n\n\t\t\ti = 'checked';\n\t\t\tif (checked !== undefined && checked !== dom[i]) {\n\t\t\t\tsetProperty(dom, i, checked, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {Ref<any>} ref\n * @param {any} value\n * @param {VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {VNode} vnode The virtual node to unmount\n * @param {VNode} parentVNode The parent of the VNode that initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type != 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._component = vnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to render into\n * @param {PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode == 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = ((!isHydrating && replaceNode) || parentDom)._children =\n\t\tcreateElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [],\n\t\trefQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.namespaceURI,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t\t? null\n\t\t\t\t: parentDom.firstChild\n\t\t\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t\t? oldVNode._dom\n\t\t\t\t: parentDom.firstChild,\n\t\tisHydrating,\n\t\trefQueue\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode, refQueue);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its\n * children.\n * @param {VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<ComponentChildren>} rest Any additional arguments will be used\n * as replacement children.\n * @returns {VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\n\tlet defaultProps;\n\n\tif (vnode.type && vnode.type.defaultProps) {\n\t\tdefaultProps = vnode.type.defaultProps;\n\t}\n\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse if (props[i] === undefined && defaultProps !== undefined) {\n\t\t\tnormalizedProps[i] = defaultProps[i];\n\t\t} else {\n\t\t\tnormalizedProps[i] = props[i];\n\t\t}\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n", "/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {VNode} [oldVNode]\n * @param {ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {Component} */\n\tlet component,\n\t\t/** @type {ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "{ \"compressionlevel\":-1,\n \"height\":20,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":20,\n \"id\":1,\n \"locked\":true,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":false,\n \"width\":24,\n \"x\":0,\n \"y\":0\n },\n {\n \"id\":2,\n \"image\":\"image.png\",\n \"locked\":true,\n \"name\":\"image\",\n \"opacity\":1,\n \"type\":\"imagelayer\",\n \"visible\":false,\n \"x\":0,\n \"y\":0\n },\n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":20,\n \"id\":5,\n \"locked\":true,\n \"name\":\"data:collision\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":false,\n \"width\":24,\n \"x\":0,\n \"y\":0\n },\n {\n \"draworder\":\"topdown\",\n \"id\":3,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":0,\n \"id\":55,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n },\n {\n \"x\":0,\n \"y\":280\n },\n {\n \"x\":210,\n \"y\":280\n },\n {\n \"x\":210,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":910,\n \"y\":210\n },\n {\n \"height\":0,\n \"id\":56,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n },\n {\n \"x\":0,\n \"y\":70\n },\n {\n \"x\":-70,\n \"y\":70\n },\n {\n \"x\":-70,\n \"y\":350\n },\n {\n \"x\":210,\n \"y\":350\n },\n {\n \"x\":210,\n \"y\":140\n },\n {\n \"x\":140,\n \"y\":140\n },\n {\n \"x\":140,\n \"y\":70\n },\n {\n \"x\":70,\n \"y\":70\n },\n {\n \"x\":70,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"name\",\n \"type\":\"string\",\n \"value\":\"\"\n },\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"2\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":980,\n \"y\":490\n },\n {\n \"height\":0,\n \"id\":57,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n },\n {\n \"x\":70,\n \"y\":0\n },\n {\n \"x\":70,\n \"y\":70\n },\n {\n \"x\":140,\n \"y\":70\n },\n {\n \"x\":140,\n \"y\":210\n },\n {\n \"x\":70,\n \"y\":210\n },\n {\n \"x\":70,\n \"y\":350\n },\n {\n \"x\":-70,\n \"y\":350\n },\n {\n \"x\":-70,\n \"y\":280\n },\n {\n \"x\":-140,\n \"y\":280\n },\n {\n \"x\":-140,\n \"y\":70\n },\n {\n \"x\":0,\n \"y\":70\n }],\n \"properties\":[\n {\n \"name\":\"name\",\n \"type\":\"string\",\n \"value\":\"\"\n },\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"3\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":1050,\n \"y\":840\n },\n {\n \"height\":0,\n \"id\":58,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n },\n {\n \"x\":0,\n \"y\":-70\n },\n {\n \"x\":-70,\n \"y\":-70\n },\n {\n \"x\":-70,\n \"y\":-350\n },\n {\n \"x\":-280,\n \"y\":-350\n },\n {\n \"x\":-280,\n \"y\":-70\n },\n {\n \"x\":-210,\n \"y\":-70\n },\n {\n \"x\":-210,\n \"y\":0\n },\n {\n \"x\":0,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"name\",\n \"type\":\"string\",\n \"value\":\"\"\n },\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"4\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":910,\n \"y\":1050\n },\n {\n \"height\":0,\n \"id\":59,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n },\n {\n \"x\":70,\n \"y\":0\n },\n {\n \"x\":70,\n \"y\":-70\n },\n {\n \"x\":140,\n \"y\":-70\n },\n {\n \"x\":140,\n \"y\":-350\n },\n {\n \"x\":-210,\n \"y\":-350\n },\n {\n \"x\":-210,\n \"y\":-70\n },\n {\n \"x\":0,\n \"y\":-70\n }],\n \"properties\":[\n {\n \"name\":\"name\",\n \"type\":\"string\",\n \"value\":\"\"\n },\n {\n \"name\":\"slug\",\n \"type\":\"string\",\n \"value\":\"5\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":700,\n \"y\":700\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n },\n {\n \"draworder\":\"topdown\",\n \"id\":4,\n \"locked\":true,\n \"name\":\"data:units\",\n \"objects\":[\n {\n \"gid\":7,\n \"height\":32,\n \"id\":25,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"swordlord\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":980,\n \"y\":280\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":26,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"hammer\"\n },\n {\n \"name\":\"maxhealth\",\n \"type\":\"string\",\n \"value\":\"20\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":910,\n \"y\":420\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":27,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"hammer\"\n },\n {\n \"name\":\"maxhealth\",\n \"type\":\"string\",\n \"value\":\"20\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1050,\n \"y\":420\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":28,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"sword\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1120,\n \"y\":700\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":29,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"none\"\n },\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"daggercloak\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1120,\n \"y\":770\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":30,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1120,\n \"y\":980\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":31,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1050,\n \"y\":910\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":32,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":840,\n \"y\":1050\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":33,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":770,\n \"y\":1050\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":34,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":700,\n \"y\":1050\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":35,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":770,\n \"y\":630\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":36,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":700,\n \"y\":630\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":37,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":700,\n \"y\":700\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":38,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"hammer\"\n },\n {\n \"name\":\"maxhealth\",\n \"type\":\"string\",\n \"value\":\"20\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":980,\n \"y\":490\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":39,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"type\",\n \"type\":\"string\",\n \"value\":\"zone\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":980,\n \"y\":560\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":40,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"dagger\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":980,\n \"y\":840\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":42,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"sword\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":910,\n \"y\":700\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":46,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"spear\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1050,\n \"y\":1190\n },\n {\n \"gid\":7,\n \"height\":32,\n \"id\":47,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"none\"\n },\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"axeknight\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":1050,\n \"y\":1120\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":48,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"spear\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":910,\n \"y\":980\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":50,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"spear\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":770,\n \"y\":770\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":52,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"sword\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":630,\n \"y\":980\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":53,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"dagger\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":700,\n \"y\":840\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":61,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"devil\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"devil\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"spear\"\n },\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"archdevil\"\n },\n {\n \"name\":\"maxhealth\",\n \"type\":\"int\",\n \"value\":30\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":490,\n \"y\":420\n },\n\n {\n \"gid\":3,\n \"height\":32,\n \"id\":62,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"dagger\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":490,\n \"y\":630\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":63,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"dagger\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":770,\n \"y\":420\n },\n {\n \"gid\":3,\n \"height\":32,\n \"id\":64,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"affiliation\",\n \"type\":\"string\",\n \"value\":\"bad\"\n },\n {\n \"name\":\"bodyKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"faceKey\",\n \"type\":\"string\",\n \"value\":\"imp\"\n },\n {\n \"name\":\"jobKey\",\n \"type\":\"string\",\n \"value\":\"dagger\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":32,\n \"x\":560,\n \"y\":490\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":false,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":6,\n \"nextobjectid\":67,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.10.2\",\n \"tileheight\":70,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/tileset.json\"\n }],\n \"tilewidth\":70,\n \"type\":\"map\",\n \"version\":\"1.10\",\n \"width\":24\n}\n", "{\n \"26\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"hammer\",\n \"name\": \"Beheader\",\n \"maxhealth\": 30,\n \"key\": 26,\n \"position\": {\n \"x\": 13,\n \"y\": 5,\n \"z\": 1\n },\n \"level\": 1\n },\n \"28\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"sword\",\n \"name\": \"Bladefiend\",\n \"key\": 28,\n \"position\": {\n \"x\": 16,\n \"y\": 9,\n \"z\": 1\n },\n \"level\": 1\n },\n \"30\": {\n \"type\": \"zone\",\n \"key\": 30,\n \"position\": {\n \"x\": 16,\n \"y\": 13,\n \"z\": 1\n },\n \"level\": 1\n },\n \"31\": {\n \"type\": \"zone\",\n \"key\": 31,\n \"position\": {\n \"x\": 15,\n \"y\": 12,\n \"z\": 1\n },\n \"level\": 1\n },\n \"32\": {\n \"type\": \"zone\",\n \"key\": 32,\n \"position\": {\n \"x\": 12,\n \"y\": 14,\n \"z\": 1\n },\n \"level\": 1\n },\n \"33\": {\n \"type\": \"zone\",\n \"key\": 33,\n \"position\": {\n \"x\": 11,\n \"y\": 14,\n \"z\": 1\n },\n \"level\": 1\n },\n \"34\": {\n \"type\": \"zone\",\n \"key\": 34,\n \"position\": {\n \"x\": 10,\n \"y\": 14,\n \"z\": 1\n },\n \"level\": 1\n },\n \"35\": {\n \"type\": \"zone\",\n \"key\": 35,\n \"position\": {\n \"x\": 11,\n \"y\": 8,\n \"z\": 1\n },\n \"level\": 1\n },\n \"36\": {\n \"type\": \"zone\",\n \"key\": 36,\n \"position\": {\n \"x\": 10,\n \"y\": 8,\n \"z\": 1\n },\n \"level\": 1\n },\n \"37\": {\n \"type\": \"zone\",\n \"key\": 37,\n \"position\": {\n \"x\": 10,\n \"y\": 9,\n \"z\": 1\n },\n \"level\": 1\n },\n \"38\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"hammer\",\n \"name\": \"Beheader\",\n \"decalImageKey\": \"grimrawr\",\n \"maxhealth\": 30,\n \"key\": 38,\n \"position\": {\n \"x\": 14,\n \"y\": 6,\n \"z\": 1\n },\n \"level\": 1\n },\n \"39\": {\n \"type\": \"zone\",\n \"key\": 39,\n \"position\": {\n \"x\": 14,\n \"y\": 7,\n \"z\": 1\n },\n \"level\": 1\n },\n \"40\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"dagger\",\n \"name\": \"Daggerimp\",\n \"key\": 40,\n \"position\": {\n \"x\": 14,\n \"y\": 11,\n \"z\": 1\n },\n \"level\": 1\n },\n \"42\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"sword\",\n \"name\": \"Bladefiend\",\n \"key\": 42,\n \"position\": {\n \"x\": 13,\n \"y\": 9,\n \"z\": 1\n },\n \"level\": 1\n },\n \"46\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"spear\",\n \"name\": \"Speardevil\",\n \"key\": 46,\n \"position\": {\n \"x\": 15,\n \"y\": 16,\n \"z\": 1\n },\n \"level\": 1\n },\n \"48\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"spear\",\n \"name\": \"Speardevil\",\n \"key\": 48,\n \"position\": {\n \"x\": 13,\n \"y\": 13,\n \"z\": 1\n },\n \"level\": 1\n },\n \"52\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"sword\",\n \"name\": \"Bladefiend\",\n \"key\": 52,\n \"position\": {\n \"x\": 9,\n \"y\": 13,\n \"z\": 1\n },\n \"level\": 1\n },\n \"63\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"dagger\",\n \"name\": \"Daggerimp\",\n \"key\": 63,\n \"position\": {\n \"x\": 11,\n \"y\": 5,\n \"z\": 1\n },\n \"level\": 1\n },\n \"64\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"dagger\",\n \"name\": \"Daggerimp\",\n \"key\": 64,\n \"position\": {\n \"x\": 8,\n \"y\": 6,\n \"z\": 1\n },\n \"level\": 1\n },\n \"zombold\": {\n \"affiliation\": \"none\",\n \"key\": \"zombold\",\n \"position\": {\n \"x\": 16,\n \"y\": 10,\n \"z\": 1\n },\n \"level\": 1\n },\n \"zomboar\": {\n \"affiliation\": \"none\",\n \"key\": \"zomboar\",\n \"position\": {\n \"x\": 15,\n \"y\": 15,\n \"z\": 1\n },\n \"level\": 1\n },\n \"archdwarf\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"archdwarf\",\n \"jobKey\": \"hammer\",\n \"name\": \"Cacaemenides\",\n \"key\": \"archdevil\",\n \"maxhealth\": 40,\n \"position\": {\n \"x\": 7,\n \"y\": 5,\n \"z\": 1\n },\n \"level\": 1\n },\n \"nzu_d_AnKyQK5CHN3KpAO\": {\n \"position\": {\n \"x\": 14,\n \"y\": 3,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"nzu_d_AnKyQK5CHN3KpAO\"\n },\n \"fQ1AYXh5ypTmNh5_oAe-K\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"spear\",\n \"name\": \"Speardevil\",\n \"key\": \"fQ1AYXh5ypTmNh5_oAe-K\",\n \"position\": {\n \"x\": 11,\n \"y\": 12,\n \"z\": 1\n },\n \"level\": 1\n },\n \"LtEPcqeXt_ksd_10of4BM\": {\n \"affiliation\": \"bad\",\n \"bodyKey\": \"bad\",\n \"faceKey\": \"dwarf\",\n \"jobKey\": \"dagger\",\n \"name\": \"Daggerimp\",\n \"key\": \"LtEPcqeXt_ksd_10of4BM\",\n \"position\": {\n \"x\": 10,\n \"y\": 10,\n \"z\": 1\n },\n \"level\": 1\n },\n \"se4SzBqL08iOrJl_8YULg\": {\n \"position\": {\n \"x\": 15,\n \"y\": 6,\n \"z\": 1\n },\n \"key\": \"se4SzBqL08iOrJl_8YULg\",\n \"type\": \"artifact\",\n \"imageKey\": \"grimrawr\",\n \"maxhealth\": \"100\"\n }\n}\n", "import * as Preact from \"preact\"\nimport App from \"@frog/source/models/App.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport {drawTiledRoom, calculateEncounterGeometryFromPolygon} from \"@frog/source/data/games/dungeon/dungeon.js\"\nimport preload from \"@frog/source/data/games/dungeon/preload.js\"\n\nconst world = Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n})\n\nfor(var x = 0; x < world.width + 1; x++) {\n for(var y = 0; y < world.height + 1; y++) {\n world.terrain[x + \"x\" + y] = world.terrain[x + \"x\" + y] || {\n \"position\": {\"x\": x, \"y\": y, \"z\": 1},\n \"size\": {\"x\": 1, \"y\": 1, \"z\": 1},\n \"hasCollision\": true,\n }\n }\n}\n\npreload.onLoad(() => {\n const myCanvas = document.createElement(\"canvas\")\n const ctx = myCanvas.getContext(\"2d\")\n const tilesize = 96\n ctx.canvas.width = world.width * tilesize\n ctx.canvas.height = world.height * tilesize\n\n const color = {\"R\":80,\"G\":50,\"B\":100}\n ctx.fillStyle = \"rgb(\" + color.R / 3 + \",\" + color.G / 3 + \",\" + color.B / 3 + \")\"\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n\n drawTiledRoom({\n \"canvas\": ctx,\n \"color\": color,\n \"terrain\": world.terrain,\n \"border\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": world.width + 1,\n \"y2\": world.height + 1,\n \"outOfZoneCheck\": ((position, terrain, zone) => {\n return (Object.values(world.zones).find((encounter) => Zone.isInBounds(encounter, position)) == undefined\n || terrain[position.x + \"x\" + position.y].hasCollision == true)\n })\n }\n })\n chapter.stage.image = myCanvas.toDataURL()\n})\n\nconst chapter = {\n \"slug\": \"0\",\n \"startingEncounter\": \"1\",\n\n \"stage\": {\n \"world\": world,\n \"units\": require(\"./units.json\"),\n \"text\": (stage) => {\n if(stage.currentEncounterKey == \"1\") {\n if(stage.tags[\"tutorial:hasKilled\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"left\">\n <div class=\"Text\">Fabuwous. Now end your turwn. Let them fawll upon your bwade.</div>\n </div>\n )\n }\n if(stage.tags[\"tutorial:hasMovedWithoutAttacking\"] == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"left\">\n <div class=\"Text\">If need be, you may always undo.</div>\n </div>\n )\n }\n if(stage.tags[\"tutorial:hasAttacked\"]?.value != true) {\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">Do you wish for undying strwength??\n <br/><br/>\n Pick up and rwead my pages!</div>\n </div>\n )\n }\n }\n if(stage.currentEncounterKey == \"3\") {\n if(stage.tags[\"tutorial:hasAttackedEffectivelyWithEarth\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">\n The <span class=\"green\">axe</span> cweaves\n through <span class=\"blue\">speawrs</span>!\n </div>\n </div>\n )\n }\n if(stage.tags[\"tutorial:hasAttackedIneffectively\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"left\">\n <div class=\"Text\">\n Our <span class=\"red\">swowd</span> finds no\n puwchase against <span class=\"blue\">speawrs</span>.\n <br/><br/>\n If need be, we may always undo.\n </div>\n </div>\n )\n }\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">\n These meowrtals wield wwetched <span class=\"blue\">speawrs</span>\n <br/><br/>\n <span class=\"blue\">Speaws</span> are strong\n against <span class=\"red\">swowds</span>, and will do 2x the damage.\n </div>\n </div>\n )\n }\n if(stage.currentEncounterKey == \"5\") {\n if(App.tutorial.hasSeenBoss == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"left\">\n <div class=\"Text\">\n Their last remnants cwing on\n <br/><br/>\n Show them the beauty of undeath.\n </div>\n </div>\n )\n }\n }\n },\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n // {\n // \"duration\": Infinity,\n // \"deltastages\": [\n // {\n // \"dialogue\": {\n // \"type\": \"CharacterDraftBox\",\n // \"data\": {\n // \"unitJobKeys\": [\"sword\", \"spear\", \"dagger\"],\n // \"maskUnit\": {\n // \"faceKey\": \"dwarfzombie\",\n // \"bodyKey\": \"good\",\n // \"skills\": [\n // \"inflict-damage\",\n // \"pivot\",\n // ]\n // },\n // \"nextURL\": \"/games/dungeon/chapters/1\"\n // }\n // }\n // }\n // ]\n // },\n {\"func\": () => Audiomix.trigger(\"Music\")},\n Plotscripts.SpawnPlayerPartyScript(),\n // {\n // \"type\": \"chapter start\",\n // \"data\": [\n // \"Chapter 1\",\n // \"The Dwarves\",\n // \"In Which\",\n // \"..\",\n // \"???\"\n // ]\n // },\n ],\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": 1,\n })\n },\n \"events\": [\n {\n \"name\": \"HealUnits\",\n \"deltastages\": [\n {\n \"unit\": {\n \"key\": \"swordlich\",\n \"decalImageKey\": \"grimrawr\",\n }\n }\n ]\n },\n Plotscripts.HealPlayerPartyScript({\"percent\": 0.5}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": 2})\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": 2,\n })\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript({\"percent\": 0.5}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": 3})\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": 3,\n })\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript({\"percent\": 0.5}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": 4}),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": 4,\n })\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript({\"percent\": 0.5}),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": 5}),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"good\",\n })\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.DefeatAllUnitsOfAffiliation({\n \"stage\": stage,\n \"affiliation\": \"bad\",\n \"encounterKey\": 5,\n })\n },\n \"events\": [\n {\"deltastages\": [{\"phase\": \"success\"}]},\n {\"func\": () => Audiomix.trigger(\"Hell:Music:Victory\")},\n Plotscripts.ChapterSuccessModal,\n Plotscripts.UpdatePlayerPartyScript(),\n {\n \"type\": \"StartDialogue\",\n \"isImportant\": true,\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"type\": \"CharacterDraftBox\",\n \"data\": {\n \"unitJobKeys\": [\"sword\", \"spear\", \"dagger\"],\n \"maskUnit\": {\n \"faceKey\": \"dwarf\",\n \"skills\": [\n \"inflict-damage\",\n \"pivot\",\n ],\n },\n \"nextURL\": \"/games/dungeon/chapters/1\"\n }\n }\n }\n ]\n },\n ]\n },\n ]\n },\n}\n\nexport default chapter\n", "import {Dungeon} from \"@frog/source/data/games/dungeon/dungeon.js\"\n\nconst books = [\n {\n \"roomCount\": 4,\n \"stationsWide\": 2,\n \"stationsHigh\": 2,\n \"numberOfEnemies\": 4,\n \"color\": {\"R\":80,\"G\":50,\"B\":100},\n },\n {\n \"roomCount\": 3,\n \"stationsWide\": 3,\n \"stationsHigh\": 2,\n \"numberOfEnemies\": 5,\n \"color\": {\"R\":100,\"G\":20,\"B\":80},\n },\n {\n \"roomCount\": 2,\n \"stationsWide\": 3,\n \"stationsHigh\": 3,\n \"numberOfEnemies\": 6,\n \"color\": {\"R\":30,\"G\":100,\"B\":70},\n },\n {\n \"roomCount\": 1,\n \"stationsWide\": 4,\n \"stationsHigh\": 4,\n \"numberOfEnemies\": 8,\n \"color\": {\"R\":100,\"G\":50,\"B\":50},\n },\n]\nconst mobs = [\n {\n \"mask\": {\n \"faceKey\": \"dwarf\",\n \"name\": \"Dwarf\",\n \"skills\": [\n \"inflict-damage\",\n \"pivot\",\n ],\n },\n \"jobs\": \"sword,sword,hammer\",\n },\n {\n \"mask\": {\n \"faceKey\": \"goblin\",\n \"name\": \"Goblin\",\n \"skills\": [\n \"inflict-damage\",\n \"pull\",\n ],\n },\n \"jobs\": \"sword,spear,dagger\",\n },\n {\n \"mask\": {\n \"faceKey\": \"kobold\",\n \"name\": \"Kobold\",\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n ],\n },\n \"jobs\": \"spear,spear,sword\",\n },\n {\n \"mask\": {\n \"faceKey\": \"orc\",\n \"name\": \"Orc\",\n \"skills\": [\n \"inflict-damage\",\n \"push\",\n ],\n },\n \"jobs\": \"hammer,hammer,spear\",\n },\n]\n\nexport default function procedurallyGenerateChapters() {\n\n const chapters = {\n \"0\": require(\"./0\").default,\n }\n chapterIndex = 1\n books.forEach((book, bookIndex) => {\n const CHAPTERS_PER_BOOK = 4\n for(bookChapterCount = 0; bookChapterCount < CHAPTERS_PER_BOOK; bookChapterCount++) {\n\n let nextURL = \"/games/dungeon/chapters/\" + (chapterIndex + 1)\n if(bookIndex == books.length - 1 && bookChapterCount == CHAPTERS_PER_BOOK - 1) {\n nextURL = \"/credits\"\n }\n\n chapters[chapterIndex + \"\"] = new Dungeon({\n \"enemyJobs\": mobs[bookChapterCount].jobs,\n \"roomCount\": book.roomCount,\n \"stationsWide\": book.stationsWide,\n \"stationsHigh\": book.stationsHigh,\n \"numberOfEnemies\": book.numberOfEnemies,\n \"groundColor\": book.color,\n \"maskUnit\": mobs[bookChapterCount].mask,\n }).generateChapter({\n \"chapterSlug\": chapterIndex + \"\",\n \"nextURL\": nextURL\n })\n chapterIndex++\n }\n })\n\n return chapters\n}\n", "import procedurallyGenerateChapters from \"@frog/source/data/games/dungeon/chapters.js\"\n\nexport default {\n \"slug\": \"dungeon\",\n \"title\": \"Grimrawr\",\n \"firstChapterKey\": \"0\",\n \"chapters\": procedurallyGenerateChapters(),\n \"configuration\": {\n \"darkness\": true,\n \"squigglevision\": false,\n },\n \"player\": {\n \"affiliation\": \"good\",\n \"inventory\": {\n \"gold\": 0,\n },\n \"party\": {\n \"units\": {\n \"swordlich\": {\n \"key\": \"swordlich\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 50,\n \"skills\": [\n \"inflict-damage\",\n \"restore-health\",\n \"recruit\",\n ],\n\n \"level\": 1,\n \"maxexperience\": 100,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobKey\", \"value\": \"dagger\"},\n {\"key\": \"jobName\", \"value\": \"Ghostking\"},\n {\"key\": \"facts\", \"value\": \"Strikes from afar\"},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n ],\n 5: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobKey\", \"value\": \"mage\"},\n {\"key\": \"jobName\", \"value\": \"Shadowmancer\"},\n ],\n },\n\n \"name\": \"Necromancer\",\n \"jobName\": \"Swordlich\",\n \"faceKey\": \"lich\",\n \"bodyKey\": \"good\",\n },\n \"zombold\": {\n \"key\": \"zombold\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n ],\n\n \"level\": 1,\n \"maxexperience\": 100,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Ghoul\"},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Wight\"},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Shade\"},\n ],\n 5: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Revenant\"},\n ],\n },\n\n \"name\": \"Kobold\",\n \"faceKey\": \"koboldzombie\",\n \"bodyKey\": \"good\",\n },\n \"zomboar\": {\n \"key\": \"zomboar\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"push\",\n ],\n\n \"level\": 1,\n \"maxexperience\": 100,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobName\", \"value\": \"Ghoul\"},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobName\", \"value\": \"Wight\"},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobName\", \"value\": \"Shade\"},\n ],\n 5: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobName\", \"value\": \"Revenant\"},\n ],\n },\n\n \"name\": \"Orc\",\n \"faceKey\": \"orczombie\",\n \"bodyKey\": \"good\",\n },\n }\n },\n }\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./lord-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-0.png\"),\n require(\"./lord-idle-1.png\"),\n require(\"./lord-idle-2.png\"),\n require(\"./lord-idle-3.png\"),\n require(\"./lord-idle-4.png\"),\n require(\"./lord-idle-5.png\"),\n require(\"./lord-idle-6.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n require(\"./lord-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./lord-selected-1.png\"),\n require(\"./lord-selected-2.png\"),\n require(\"./lord-selected-3.png\"),\n require(\"./lord-selected-4.png\"),\n require(\"./lord-selected-5.png\"),\n require(\"./lord-selected-6.png\"),\n require(\"./lord-selected-7.png\"),\n require(\"./lord-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./bladesinger-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-0.png\"),\n require(\"./bladesinger-idle-1.png\"),\n require(\"./bladesinger-idle-2.png\"),\n require(\"./bladesinger-idle-3.png\"),\n require(\"./bladesinger-idle-4.png\"),\n require(\"./bladesinger-idle-5.png\"),\n require(\"./bladesinger-idle-6.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n require(\"./bladesinger-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./bladesinger-selected-1.png\"),\n require(\"./bladesinger-selected-2.png\"),\n require(\"./bladesinger-selected-3.png\"),\n require(\"./bladesinger-selected-4.png\"),\n require(\"./bladesinger-selected-5.png\"),\n require(\"./bladesinger-selected-6.png\"),\n require(\"./bladesinger-selected-7.png\"),\n require(\"./bladesinger-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./archer-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-0.png\"),\n require(\"./archer-idle-1.png\"),\n require(\"./archer-idle-2.png\"),\n require(\"./archer-idle-3.png\"),\n require(\"./archer-idle-4.png\"),\n require(\"./archer-idle-5.png\"),\n require(\"./archer-idle-6.png\"),\n require(\"./archer-idle-5.png\"),\n require(\"./archer-idle-4.png\"),\n require(\"./archer-idle-3.png\"),\n require(\"./archer-idle-2.png\"),\n require(\"./archer-idle-1.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./archer-selected-1.png\"),\n require(\"./archer-selected-2.png\"),\n require(\"./archer-selected-3.png\"),\n require(\"./archer-selected-4.png\"),\n require(\"./archer-selected-5.png\"),\n require(\"./archer-selected-6.png\"),\n require(\"./archer-selected-7.png\"),\n require(\"./archer-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./ranger-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-0.png\"),\n require(\"./ranger-idle-1.png\"),\n require(\"./ranger-idle-2.png\"),\n require(\"./ranger-idle-3.png\"),\n require(\"./ranger-idle-4.png\"),\n require(\"./ranger-idle-5.png\"),\n require(\"./ranger-idle-6.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n require(\"./ranger-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./ranger-selected-1.png\"),\n require(\"./ranger-selected-2.png\"),\n require(\"./ranger-selected-3.png\"),\n require(\"./ranger-selected-4.png\"),\n require(\"./ranger-selected-5.png\"),\n require(\"./ranger-selected-6.png\"),\n require(\"./ranger-selected-7.png\"),\n require(\"./ranger-selected-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./knight-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-0.png\"),\n require(\"./knight-idle-1.png\"),\n require(\"./knight-idle-2.png\"),\n require(\"./knight-idle-3.png\"),\n require(\"./knight-idle-4.png\"),\n require(\"./knight-idle-5.png\"),\n require(\"./knight-idle-6.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n require(\"./knight-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"keytime\": 400,\n \"tweentime\": 100,\n \"images\": [\n require(\"./knight-selected-1.png\"),\n require(\"./knight-selected-2.png\"),\n require(\"./knight-selected-3.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-4.png\"),\n require(\"./knight-selected-5.png\"),\n require(\"./knight-selected-6.png\"),\n require(\"./knight-selected-7.png\"),\n require(\"./knight-idle-0.png\"),\n ]\n })\n },\n}\n", "import Frames from \"@frog/source/utility/Frames.js\"\n\nexport default {\n \"static\": require(\"./general-idle-0.png\"),\n \"idle\": {\n \"frames\": Frames.run({\n \"tweentime\": 100,\n \"images\": [\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-0.png\"),\n require(\"./general-idle-1.png\"),\n require(\"./general-idle-2.png\"),\n require(\"./general-idle-3.png\"),\n require(\"./general-idle-4.png\"),\n require(\"./general-idle-5.png\"),\n require(\"./general-idle-6.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n require(\"./general-idle-7.png\"),\n ]\n })\n },\n \"ready\": {\n \"frames\": Frames.run({\n \"tweentime\": 60,\n \"images\": [\n require(\"./general-selected-1.png\"),\n require(\"./general-selected-2.png\"),\n require(\"./general-selected-3.png\"),\n require(\"./general-selected-4.png\"),\n require(\"./general-selected-5.png\"),\n require(\"./general-selected-6.png\"),\n require(\"./general-selected-7.png\"),\n require(\"./general-selected-0.png\"),\n ]\n })\n },\n}\n", "export default {\n \"affiliation\": \"good\",\n \"party\": {\n \"units\": {\n \"oriana\": {\n \"key\": \"oriana\",\n \"jobKey\": \"hero/swordlord\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n ],\n\n \"name\": \"Oriana\",\n \"subtitle\": \"Lord\",\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/lord\").default,\n \"portraits\": {\n // \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-neutral.png\"),\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-neutral2.png\"),\n \"angry\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-angry.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-happy.png\"),\n },\n\n \"level\": 1,\n \"maxexperience\": 50,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"skill\", \"value\": \"rally\"},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobKey\", \"value\": \"hero/bladesinger\"},\n {\"key\": \"sprites\", \"value\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/bladesinger\").default},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n ],\n }\n },\n \"brigid\": {\n \"key\": \"brigid\",\n \"jobKey\": \"hero/archer\",\n \"affiliation\": \"good\",\n\n \"canBetray\": true,\n \"isRecruited\": true,\n\n \"maxhealth\": 30,\n \"skills\": [\n \"inflict-damage\",\n ],\n\n \"name\": \"Brigid\",\n \"subtitle\": \"Archer\",\n\n \"imageUrl\": null,\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/archer\").default,\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/P-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/P-happy.png\"),\n \"frowny\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/P-frowny.png\"),\n },\n\n \"level\": 1,\n \"maxexperience\": 50,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"skill\", \"value\": \"pull\"},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobKey\", \"value\": \"hero/ranger\"},\n {\"key\": \"sprites\", \"value\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/ranger\").default},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"skill\", \"value\": \"suplex\"}\n ],\n }\n },\n \"callista\": {\n \"key\": \"callista\",\n \"jobKey\": \"hero/knight\",\n \"affiliation\": \"good\",\n\n \"canBetray\": true,\n \"isRecruited\": true,\n\n \"maxhealth\": 50,\n \"skills\": [\n \"inflict-damage\",\n \"restore-health\",\n ],\n\n \"name\": \"Callista\",\n \"subtitle\": \"Knight\",\n\n \"sprites\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/knight\").default,\n \"portraits\": {\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/R-neutral.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/R-happy.png\"),\n \"confused\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/R-confused.png\"),\n \"stern\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/R-stern.png\"),\n },\n\n \"level\": 2,\n \"maxexperience\": 100,\n \"levelups\": {\n // 2: [\n // {\"key\": \"maxhealth\", \"value\": 10},\n // {\"key\": \"maxexperience\", \"value\": 50},\n // {\"key\": \"skill\", \"value\": \"restore-health\"},\n // ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"jobKey\", \"value\": \"hero/general\"},\n {\"key\": \"sprites\", \"value\": require(\"@frog/source/assets/images/hero-tactics-ii/units/ally/general\").default},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 50},\n {\"key\": \"skill\", \"value\": \"pivot\"}\n ],\n }\n },\n }\n },\n}\n", "import Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport {nanoid} from \"nanoid\"\nimport Objdict from \"objdict\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport App from \"@frog/source/models/App.js\"\n\nimport unitJobs from \"./unit-jobs\"\nimport player from \"./player.js\"\n\nfunction convertChapters(chapters) {\n chapters = Object.keys(chapters).map((chapterKey) => {\n const chapter = chapters[chapterKey]\n chapter.key = chapterKey\n return convertChapter(chapter)\n })\n chapters = Objdict.convert(chapters, \"slug\")\n return chapters\n}\n\nfunction convertChapter(oldformat) {\n const chapter = {}\n chapter.slug = oldformat.key\n chapter.stage = {}\n\n chapter.stage.image = oldformat.map.image\n chapter.stage.configuration = {\"darkness\": \"none\"}\n\n chapter.stage.world = {\n \"width\": 6,\n \"height\": 8,\n \"zones\": {\n \"1\": {\n \"slug\": \"1\",\n \"x\": 0,\n \"y\": 0,\n \"z\": 1,\n \"width\": 6,\n \"height\": 8,\n }\n }\n }\n chapter.stage.world.zones[1].zone = chapter.stage.world.zones[1] // TODO: DEPRECATE THIS!!!\n\n chapter.stage.world.terrain = {}\n for(let x = 0; x < chapter.stage.world.width; x += 1) {\n for(let y = 0; y < chapter.stage.world.height; y += 1) {\n chapter.stage.world.terrain[x + \"x\" + y] = {\n \"position\": {\"x\": x, \"y\": y, \"z\": 1},\n \"size\": {\"z\": 0}\n }\n }\n }\n\n chapter.stage.world.blocks = []\n Object.values(oldformat.map.tiles).forEach((tile) => {\n const block = {\n \"position\": {\n \"x\": tile.position.x,\n \"y\": tile.position.y,\n \"z\": tile.position.z ?? 1,\n },\n \"size\": tile.size,\n }\n if(tile.image !== undefined) {\n block.image = tile.image\n }\n chapter.stage.world.terrain[block.position.x + \"x\" + block.position.y].hasCollision = true\n chapter.stage.world.blocks.push(block)\n })\n\n chapter.stage.units = {}\n oldformat.spawns.forEach((spawn) => {\n const unit = {\n \"key\": spawn.key || nanoid(),\n \"position\": {\n \"x\": spawn.position.x,\n \"y\": spawn.position.y,\n \"z\": spawn.position.z ?? 1,\n },\n \"affiliation\": spawn.affiliation,\n \"maxhealth\": spawn.maxhealth,\n }\n if(spawn.affiliation == \"good\") {\n unit.type = \"zone\"\n }\n if(spawn.classKey != undefined) {\n unit.jobKey = \"hero/\" + spawn.classKey\n }\n chapter.stage.units[unit.key] = unit\n })\n\n oldformat.events[\"0:start\"] = oldformat.events[\"0:start\"] || []\n\n chapter.stage.conditions = Object.keys(oldformat.events).map((conditionKey) => {\n const condition = {\n \"type\": \"turn:\" + conditionKey,\n \"events\": []\n }\n\n if(condition.type == \"turn:0:start\") {\n condition.events.push(Plotscripts.SpawnPlayerPartyScript({\n \"isIgnoringEncounterBounds\": true,\n }))\n // {\"func\": () => Audiomix.trigger(\"Pirate:Music:Combat:3\")},\n }\n\n const oldevents = oldformat.events[conditionKey]\n oldevents.forEach((oldevent) => {\n if(oldevent.type == \"SpawnUnit\") {\n const unit = {\n \"key\": oldevent.spawn.key,\n \"jobKey\": oldevent.spawn.classKey,\n \"affiliation\": oldevent.spawn.affiliation,\n \"position\": oldevent.spawn.position,\n }\n if(unit.jobKey != undefined) {\n // && unitJobs[unit.jobKey] != undefined) {\n // unit.protounit = unitJobs[unit.jobKey]\n unit.jobKey = \"hero/\" + unit.jobKey\n }\n if(unit.key != undefined\n && player.party.units[unit.key] != undefined) {\n unit.protounit = player.party.units[unit.key]\n }\n condition.events.push(Plotscripts.SpawnUnit(unit))\n } else if(oldevent.type == \"MoveUnit\") {\n oldevent.position.z = oldevent.position.z ?? 1\n condition.events.push(Plotscripts.MoveUnit({\n \"unitKey\": oldevent.classKey,\n \"position\": oldevent.position,\n }))\n } else if(oldevent.type == \"DisplayDialogue\") {\n condition.events.push(Plotscripts.Dialogue({\n \"unitKey\": oldevent.classKey,\n \"text\": oldevent.dialogue.text,\n \"data\": {\n \"speakerKey\": oldevent.dialogue.name.toLowerCase(),\n \"scene\": {\n \"units\": [\n {\n \"key\": oldevent.dialogue.name.toLowerCase(),\n \"position\": oldevent.dialogue.side == \"right\" ? 4 : 1,\n \"direction\": oldevent.dialogue.side == \"right\" ? \"left\" : \"right\",\n }\n ]\n }\n },\n }))\n } else if(oldevent.type == \"StopDialogue\") {\n condition.events.push(Plotscripts.CloseDialogue())\n } else if(oldevent.type == \"Wait\") {\n condition.events.push(Plotscripts.Wait(oldevent.time * 1000))\n } else if(oldevent.type == \"TransitionScreen\") {\n condition.events.push({\"func\": () => Navigation.go(oldevent.url)})\n } else if(oldevent.type == \"PlaySound\") {\n condition.events.push({\"func\": () => Audiomix.trigger(oldevent.sound.name)})\n }\n })\n\n return condition\n })\n chapter.stage.conditions.push({\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n {\"type\": \"chapter failure\"},\n {\"func\": () => App.game.chapter.restart()},\n ]\n })\n chapter.stage.conditions.push({\n \"type\": \"condition\",\n \"isWinCondition\": true,\n \"condition\": (stage) => {\n if(oldformat.victory != undefined\n && oldformat.victory.turns != undefined\n && stage.turn.number < oldformat.victory.turns) {\n return false\n }\n return Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n Plotscripts.ChapterSuccessModal,\n Plotscripts.UpdatePlayerPartyScript({\"permadeath\": false}),\n {\"func\": () => Navigation.go(oldformat.nextUrl || \"/games/hero\")},\n ]\n })\n\n if(oldformat.hasTutorial !== undefined) {\n chapter.stage.hasTutorial = oldformat.hasTutorial\n }\n\n return chapter\n}\n\nconst colors = {\n \"grasslands\": {\n \"even-tiles\": \"#CCC35E\",\n \"odd-tiles\": \"#DAD45E\",\n \"impassable-tiles\": \"#222222\",\n },\n \"desert\": {\n \"even-tiles\": \"#E0A464\",\n \"odd-tiles\": \"#E7924B\",\n \"impassable-tiles\": \"#222222\",\n },\n \"dungeon\": {\n \"even-tiles\": \"#462e3e\",\n \"odd-tiles\": \"#382430\",\n \"impassable-tiles\": \"#222222\",\n },\n}\n\nlet chapters = {\n \"prologue\": {\n \"isCutscene\": true,\n \"hasPreparation\": false,\n \"music\": \"evil\",\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/grasslands-castle.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 0, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 6}, \"passable\": false},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 3, \"y\": 4}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 4, \"y\": 4}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": 5}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": 2}, \"affiliation\": \"bad\", \"classKey\": \"cleric\", \"key\": \"saul\"},\n {\"position\": {\"x\": 1, \"y\": 4}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#B\"},\n {\"position\": {\"x\": 5, \"y\": 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#C\"},\n {\"position\": {\"x\": 0, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"archer\", \"key\": \"#D\"},\n // {\"position\": {x: -1, y: 4}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#B\"},\n // {\"position\": {x: 6, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#C\"},\n // {\"position\": {x: 0, y: -1}, \"affiliation\": \"bad\", \"classKey\": \"archer\", \"key\": \"#D\"},\n ],\n \"events\": {\n \"0:start\": [\n // {\n // \"type\": \"MoveUnit\",\n // \"position\": {x: 1, y: 4},\n // \"classKey\": \"#B\",\n // },\n // {\n // \"type\": \"MoveUnit\",\n // \"position\": {x: 5, y: 3},\n // \"classKey\": \"#C\",\n // },\n // {\n // \"type\": \"MoveUnit\",\n // \"position\": {x: 0, y: 1},\n // \"classKey\": \"#D\",\n // },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 2, \"y\": 8},\n \"classKey\": \"archer\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 6},\n \"classKey\": \"#1\",\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": 4, \"y\": -1},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 1},\n \"classKey\": \"#2\",\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"francois\",\n \"position\": {\"x\": 6, \"y\": 6},\n \"classKey\": \"paladin\",\n \"affiliation\": \"bad\",\n \"health\": 2\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 6},\n \"classKey\": \"francois\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"Commander Francois, flank them with our reinforcements!\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"brigid\",\n \"text\": \"There's too many of them!\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"oriana, what's our strategy?\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"You fought well, but it was all in vain.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"Now perish.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\",\n \"text\": \"We need to retreat, we need-!\",\n }\n },\n // {\n // \"type\": \"StopDialogue\",\n // },\n {\n \"type\": \"PlaySound\",\n \"sound\": {\n \"name\": \"Final Hit\",\n \"volume\": 1,\n }\n },\n {\n \"type\": \"TransitionScreen\", \"screen\": \"SplashScreen\", \"time\": 1, \"url\": \"/games/hero/chapters/introduce-mercenary\",\n // \"type\": \"TransitionScreen\", \"screen\": \"GameScreen\", \"locationKey\": \"1\"\n },\n ],\n },\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/41.png\n \"introduce-mercenary\": {\n \"hasTutorial\": true,\n \"hasPreparation\": false,\n \"music\": \"hero-alt\",\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/brook.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 0, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 2, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 3, \"y\": 4}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 4, y: 4}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 5, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n {\"position\": {\"x\": 0, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n {\"position\": {\"x\": 5, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/mountain_1.png\")},\n {\"position\": {\"x\": 5, \"y\": 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 1, \"y\": 1}, \"affiliation\": \"good\"},\n // {\"position\": {x: 2, y: 0}, \"affiliation\": \"good\"},\n // {\"position\": {x: 3, y: 0}, \"affiliation\": \"good\"},\n // {\"position\": {x: 4, y: 0}, \"affiliation\": \"good\"},\n // {\"position\": {x: 2, y: 1}, \"affiliation\": \"good\"},\n\n {\"position\": {\"x\": 4, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"archer\", \"maxhealth\": 10},\n {\"position\": {\"x\": 5, \"y\": 5}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"maxhealth\": 20},\n {\"position\": {\"x\": 3, \"y\": 7}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"maxhealth\": 20},\n ],\n \"events\": {\n \"0:start\": [\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\", \"side\": \"right\",\n \"text\": \"Oof.. Where am I?\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\", \"side\": \"right\",\n \"text\": \"I'll figure out where I am after I defeat these enemies.\",\n }\n },\n {\n \"type\": \"StopDialogue\"\n }\n ]\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"1\"},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"2\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"3\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"4\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"5\"]},\n {\"type\": \"DisplayEventualRoute\", \"routeKeys\": [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"]},\n {\"type\": \"Wait\", \"time\": 1},\n {\"type\": \"UnlockLocations\", \"locationKeys\": [\"2\"], \"routeKeys\": [\"1\", \"2\", \"3\"]},\n ],\n \"nextUrl\": \"/games/hero/chapters/introduce-archer\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/63.png\n \"introduce-archer\": {\n \"hasPreparation\": false,\n \"music\": \"hero\",\n \"victory\": {\n \"turns\": 4,\n \"condition\": \"KILL\"\n },\n \"events\": {\n \"0:start\": [\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\", \"side\": \"right\",\n \"text\": \"More foes.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\", \"side\": \"right\",\n \"text\": \"3 vs 1? I don't like these numbers.\",\n }\n },\n {\n \"type\": \"StopDialogue\"\n }\n ],\n \"2:start\": [\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"text\": \"Oho, I'm late!\",\n \"face\": undefined,\n \"name\": \"???\",\n }\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"brigid\",\n \"position\": {\"x\": -1, \"y\": 6},\n \"affiliation\": \"good\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 6},\n \"classKey\": \"brigid\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 5},\n \"classKey\": \"brigid\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"text\": \"My bow is yours!\",\n \"face\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/phil.face.png\"),\n \"name\": \"brigid\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n ],\n \"3:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 3, \"y\": 8},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 7},\n \"classKey\": \"#1\",\n },\n // {\n // \"type\": \"DisplayDialogue\",\n // \"dialogue\": {\n // \"text\": \"More baddies to the south!\",\n // \"face\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/phil.face.png\"),\n // \"name\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/phil.name.png\"),\n // }\n // },\n ]\n },\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/bridges.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 1, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 6}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 7}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 7}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n {\"position\": {\"x\": 5, \"y\": 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n {\"position\": {\"x\": 5, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 3, \"y\": 6}, \"affiliation\": \"good\"},\n // {\"position\": {x: 3, y: 7}, \"affiliation\": \"good\"},\n // {\"position\": {x: 4, y: 7}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 2, \"y\": 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n {\"position\": {\"x\": 0, \"y\": 2}, \"affiliation\": \"bad\", \"classKey\": \"rogue\"},\n {\"position\": {\"x\": 3, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"archer\"},\n ],\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"2\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"4\", \"5\"], \"locationKeys\": [\"3\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"A1\", \"A2\"], \"locationKeys\": [\"A\"]},\n ],\n \"nextUrl\": \"/games/hero/chapters/upgrade-mercenary\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/15.png\n \"upgrade-mercenary\": {\n \"music\": \"hero-alt\",\n \"hasPreparation\": false,\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/moat.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/fort_red.png\")},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n {\"position\": {\"x\": 2, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/house.png\")},\n {\"position\": {\"x\": 1, \"y\": 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/house.png\")},\n {\"position\": {\"x\": 1, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 4, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 2, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 1, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 2, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 0, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n // {\"position\": {x: 0, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n // {\"position\": {x: 5, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n // {\"position\": {x: 3, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 5, \"y\": 1}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 5, \"y\": 0}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 4, \"y\": 0}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 0, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n {\"position\": {\"x\": 3, \"y\": 2}, \"affiliation\": \"bad\", \"classKey\": \"archer\"},\n {\"position\": {\"x\": 2, \"y\": 3}, \"affiliation\": \"bad\", \"classKey\": \"archer\"},\n {\"position\": {\"x\": 4, \"y\": 6}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n ],\n \"events\": {\n \"5:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 2, \"y\": 8},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 7},\n \"classKey\": \"#1\",\n }\n ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"C\"},\n ],\n \"nextUrl\": \"/games/hero/chapters/introduce-cleric\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/53.png\n \"introduce-cleric\": {\n \"music\": \"hero\",\n \"hasPreparation\": false,\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/rivers.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 1, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 6}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 6}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 4}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/tent_blue.png\")},\n {\"position\": {\"x\": 5, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 0, \"y\": 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n {\"position\": {\"x\": 1, \"y\": 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 4, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 3, \"y\": 3}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": 4}, \"affiliation\": \"good\"},\n // {\"position\": {x: 4, y: 3}, \"affiliation\": \"good\"},\n // {\"position\": {x: 4, y: 4}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": -1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#A\"},\n {\"position\": {\"x\": 2, \"y\": 8}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#B\"},\n {\"position\": {\"x\": 5, \"y\": 8}, \"affiliation\": \"bad\", \"classKey\": \"archer\", \"key\": \"#C\"},\n ],\n \"events\": {\n \"0:start\": [\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 7},\n \"classKey\": \"#B\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 0},\n \"classKey\": \"#A\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 7},\n \"classKey\": \"#C\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 7},\n \"classKey\": \"#C\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 6},\n \"classKey\": \"#C\",\n },\n {\"type\": \"Wait\", \"time\": 1},\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"brigid\",\n \"text\": \"Uh oh.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"brigid\",\n \"text\": \"They have us surrounded.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\",\n \"text\": \"We'll just fight our way out!\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n ],\n \"1:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 3, \"y\": -1},\n \"classKey\": \"archer\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": 4, \"y\": -1},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 0},\n \"classKey\": \"#1\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 0},\n \"classKey\": \"#2\",\n }\n ],\n \"3:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#3\",\n \"position\": {\"x\": 3, \"y\": 8},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 7},\n \"classKey\": \"#3\",\n },\n ],\n \"4:start\": [\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"???\", \"face\": null,\n \"text\": \"Phew! Finally found you!\",\n }\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"position\": {\"x\": 6, \"y\": 3},\n \"key\": \"callista\",\n \"affiliation\": \"good\",\n }\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 3},\n \"classKey\": \"callista\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 3},\n \"classKey\": \"callista\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"What a messy battle.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"Leave the healing to me!\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"3\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"6\", \"7\", \"8\"], \"locationKeys\": [\"4\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"B1\", \"B2\", \"B3\"], \"locationKeys\": [\"B\"]},\n ],\n \"nextUrl\": \"/games/hero/chapters/upgrade-archer\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/13.png\n \"upgrade-archer\": {\n \"music\": \"hero-alt\",\n \"hasPreparation\": false,\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/border.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 0, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 5}, \"passable\": false},\n // {\"position\": {x: 5, y: 6}, \"passable\": false},\n // {\"position\": {x: 5, y: 7}, \"passable\": false},\n // {\"position\": {x: 4, y: 7}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/obelisk.png\"), \"size\": {\"x\": 1, \"y\": 2}},\n {\"position\": {\"x\": 5, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/obelisk-right.png\"), \"size\": {\"x\": 1, \"y\": 2}},\n {\"position\": {\"x\": 4, \"y\": 3}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/cactus_1.png\")},\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/cactus_2.png\")},\n {\"position\": {\"x\": 5, \"y\": 0}, \"passable\": true, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/bones_1.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 3, \"y\": 2}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 2, \"y\": 6}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": 6}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 3, \"y\": 0}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 5, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n {\"position\": {\"x\": 5, \"y\": 4}, \"affiliation\": \"bad\", \"classKey\": \"rogue\"},\n {\"position\": {\"x\": 2, \"y\": 0}, \"affiliation\": \"bad\", \"classKey\": \"rogue\"},\n {\"position\": {\"x\": 0, \"y\": 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n ],\n \"events\": {\n \"1:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 4, \"y\": -1},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 4, \"y\": 0},\n \"classKey\": \"#1\",\n }\n ],\n \"3:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": -1, \"y\": 4},\n \"classKey\": \"archer\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 4},\n \"classKey\": \"#2\",\n }\n ],\n \"5:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#3\",\n \"position\": {\"x\": 6, \"y\": 3},\n \"classKey\": \"rogue\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 3},\n \"classKey\": \"#3\",\n }\n ],\n // \"7:end\": [\n // {\n // \"type\": \"SpawnUnit\",\n // \"spawn\": {\n // \"key\": \"#4\",\n // \"position\": {x: 3, y: -1},\n // \"classKey\": \"rogue\",\n // \"affiliation\": \"bad\",\n // },\n // },\n // {\n // \"type\": \"MoveUnit\",\n // \"position\": {x: 3, y: 0},\n // \"classKey\": \"#4\",\n // }\n // ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"B\"},\n ],\n \"nextUrl\": \"/games/hero/chapters/defeat-miniboss\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/21.png\n \"defeat-miniboss\": {\n \"music\": \"hero-alt\",\n \"hasPreparation\": false,\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/fork.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 0, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 7}, \"passable\": false},\n // {\"position\": {x: 3, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 4, \"y\": 6}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 0, \"y\": 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n {\"position\": {\"x\": 2, \"y\": 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n ]\n },\n \"spawns\": [\n // mercenary\n // archer\n // cleric\n {\"position\": {\"x\": 6, \"y\": 3}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 6, \"y\": 4}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 6, \"y\": 5}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": -1, \"y\": 5}, \"affiliation\": \"bad\", \"classKey\": \"paladin\", \"key\": \"francois\"},\n {\"position\": {\"x\": -1, \"y\": 4}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#B\"},\n // {\"position\": {x: 0, y: 2}, \"affiliation\": \"bad\", \"classKey\": \"rogue\"},\n {\"position\": {\"x\": -1, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#C\"},\n // {\"position\": {x: 5, y: 0}, \"affiliation\": \"bad\", \"classKey\": \"archer\"},\n {\"position\": {\"x\": 5, \"y\": -1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#D\"},\n ],\n \"events\": {\n \"0:start\": [\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 3},\n \"classKey\": \"oriana\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 4},\n \"classKey\": \"brigid\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 5},\n \"classKey\": \"callista\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"Just beyond this outpost is the bridge to the fortress.\",\n },\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"It's all that stands between us and Saul.\",\n },\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"???\", \"side\": \"right\",\n \"text\": \"Hark? What have we here?\",\n }\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 5},\n \"classKey\": \"francois\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Francois\", \"side\": \"right\",\n \"text\": \"Toddy! You've returned!\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\",\n \"text\": \"Aye, to put an end to this.\",\n },\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Francois\", \"side\": \"right\",\n \"text\": \"Alas. Poor last words.\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 1, \"y\": 4},\n \"classKey\": \"#B\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 1},\n \"classKey\": \"#C\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 0},\n \"classKey\": \"#D\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"brigid\",\n \"text\": \"Charge!!\",\n },\n },\n {\n \"type\": \"StopDialogue\",\n },\n ],\n \"1:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 3, \"y\": -1},\n \"classKey\": \"archer\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": -1, \"y\": 2},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 0},\n \"classKey\": \"#1\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 2},\n \"classKey\": \"#2\",\n }\n ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"4\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"9\", \"10\", \"11\"], \"locationKeys\": [\"5\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"C1\", \"C2\"], \"locationKeys\": [\"C\"]},\n ],\n \"nextUrl\": \"/games/hero/chapters/upgrade-cleric\",\n },\n // https://serenesforest.net/wp-content/uploads/2017/02/32.png\n \"upgrade-cleric\": {\n \"music\": \"hero\",\n \"hasPreparation\": false,\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/river-greener.png\"),\n \"tiles\": [\n {\"position\": {\"x\": 2, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 2}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 4}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 7}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 7}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 7}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/house.png\")},\n {\"position\": {\"x\": 5, \"y\": 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n {\"position\": {\"x\": 4, \"y\": 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n // {\"position\": {x: 4, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/tent_red.png\")},\n // {\"position\": {x: 5, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/tent_red.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 1, \"y\": 1}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 1, \"y\": 0}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 1, \"y\": 2}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 0, \"y\": 2}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 4, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n {\"position\": {\"x\": 4, \"y\": 6}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n {\"position\": {\"x\": 3, \"y\": 5}, \"affiliation\": \"bad\", \"classKey\": \"archer\"},\n ],\n \"events\": {\n \"1:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 6, \"y\": 4},\n \"classKey\": \"archer\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 4},\n \"classKey\": \"#1\",\n },\n ],\n \"3:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": 6, \"y\": 6},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 6},\n \"classKey\": \"#2\",\n }\n ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"A\"},\n ],\n \"nextUrl\": \"/games/hero/chapters/defeat-boss\",\n },\n \"defeat-boss\": {\n \"music\": \"hero\",\n \"hasPreparation\": false, // DEBUG\n \"map\": {\n \"width\": 6,\n \"height\": 8,\n \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/grasslands-castle.png\"),\n \"tiles\": [\n // {\"position\": {x: 0, y: 4}, \"passable\": false},\n // {\"position\": {x: 1, y: 4}, \"passable\": false},\n // {\"position\": {x: 2, y: 4}, \"passable\": false},\n // {\"position\": {x: 4, y: 4}, \"passable\": false},\n // {\"position\": {x: 5, y: 4}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 0}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 1}, \"passable\": false},\n // {\"position\": {x: 3, y: 2}, \"passable\": false},\n // {\"position\": {x: 1, y: 2}, \"passable\": false},\n // {\"position\": {x: 2, y: 2}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 1}, \"passable\": false},\n {\"position\": {\"x\": 0, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 3, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 3}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 2, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 4, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 5, \"y\": 5}, \"passable\": false},\n {\"position\": {\"x\": 1, \"y\": 6}, \"passable\": false},\n // {\"position\": {x: 4, y: 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/cactus_1.png\")},\n ]\n },\n \"spawns\": [\n {\"position\": {\"x\": 2, \"y\": 8}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 1, \"y\": 8}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 0, \"y\": 8}, \"affiliation\": \"good\"},\n {\"position\": {\"x\": 2, \"y\": -1}, \"affiliation\": \"bad\", \"classKey\": \"cleric\", \"key\": \"saul\"},\n {\"position\": {\"x\": -1, \"y\": 4}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#B\"},\n {\"position\": {\"x\": 6, \"y\": 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\", \"key\": \"#C\"},\n {\"position\": {\"x\": -1, \"y\": 1}, \"affiliation\": \"bad\", \"classKey\": \"archer\", \"key\": \"#D\"},\n ],\n \"events\": {\n \"0:start\": [\n {\"type\": \"Wait\", \"time\": 0.5},\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 7},\n \"classKey\": \"oriana\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 1, \"y\": 7},\n \"classKey\": \"brigid\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 7},\n \"classKey\": \"callista\",\n },\n {\"type\": \"Wait\", \"time\": 0.5},\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\",\n \"text\": \"Saul!! Show yourself!!\",\n }\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 2},\n \"classKey\": \"saul\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"Toddy, back again?\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"I thought you were dead?\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"oriana\",\n \"text\": \"Not yet. En garde!\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"callista\",\n \"text\": \"This is it! Our second chance.\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"brigid\",\n \"text\": \"We're stronger now. Let's give it our all!\",\n }\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 3, \"y\": 2},\n \"classKey\": \"#A\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"Forward! Stop them!\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 2, \"y\": 4},\n \"classKey\": \"#B\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 3},\n \"classKey\": \"#C\",\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 0, \"y\": 1},\n \"classKey\": \"#D\",\n },\n ],\n \"3:end\": [\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"They're advancing closer...\",\n }\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Saul\", \"side\": \"right\",\n \"text\": \"Bring out all reinforcements!!\",\n }\n },\n {\n \"type\": \"StopDialogue\",\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#1\",\n \"position\": {\"x\": 6, \"y\": 1},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 1},\n \"classKey\": \"#1\",\n },\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"#2\",\n \"position\": {\"x\": 6, \"y\": 2},\n \"classKey\": \"berserker\",\n \"affiliation\": \"bad\",\n },\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 2},\n \"classKey\": \"#2\",\n }\n ],\n \"7:end\": [\n {\n \"type\": \"SpawnUnit\",\n \"spawn\": {\n \"key\": \"francois\",\n \"position\": {\"x\": 6, \"y\": 6},\n \"classKey\": \"paladin\",\n \"affiliation\": \"bad\",\n \"health\": 2\n },\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Francois\", \"side\": \"right\",\n \"text\": \"I came as fast as I could!!\",\n }\n },\n {\n \"type\": \"MoveUnit\",\n \"position\": {\"x\": 5, \"y\": 6},\n \"classKey\": \"francois\",\n },\n {\n \"type\": \"DisplayDialogue\",\n \"dialogue\": {\n \"name\": \"Francois\", \"side\": \"right\",\n \"text\": \"Tch - they got here before me.\",\n }\n },\n {\n \"type\": \"StopDialogue\"\n }\n // {\n // \"type\": \"SpawnUnit\",\n // \"spawn\": {\n // \"key\": \"#4\",\n // \"position\": {x: 5, y: 8},\n // \"classKey\": \"berserker\",\n // \"affiliation\": \"bad\",\n // },\n // },\n // {\n // \"type\": \"MoveUnit\",\n // \"position\": {x: 5, y: 7},\n // \"classKey\": \"#4\",\n // }\n ],\n },\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"CreditsScreen\"},\n ],\n \"nextUrl\": \"/credits\",\n },\n}\n\n// \"test\": {\n// \"hasPreparation\": false,\n// \"spawns\": [\n// {\n// \"affiliation\": \"good\",\n// // \"position\": {x: 2, y: 5},\n// \"position\": {x: 1, y: 0},\n// },\n// {\n// \"affiliation\": \"bad\",\n// \"position\": {x: 3, y: 1},\n// \"classKey\": \"berserker\",\n// },\n// {\n// \"affiliation\": \"bad\",\n// \"position\": {x: 1, y: 3},\n// \"classKey\": \"berserker\",\n// },\n// ],\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// // \"colors\": colors[\"grasslands\",\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/beach.png\"),\n// \"tiles\": []\n// }\n// },\n// \"test\": {\n// \"hasPreparation\": false,\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// // \"colors\": colors[\"grasslands\",\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/beach.png\"),\n// \"tiles\": []\n// },\n// \"events\": {\n// \"0:start\": [\n// {\n// \"type\": \"Wait\",\n// \"time\": 10,\n// },\n// {\n// \"type\": \"SpawnUnit\",\n// \"spawn\": {\n// \"key\": \"#1\",\n// \"position\": {x: 1, y: -1},\n// \"key\": \"brigid\",\n// \"affiliation\": \"good\",\n// },\n// },\n// {\n// \"type\": \"MoveUnit\",\n// \"position\": {x: 1, y: 1},\n// \"classKey\": \"#1\",\n// },\n// {\n// \"type\": \"Wait\",\n// \"time\": 1,\n// },\n// {\n// \"type\": \"MoveUnit\",\n// \"position\": {x: 1, y: 3},\n// \"classKey\": \"#1\",\n// },\n// {\n// \"type\": \"Wait\",\n// \"time\": 0.5,\n// },\n// {\n// \"type\": \"DisplayDialogue\",\n// \"dialogue\": {\n// \"text\": \"Oho, I guess I'm late!!\",\n// \"face\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/phil.face.png\"),\n// \"name\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/phil.name.png\"),\n// }\n// },\n// ],\n// }\n// },\n\n// \"penisula\": {\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/penisula.png\"),\n// \"tiles\": [\n// {\"position\": {x: 0, y: 0}, \"passable\": false},\n// {\"position\": {x: 1, y: 0}, \"passable\": false},\n// {\"position\": {x: 2, y: 0}, \"passable\": false},\n// {\"position\": {x: 3, y: 0}, \"passable\": false},\n// {\"position\": {x: 4, y: 0}, \"passable\": false},\n// {\"position\": {x: 5, y: 0}, \"passable\": false},\n// {\"position\": {x: 0, y: 1}, \"passable\": false},\n// {\"position\": {x: 1, y: 1}, \"passable\": false},\n// {\"position\": {x: 2, y: 1}, \"passable\": false},\n// {\"position\": {x: 3, y: 1}, \"passable\": false},\n// {\"position\": {x: 4, y: 1}, \"passable\": false},\n// {\"position\": {x: 5, y: 1}, \"passable\": false},\n// {\"position\": {x: 0, y: 6}, \"passable\": false},\n// {\"position\": {x: 1, y: 6}, \"passable\": false},\n// {\"position\": {x: 2, y: 6}, \"passable\": false},\n// {\"position\": {x: 3, y: 6}, \"passable\": false},\n// {\"position\": {x: 4, y: 6}, \"passable\": false},\n// {\"position\": {x: 5, y: 6}, \"passable\": false},\n// {\"position\": {x: 0, y: 7}, \"passable\": false},\n// {\"position\": {x: 1, y: 7}, \"passable\": false},\n// {\"position\": {x: 2, y: 7}, \"passable\": false},\n// {\"position\": {x: 3, y: 7}, \"passable\": false},\n// {\"position\": {x: 4, y: 7}, \"passable\": false},\n// {\"position\": {x: 5, y: 7}, \"passable\": false},\n// {\"position\": {x: 3, y: 5}, \"passable\": false},\n// {\"position\": {x: 2, y: 2}, \"passable\": false},\n// {\"position\": {x: 4, y: 4}, \"passable\": false},\n// {\"position\": {x: 1, y: 2}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n// {\"position\": {x: 2, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/cactus_1.png\")},\n// {\"position\": {x: 4, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/cactus_2.png\")},\n// {\"position\": {x: 3, y: 2}, \"passable\": true, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/bones_1.png\")},\n// ]\n// },\n// \"spawns\": [\n// {\"position\": {x: 0, y: 4}, \"affiliation\": \"good\"},\n// {\"position\": {x: 0, y: 3}, \"affiliation\": \"good\"},\n// {\"position\": {x: 1, y: 4}, \"affiliation\": \"good\"},\n// {\"position\": {x: 1, y: 3}, \"affiliation\": \"good\"},\n// {\"position\": {x: 4, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 4, y: 5}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 5, y: 4}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 5, y: 5}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// ],\n// },\n// // https://serenesforest.net/wp-content/uploads/2017/02/74-169x300.png\n// \"desert\": {\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/desert.png\"),\n// \"tiles\": [\n// {\"position\": {x: 1, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n// {\"position\": {x: 2, y: 1}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n// {\"position\": {x: 2, y: 2}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_1.png\")},\n// {\"position\": {x: 3, y: 3}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n// {\"position\": {x: 5, y: 4}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n// {\"position\": {x: 5, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_1.png\")},\n// {\"position\": {x: 3, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n// {\"position\": {x: 0, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n// {\"position\": {x: 4, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_1.png\")},\n// {\"position\": {x: 1, y: 7}, \"passable\": true, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/bones_2.png\")},\n// {\"position\": {x: 0, y: 2}, \"passable\": true, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/bones_1.png\")},\n// ]\n// },\n// \"spawns\": [\n// {\"position\": {x: 4, y: 0}, \"affiliation\": \"good\"},\n// {\"position\": {x: 4, y: 1}, \"affiliation\": \"good\"},\n// {\"position\": {x: 5, y: 1}, \"affiliation\": \"good\"},\n// {\"position\": {x: 5, y: 2}, \"affiliation\": \"good\"},\n// {\"position\": {x: 0, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 1, y: 5}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 2, y: 6}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 3, y: 6}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// ],\n// },\n// // https://serenesforest.net/wp-content/uploads/2017/02/33.png\n// \"desert-castle\": {\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/desert-castle.png\"),\n// \"tiles\": [\n// {\"position\": {x: 3, y: 0}, \"passable\": false},\n// {\"position\": {x: 4, y: 0}, \"passable\": false},\n// {\"position\": {x: 5, y: 0}, \"passable\": false},\n// {\"position\": {x: 3, y: 1}, \"passable\": false},\n// {\"position\": {x: 5, y: 1}, \"passable\": false},\n// {\"position\": {x: 1, y: 2}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_1.png\")},\n// {\"position\": {x: 2, y: 3}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_2.png\")},\n// {\"position\": {x: 3, y: 4}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n// {\"position\": {x: 5, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_1.png\")},\n// {\"position\": {x: 1, y: 5}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/rocks_3.png\")},\n// {\"position\": {x: 4, y: 7}, \"passable\": true, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/bones_2.png\")},\n// ]\n// },\n// \"spawns\": [\n// {\"position\": {x: 0, y: 4}, \"affiliation\": \"good\"},\n// {\"position\": {x: 0, y: 6}, \"affiliation\": \"good\"},\n// {\"position\": {x: 2, y: 6}, \"affiliation\": \"good\"},\n// {\"position\": {x: 3, y: 6}, \"affiliation\": \"good\"},\n// {\"position\": {x: 4, y: 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 5, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 2, y: 2}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 0, y: 0}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// ],\n// },\n// // https://serenesforest.net/wp-content/uploads/2017/02/14.png\n// \"swamp\": {\n// \"map\": {\n// \"width\": 6,\n// \"height\": 8,\n// \"image\": require(\"@frog/source/assets/images/hero-tactics/stages/swamp.png\"),\n// \"tiles\": [\n// {\"position\": {x: 1, y: 2}, \"passable\": false},\n// {\"position\": {x: 2, y: 2}, \"passable\": false},\n// {\"position\": {x: 2, y: 4}, \"passable\": false},\n// {\"position\": {x: 2, y: 5}, \"passable\": false},\n// {\"position\": {x: 1, y: 5}, \"passable\": false},\n// {\"position\": {x: 4, y: 5}, \"passable\": false},\n// {\"position\": {x: 5, y: 5}, \"passable\": false},\n// {\"position\": {x: 5, y: 2}, \"passable\": false},\n// {\"position\": {x: 4, y: 2}, \"passable\": false},\n// {\"position\": {x: 4, y: 3}, \"passable\": false},\n// {\"position\": {x: 0, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n// {\"position\": {x: 1, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n// {\"position\": {x: 2, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_1.png\")},\n// {\"position\": {x: 3, y: 0}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/tree_2.png\")},\n// {\"position\": {x: 3, y: 7}, \"passable\": false, \"image\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/mountain_1.png\")},\n// ]\n// },\n// \"spawns\": [\n// {\"position\": {x: 5, y: 6}, \"affiliation\": \"good\"},\n// {\"position\": {x: 4, y: 7}, \"affiliation\": \"good\"},\n// {\"position\": {x: 3, y: 6}, \"affiliation\": \"good\"},\n// {\"position\": {x: 2, y: 7}, \"affiliation\": \"good\"},\n// {\"position\": {x: 4, y: 0}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 5, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 0, y: 1}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// {\"position\": {x: 0, y: 3}, \"affiliation\": \"bad\", \"classKey\": \"berserker\"},\n// ],\n// },\n\nchapters = convertChapters(chapters)\nexport default chapters\n", "export default {\n \"slug\": \"hero\",\n \"title\": \"Hero Tactics II\",\n \"firstChapterKey\": \"prologue\",\n \"configuration\": {\n \"darkness\": false,\n \"squigglevision\": false,\n \"encounterViewOnly\": true,\n },\n \"chapters\": require(\"./chapters\").default,\n \"player\": require(\"./player\").default,\n \"overworld\": {\n // \"image\": require(\"@frog/source/assets/images/overworld.png\"),\n \"regions\": {\n \"red\": {\n \"position\": {\"x\": 0, \"y\": 0}\n },\n \"blue\": {\n \"position\": {\"x\": 0, \"y\": 0}\n }\n },\n \"locations\": {\n \"1\": {\n \"key\": \"1\",\n \"position\": {\"x\": 2, \"y\": 1},\n \"chapterKey\": \"introduce-mercenary\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/mercenary_good.png\"),\n \"isDisplayed\": true,\n \"isReachable\": true,\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"1\"},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"2\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"3\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"4\"]},\n {\"type\": \"DisplayLocations\", \"locationKeys\": [\"5\"]},\n {\"type\": \"DisplayEventualRoute\", \"routeKeys\": [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"]},\n {\"type\": \"Wait\", \"time\": 1},\n {\"type\": \"UnlockLocations\", \"locationKeys\": [\"2\"], \"routeKeys\": [\"1\", \"2\", \"3\"]},\n ]\n },\n },\n \"2\": {\n \"key\": \"2\",\n \"position\": {\"x\": 3, \"y\": 3},\n \"chapterKey\": \"introduce-archer\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/rogue_good.png\"),\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"2\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"4\", \"5\"], \"locationKeys\": [\"3\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"A1\", \"A2\"], \"locationKeys\": [\"A\"]},\n ]\n },\n },\n \"3\": {\n \"key\": \"3\",\n \"position\": {\"x\": 5, \"y\": 3},\n \"chapterKey\": \"introduce-cleric\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/units/@vmenezio/cleric_good.png\"),\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"3\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"6\", \"7\", \"8\"], \"locationKeys\": [\"4\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"B1\", \"B2\", \"B3\"], \"locationKeys\": [\"B\"]},\n ]\n },\n },\n \"4\": {\n \"key\": \"4\",\n \"position\": {\"x\": 4, \"y\": 5},\n \"chapterKey\": \"defeat-miniboss\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/pagoda_temple_wout_trees.png\"),\n \"spritesize\": \"big\",\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"4\"},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"9\", \"10\", \"11\"], \"locationKeys\": [\"5\"]},\n {\"type\": \"UnlockLocations\", \"routeKeys\": [\"C1\", \"C2\"], \"locationKeys\": [\"C\"]},\n ]\n },\n },\n \"5\": {\n \"key\": \"5\",\n \"position\": {\"x\": 3, \"y\": 7},\n \"chapterKey\": \"defeat-boss\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/sand_fortress_wout_towers_2.png\"),\n \"spritesize\": \"big\",\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"CreditsScreen\"},\n ]\n },\n },\n \"A\": {\n \"key\": \"A\",\n \"position\": {\"x\": 1, \"y\": 3},\n \"chapterKey\": \"upgrade-cleric\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/house.png\"),\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"A\"},\n ]\n },\n },\n \"B\": {\n \"key\": \"B\",\n \"position\": {\"x\": 4, \"y\": 1},\n \"chapterKey\": \"upgrade-archer\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/map/desert/objects/obelisk-centered.png\"),\n \"spritedown\": true,\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"B\"},\n ]\n },\n },\n \"C\": {\n \"key\": \"C\",\n \"position\": {\"x\": 2, \"y\": 5},\n \"chapterKey\": \"upgrade-mercenary\",\n \"icon\": require(\"@frog/source/assets/images/hero-tactics/map/grasslands/objects/fort_red.png\"),\n \"spritedown\": true,\n \"events\": {\n \"afterVictory\": [\n {\"type\": \"TransitionScreen\", \"screen\": \"OverworldScreen\"},\n {\"type\": \"FinishLocation\", \"locationKey\": \"C\"},\n ]\n },\n },\n },\n \"routes\": {\n \"1\": {\"x\": 2, \"y\": 1.4},\n \"2\": {\"x\": 2.1, \"y\": 1.9},\n \"3\": {\"x\": 2.4, \"y\": 2.2},\n \"4\": {\"x\": 3.66, \"y\": 2.8},\n \"5\": {\"x\": 4.1, \"y\": 2.9},\n \"6\": {\"x\": 4.8, \"y\": 3.4},\n \"7\": {\"x\": 4.7, \"y\": 3.95},\n \"8\": {\"x\": 4.4, \"y\": 4.4},\n \"9\": {\"x\": 4.1, \"y\": 5.4},\n \"10\": {\"x\": 3.9, \"y\": 6.0},\n \"11\": {\"x\": 3.6, \"y\": 6.3},\n \"A1\": {\"x\": 2.2, \"y\": 2.8},\n \"A2\": {\"x\": 1.7, \"y\": 2.85},\n \"B1\": {\"x\": 5.0, \"y\": 2.1},\n \"B2\": {\"x\": 4.7, \"y\": 1.65},\n \"B3\": {\"x\": 4.3, \"y\": 1.4},\n \"C1\": {\"x\": 3.2, \"y\": 4.8},\n \"C2\": {\"x\": 2.7, \"y\": 4.9},\n }\n }\n}\n", "export default {\n \"affiliation\": \"good\",\n \"inventory\": {\"gold\": 0},\n \"party\": {\n \"units\": {\n \"princess\": {\n \"key\": \"princess\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 50,\n \"skills\": [\n \"inflict-damage\",\n \"rally\",\n \"recruit\",\n ],\n\n \"name\": \"PRINCESS\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n\n \"dialogue\": {\n \"death\": \"Damn.\"\n },\n\n \"portraits\": {\n // \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-neutral.png\"),\n \"neutral\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-neutral2.png\"),\n \"angry\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-angry.png\"),\n \"happy\": require(\"@frog/source/assets/images/chess-tactics/portraits/newer/RP-happy.png\"),\n },\n },\n \"hero\": {\n \"key\": \"hero\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 50,\n \"skills\": [\n \"inflict-damage\",\n \"smite\",\n \"recruit\",\n ],\n\n \"name\": \"HERO\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n\n \"dialogue\": {\n \"death\": \"Damn.\"\n },\n },\n \"friend\": {\n \"key\": \"friend\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"pull\",\n \"recruit\",\n ],\n\n \"name\": \"FRIEND\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n\n \"dialogue\": {\n \"death\": \"Damn.\"\n },\n },\n \"aide\": {\n \"key\": \"aide\",\n \"jobKey\": \"dagger\",\n \"affiliation\": \"good\",\n\n \"isRecruited\": true,\n\n \"maxhealth\": 40,\n \"skills\": [\n \"inflict-damage\",\n \"swap\",\n \"recruit\",\n ],\n\n \"name\": \"AIDE\",\n \"faceKey\": \"human\",\n \"bodyKey\": \"good\",\n\n \"dialogue\": {\n \"death\": \"Damn.\"\n },\n },\n }\n },\n}\n", "{\n \"HyDhCA9xY8X3dWRm0VP8-\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"HyDhCA9xY8X3dWRm0VP8-\"\n },\n \"M_T6RXBREtofAVKnqYO4y\": {\n \"position\": {\n \"x\": 14,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"M_T6RXBREtofAVKnqYO4y\"\n },\n \"gPeVeuC4tug2GytNenwOx\": {\n \"position\": {\n \"x\": 15,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"gPeVeuC4tug2GytNenwOx\"\n },\n \"f-f3TTSNd_E2FC0FTlfra\": {\n \"position\": {\n \"x\": 15,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"f-f3TTSNd_E2FC0FTlfra\"\n },\n \"djKl-WRiv6WjafOaf_Gcd\": {\n \"position\": {\n \"x\": 13,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"bad\",\n \"key\": \"djKl-WRiv6WjafOaf_Gcd\"\n },\n \"rQRuk4De1BYvIyapE8iZW\": {\n \"position\": {\n \"x\": 15,\n \"y\": 12,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"bad\",\n \"key\": \"rQRuk4De1BYvIyapE8iZW\"\n },\n \"cIhP0fVZ4I9kpTjThG75p\": {\n \"position\": {\n \"x\": 17,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"bad\",\n \"key\": \"cIhP0fVZ4I9kpTjThG75p\"\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":128,\n \"id\":20,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":176,\n \"y\":176\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":30,\n \"id\":7,\n \"name\":\"data:collision\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":6,\n \"name\":\"data:spots\",\n \"objects\":[\n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":21,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":256,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":23,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":272,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":24,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":192\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":25,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":208\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":26,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":240\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":27,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":224\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":28,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":256\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":29,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":288,\n \"y\":272\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":30,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":256,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":31,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":272,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":32,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":240,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":33,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":224,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":34,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":208,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":35,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":256\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":36,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":192,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":37,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":272\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":38,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":240\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":39,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":208\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":40,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":224\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":41,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":176,\n \"y\":192\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":42,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":192,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":43,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":224,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":44,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":208,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":45,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":240,\n \"y\":176\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":8,\n \"nextobjectid\":46,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n }, \n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nconst TURN_COUNT = 8\nconst PROTOUNIT = {\n \"randomJobKey\": \"sword,dagger,bow,spear\",\n \"affiliation\": \"bad\",\n // ai?\n}\n\nexport default {\n \"slug\": \"y1\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"text\": function(stage) {\n const currentTurnNumber = stage.turn.number + (stage.turn.phase == \"end\" ? 1 : 0)\n if(currentTurnNumber < TURN_COUNT) {\n const roundsRemaining = Math.max(0, Math.ceil((TURN_COUNT - currentTurnNumber) / 2))\n return \"Defend for \" + roundsRemaining + \" round\" + (roundsRemaining != 1 ? \"s\" : \"\")\n } else {\n return \"Defeat all enemies\"\n }\n },\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat\")},\n Plotscripts.SpawnPlayerPartyScript(),\n ]\n },\n {\n \"type\": \"turn:1:end\",\n \"events\": [\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n ]\n },\n {\n \"type\": \"turn:3:end\",\n \"events\": [\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n ]\n },\n {\n \"type\": \"turn:5:end\",\n \"events\": [\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n ]\n },\n {\n \"type\": \"turn:7:end\",\n \"events\": [\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn\", \"protounit\": PROTOUNIT}),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.turn.number > TURN_COUNT\n && Plotscripts.areAllUnaffiliatedUnitsDefeated(stage, {\"affiliation\": \"good\"})\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\n \"type\": \"StartDialogue\",\n \"duration\": Infinity,\n \"deltastages\": [\n {\n \"mark\": 0,\n \"dialogue\": {\n \"type\": \"LevelUpModal\",\n \"data\": {\n \"unitKey\": \"princess\"\n }\n }\n }\n ]\n },\n {\"func\": () => {\n App.game.player.party.units[\"princess\"].maxhealth += 10\n App.game.player.party.units[\"princess\"].level += 1\n }},\n {\n \"type\": \"Hang\",\n \"duration\": Infinity,\n \"isImportant\": true,\n },\n {\"func\": () => Navigation.go(\"/games/war/chapters/y2\")}, // GO TO OVERWORLD INSTEAD\n ]\n },\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "{\n \"0QziRL28RgBeD5hrmBfUr\": {\n \"position\": {\n \"x\": 13,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"0QziRL28RgBeD5hrmBfUr\"\n },\n \"2j8ZQDAVd3IhNW_AjwPfA\": {\n \"position\": {\n \"x\": 14,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"2j8ZQDAVd3IhNW_AjwPfA\"\n },\n \"rWszjXmWzCa71nBSVN8di\": {\n \"position\": {\n \"x\": 15,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"rWszjXmWzCa71nBSVN8di\"\n },\n \"yvcWLLwGesAo-CI9CHg4N\": {\n \"position\": {\n \"x\": 13,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"yvcWLLwGesAo-CI9CHg4N\"\n },\n \"WeXLbGJU8jO8CW4GhhVw0\": {\n \"position\": {\n \"x\": 14,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"WeXLbGJU8jO8CW4GhhVw0\"\n },\n \"_bxSmy3RIeZJj9ZzX0iT2\": {\n \"position\": {\n \"x\": 15,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"_bxSmy3RIeZJj9ZzX0iT2\"\n },\n \"vK84aULEtgXf1Ixzr-3yK\": {\n \"position\": {\n \"x\": 13,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"vK84aULEtgXf1Ixzr-3yK\"\n },\n \"ioDRp_mgh00fbOeAaYd8K\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ioDRp_mgh00fbOeAaYd8K\"\n },\n \"iyJJrxX_VOKBhArWKfpwY\": {\n \"position\": {\n \"x\": 15,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"iyJJrxX_VOKBhArWKfpwY\"\n },\n \"dLj4uhtYnrZZO4hlQdCm-\": {\n \"position\": {\n \"x\": 13,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"dLj4uhtYnrZZO4hlQdCm-\"\n },\n \"zuE5CJ1C4ePx-4MXoLO0k\": {\n \"position\": {\n \"x\": 14,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"zuE5CJ1C4ePx-4MXoLO0k\"\n },\n \"H9B1A8p7Y7hHcaz6HqdfZ\": {\n \"position\": {\n \"x\": 15,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"H9B1A8p7Y7hHcaz6HqdfZ\"\n },\n \"pdKhOJjUgqpH0lJM0LzUt\": {\n \"position\": {\n \"x\": 12,\n \"y\": 20,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"bad\",\n \"key\": \"pdKhOJjUgqpH0lJM0LzUt\"\n },\n \"Bj7E1sFcVGqnH6cgF-GQl\": {\n \"position\": {\n \"x\": 14,\n \"y\": 19,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"bad\",\n \"key\": \"Bj7E1sFcVGqnH6cgF-GQl\"\n },\n \"jBqlLeugzamHKmMNY-Dt6\": {\n \"position\": {\n \"x\": 17,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"bad\",\n \"key\": \"jBqlLeugzamHKmMNY-Dt6\",\n \"maxhealth\": \"30\"\n },\n \"7pRNomMPJnv1tbT6cQBMo\": {\n \"position\": {\n \"x\": 15,\n \"y\": 15,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"affiliation\": \"bad\",\n \"key\": \"7pRNomMPJnv1tbT6cQBMo\",\n \"maxhealth\": 30\n },\n \"9r2D70g30H6ryS2-saqpO\": {\n \"position\": {\n \"x\": 17,\n \"y\": 15,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"9r2D70g30H6ryS2-saqpO\"\n },\n \"E7ISLQQfyTKgDCxBlA16B\": {\n \"position\": {\n \"x\": 14,\n \"y\": 8,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spearknight\",\n \"jobKey\": \"spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"E7ISLQQfyTKgDCxBlA16B\",\n \"maxhealth\": 50\n },\n \"x2Bw2x_c6Mqt8YA5vbV8B\": {\n \"position\": {\n \"x\": 11,\n \"y\": 13,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"x2Bw2x_c6Mqt8YA5vbV8B\",\n \"maxhealth\": \"30\"\n },\n \"yEZUjuSmJvuNmFmpB7039\": {\n \"position\": {\n \"x\": 12,\n \"y\": 11,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"yEZUjuSmJvuNmFmpB7039\",\n \"maxhealth\": \"30\"\n },\n \"SvoPZMFptpGt1R2S8myM9\": {\n \"position\": {\n \"x\": 14,\n \"y\": 12,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"bad\",\n \"key\": \"SvoPZMFptpGt1R2S8myM9\",\n \"maxhealth\": \"30\"\n },\n \"H05s05YpR45CD1W0Tcdji\": {\n \"position\": {\n \"x\": 17,\n \"y\": 7,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"H05s05YpR45CD1W0Tcdji\"\n },\n \"59YtMmGPbKjxbSSRlmGeK\": {\n \"position\": {\n \"x\": 18,\n \"y\": 9,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"59YtMmGPbKjxbSSRlmGeK\"\n },\n \"DGKVnEC_cHilZYsOGA4ZB\": {\n \"position\": {\n \"x\": 11,\n \"y\": 7,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"DGKVnEC_cHilZYsOGA4ZB\"\n },\n \"QJo6sa-PIVsONZoNr_Zav\": {\n \"position\": {\n \"x\": 12,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammercavalier\",\n \"jobKey\": \"hammercavalier\",\n \"affiliation\": \"none\",\n \"key\": \"QJo6sa-PIVsONZoNr_Zav\",\n \"maxhealth\": \"50\"\n },\n \"QNOKRM5D7P1EP8CaUeECj\": {\n \"position\": {\n \"x\": 17,\n \"y\": 13,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"hammer\",\n \"affiliation\": \"none\",\n \"key\": \"QNOKRM5D7P1EP8CaUeECj\",\n \"maxhealth\": \"30\"\n },\n \"7_mA84BK6xYkKpEUPy6RR\": {\n \"position\": {\n \"x\": 12,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"7_mA84BK6xYkKpEUPy6RR\"\n },\n \"wYF9Ql4y33cVUTRBYtHVy\": {\n \"position\": {\n \"x\": 16,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"wYF9Ql4y33cVUTRBYtHVy\"\n },\n \"NoUmBiLcsDopfV_nJ88HR\": {\n \"position\": {\n \"x\": 12,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"NoUmBiLcsDopfV_nJ88HR\"\n }\n}", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[{\n \"data\":[77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":6,\n \"nextobjectid\":21,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n },\n {\n \"firstgid\":64,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}\n", "[\n {\n \"slug\": \"1\",\n \"zoomout\": 1,\n \"z\": 1,\n \"points\": [\n {\n \"x\": 12,\n \"y\": 19\n },\n {\n \"x\": 17,\n \"y\": 19\n },\n {\n \"x\": 17,\n \"y\": 23\n },\n {\n \"x\": 12,\n \"y\": 23\n }\n ]\n },\n {\n \"slug\": \"2\",\n \"zoomout\": 1,\n \"z\": 1,\n \"points\": [\n {\n \"x\": 12,\n \"y\": 15\n },\n {\n \"x\": 18,\n \"y\": 15\n },\n {\n \"x\": 18,\n \"y\": 19\n },\n {\n \"x\": 12,\n \"y\": 19\n }\n ]\n },\n {\n \"slug\": \"3\",\n \"zoomout\": 1,\n \"z\": 1,\n \"points\": [\n {\n \"x\": 11,\n \"y\": 11\n },\n {\n \"x\": 18,\n \"y\": 11\n },\n {\n \"x\": 18,\n \"y\": 15\n },\n {\n \"x\": 11,\n \"y\": 15\n }\n ]\n },\n {\n \"slug\": \"4\",\n \"zoomout\": 1,\n \"z\": 1,\n \"points\": [\n {\n \"x\": 11,\n \"y\": 7\n },\n {\n \"x\": 19,\n \"y\": 7\n },\n {\n \"x\": 19,\n \"y\": 11\n },\n {\n \"x\": 11,\n \"y\": 11\n }\n ]\n }\n]", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nexport default {\n \"slug\": \"y2\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n \"encounters\": require(\"./encounters.json\"),\n }),\n \"text\": \"Free the prisoners\",\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat:3\")},\n Plotscripts.SpawnPlayerPartyScript(),\n ]\n },\n ...Plotscripts.EncounterVictories({\"encounterKeys\": [1, 2, 3, 4], \"nextURL\": \"/games/war/chapters/y3\"}),\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "{\n \"ELxOt9ohu37dBHoOT8WdV\": {\n \"position\": {\n \"x\": 17,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammercavalier\",\n \"jobKey\": \"hammercavalier\",\n \"affiliation\": \"bad\",\n \"key\": \"ELxOt9ohu37dBHoOT8WdV\"\n },\n \"4VU0G6W3VLRV0h3lfO5ST\": {\n \"position\": {\n \"x\": 12,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spearknight\",\n \"jobKey\": \"spearknight\",\n \"affiliation\": \"bad\",\n \"key\": \"4VU0G6W3VLRV0h3lfO5ST\"\n },\n \"cZF2n9Gprb4xUYCG8b9Hy\": {\n \"position\": {\n \"x\": 11,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"affiliation\": \"bad\",\n \"key\": \"cZF2n9Gprb4xUYCG8b9Hy\"\n },\n \"ne4tD8YNqT_CSIkGSqgDz\": {\n \"position\": {\n \"x\": 18,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"ne4tD8YNqT_CSIkGSqgDz\"\n },\n \"bridge1\": {\n \"position\": {\n \"x\": 10,\n \"y\": 14,\n \"z\": 1\n },\n \"affiliation\": \"inanimate\",\n \"key\": \"bridge1\",\n \"imageKey\": \"wall\",\n \"maxhealth\": 30\n },\n \"bridge2\": {\n \"position\": {\n \"x\": 19,\n \"y\": 15,\n \"z\": 1\n },\n \"affiliation\": \"inanimate\",\n \"key\": \"bridge2\",\n \"imageKey\": \"wall\",\n \"maxhealth\": 30\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 2, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 2, 2, 13, 14, 13, 14, 2, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 2, 2, 14, 13, 14, 13, 2, 2, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 2, 13, 14, 13, 14, 2, 2, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 2, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":30,\n \"id\":7,\n \"name\":\"data:collision\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":0,\n \"id\":59,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":176,\n \"y\":0\n }, \n {\n \"x\":176,\n \"y\":16\n }, \n {\n \"x\":192,\n \"y\":16\n }, \n {\n \"x\":192,\n \"y\":128\n }, \n {\n \"x\":16,\n \"y\":128\n }, \n {\n \"x\":16,\n \"y\":112\n }, \n {\n \"x\":0,\n \"y\":112\n }],\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":144,\n \"y\":176\n }],\n \"opacity\":1,\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":6,\n \"name\":\"data:spots\",\n \"objects\":[\n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":44,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-good\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":240,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":48,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-good\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":224,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":49,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-good\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":256,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":50,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-bad\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":240,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":55,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-bad\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":160,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":56,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-good\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":208,\n \"y\":176\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":57,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-bad\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":224,\n \"y\":288\n }, \n {\n \"ellipse\":true,\n \"height\":16,\n \"id\":58,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"spawn-bad\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":16,\n \"x\":304,\n \"y\":288\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":9,\n \"nextobjectid\":60,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n }, \n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nconst PROTOUNIT = {\n \"randomJobKey\": \"sword,dagger,hammer,gun\",\n \"affiliation\": \"bad\",\n}\n\nexport default {\n \"slug\": \"y3\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"text\": \"Destroy the 2 bridges\",\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat\")},\n Plotscripts.SpawnPlayerPartyScript({\"spotKey\": \"spawn-good\"}),\n ]\n },\n {\n \"type\": \"turn:every-odd:end\",\n \"events\": [\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn-bad\", \"protounit\": PROTOUNIT}),\n Plotscripts.SpawnUnitAtSpot({\"spotKey\": \"spawn-bad\", \"protounit\": PROTOUNIT}),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == 1\n && stage.units[\"bridge1\"].isDead == true\n && stage.units[\"bridge2\"].isDead == true\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/war/chapters/y4\")},\n ]\n },\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "{\n \"AUGaHEoj_xzqAz0rBtIfl\": {\n \"position\": {\n \"x\": 12,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"AUGaHEoj_xzqAz0rBtIfl\"\n },\n \"PxJfDDzLcAXKEsPGryl2s\": {\n \"position\": {\n \"x\": 13,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"PxJfDDzLcAXKEsPGryl2s\"\n },\n \"pgbTxRKoRzdYpacUnH8uH\": {\n \"position\": {\n \"x\": 14,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"pgbTxRKoRzdYpacUnH8uH\"\n },\n \"4phu_YP-1F8ebFCRQ1JoO\": {\n \"position\": {\n \"x\": 15,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"4phu_YP-1F8ebFCRQ1JoO\"\n },\n \"lwV3qBuvfYiCaNiOJqjuh\": {\n \"position\": {\n \"x\": 16,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"lwV3qBuvfYiCaNiOJqjuh\"\n },\n \"IaGnljI2L0n8SJuLsFf-8\": {\n \"position\": {\n \"x\": 17,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"IaGnljI2L0n8SJuLsFf-8\"\n },\n \"7zYikdnEPbmSrYxhkpb9v\": {\n \"position\": {\n \"x\": 13,\n \"y\": 5,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"7zYikdnEPbmSrYxhkpb9v\"\n },\n \"3UwFFgJt2SglcBNuMqtb9\": {\n \"position\": {\n \"x\": 14,\n \"y\": 5,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"3UwFFgJt2SglcBNuMqtb9\"\n },\n \"sDPpT_R4jd-wH0akDMt7R\": {\n \"position\": {\n \"x\": 15,\n \"y\": 5,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"sDPpT_R4jd-wH0akDMt7R\"\n },\n \"FpfoC3N8dFfZxcJz4bUSP\": {\n \"position\": {\n \"x\": 16,\n \"y\": 5,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"FpfoC3N8dFfZxcJz4bUSP\"\n },\n \"4mfQ_5sUTuY2-bp5giwjo\": {\n \"position\": {\n \"x\": 13,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"4mfQ_5sUTuY2-bp5giwjo\"\n },\n \"qk7tQjK0jjVt0L2H4-Kq6\": {\n \"position\": {\n \"x\": 14,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"qk7tQjK0jjVt0L2H4-Kq6\"\n },\n \"gfcyTIkVdHgs-e0h7-j_D\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"gfcyTIkVdHgs-e0h7-j_D\"\n },\n \"iW9xe0m8nt4trd3r7m_vc\": {\n \"position\": {\n \"x\": 12,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"iW9xe0m8nt4trd3r7m_vc\"\n },\n \"cYfuVuDsJzjUqC-wmqrMO\": {\n \"position\": {\n \"x\": 15,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"cYfuVuDsJzjUqC-wmqrMO\"\n },\n \"eobBX2V4EiOkvMQQ0knwq\": {\n \"position\": {\n \"x\": 15,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"eobBX2V4EiOkvMQQ0knwq\"\n },\n \"8INMzGuFMABK-MYct4tYs\": {\n \"position\": {\n \"x\": 16,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"8INMzGuFMABK-MYct4tYs\"\n },\n \"8nwT_tuDf_PiN7pVy0Z9X\": {\n \"position\": {\n \"x\": 17,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"8nwT_tuDf_PiN7pVy0Z9X\"\n },\n \"ttCoNsjOtYO1VF7_cAjEy\": {\n \"position\": {\n \"x\": 14,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"ttCoNsjOtYO1VF7_cAjEy\"\n },\n \"Wberb-tM5cA4Zi2QMNRme\": {\n \"position\": {\n \"x\": 13,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"Wberb-tM5cA4Zi2QMNRme\"\n },\n \"751ixa8EB_X5XFigg4-kx\": {\n \"position\": {\n \"x\": 12,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"751ixa8EB_X5XFigg4-kx\"\n },\n \"prSOnEDzd49BDfzq76vyo\": {\n \"position\": {\n \"x\": 14,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"prSOnEDzd49BDfzq76vyo\"\n },\n \"Pln-AryJbEUDAiG2mwugc\": {\n \"position\": {\n \"x\": 13,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"Pln-AryJbEUDAiG2mwugc\"\n },\n \"yyjyDYdMrc_8vDYIaWv35\": {\n \"position\": {\n \"x\": 15,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"yyjyDYdMrc_8vDYIaWv35\"\n },\n \"YqV9eNLP_7P4y9y0KNYwD\": {\n \"position\": {\n \"x\": 16,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"YqV9eNLP_7P4y9y0KNYwD\"\n },\n \"MUpSYd6nebh7an1cIzHFP\": {\n \"position\": {\n \"x\": 17,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"MUpSYd6nebh7an1cIzHFP\"\n },\n \"kwQ2YQ3z0WxDJac8oWVub\": {\n \"position\": {\n \"x\": 15,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"kwQ2YQ3z0WxDJac8oWVub\"\n },\n \"oiPH3oHEkmnyVlcgNkl8u\": {\n \"position\": {\n \"x\": 16,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"oiPH3oHEkmnyVlcgNkl8u\"\n },\n \"k6UBRgVCU5reO2a63AFWA\": {\n \"position\": {\n \"x\": 11,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"k6UBRgVCU5reO2a63AFWA\"\n },\n \"YIAJ-ldLpkQqvtjTqvYAi\": {\n \"position\": {\n \"x\": 12,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"YIAJ-ldLpkQqvtjTqvYAi\"\n },\n \"d-oI4h3Cbu7BIf9x3ViVF\": {\n \"position\": {\n \"x\": 13,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"d-oI4h3Cbu7BIf9x3ViVF\"\n },\n \"GEvwqdfrWIaWGz3tNxJdX\": {\n \"position\": {\n \"x\": 14,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"GEvwqdfrWIaWGz3tNxJdX\"\n },\n \"TMrBaAspEKTvKdzLGB2jJ\": {\n \"position\": {\n \"x\": 15,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"TMrBaAspEKTvKdzLGB2jJ\"\n },\n \"1yEqKsTtPcKGBnDMJVvPN\": {\n \"position\": {\n \"x\": 16,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"1yEqKsTtPcKGBnDMJVvPN\"\n },\n \"wiTr5SuVf9RoNvm7BBVci\": {\n \"position\": {\n \"x\": 17,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"wiTr5SuVf9RoNvm7BBVci\"\n },\n \"xYZBUcaJuHx9VoNGgxe_T\": {\n \"position\": {\n \"x\": 18,\n \"y\": 21,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"xYZBUcaJuHx9VoNGgxe_T\"\n },\n \"_rrjmIHvpssZI4LBFOI-V\": {\n \"position\": {\n \"x\": 14,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"_rrjmIHvpssZI4LBFOI-V\"\n },\n \"gBiYHfKL5p7SyQsEboOFs\": {\n \"position\": {\n \"x\": 15,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"gBiYHfKL5p7SyQsEboOFs\"\n },\n \"DNuKEAd5dtbnfz4salwRT\": {\n \"position\": {\n \"x\": 12,\n \"y\": 7,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"DNuKEAd5dtbnfz4salwRT\"\n },\n \"BvtIv7YuH8D-_qn5hv9GU\": {\n \"position\": {\n \"x\": 14,\n \"y\": 8,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"BvtIv7YuH8D-_qn5hv9GU\"\n },\n \"pV8dL00d6Wuo5OJA_Scw7\": {\n \"position\": {\n \"x\": 15,\n \"y\": 8,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"pV8dL00d6Wuo5OJA_Scw7\"\n },\n \"h8dVVeMG5TiNIbxDEmSRD\": {\n \"position\": {\n \"x\": 17,\n \"y\": 7,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"h8dVVeMG5TiNIbxDEmSRD\"\n },\n \"UicFwyDNNcFxhyxFRWjpp\": {\n \"position\": {\n \"x\": 9,\n \"y\": 10,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"UicFwyDNNcFxhyxFRWjpp\"\n },\n \"g5_bFB4nY9LfaEuWi-1in\": {\n \"position\": {\n \"x\": 10,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"g5_bFB4nY9LfaEuWi-1in\"\n },\n \"jPLVGjZ5bEVft7M0usxlg\": {\n \"position\": {\n \"x\": 12,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"jPLVGjZ5bEVft7M0usxlg\"\n },\n \"sczuyEy6_0hU-Nn6Nj5O2\": {\n \"position\": {\n \"x\": 17,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"sczuyEy6_0hU-Nn6Nj5O2\"\n },\n \"6BQB5CwldyMxPROCKogEY\": {\n \"position\": {\n \"x\": 20,\n \"y\": 10,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"6BQB5CwldyMxPROCKogEY\"\n },\n \"pkT3jbBKDYK3yFQo3lQoZ\": {\n \"position\": {\n \"x\": 19,\n \"y\": 12,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"pkT3jbBKDYK3yFQo3lQoZ\"\n },\n \"5jBu_0kU0ZuI15to0hUnR\": {\n \"position\": {\n \"x\": 9,\n \"y\": 13,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"5jBu_0kU0ZuI15to0hUnR\"\n },\n \"T5QoTW-sivLiPsIxALx3i\": {\n \"position\": {\n \"x\": 7,\n \"y\": 14,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"T5QoTW-sivLiPsIxALx3i\"\n },\n \"Ka5mMBpKbS9HCA5owcgvQ\": {\n \"position\": {\n \"x\": 8,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"Ka5mMBpKbS9HCA5owcgvQ\"\n },\n \"1pcUsVzKxaJg7I3OOsgk2\": {\n \"position\": {\n \"x\": 10,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"1pcUsVzKxaJg7I3OOsgk2\"\n },\n \"vgo_9wwegF8wd1-PZ-d1m\": {\n \"position\": {\n \"x\": 20,\n \"y\": 13,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"vgo_9wwegF8wd1-PZ-d1m\"\n },\n \"nDN9zK1deBxbfXq9DxjRG\": {\n \"position\": {\n \"x\": 22,\n \"y\": 14,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"nDN9zK1deBxbfXq9DxjRG\"\n },\n \"YQ_C-bElFE8RtaWeXSH1g\": {\n \"position\": {\n \"x\": 21,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"YQ_C-bElFE8RtaWeXSH1g\"\n },\n \"F0crVZxGs57zQRwzwRAYi\": {\n \"position\": {\n \"x\": 19,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"F0crVZxGs57zQRwzwRAYi\"\n },\n \"s4rFXrTW76yNTPhw0_UG_\": {\n \"position\": {\n \"x\": 9,\n \"y\": 19,\n \"z\": 1\n },\n \"randomJobKey\": \"swordknight,spearknight,hammerknight\",\n \"templateKey\": \"randoms/armored\",\n \"affiliation\": \"bad\",\n \"key\": \"s4rFXrTW76yNTPhw0_UG_\",\n \"maxhealth\": \"40\"\n },\n \"a8YSMl0lZMDjKOHSAfUng\": {\n \"position\": {\n \"x\": 20,\n \"y\": 19,\n \"z\": 1\n },\n \"randomJobKey\": \"swordknight,spearknight,hammerknight\",\n \"templateKey\": \"randoms/armored\",\n \"affiliation\": \"bad\",\n \"key\": \"a8YSMl0lZMDjKOHSAfUng\",\n \"maxhealth\": \"40\"\n },\n \"mSsvrCt8xAHs9VMKY-HYq\": {\n \"position\": {\n \"x\": 13,\n \"y\": 11,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,swordknight,spearknight,hammerknight,swordcavalier,spearcavalier,hammercavalier\",\n \"templateKey\": \"randoms/melee\",\n \"affiliation\": \"none\",\n \"key\": \"mSsvrCt8xAHs9VMKY-HYq\",\n \"maxhealth\": \"30\"\n },\n \"N4VN2kmE2sgjgNlnik-oF\": {\n \"position\": {\n \"x\": 16,\n \"y\": 11,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,swordknight,spearknight,hammerknight,swordcavalier,spearcavalier,hammercavalier\",\n \"templateKey\": \"randoms/melee\",\n \"affiliation\": \"none\",\n \"key\": \"N4VN2kmE2sgjgNlnik-oF\",\n \"maxhealth\": \"30\"\n },\n \"LM_xVTIugKKSIbFt7pcCR\": {\n \"position\": {\n \"x\": 13,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"dagger,bow,gun\",\n \"templateKey\": \"randoms/ranged\",\n \"affiliation\": \"none\",\n \"key\": \"LM_xVTIugKKSIbFt7pcCR\",\n \"maxhealth\": \"30\"\n },\n \"TbXIl6w7ih7jjN-yoL1il\": {\n \"position\": {\n \"x\": 16,\n \"y\": 16,\n \"z\": 1\n },\n \"randomJobKey\": \"dagger,bow,gun\",\n \"templateKey\": \"randoms/ranged\",\n \"affiliation\": \"none\",\n \"key\": \"TbXIl6w7ih7jjN-yoL1il\",\n \"maxhealth\": \"30\"\n },\n \"8Qw21l3tfCXjDqypZ0_Yp\": {\n \"position\": {\n \"x\": 13,\n \"y\": 20,\n \"z\": 1\n },\n \"randomJobKey\": \"swordcavalier,spearcavalier,hammercavalier\",\n \"templateKey\": \"randoms/mounted\",\n \"affiliation\": \"none\",\n \"key\": \"8Qw21l3tfCXjDqypZ0_Yp\",\n \"maxhealth\": \"30\"\n },\n \"nII3UBtf7h8_FbczBMY7f\": {\n \"position\": {\n \"x\": 16,\n \"y\": 20,\n \"z\": 1\n },\n \"randomJobKey\": \"swordcavalier,spearcavalier,hammercavalier\",\n \"templateKey\": \"randoms/mounted\",\n \"affiliation\": \"none\",\n \"key\": \"nII3UBtf7h8_FbczBMY7f\",\n \"maxhealth\": \"30\"\n },\n \"IZn-4FnIe7PUyQCTilvdq\": {\n \"position\": {\n \"x\": 11,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"IZn-4FnIe7PUyQCTilvdq\"\n },\n \"0KVp1SeyVSzw7IWyXA1VA\": {\n \"position\": {\n \"x\": 18,\n \"y\": 9,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"0KVp1SeyVSzw7IWyXA1VA\"\n },\n \"IvYBJipPxSnEgtlPFq7ey\": {\n \"position\": {\n \"x\": 13,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"IvYBJipPxSnEgtlPFq7ey\"\n },\n \"FdjHvvRWAiMG1UNj6CirR\": {\n \"position\": {\n \"x\": 16,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"FdjHvvRWAiMG1UNj6CirR\"\n },\n \"G4CwaOY-nXyAYplJOu6NI\": {\n \"position\": {\n \"x\": 12,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"G4CwaOY-nXyAYplJOu6NI\"\n },\n \"PevBCNwkqTa-nGxAU3ais\": {\n \"position\": {\n \"x\": 17,\n \"y\": 18,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"PevBCNwkqTa-nGxAU3ais\"\n },\n \"xLqVHRCrr9W5xChF1ZopK\": {\n \"position\": {\n \"x\": 13,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"xLqVHRCrr9W5xChF1ZopK\"\n },\n \"6p0MnSxBEBdtvhs-cpVze\": {\n \"position\": {\n \"x\": 16,\n \"y\": 22,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"6p0MnSxBEBdtvhs-cpVze\"\n },\n \"ijLmmX_QE5_n6NDt-bQhL\": {\n \"position\": {\n \"x\": 8,\n \"y\": 17,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"ijLmmX_QE5_n6NDt-bQhL\"\n },\n \"WTz96NrphJEEW0id5SeWO\": {\n \"position\": {\n \"x\": 11,\n \"y\": 20,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"WTz96NrphJEEW0id5SeWO\"\n },\n \"Gx4_Fblg_aAxgsYZMiFjd\": {\n \"position\": {\n \"x\": 18,\n \"y\": 20,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"Gx4_Fblg_aAxgsYZMiFjd\"\n },\n \"ad96JUzuYkjAJckAOLbnP\": {\n \"position\": {\n \"x\": 21,\n \"y\": 17,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"ad96JUzuYkjAJckAOLbnP\"\n },\n \"L-7fXjioI6QLOCGKXQcDH\": {\n \"position\": {\n \"x\": 11,\n \"y\": 23,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"L-7fXjioI6QLOCGKXQcDH\"\n },\n \"mL5aTaUpSDcyUlksVUB8S\": {\n \"position\": {\n \"x\": 13,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"mL5aTaUpSDcyUlksVUB8S\"\n },\n \"cvwh-CbB-sbPLMUU19kD7\": {\n \"position\": {\n \"x\": 12,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"cvwh-CbB-sbPLMUU19kD7\"\n },\n \"wqXLdnVaTMug7w3SpveNq\": {\n \"position\": {\n \"x\": 14,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"wqXLdnVaTMug7w3SpveNq\"\n },\n \"4vZkaR0ymtsbqfbEBricC\": {\n \"position\": {\n \"x\": 15,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"4vZkaR0ymtsbqfbEBricC\"\n },\n \"Z-wdifLSUpYLXev31Uq0v\": {\n \"position\": {\n \"x\": 16,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"Z-wdifLSUpYLXev31Uq0v\"\n },\n \"rWI8yc2B-ks1b5Uk_l4sK\": {\n \"position\": {\n \"x\": 17,\n \"y\": 24,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"rWI8yc2B-ks1b5Uk_l4sK\"\n },\n \"wGt9QheGnNj17e0M4l1iu\": {\n \"position\": {\n \"x\": 18,\n \"y\": 23,\n \"z\": 1\n },\n \"randomJobKey\": \"sword,spear,hammer,dagger,bow\",\n \"templateKey\": \"randoms/basic\",\n \"affiliation\": \"bad\",\n \"key\": \"wGt9QheGnNj17e0M4l1iu\"\n }\n}", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":64,\n \"id\":15,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"2b\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":96,\n \"x\":144,\n \"y\":144\n }, \n {\n \"height\":64,\n \"id\":18,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"4b\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":112,\n \"x\":128,\n \"y\":272\n }, \n {\n \"height\":64,\n \"id\":19,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"3b\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":112,\n \"y\":208\n }, \n {\n \"height\":64,\n \"id\":20,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":96,\n \"x\":192,\n \"y\":80\n }, \n {\n \"height\":64,\n \"id\":21,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"2a\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":96,\n \"x\":240,\n \"y\":144\n }, \n {\n \"height\":64,\n \"id\":22,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"4a\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":112,\n \"x\":240,\n \"y\":272\n }, \n {\n \"height\":64,\n \"id\":23,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"3a\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":240,\n \"y\":208\n }, \n {\n \"height\":64,\n \"id\":24,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"5\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":128,\n \"x\":176,\n \"y\":336\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":6,\n \"nextobjectid\":25,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n }, \n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nexport default {\n \"slug\": \"y4\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat\")},\n Plotscripts.SpawnPlayerPartyScript(),\n ]\n },\n ...Plotscripts.EncounterVictories({\"encounterKeys\": [1, \"2b\", \"3b\", \"4b\", 5], \"nextURL\": \"/games/war/chapters/y5\"}),\n // ...Plotscripts.EncounterVictories({\"encounterKeys\": [1, [\"2a\", \"2b\"], [\"3a\", \"3b\"], [\"4a\", \"4b\"], 5], \"nextURL\": \"/games/war\"}),\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "{\n \"21MMvI7yiQk-eWt-XzCCh\": {\n \"position\": {\n \"x\": 14,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"21MMvI7yiQk-eWt-XzCCh\"\n },\n \"c0Rfv2wmNvW_qWPvYHcqI\": {\n \"position\": {\n \"x\": 13,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"c0Rfv2wmNvW_qWPvYHcqI\"\n },\n \"iUuOP6vdeJOppow6IsEME\": {\n \"position\": {\n \"x\": 16,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"iUuOP6vdeJOppow6IsEME\"\n },\n \"RfFs6gcj04zVU_27wlvxW\": {\n \"position\": {\n \"x\": 15,\n \"y\": 19,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"RfFs6gcj04zVU_27wlvxW\"\n },\n \"d2hEYy9MbtXn5r4BA6B0a\": {\n \"position\": {\n \"x\": 14,\n \"y\": 11,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"d2hEYy9MbtXn5r4BA6B0a\"\n },\n \"EUShZBk5p_14xdrmargAk\": {\n \"position\": {\n \"x\": 14,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"EUShZBk5p_14xdrmargAk\"\n },\n \"xKUdK5vCDli4gw_XJtpC7\": {\n \"position\": {\n \"x\": 15,\n \"y\": 10,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"xKUdK5vCDli4gw_XJtpC7\"\n },\n \"5Q7eKwCEZwtY_AzbA7ixb\": {\n \"position\": {\n \"x\": 15,\n \"y\": 11,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"5Q7eKwCEZwtY_AzbA7ixb\"\n },\n \"kNUsjg4rysOoFQEF5VM5i\": {\n \"position\": {\n \"x\": 13,\n \"y\": 6,\n \"z\": 1\n },\n \"templateKey\": \"jobs/priest\",\n \"jobKey\": \"priest\",\n \"affiliation\": \"bad\",\n \"ai\": {\n \"behaviors\": [\n \"avoiding\",\n \"healing first\"\n ]\n },\n \"key\": \"kNUsjg4rysOoFQEF5VM5i\"\n },\n \"prbAYoC5mdwfnRFJ9Wz7a\": {\n \"position\": {\n \"x\": 14,\n \"y\": 6,\n \"z\": 1\n },\n \"templateKey\": \"jobs/priest\",\n \"jobKey\": \"priest\",\n \"affiliation\": \"bad\",\n \"ai\": {\n \"behaviors\": [\n \"avoiding\",\n \"healing first\"\n ]\n },\n \"key\": \"prbAYoC5mdwfnRFJ9Wz7a\"\n },\n \"3iRYHXjDq5T-DnFF1lNAO\": {\n \"position\": {\n \"x\": 16,\n \"y\": 6,\n \"z\": 1\n },\n \"templateKey\": \"jobs/priest\",\n \"jobKey\": \"priest\",\n \"affiliation\": \"bad\",\n \"ai\": {\n \"behaviors\": [\n \"avoiding\",\n \"healing first\"\n ]\n },\n \"key\": \"3iRYHXjDq5T-DnFF1lNAO\"\n },\n \"aHih-_Mjgu_cMNrqoSlA3\": {\n \"position\": {\n \"x\": 18,\n \"y\": 11,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammercavalier\",\n \"jobKey\": \"hammercavalier\",\n \"affiliation\": \"bad\",\n \"key\": \"aHih-_Mjgu_cMNrqoSlA3\"\n },\n \"h3LX1u-b3ZGsoYX_WXS6O\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"h3LX1u-b3ZGsoYX_WXS6O\"\n },\n \"DU-OyrTGw0oaAKI5zYm5b\": {\n \"position\": {\n \"x\": 15,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"affiliation\": \"bad\",\n \"key\": \"DU-OyrTGw0oaAKI5zYm5b\"\n },\n \"0EmUwvVUjkRsjlY7i4-Oo\": {\n \"position\": {\n \"x\": 13,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammerknight\",\n \"jobKey\": \"hammerknight\",\n \"affiliation\": \"bad\",\n \"key\": \"0EmUwvVUjkRsjlY7i4-Oo\"\n },\n \"dlK_Y1-QXv07nDCMYL6x3\": {\n \"position\": {\n \"x\": 16,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/swordknight\",\n \"jobKey\": \"swordknight\",\n \"affiliation\": \"bad\",\n \"key\": \"dlK_Y1-QXv07nDCMYL6x3\"\n },\n \"Je2JifFeBxz1pX-TOFjKo\": {\n \"position\": {\n \"x\": 11,\n \"y\": 11,\n \"z\": 1\n },\n \"templateKey\": \"jobs/swordcavalier\",\n \"jobKey\": \"swordcavalier\",\n \"affiliation\": \"bad\",\n \"key\": \"Je2JifFeBxz1pX-TOFjKo\"\n },\n \"warlord\": {\n \"position\": {\n \"x\": 15,\n \"y\": 6,\n \"z\": 1\n },\n \"templateKey\": \"jobs/swordknight\",\n \"jobKey\": \"swordknight\",\n \"affiliation\": \"bad\",\n \"key\": \"warlord\",\n \"maxhealth\": 70,\n \"defense\": 5,\n \"resistance\": 2\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77,\n 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76,\n 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":112,\n \"id\":27,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":64,\n \"x\":208,\n \"y\":208\n }, \n {\n \"height\":0,\n \"id\":38,\n \"name\":\"\",\n \"polygon\":[\n {\n \"x\":0,\n \"y\":0\n }, \n {\n \"x\":0,\n \"y\":-32\n }, \n {\n \"x\":16,\n \"y\":-32\n }, \n {\n \"x\":16,\n \"y\":-64\n }, \n {\n \"x\":32,\n \"y\":-64\n }, \n {\n \"x\":32,\n \"y\":-96\n }, \n {\n \"x\":96,\n \"y\":-96\n }, \n {\n \"x\":96,\n \"y\":-64\n }, \n {\n \"x\":112,\n \"y\":-64\n }, \n {\n \"x\":112,\n \"y\":-32\n }, \n {\n \"x\":128,\n \"y\":-32\n }, \n {\n \"x\":128,\n \"y\":0\n }],\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"2\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":0,\n \"x\":176,\n \"y\":192\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }, \n {\n \"data\":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n \"height\":30,\n \"id\":6,\n \"name\":\"data:collision\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":7,\n \"nextobjectid\":40,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n }, \n {\n \"firstgid\":64,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nexport default {\n \"slug\": \"y5\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"text\": \"Assassinate the warlord\",\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat\")},\n Plotscripts.SpawnPlayerPartyScript(),\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == 1\n && Plotscripts.areAllAffiliatedUnitsDefeated(stage, {\"affiliation\": \"bad\"})\n },\n \"events\": [\n Plotscripts.HealPlayerPartyScript(),\n Plotscripts.MoveEncounterScript({\"nextEncounterKey\": 2})\n ]\n },\n {\n \"type\": \"condition\",\n \"condition\": (stage) => {\n return stage.currentEncounterKey == 2\n && stage.units[\"warlord\"].isDead == true\n },\n \"events\": [\n {\"type\": \"chapter success\"},\n {\"func\": () => Navigation.go(\"/games/war\")},\n ]\n },\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "{\n \"i7Sda5GjBev4PtAJ0Oxp4\": {\n \"position\": {\n \"x\": 16,\n \"y\": 10,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"affiliation\": \"neutral\",\n \"key\": \"i7Sda5GjBev4PtAJ0Oxp4\"\n },\n \"bpPvwr9_RP6QnSb4GJfn7\": {\n \"position\": {\n \"x\": 19,\n \"y\": 11,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"bpPvwr9_RP6QnSb4GJfn7\"\n },\n \"-l-J01lhPgOfkLu2z2_of\": {\n \"position\": {\n \"x\": 18,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"-l-J01lhPgOfkLu2z2_of\"\n },\n \"jLi-2-HrRw5XOE02iqPCR\": {\n \"position\": {\n \"x\": 17,\n \"y\": 12,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"decalImageKey\": \"red-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"jLi-2-HrRw5XOE02iqPCR\"\n },\n \"MCMUKLgCs5irtE7ntjkGL\": {\n \"position\": {\n \"x\": 11,\n \"y\": 12,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"MCMUKLgCs5irtE7ntjkGL\"\n },\n \"uzkQyP0pUdFHmKVKp2bCj\": {\n \"position\": {\n \"x\": 12,\n \"y\": 12,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"uzkQyP0pUdFHmKVKp2bCj\"\n },\n \"J-UKIamNx_8hPylVOzHv9\": {\n \"position\": {\n \"x\": 13,\n \"y\": 12,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"J-UKIamNx_8hPylVOzHv9\"\n },\n \"WqUBffnHhBKKDMsimkKB9\": {\n \"position\": {\n \"x\": 15,\n \"y\": 12,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"WqUBffnHhBKKDMsimkKB9\"\n },\n \"okiYpanputtFIg7IcljrR\": {\n \"position\": {\n \"x\": 15,\n \"y\": 13,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"okiYpanputtFIg7IcljrR\"\n },\n \"nal03w110NB774yzGyqom\": {\n \"position\": {\n \"x\": 15,\n \"y\": 14,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"nal03w110NB774yzGyqom\"\n },\n \"WtWyLVedRZP0bGCHevigY\": {\n \"position\": {\n \"x\": 15,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"WtWyLVedRZP0bGCHevigY\"\n },\n \"pVYxTPJfwG_mK2twRtWy8\": {\n \"position\": {\n \"x\": 17,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"pVYxTPJfwG_mK2twRtWy8\"\n },\n \"5dGMwftlmzGNql3mn2wcV\": {\n \"position\": {\n \"x\": 16,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"5dGMwftlmzGNql3mn2wcV\"\n },\n \"tripjiwkn0XaD5l36SMOu\": {\n \"position\": {\n \"x\": 14,\n \"y\": 15,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"tripjiwkn0XaD5l36SMOu\"\n },\n \"pv4yih6pRDfDWR879Bp1x\": {\n \"position\": {\n \"x\": 14,\n \"y\": 16,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"pv4yih6pRDfDWR879Bp1x\"\n },\n \"E4BYjVZ8acMXmPCHyaO2Q\": {\n \"position\": {\n \"x\": 14,\n \"y\": 17,\n \"z\": 1\n },\n \"type\": \"spot\",\n \"affiliation\": \"none\",\n \"templateKey\": \"spawnspot\",\n \"key\": \"E4BYjVZ8acMXmPCHyaO2Q\"\n },\n \"BRyVSxd7T9WS21rwrKMjx\": {\n \"position\": {\n \"x\": 12,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammerknight\",\n \"jobKey\": \"hammerknight\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"BRyVSxd7T9WS21rwrKMjx\"\n },\n \"QwvIyMZd3S6YLS2g9KsLs\": {\n \"position\": {\n \"x\": 12,\n \"y\": 15,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spearcavalier\",\n \"jobKey\": \"spearcavalier\",\n \"maxhealth\": 50,\n \"affiliation\": \"bad\",\n \"key\": \"QwvIyMZd3S6YLS2g9KsLs\"\n },\n \"jlwFPx8vWyfVr0oI_ygS4\": {\n \"position\": {\n \"x\": 15,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"jlwFPx8vWyfVr0oI_ygS4\"\n },\n \"4ClLWxAgEnpIMNzuz8TVl\": {\n \"position\": {\n \"x\": 17,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/hammer\",\n \"jobKey\": \"hammer\",\n \"decalImageKey\": \"green-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"4ClLWxAgEnpIMNzuz8TVl\"\n },\n \"4VrdatWPz8095BU46P2ht\": {\n \"position\": {\n \"x\": 15,\n \"y\": 19,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"decalImageKey\": \"red-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"4VrdatWPz8095BU46P2ht\"\n },\n \"xC0uYgLP2vvbB9c6s1bTA\": {\n \"position\": {\n \"x\": 17,\n \"y\": 18,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"xC0uYgLP2vvbB9c6s1bTA\"\n },\n \"JNINN91YtxFsK0A2J6jfN\": {\n \"position\": {\n \"x\": 15,\n \"y\": 17,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"JNINN91YtxFsK0A2J6jfN\"\n },\n \"QZfGFG9HfxZJu5CR4h0Tj\": {\n \"position\": {\n \"x\": 17,\n \"y\": 16,\n \"z\": 1\n },\n \"templateKey\": \"jobs/sword\",\n \"jobKey\": \"sword\",\n \"decalImageKey\": \"red-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"QZfGFG9HfxZJu5CR4h0Tj\"\n },\n \"34hbqegaLkYS9fDjArtYe\": {\n \"position\": {\n \"x\": 10,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/spear\",\n \"jobKey\": \"spear\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"bad\",\n \"key\": \"34hbqegaLkYS9fDjArtYe\"\n },\n \"YEyB5rGY14xHoIICfXSXy\": {\n \"position\": {\n \"x\": 14,\n \"y\": 14,\n \"z\": 1\n },\n \"templateKey\": \"jobs/bow\",\n \"jobKey\": \"bow\",\n \"decalImageKey\": \"blue-shield\",\n \"maxhealth\": 50,\n \"moverange\": 1,\n \"affiliation\": \"neutral\",\n \"key\": \"YEyB5rGY14xHoIICfXSXy\"\n }\n}\n", "{ \"compressionlevel\":-1,\n \"height\":30,\n \"infinite\":false,\n \"layers\":[\n {\n \"data\":[14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14,\n 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13,\n 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14],\n \"height\":30,\n \"id\":1,\n \"name\":\"tiles\",\n \"opacity\":1,\n \"type\":\"tilelayer\",\n \"visible\":true,\n \"width\":30,\n \"x\":0,\n \"y\":0\n }, \n {\n \"draworder\":\"topdown\",\n \"id\":5,\n \"name\":\"data:encounters\",\n \"objects\":[\n {\n \"height\":48,\n \"id\":20,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"1\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":80,\n \"x\":160,\n \"y\":192\n }, \n {\n \"height\":80,\n \"id\":21,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"2\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":80,\n \"x\":240,\n \"y\":160\n }, \n {\n \"height\":80,\n \"id\":22,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"3\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":48,\n \"x\":240,\n \"y\":240\n }, \n {\n \"height\":48,\n \"id\":23,\n \"name\":\"\",\n \"properties\":[\n {\n \"name\":\"key\",\n \"type\":\"string\",\n \"value\":\"4\"\n }],\n \"rotation\":0,\n \"type\":\"\",\n \"visible\":true,\n \"width\":48,\n \"x\":192,\n \"y\":240\n }],\n \"opacity\":1,\n \"type\":\"objectgroup\",\n \"visible\":true,\n \"x\":0,\n \"y\":0\n }],\n \"nextlayerid\":6,\n \"nextobjectid\":24,\n \"orientation\":\"orthogonal\",\n \"renderorder\":\"right-down\",\n \"tiledversion\":\"1.8.6\",\n \"tileheight\":16,\n \"tilesets\":[\n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/hero.tileset.json\"\n }, \n {\n \"firstgid\":1,\n \"source\":\"..\\/..\\/..\\/levels\\/vmenezio.tileset.json\"\n }],\n \"tilewidth\":16,\n \"type\":\"map\",\n \"version\":\"1.8\",\n \"width\":30\n}", "import App from \"@frog/source/models/App.js\"\nimport Tiled from \"@frog/source/utility/integration/Tiled.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport * as Plotscripts from \"@frog/source/data/plotscripts.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\n// at the start of each encounter, show their killing intent\n// ai prefers killing neutral vs bad.\n// win condition to go x turns without a death, get all to put weapons down\n// support skills that work on enemies.\n\nexport default {\n \"slug\": \"g4\",\n \"stage\": {\n \"image\": require(\"./tiles.png\"),\n \"units\": require(\"./units.json\"),\n \"world\": Tiled.parse({\n \"tilemap\": require(\"./tiles.json\"),\n \"tileset\": require(\"@frog/source/data/levels/tileset.json\"),\n }),\n \"conditions\": [\n {\n \"type\": \"turn:0:start\",\n \"events\": [\n {\"func\": () => Audiomix.trigger(\"Music:Combat\")},\n Plotscripts.SpawnPlayerPartyScript(),\n ]\n },\n ...Plotscripts.EncounterVictories({\"encounterKeys\": [1, 2, 3, 4], \"nextURL\": \"/games/war\"}),\n Plotscripts.ChapterFailure(),\n ]\n },\n}\n", "export default {\n \"slug\": \"war\",\n \"title\": \"war\",\n \"firstChapterKey\": \"y1\",\n \"player\": require(\"./player.js\").default,\n \"chapters\": {\n \"y1\": require(\"./y1\").default,\n \"y2\": require(\"./y2\").default,\n \"y3\": require(\"./y3\").default,\n \"y4\": require(\"./y4\").default,\n \"y5\": require(\"./y5\").default,\n //\"g1\": require(\"./g1\").default,\n \"g4\": require(\"./g4\").default,\n },\n \"configuration\": {\n \"darkness\": false,\n \"squigglevision\": false,\n },\n}\n", "export default {\n \"pirates\": require(\"./pirates\").default,\n \"dungeon\": require(\"./dungeon\").default,\n \"hero\": require(\"./hero\").default,\n \"war\": require(\"./war\").default,\n}\n", "/*!\n * assertion-error\n * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n var excludes = [].slice.call(arguments);\n\n function excludeProps (res, obj) {\n Object.keys(obj).forEach(function (key) {\n if (!~excludes.indexOf(key)) res[key] = obj[key];\n });\n }\n\n return function extendExclude () {\n var args = [].slice.call(arguments)\n , i = 0\n , res = {};\n\n for (; i < args.length; i++) {\n excludeProps(res, args[i]);\n }\n\n return res;\n };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n , props = extend(_props || {});\n\n // default values\n this.message = message || 'Unspecified AssertionError';\n this.showDiff = false;\n\n // copy from properties\n for (var key in props) {\n this[key] = props[key];\n }\n\n // capture stack trace\n ssf = ssf || AssertionError;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ssf);\n } else {\n try {\n throw new Error();\n } catch(e) {\n this.stack = e.stack;\n }\n }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n var extend = exclude('constructor', 'toJSON', 'stack')\n , props = extend({ name: this.name }, this);\n\n // include stack if exists and not turned off\n if (false !== stack && this.stack) {\n props.stack = this.stack;\n }\n\n return props;\n};\n", "'use strict';\n\n/* !\n * Chai - pathval utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has own\n * or inherited from prototype chain named property.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with null/undefined values\n * and other primitives.\n *\n * var obj = {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n *\n * The following would be the results.\n *\n * hasProperty(obj, 'str'); // true\n * hasProperty(obj, 'constructor'); // true\n * hasProperty(obj, 'bar'); // false\n *\n * hasProperty(obj.str, 'length'); // true\n * hasProperty(obj.str, 1); // true\n * hasProperty(obj.str, 5); // false\n *\n * hasProperty(obj.arr, 'length'); // true\n * hasProperty(obj.arr, 2); // true\n * hasProperty(obj.arr, 3); // false\n *\n * @param {Object} object\n * @param {String|Symbol} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name hasProperty\n * @api public\n */\n\nfunction hasProperty(obj, name) {\n if (typeof obj === 'undefined' || obj === null) {\n return false;\n }\n\n // The `in` operator does not work with primitives.\n return name in Object(obj);\n}\n\n/* !\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `internalGetPathValue`.\n *\n * var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be infinitely deep and nested.\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath(path) {\n var str = path.replace(/([^\\\\])\\[/g, '$1.[');\n var parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n return parts.map(function mapMatches(value) {\n if (\n value === 'constructor' ||\n value === '__proto__' ||\n value === 'prototype'\n ) {\n return {};\n }\n var regexp = /^\\[(\\d+)\\]$/;\n var mArr = regexp.exec(value);\n var parsed = null;\n if (mArr) {\n parsed = { i: parseFloat(mArr[1]) };\n } else {\n parsed = { p: value.replace(/\\\\([.[\\]])/g, '$1') };\n }\n\n return parsed;\n });\n}\n\n/* !\n * ## internalGetPathValue(obj, parsed[, pathDepth])\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n * var value = getPathValue(obj, parsed);\n *\n * @param {Object} object to search against\n * @param {Object} parsed definition from `parsePath`.\n * @param {Number} depth (nesting level) of the property we want to retrieve\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction internalGetPathValue(obj, parsed, pathDepth) {\n var temporaryValue = obj;\n var res = null;\n pathDepth = typeof pathDepth === 'undefined' ? parsed.length : pathDepth;\n\n for (var i = 0; i < pathDepth; i++) {\n var part = parsed[i];\n if (temporaryValue) {\n if (typeof part.p === 'undefined') {\n temporaryValue = temporaryValue[part.i];\n } else {\n temporaryValue = temporaryValue[part.p];\n }\n\n if (i === pathDepth - 1) {\n res = temporaryValue;\n }\n }\n }\n\n return res;\n}\n\n/* !\n * ## internalSetPathValue(obj, value, parsed)\n *\n * Companion function for `parsePath` that sets\n * the value located at a parsed address.\n *\n * internalSetPathValue(obj, 'value', parsed);\n *\n * @param {Object} object to search and define on\n * @param {*} value to use upon set\n * @param {Object} parsed definition from `parsePath`\n * @api private\n */\n\nfunction internalSetPathValue(obj, val, parsed) {\n var tempObj = obj;\n var pathDepth = parsed.length;\n var part = null;\n // Here we iterate through every part of the path\n for (var i = 0; i < pathDepth; i++) {\n var propName = null;\n var propVal = null;\n part = parsed[i];\n\n // If it's the last part of the path, we set the 'propName' value with the property name\n if (i === pathDepth - 1) {\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Now we set the property with the name held by 'propName' on object with the desired val\n tempObj[propName] = val;\n } else if (typeof part.p !== 'undefined' && tempObj[part.p]) {\n tempObj = tempObj[part.p];\n } else if (typeof part.i !== 'undefined' && tempObj[part.i]) {\n tempObj = tempObj[part.i];\n } else {\n // If the obj doesn't have the property we create one with that name to define it\n var next = parsed[i + 1];\n // Here we set the name of the property which will be defined\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Here we decide if this property will be an array or a new object\n propVal = typeof next.p === 'undefined' ? [] : {};\n tempObj[propName] = propVal;\n tempObj = tempObj[propName];\n }\n }\n}\n\n/**\n * ### .getPathInfo(object, path)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nfunction getPathInfo(obj, path) {\n var parsed = parsePath(path);\n var last = parsed[parsed.length - 1];\n var info = {\n parent:\n parsed.length > 1 ?\n internalGetPathValue(obj, parsed, parsed.length - 1) :\n obj,\n name: last.p || last.i,\n value: internalGetPathValue(obj, parsed),\n };\n info.exists = hasProperty(info.parent, info.name);\n\n return info;\n}\n\n/**\n * ### .getPathValue(object, path)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * }\n *\n * The following would be the results.\n *\n * getPathValue(obj, 'prop1.str'); // Hello\n * getPathValue(obj, 'prop1.att[2]'); // b\n * getPathValue(obj, 'prop2.arr[0].nested'); // Universe\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\n\nfunction getPathValue(obj, path) {\n var info = getPathInfo(obj, path);\n return info.value;\n}\n\n/**\n * ### .setPathValue(object, path, value)\n *\n * Define the value in an object at a given string path.\n *\n * ```js\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * };\n * ```\n *\n * The following would be acceptable.\n *\n * ```js\n * var properties = require('tea-properties');\n * properties.set(obj, 'prop1.str', 'Hello Universe!');\n * properties.set(obj, 'prop1.arr[2]', 'B');\n * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' });\n * ```\n *\n * @param {Object} object\n * @param {String} path\n * @param {Mixed} value\n * @api private\n */\n\nfunction setPathValue(obj, path, val) {\n var parsed = parsePath(path);\n internalSetPathValue(obj, val, parsed);\n return obj;\n}\n\nmodule.exports = {\n hasProperty: hasProperty,\n getPathInfo: getPathInfo,\n getPathValue: getPathValue,\n setPathValue: setPathValue,\n};\n", "/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n * utils.flag(this, 'foo', 'bar'); // setter\n * utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function flag(obj, key, value) {\n var flags = obj.__flags || (obj.__flags = Object.create(null));\n if (arguments.length === 3) {\n flags[key] = value;\n } else {\n return flags[key];\n }\n};\n", "/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag');\n\n/**\n * ### .test(object, expression)\n *\n * Test an object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function test(obj, args) {\n var negate = flag(obj, 'negate')\n , expr = args[0];\n return negate ? !expr : expr;\n};\n", "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec \u00B11.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec \u00B14.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec \u00B11.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec \u00B11.92% (75 runs sampled)\n * function x 2,556,769 ops/sec \u00B11.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec \u00B11.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec \u00B11.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec \u00B11.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec \u00B11.07% (82 runs sampled)\n * function x 31,296,870 ops/sec \u00B10.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec \u00B11.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec \u00B11.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec \u00B10.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec \u00B10.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec \u00B11.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec \u00B12.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec \u00B11.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec \u00B12.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec \u00B12.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec \u00B12.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec \u00B15.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec \u00B14.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec \u00B14.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec \u00B113.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec \u00B11.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec \u00B11.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec \u00B11.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec \u00B11.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec \u00B13.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec \u00B11.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec \u00B11.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec \u00B11.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec \u00B11.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec \u00B12.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec \u00B10.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec \u00B10.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec \u00B14.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec \u00B11.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec \u00B11.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec \u00B11.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec \u00B11.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec \u00B16.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec \u00B12.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec \u00B12.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec \u00B12.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec \u00B11.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec \u00B11.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec \u00B10.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n", "/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n * utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function expectTypes(obj, types) {\n var flagMsg = flag(obj, 'message');\n var ssfi = flag(obj, 'ssfi');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n obj = flag(obj, 'object');\n types = types.map(function (t) { return t.toLowerCase(); });\n types.sort();\n\n // Transforms ['lorem', 'ipsum'] into 'a lorem, or an ipsum'\n var str = types.map(function (t, index) {\n var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n return or + art + ' ' + t;\n }).join(', ');\n\n var objType = type(obj).toLowerCase();\n\n if (!types.some(function (expected) { return objType === expected; })) {\n throw new AssertionError(\n flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given',\n undefined,\n ssfi\n );\n }\n};\n", "/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function getActual(obj, args) {\n return args.length > 4 ? args[4] : obj._obj;\n};\n", "'use strict';\n\n/* !\n * Chai - getFuncName utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getFuncName(constructorFn)\n *\n * Returns the name of a function.\n * When a non-function instance is passed, returns `null`.\n * This also includes a polyfill function if `aFunc.name` is not defined.\n *\n * @name getFuncName\n * @param {Function} funct\n * @namespace Utils\n * @api public\n */\n\nvar toString = Function.prototype.toString;\nvar functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\s\\(\\/]+)/;\nvar maxFunctionSourceLength = 512;\nfunction getFuncName(aFunc) {\n if (typeof aFunc !== 'function') {\n return null;\n }\n\n var name = '';\n if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {\n // eslint-disable-next-line prefer-reflect\n var functionSource = toString.call(aFunc);\n // To avoid unconstrained resource consumption due to pathalogically large function names,\n // we limit the available return value to be less than 512 characters.\n if (functionSource.indexOf('(') > maxFunctionSourceLength) {\n return name;\n }\n // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined\n var match = functionSource.match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n // If we've got a `name` property we just use it\n name = aFunc.name;\n }\n\n return name;\n}\n\nmodule.exports = getFuncName;\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.loupe = {}));\n}(this, (function (exports) { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var ansiColors = {\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n // 5 & 6 are blinking\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strike: ['9', '29'],\n // 10-20 are fonts\n // 21-29 are resets for 1-9\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n brightblack: ['30;1', '39'],\n brightred: ['31;1', '39'],\n brightgreen: ['32;1', '39'],\n brightyellow: ['33;1', '39'],\n brightblue: ['34;1', '39'],\n brightmagenta: ['35;1', '39'],\n brightcyan: ['36;1', '39'],\n brightwhite: ['37;1', '39'],\n grey: ['90', '39']\n };\n var styles = {\n special: 'cyan',\n number: 'yellow',\n bigint: 'yellow',\n boolean: 'yellow',\n undefined: 'grey',\n null: 'bold',\n string: 'green',\n symbol: 'green',\n date: 'magenta',\n regexp: 'red'\n };\n var truncator = '\u2026';\n\n function colorise(value, styleType) {\n var color = ansiColors[styles[styleType]] || ansiColors[styleType];\n\n if (!color) {\n return String(value);\n }\n\n return \"\\x1B[\".concat(color[0], \"m\").concat(String(value), \"\\x1B[\").concat(color[1], \"m\");\n }\n\n function normaliseOptions() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$showHidden = _ref.showHidden,\n showHidden = _ref$showHidden === void 0 ? false : _ref$showHidden,\n _ref$depth = _ref.depth,\n depth = _ref$depth === void 0 ? 2 : _ref$depth,\n _ref$colors = _ref.colors,\n colors = _ref$colors === void 0 ? false : _ref$colors,\n _ref$customInspect = _ref.customInspect,\n customInspect = _ref$customInspect === void 0 ? true : _ref$customInspect,\n _ref$showProxy = _ref.showProxy,\n showProxy = _ref$showProxy === void 0 ? false : _ref$showProxy,\n _ref$maxArrayLength = _ref.maxArrayLength,\n maxArrayLength = _ref$maxArrayLength === void 0 ? Infinity : _ref$maxArrayLength,\n _ref$breakLength = _ref.breakLength,\n breakLength = _ref$breakLength === void 0 ? Infinity : _ref$breakLength,\n _ref$seen = _ref.seen,\n seen = _ref$seen === void 0 ? [] : _ref$seen,\n _ref$truncate = _ref.truncate,\n truncate = _ref$truncate === void 0 ? Infinity : _ref$truncate,\n _ref$stylize = _ref.stylize,\n stylize = _ref$stylize === void 0 ? String : _ref$stylize;\n\n var options = {\n showHidden: Boolean(showHidden),\n depth: Number(depth),\n colors: Boolean(colors),\n customInspect: Boolean(customInspect),\n showProxy: Boolean(showProxy),\n maxArrayLength: Number(maxArrayLength),\n breakLength: Number(breakLength),\n truncate: Number(truncate),\n seen: seen,\n stylize: stylize\n };\n\n if (options.colors) {\n options.stylize = colorise;\n }\n\n return options;\n }\n function truncate(string, length) {\n var tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : truncator;\n string = String(string);\n var tailLength = tail.length;\n var stringLength = string.length;\n\n if (tailLength > length && stringLength > tailLength) {\n return tail;\n }\n\n if (stringLength > length && stringLength > tailLength) {\n return \"\".concat(string.slice(0, length - tailLength)).concat(tail);\n }\n\n return string;\n } // eslint-disable-next-line complexity\n\n function inspectList(list, options, inspectItem) {\n var separator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ', ';\n inspectItem = inspectItem || options.inspect;\n var size = list.length;\n if (size === 0) return '';\n var originalLength = options.truncate;\n var output = '';\n var peek = '';\n var truncated = '';\n\n for (var i = 0; i < size; i += 1) {\n var last = i + 1 === list.length;\n var secondToLast = i + 2 === list.length;\n truncated = \"\".concat(truncator, \"(\").concat(list.length - i, \")\");\n var value = list[i]; // If there is more than one remaining we need to account for a separator of `, `\n\n options.truncate = originalLength - output.length - (last ? 0 : separator.length);\n var string = peek || inspectItem(value, options) + (last ? '' : separator);\n var nextLength = output.length + string.length;\n var truncatedLength = nextLength + truncated.length; // If this is the last element, and adding it would\n // take us over length, but adding the truncator wouldn't - then break now\n\n if (last && nextLength > originalLength && output.length + truncated.length <= originalLength) {\n break;\n } // If this isn't the last or second to last element to scan,\n // but the string is already over length then break here\n\n\n if (!last && !secondToLast && truncatedLength > originalLength) {\n break;\n } // Peek at the next string to determine if we should\n // break early before adding this item to the output\n\n\n peek = last ? '' : inspectItem(list[i + 1], options) + (secondToLast ? '' : separator); // If we have one element left, but this element and\n // the next takes over length, the break early\n\n if (!last && secondToLast && truncatedLength > originalLength && nextLength + peek.length > originalLength) {\n break;\n }\n\n output += string; // If the next element takes us to length -\n // but there are more after that, then we should truncate now\n\n if (!last && !secondToLast && nextLength + peek.length >= originalLength) {\n truncated = \"\".concat(truncator, \"(\").concat(list.length - i - 1, \")\");\n break;\n }\n\n truncated = '';\n }\n\n return \"\".concat(output).concat(truncated);\n }\n\n function quoteComplexKey(key) {\n if (key.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)) {\n return key;\n }\n\n return JSON.stringify(key).replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n }\n\n function inspectProperty(_ref2, options) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n\n options.truncate -= 2;\n\n if (typeof key === 'string') {\n key = quoteComplexKey(key);\n } else if (typeof key !== 'number') {\n key = \"[\".concat(options.inspect(key, options), \"]\");\n }\n\n options.truncate -= key.length;\n value = options.inspect(value, options);\n return \"\".concat(key, \": \").concat(value);\n }\n\n function inspectArray(array, options) {\n // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n var nonIndexProperties = Object.keys(array).slice(array.length);\n if (!array.length && !nonIndexProperties.length) return '[]';\n options.truncate -= 4;\n var listContents = inspectList(array, options);\n options.truncate -= listContents.length;\n var propertyContents = '';\n\n if (nonIndexProperties.length) {\n propertyContents = inspectList(nonIndexProperties.map(function (key) {\n return [key, array[key]];\n }), options, inspectProperty);\n }\n\n return \"[ \".concat(listContents).concat(propertyContents ? \", \".concat(propertyContents) : '', \" ]\");\n }\n\n /* !\n * Chai - getFuncName utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n /**\n * ### .getFuncName(constructorFn)\n *\n * Returns the name of a function.\n * When a non-function instance is passed, returns `null`.\n * This also includes a polyfill function if `aFunc.name` is not defined.\n *\n * @name getFuncName\n * @param {Function} funct\n * @namespace Utils\n * @api public\n */\n\n var toString = Function.prototype.toString;\n var functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\s\\(\\/]+)/;\n var maxFunctionSourceLength = 512;\n function getFuncName(aFunc) {\n if (typeof aFunc !== 'function') {\n return null;\n }\n\n var name = '';\n if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {\n // eslint-disable-next-line prefer-reflect\n var functionSource = toString.call(aFunc);\n // To avoid unconstrained resource consumption due to pathalogically large function names,\n // we limit the available return value to be less than 512 characters.\n if (functionSource.indexOf('(') > maxFunctionSourceLength) {\n return name;\n }\n // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined\n var match = functionSource.match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n // If we've got a `name` property we just use it\n name = aFunc.name;\n }\n\n return name;\n }\n\n var getFuncName_1 = getFuncName;\n\n var getArrayName = function getArrayName(array) {\n // We need to special case Node.js' Buffers, which report to be Uint8Array\n if (typeof Buffer === 'function' && array instanceof Buffer) {\n return 'Buffer';\n }\n\n if (array[Symbol.toStringTag]) {\n return array[Symbol.toStringTag];\n }\n\n return getFuncName_1(array.constructor);\n };\n\n function inspectTypedArray(array, options) {\n var name = getArrayName(array);\n options.truncate -= name.length + 4; // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n\n var nonIndexProperties = Object.keys(array).slice(array.length);\n if (!array.length && !nonIndexProperties.length) return \"\".concat(name, \"[]\"); // As we know TypedArrays only contain Unsigned Integers, we can skip inspecting each one and simply\n // stylise the toString() value of them\n\n var output = '';\n\n for (var i = 0; i < array.length; i++) {\n var string = \"\".concat(options.stylize(truncate(array[i], options.truncate), 'number')).concat(i === array.length - 1 ? '' : ', ');\n options.truncate -= string.length;\n\n if (array[i] !== array.length && options.truncate <= 3) {\n output += \"\".concat(truncator, \"(\").concat(array.length - array[i] + 1, \")\");\n break;\n }\n\n output += string;\n }\n\n var propertyContents = '';\n\n if (nonIndexProperties.length) {\n propertyContents = inspectList(nonIndexProperties.map(function (key) {\n return [key, array[key]];\n }), options, inspectProperty);\n }\n\n return \"\".concat(name, \"[ \").concat(output).concat(propertyContents ? \", \".concat(propertyContents) : '', \" ]\");\n }\n\n function inspectDate(dateObject, options) {\n var stringRepresentation = dateObject.toJSON();\n\n if (stringRepresentation === null) {\n return 'Invalid Date';\n }\n\n var split = stringRepresentation.split('T');\n var date = split[0]; // If we need to - truncate the time portion, but never the date\n\n return options.stylize(\"\".concat(date, \"T\").concat(truncate(split[1], options.truncate - date.length - 1)), 'date');\n }\n\n function inspectFunction(func, options) {\n var name = getFuncName_1(func);\n\n if (!name) {\n return options.stylize('[Function]', 'special');\n }\n\n return options.stylize(\"[Function \".concat(truncate(name, options.truncate - 11), \"]\"), 'special');\n }\n\n function inspectMapEntry(_ref, options) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n options.truncate -= 4;\n key = options.inspect(key, options);\n options.truncate -= key.length;\n value = options.inspect(value, options);\n return \"\".concat(key, \" => \").concat(value);\n } // IE11 doesn't support `map.entries()`\n\n\n function mapToEntries(map) {\n var entries = [];\n map.forEach(function (value, key) {\n entries.push([key, value]);\n });\n return entries;\n }\n\n function inspectMap(map, options) {\n var size = map.size - 1;\n\n if (size <= 0) {\n return 'Map{}';\n }\n\n options.truncate -= 7;\n return \"Map{ \".concat(inspectList(mapToEntries(map), options, inspectMapEntry), \" }\");\n }\n\n var isNaN = Number.isNaN || function (i) {\n return i !== i;\n }; // eslint-disable-line no-self-compare\n\n\n function inspectNumber(number, options) {\n if (isNaN(number)) {\n return options.stylize('NaN', 'number');\n }\n\n if (number === Infinity) {\n return options.stylize('Infinity', 'number');\n }\n\n if (number === -Infinity) {\n return options.stylize('-Infinity', 'number');\n }\n\n if (number === 0) {\n return options.stylize(1 / number === Infinity ? '+0' : '-0', 'number');\n }\n\n return options.stylize(truncate(number, options.truncate), 'number');\n }\n\n function inspectBigInt(number, options) {\n var nums = truncate(number.toString(), options.truncate - 1);\n if (nums !== truncator) nums += 'n';\n return options.stylize(nums, 'bigint');\n }\n\n function inspectRegExp(value, options) {\n var flags = value.toString().split('/')[2];\n var sourceLength = options.truncate - (2 + flags.length);\n var source = value.source;\n return options.stylize(\"/\".concat(truncate(source, sourceLength), \"/\").concat(flags), 'regexp');\n }\n\n function arrayFromSet(set) {\n var values = [];\n set.forEach(function (value) {\n values.push(value);\n });\n return values;\n }\n\n function inspectSet(set, options) {\n if (set.size === 0) return 'Set{}';\n options.truncate -= 7;\n return \"Set{ \".concat(inspectList(arrayFromSet(set), options), \" }\");\n }\n\n var stringEscapeChars = new RegExp(\"['\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u00ad\\\\u0600-\\\\u0604\\\\u070f\\\\u17b4\\\\u17b5\" + \"\\\\u200c-\\\\u200f\\\\u2028-\\\\u202f\\\\u2060-\\\\u206f\\\\ufeff\\\\ufff0-\\\\uffff]\", 'g');\n var escapeCharacters = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\'\n };\n var hex = 16;\n var unicodeLength = 4;\n\n function escape(char) {\n return escapeCharacters[char] || \"\\\\u\".concat(\"0000\".concat(char.charCodeAt(0).toString(hex)).slice(-unicodeLength));\n }\n\n function inspectString(string, options) {\n if (stringEscapeChars.test(string)) {\n string = string.replace(stringEscapeChars, escape);\n }\n\n return options.stylize(\"'\".concat(truncate(string, options.truncate - 2), \"'\"), 'string');\n }\n\n function inspectSymbol(value) {\n if ('description' in Symbol.prototype) {\n return value.description ? \"Symbol(\".concat(value.description, \")\") : 'Symbol()';\n }\n\n return value.toString();\n }\n\n var getPromiseValue = function getPromiseValue() {\n return 'Promise{\u2026}';\n };\n\n try {\n var _process$binding = process.binding('util'),\n getPromiseDetails = _process$binding.getPromiseDetails,\n kPending = _process$binding.kPending,\n kRejected = _process$binding.kRejected;\n\n if (Array.isArray(getPromiseDetails(Promise.resolve()))) {\n getPromiseValue = function getPromiseValue(value, options) {\n var _getPromiseDetails = getPromiseDetails(value),\n _getPromiseDetails2 = _slicedToArray(_getPromiseDetails, 2),\n state = _getPromiseDetails2[0],\n innerValue = _getPromiseDetails2[1];\n\n if (state === kPending) {\n return 'Promise{<pending>}';\n }\n\n return \"Promise\".concat(state === kRejected ? '!' : '', \"{\").concat(options.inspect(innerValue, options), \"}\");\n };\n }\n } catch (notNode) {\n /* ignore */\n }\n\n var inspectPromise = getPromiseValue;\n\n function inspectObject(object, options) {\n var properties = Object.getOwnPropertyNames(object);\n var symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [];\n\n if (properties.length === 0 && symbols.length === 0) {\n return '{}';\n }\n\n options.truncate -= 4;\n options.seen = options.seen || [];\n\n if (options.seen.indexOf(object) >= 0) {\n return '[Circular]';\n }\n\n options.seen.push(object);\n var propertyContents = inspectList(properties.map(function (key) {\n return [key, object[key]];\n }), options, inspectProperty);\n var symbolContents = inspectList(symbols.map(function (key) {\n return [key, object[key]];\n }), options, inspectProperty);\n options.seen.pop();\n var sep = '';\n\n if (propertyContents && symbolContents) {\n sep = ', ';\n }\n\n return \"{ \".concat(propertyContents).concat(sep).concat(symbolContents, \" }\");\n }\n\n var toStringTag = typeof Symbol !== 'undefined' && Symbol.toStringTag ? Symbol.toStringTag : false;\n function inspectClass(value, options) {\n var name = '';\n\n if (toStringTag && toStringTag in value) {\n name = value[toStringTag];\n }\n\n name = name || getFuncName_1(value.constructor); // Babel transforms anonymous classes to the name `_class`\n\n if (!name || name === '_class') {\n name = '<Anonymous Class>';\n }\n\n options.truncate -= name.length;\n return \"\".concat(name).concat(inspectObject(value, options));\n }\n\n function inspectArguments(args, options) {\n if (args.length === 0) return 'Arguments[]';\n options.truncate -= 13;\n return \"Arguments[ \".concat(inspectList(args, options), \" ]\");\n }\n\n var errorKeys = ['stack', 'line', 'column', 'name', 'message', 'fileName', 'lineNumber', 'columnNumber', 'number', 'description'];\n function inspectObject$1(error, options) {\n var properties = Object.getOwnPropertyNames(error).filter(function (key) {\n return errorKeys.indexOf(key) === -1;\n });\n var name = error.name;\n options.truncate -= name.length;\n var message = '';\n\n if (typeof error.message === 'string') {\n message = truncate(error.message, options.truncate);\n } else {\n properties.unshift('message');\n }\n\n message = message ? \": \".concat(message) : '';\n options.truncate -= message.length + 5;\n var propertyContents = inspectList(properties.map(function (key) {\n return [key, error[key]];\n }), options, inspectProperty);\n return \"\".concat(name).concat(message).concat(propertyContents ? \" { \".concat(propertyContents, \" }\") : '');\n }\n\n function inspectAttribute(_ref, options) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n options.truncate -= 3;\n\n if (!value) {\n return \"\".concat(options.stylize(key, 'yellow'));\n }\n\n return \"\".concat(options.stylize(key, 'yellow'), \"=\").concat(options.stylize(\"\\\"\".concat(value, \"\\\"\"), 'string'));\n }\n function inspectHTMLCollection(collection, options) {\n // eslint-disable-next-line no-use-before-define\n return inspectList(collection, options, inspectHTML, '\\n');\n }\n function inspectHTML(element, options) {\n var properties = element.getAttributeNames();\n var name = element.tagName.toLowerCase();\n var head = options.stylize(\"<\".concat(name), 'special');\n var headClose = options.stylize(\">\", 'special');\n var tail = options.stylize(\"</\".concat(name, \">\"), 'special');\n options.truncate -= name.length * 2 + 5;\n var propertyContents = '';\n\n if (properties.length > 0) {\n propertyContents += ' ';\n propertyContents += inspectList(properties.map(function (key) {\n return [key, element.getAttribute(key)];\n }), options, inspectAttribute, ' ');\n }\n\n options.truncate -= propertyContents.length;\n var truncate = options.truncate;\n var children = inspectHTMLCollection(element.children, options);\n\n if (children && children.length > truncate) {\n children = \"\".concat(truncator, \"(\").concat(element.children.length, \")\");\n }\n\n return \"\".concat(head).concat(propertyContents).concat(headClose).concat(children).concat(tail);\n }\n\n var symbolsSupported = typeof Symbol === 'function' && typeof Symbol.for === 'function';\n var chaiInspect = symbolsSupported ? Symbol.for('chai/inspect') : '@@chai/inspect';\n var nodeInspect = false;\n\n try {\n // eslint-disable-next-line global-require\n var nodeUtil = require('util');\n\n nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false;\n } catch (noNodeInspect) {\n nodeInspect = false;\n }\n\n function FakeMap() {\n // eslint-disable-next-line prefer-template\n this.key = 'chai/loupe__' + Math.random() + Date.now();\n }\n\n FakeMap.prototype = {\n // eslint-disable-next-line object-shorthand\n get: function get(key) {\n return key[this.key];\n },\n // eslint-disable-next-line object-shorthand\n has: function has(key) {\n return this.key in key;\n },\n // eslint-disable-next-line object-shorthand\n set: function set(key, value) {\n if (Object.isExtensible(key)) {\n Object.defineProperty(key, this.key, {\n // eslint-disable-next-line object-shorthand\n value: value,\n configurable: true\n });\n }\n }\n };\n var constructorMap = new (typeof WeakMap === 'function' ? WeakMap : FakeMap)();\n var stringTagMap = {};\n var baseTypesMap = {\n undefined: function undefined$1(value, options) {\n return options.stylize('undefined', 'undefined');\n },\n null: function _null(value, options) {\n return options.stylize(null, 'null');\n },\n boolean: function boolean(value, options) {\n return options.stylize(value, 'boolean');\n },\n Boolean: function Boolean(value, options) {\n return options.stylize(value, 'boolean');\n },\n number: inspectNumber,\n Number: inspectNumber,\n bigint: inspectBigInt,\n BigInt: inspectBigInt,\n string: inspectString,\n String: inspectString,\n function: inspectFunction,\n Function: inspectFunction,\n symbol: inspectSymbol,\n // A Symbol polyfill will return `Symbol` not `symbol` from typedetect\n Symbol: inspectSymbol,\n Array: inspectArray,\n Date: inspectDate,\n Map: inspectMap,\n Set: inspectSet,\n RegExp: inspectRegExp,\n Promise: inspectPromise,\n // WeakSet, WeakMap are totally opaque to us\n WeakSet: function WeakSet(value, options) {\n return options.stylize('WeakSet{\u2026}', 'special');\n },\n WeakMap: function WeakMap(value, options) {\n return options.stylize('WeakMap{\u2026}', 'special');\n },\n Arguments: inspectArguments,\n Int8Array: inspectTypedArray,\n Uint8Array: inspectTypedArray,\n Uint8ClampedArray: inspectTypedArray,\n Int16Array: inspectTypedArray,\n Uint16Array: inspectTypedArray,\n Int32Array: inspectTypedArray,\n Uint32Array: inspectTypedArray,\n Float32Array: inspectTypedArray,\n Float64Array: inspectTypedArray,\n Generator: function Generator() {\n return '';\n },\n DataView: function DataView() {\n return '';\n },\n ArrayBuffer: function ArrayBuffer() {\n return '';\n },\n Error: inspectObject$1,\n HTMLCollection: inspectHTMLCollection,\n NodeList: inspectHTMLCollection\n }; // eslint-disable-next-line complexity\n\n var inspectCustom = function inspectCustom(value, options, type) {\n if (chaiInspect in value && typeof value[chaiInspect] === 'function') {\n return value[chaiInspect](options);\n }\n\n if (nodeInspect && nodeInspect in value && typeof value[nodeInspect] === 'function') {\n return value[nodeInspect](options.depth, options);\n }\n\n if ('inspect' in value && typeof value.inspect === 'function') {\n return value.inspect(options.depth, options);\n }\n\n if ('constructor' in value && constructorMap.has(value.constructor)) {\n return constructorMap.get(value.constructor)(value, options);\n }\n\n if (stringTagMap[type]) {\n return stringTagMap[type](value, options);\n }\n\n return '';\n };\n\n var toString$1 = Object.prototype.toString; // eslint-disable-next-line complexity\n\n function inspect(value, options) {\n options = normaliseOptions(options);\n options.inspect = inspect;\n var _options = options,\n customInspect = _options.customInspect;\n var type = value === null ? 'null' : _typeof(value);\n\n if (type === 'object') {\n type = toString$1.call(value).slice(8, -1);\n } // If it is a base value that we already support, then use Loupe's inspector\n\n\n if (baseTypesMap[type]) {\n return baseTypesMap[type](value, options);\n } // If `options.customInspect` is set to true then try to use the custom inspector\n\n\n if (customInspect && value) {\n var output = inspectCustom(value, options, type);\n\n if (output) {\n if (typeof output === 'string') return output;\n return inspect(output, options);\n }\n }\n\n var proto = value ? Object.getPrototypeOf(value) : false; // If it's a plain Object then use Loupe's inspector\n\n if (proto === Object.prototype || proto === null) {\n return inspectObject(value, options);\n } // Specifically account for HTMLElements\n // eslint-disable-next-line no-undef\n\n\n if (value && typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return inspectHTML(value, options);\n }\n\n if ('constructor' in value) {\n // If it is a class, inspect it like an object but add the constructor name\n if (value.constructor !== Object) {\n return inspectClass(value, options);\n } // If it is an object with an anonymous prototype, display it as an object.\n\n\n return inspectObject(value, options);\n } // last chance to check if it's an object\n\n\n if (value === Object(value)) {\n return inspectObject(value, options);\n } // We have run out of options! Just stringify the value\n\n\n return options.stylize(String(value), type);\n }\n function registerConstructor(constructor, inspector) {\n if (constructorMap.has(constructor)) {\n return false;\n }\n\n constructorMap.set(constructor, inspector);\n return true;\n }\n function registerStringTag(stringTag, inspector) {\n if (stringTag in stringTagMap) {\n return false;\n }\n\n stringTagMap[stringTag] = inspector;\n return true;\n }\n var custom = chaiInspect;\n\n exports.custom = custom;\n exports.default = inspect;\n exports.inspect = inspect;\n exports.registerConstructor = registerConstructor;\n exports.registerStringTag = registerStringTag;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "module.exports = {\n\n /**\n * ### config.includeStack\n *\n * User configurable property, influences whether stack trace\n * is included in Assertion error message. Default of false\n * suppresses stack trace in the error message.\n *\n * chai.config.includeStack = true; // enable stack on error\n *\n * @param {Boolean}\n * @api public\n */\n\n includeStack: false,\n\n /**\n * ### config.showDiff\n *\n * User configurable property, influences whether or not\n * the `showDiff` flag should be included in the thrown\n * AssertionErrors. `false` will always be `false`; `true`\n * will be true when the assertion has requested a diff\n * be shown.\n *\n * @param {Boolean}\n * @api public\n */\n\n showDiff: true,\n\n /**\n * ### config.truncateThreshold\n *\n * User configurable property, sets length threshold for actual and\n * expected values in assertion errors. If this threshold is exceeded, for\n * example for large data structures, the value is replaced with something\n * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n *\n * Set it to zero if you want to disable truncating altogether.\n *\n * This is especially userful when doing assertions on arrays: having this\n * set to a reasonable large value makes the failure messages readily\n * inspectable.\n *\n * chai.config.truncateThreshold = 0; // disable truncating\n *\n * @param {Number}\n * @api public\n */\n\n truncateThreshold: 40,\n\n /**\n * ### config.useProxy\n *\n * User configurable property, defines if chai will use a Proxy to throw\n * an error when a non-existent property is read, which protects users\n * from typos when using property-based assertions.\n *\n * Set it to false if you want to disable this feature.\n *\n * chai.config.useProxy = false; // disable use of Proxy\n *\n * This feature is automatically disabled regardless of this config value\n * in environments that don't support proxies.\n *\n * @param {Boolean}\n * @api public\n */\n\n useProxy: true,\n\n /**\n * ### config.proxyExcludedKeys\n *\n * User configurable property, defines which properties should be ignored\n * instead of throwing an error if they do not exist on the assertion.\n * This is only applied if the environment Chai is running in supports proxies and\n * if the `useProxy` configuration setting is enabled.\n * By default, `then` and `inspect` will not throw an error if they do not exist on the\n * assertion object because the `.inspect` property is read by `util.inspect` (for example, when\n * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.\n *\n * // By default these keys will not throw an error if they do not exist on the assertion object\n * chai.config.proxyExcludedKeys = ['then', 'inspect'];\n *\n * @param {Array}\n * @api public\n */\n\n proxyExcludedKeys: ['then', 'catch', 'inspect', 'toJSON'],\n\n /**\n * ### config.deepEqual\n *\n * User configurable property, defines which a custom function to use for deepEqual\n * comparisons.\n * By default, the function used is the one from the `deep-eql` package without custom comparator.\n *\n * // use a custom comparator\n * chai.config.deepEqual = (expected, actual) => {\n * return chai.util.eql(expected, actual, {\n * comparator: (expected, actual) => {\n * // for non number comparison, use the default behavior\n * if(typeof expected !== 'number') return null;\n * // allow a difference of 10 between compared numbers\n * return typeof actual === 'number' && Math.abs(actual - expected) < 10\n * }\n * })\n * };\n *\n * @param {Function}\n * @api public\n */\n\n deepEqual: null\n\n};\n", "// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('get-func-name');\nvar loupe = require('loupe');\nvar config = require('../config');\n\nmodule.exports = inspect;\n\n/**\n * ### .inspect(obj, [showHidden], [depth], [colors])\n *\n * Echoes the value of a value. Tries to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n * properties of objects. Default is false.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n * output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n var options = {\n colors: colors,\n depth: (typeof depth === 'undefined' ? 2 : depth),\n showHidden: showHidden,\n truncate: config.truncateThreshold ? config.truncateThreshold : Infinity,\n };\n return loupe.inspect(obj, options);\n}\n", "/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay(object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @returns {string} stringified object\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function objDisplay(obj) {\n var str = inspect(obj)\n , type = Object.prototype.toString.call(obj);\n\n if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n if (type === '[object Function]') {\n return !obj.name || obj.name === ''\n ? '[Function]'\n : '[Function: ' + obj.name + ']';\n } else if (type === '[object Array]') {\n return '[ Array(' + obj.length + ') ]';\n } else if (type === '[object Object]') {\n var keys = Object.keys(obj)\n , kstr = keys.length > 2\n ? keys.splice(0, 2).join(', ') + ', ...'\n : keys.join(', ');\n return '{ Object (' + kstr + ') }';\n } else {\n return str;\n }\n } else {\n return str;\n }\n};\n", "/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag')\n , getActual = require('./getActual')\n , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function getMessage(obj, args) {\n var negate = flag(obj, 'negate')\n , val = flag(obj, 'object')\n , expected = args[3]\n , actual = getActual(obj, args)\n , msg = negate ? args[2] : args[1]\n , flagMsg = flag(obj, 'message');\n\n if(typeof msg === \"function\") msg = msg();\n msg = msg || '';\n msg = msg\n .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n", "/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, `lockSsfi`,\n * and `message`) will not be transferred.\n *\n *\n * var newAssertion = new Assertion();\n * utils.transferFlags(assertion, newAssertion);\n *\n * var anotherAssertion = new Assertion(myObj);\n * utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function transferFlags(assertion, object, includeAll) {\n var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n if (!object.__flags) {\n object.__flags = Object.create(null);\n }\n\n includeAll = arguments.length === 3 ? includeAll : true;\n\n for (var flag in flags) {\n if (includeAll ||\n (flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message')) {\n object.__flags[flag] = flags[flag];\n }\n }\n};\n", "'use strict';\n/* globals Symbol: false, Uint8Array: false, WeakMap: false */\n/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar type = require('type-detect');\nfunction FakeMap() {\n this._key = 'chai/deep-eql__' + Math.random() + Date.now();\n}\n\nFakeMap.prototype = {\n get: function get(key) {\n return key[this._key];\n },\n set: function set(key, value) {\n if (Object.isExtensible(key)) {\n Object.defineProperty(key, this._key, {\n value: value,\n configurable: true,\n });\n }\n },\n};\n\nvar MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap;\n/*!\n * Check to see if the MemoizeMap has recorded a result of the two operands\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @returns {Boolean|null} result\n*/\nfunction memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return null;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n var result = leftHandMap.get(rightHandOperand);\n if (typeof result === 'boolean') {\n return result;\n }\n }\n return null;\n}\n\n/*!\n * Set the result of the equality into the MemoizeMap\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @param {Boolean} result\n*/\nfunction memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n leftHandMap.set(rightHandOperand, result);\n } else {\n leftHandMap = new MemoizeMap();\n leftHandMap.set(rightHandOperand, result);\n memoizeMap.set(leftHandOperand, leftHandMap);\n }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\nmodule.exports.MemoizeMap = MemoizeMap;\n\n/**\n * Assert deeply nested sameValue equality between two objects of any type.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n */\nfunction deepEqual(leftHandOperand, rightHandOperand, options) {\n // If we have a comparator, we can't assume anything; so bail to its check first.\n if (options && options.comparator) {\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n }\n\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n return simpleResult;\n }\n\n // Deeper comparisons are pushed through to a larger function\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n}\n\n/**\n * Many comparisons can be canceled out early via simple equality or primitive checks.\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @return {Boolean|null} equal match\n */\nfunction simpleEqual(leftHandOperand, rightHandOperand) {\n // Equal references (except for Numbers) can be returned early\n if (leftHandOperand === rightHandOperand) {\n // Handle +-0 cases\n return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand;\n }\n\n // handle NaN cases\n if (\n leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare\n rightHandOperand !== rightHandOperand // eslint-disable-line no-self-compare\n ) {\n return true;\n }\n\n // Anything that is not an 'object', i.e. symbols, functions, booleans, numbers,\n // strings, and undefined, can be compared by reference.\n if (isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n // Easy out b/c it would have passed the first equality check\n return false;\n }\n return null;\n}\n\n/*!\n * The main logic of the `deepEqual` function.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n*/\nfunction extensiveDeepEqual(leftHandOperand, rightHandOperand, options) {\n options = options || {};\n options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap();\n var comparator = options && options.comparator;\n\n // Check if a memoized result exists.\n var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize);\n if (memoizeResultLeft !== null) {\n return memoizeResultLeft;\n }\n var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize);\n if (memoizeResultRight !== null) {\n return memoizeResultRight;\n }\n\n // If a comparator is present, use it.\n if (comparator) {\n var comparatorResult = comparator(leftHandOperand, rightHandOperand);\n // Comparators may return null, in which case we want to go back to default behavior.\n if (comparatorResult === false || comparatorResult === true) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult);\n return comparatorResult;\n }\n // To allow comparators to override *any* behavior, we ran them first. Since it didn't decide\n // what to do, we need to make sure to return the basic tests first before we move on.\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n // Don't memoize this, it takes longer to set/retrieve than to just compare.\n return simpleResult;\n }\n }\n\n var leftHandType = type(leftHandOperand);\n if (leftHandType !== type(rightHandOperand)) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false);\n return false;\n }\n\n // Temporarily set the operands in the memoize object to prevent blowing the stack\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true);\n\n var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options);\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result);\n return result;\n}\n\nfunction extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) {\n switch (leftHandType) {\n case 'String':\n case 'Number':\n case 'Boolean':\n case 'Date':\n // If these types are their instance types (e.g. `new Number`) then re-deepEqual against their values\n return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf());\n case 'Promise':\n case 'Symbol':\n case 'function':\n case 'WeakMap':\n case 'WeakSet':\n return leftHandOperand === rightHandOperand;\n case 'Error':\n return keysEqual(leftHandOperand, rightHandOperand, [ 'name', 'message', 'code' ], options);\n case 'Arguments':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'Array':\n return iterableEqual(leftHandOperand, rightHandOperand, options);\n case 'RegExp':\n return regexpEqual(leftHandOperand, rightHandOperand);\n case 'Generator':\n return generatorEqual(leftHandOperand, rightHandOperand, options);\n case 'DataView':\n return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options);\n case 'ArrayBuffer':\n return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options);\n case 'Set':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n case 'Map':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainTime':\n case 'Temporal.PlainDateTime':\n case 'Temporal.Instant':\n case 'Temporal.ZonedDateTime':\n case 'Temporal.PlainYearMonth':\n case 'Temporal.PlainMonthDay':\n return leftHandOperand.equals(rightHandOperand);\n case 'Temporal.Duration':\n return leftHandOperand.total('nanoseconds') === rightHandOperand.total('nanoseconds');\n case 'Temporal.TimeZone':\n case 'Temporal.Calendar':\n return leftHandOperand.toString() === rightHandOperand.toString();\n default:\n return objectEqual(leftHandOperand, rightHandOperand, options);\n }\n}\n\n/*!\n * Compare two Regular Expressions for equality.\n *\n * @param {RegExp} leftHandOperand\n * @param {RegExp} rightHandOperand\n * @return {Boolean} result\n */\n\nfunction regexpEqual(leftHandOperand, rightHandOperand) {\n return leftHandOperand.toString() === rightHandOperand.toString();\n}\n\n/*!\n * Compare two Sets/Maps for equality. Faster than other equality functions.\n *\n * @param {Set} leftHandOperand\n * @param {Set} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction entriesEqual(leftHandOperand, rightHandOperand, options) {\n try {\n // IE11 doesn't support Set#entries or Set#@@iterator, so we need manually populate using Set#forEach\n if (leftHandOperand.size !== rightHandOperand.size) {\n return false;\n }\n if (leftHandOperand.size === 0) {\n return true;\n }\n } catch (sizeError) {\n // things that aren't actual Maps or Sets will throw here\n return false;\n }\n var leftHandItems = [];\n var rightHandItems = [];\n leftHandOperand.forEach(function gatherEntries(key, value) {\n leftHandItems.push([ key, value ]);\n });\n rightHandOperand.forEach(function gatherEntries(key, value) {\n rightHandItems.push([ key, value ]);\n });\n return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options);\n}\n\n/*!\n * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction iterableEqual(leftHandOperand, rightHandOperand, options) {\n var length = leftHandOperand.length;\n if (length !== rightHandOperand.length) {\n return false;\n }\n if (length === 0) {\n return true;\n }\n var index = -1;\n while (++index < length) {\n if (deepEqual(leftHandOperand[index], rightHandOperand[index], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Simple equality for generator objects such as those returned by generator functions.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction generatorEqual(leftHandOperand, rightHandOperand, options) {\n return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options);\n}\n\n/*!\n * Determine if the given object has an @@iterator function.\n *\n * @param {Object} target\n * @return {Boolean} `true` if the object has an @@iterator function.\n */\nfunction hasIteratorFunction(target) {\n return typeof Symbol !== 'undefined' &&\n typeof target === 'object' &&\n typeof Symbol.iterator !== 'undefined' &&\n typeof target[Symbol.iterator] === 'function';\n}\n\n/*!\n * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array.\n * This will consume the iterator - which could have side effects depending on the @@iterator implementation.\n *\n * @param {Object} target\n * @returns {Array} an array of entries from the @@iterator function\n */\nfunction getIteratorEntries(target) {\n if (hasIteratorFunction(target)) {\n try {\n return getGeneratorEntries(target[Symbol.iterator]());\n } catch (iteratorError) {\n return [];\n }\n }\n return [];\n}\n\n/*!\n * Gets all entries from a Generator. This will consume the generator - which could have side effects.\n *\n * @param {Generator} target\n * @returns {Array} an array of entries from the Generator.\n */\nfunction getGeneratorEntries(generator) {\n var generatorResult = generator.next();\n var accumulator = [ generatorResult.value ];\n while (generatorResult.done === false) {\n generatorResult = generator.next();\n accumulator.push(generatorResult.value);\n }\n return accumulator;\n}\n\n/*!\n * Gets all own and inherited enumerable keys from a target.\n *\n * @param {Object} target\n * @returns {Array} an array of own and inherited enumerable keys from the target.\n */\nfunction getEnumerableKeys(target) {\n var keys = [];\n for (var key in target) {\n keys.push(key);\n }\n return keys;\n}\n\nfunction getEnumerableSymbols(target) {\n var keys = [];\n var allKeys = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < allKeys.length; i += 1) {\n var key = allKeys[i];\n if (Object.getOwnPropertyDescriptor(target, key).enumerable) {\n keys.push(key);\n }\n }\n return keys;\n}\n\n/*!\n * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of\n * each key. If any value of the given key is not equal, the function will return false (early).\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\nfunction keysEqual(leftHandOperand, rightHandOperand, keys, options) {\n var length = keys.length;\n if (length === 0) {\n return true;\n }\n for (var i = 0; i < length; i += 1) {\n if (deepEqual(leftHandOperand[keys[i]], rightHandOperand[keys[i]], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual`\n * for each enumerable key in the object.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\nfunction objectEqual(leftHandOperand, rightHandOperand, options) {\n var leftHandKeys = getEnumerableKeys(leftHandOperand);\n var rightHandKeys = getEnumerableKeys(rightHandOperand);\n var leftHandSymbols = getEnumerableSymbols(leftHandOperand);\n var rightHandSymbols = getEnumerableSymbols(rightHandOperand);\n leftHandKeys = leftHandKeys.concat(leftHandSymbols);\n rightHandKeys = rightHandKeys.concat(rightHandSymbols);\n\n if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) {\n if (iterableEqual(mapSymbols(leftHandKeys).sort(), mapSymbols(rightHandKeys).sort()) === false) {\n return false;\n }\n return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options);\n }\n\n var leftHandEntries = getIteratorEntries(leftHandOperand);\n var rightHandEntries = getIteratorEntries(rightHandOperand);\n if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) {\n leftHandEntries.sort();\n rightHandEntries.sort();\n return iterableEqual(leftHandEntries, rightHandEntries, options);\n }\n\n if (leftHandKeys.length === 0 &&\n leftHandEntries.length === 0 &&\n rightHandKeys.length === 0 &&\n rightHandEntries.length === 0) {\n return true;\n }\n\n return false;\n}\n\n/*!\n * Returns true if the argument is a primitive.\n *\n * This intentionally returns true for all objects that can be compared by reference,\n * including functions and symbols.\n *\n * @param {Mixed} value\n * @return {Boolean} result\n */\nfunction isPrimitive(value) {\n return value === null || typeof value !== 'object';\n}\n\nfunction mapSymbols(arr) {\n return arr.map(function mapSymbol(entry) {\n if (typeof entry === 'symbol') {\n return entry.toString();\n }\n\n return entry;\n });\n}\n", "var config = require('../config');\n\n/*!\n * Chai - isProxyEnabled helper\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .isProxyEnabled()\n *\n * Helper function to check if Chai's proxy protection feature is enabled. If\n * proxies are unsupported or disabled via the user's Chai config, then return\n * false. Otherwise, return true.\n *\n * @namespace Utils\n * @name isProxyEnabled\n */\n\nmodule.exports = function isProxyEnabled() {\n return config.useProxy &&\n typeof Proxy !== 'undefined' &&\n typeof Reflect !== 'undefined';\n};\n", "/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addProperty(ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n * utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.instanceof(Foo);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function addProperty(ctx, name, getter) {\n getter = getter === undefined ? function () {} : getter;\n\n Object.defineProperty(ctx, name,\n { get: function propertyGetter() {\n // Setting the `ssfi` flag to `propertyGetter` causes this function to\n // be the starting point for removing implementation frames from the\n // stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', propertyGetter);\n }\n\n var result = getter.call(this);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n", "var fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length');\n\n/*!\n * Chai - addLengthGuard utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .addLengthGuard(fn, assertionName, isChainable)\n *\n * Define `length` as a getter on the given uninvoked method assertion. The\n * getter acts as a guard against chaining `length` directly off of an uninvoked\n * method assertion, which is a problem because it references `function`'s\n * built-in `length` property instead of Chai's `length` assertion. When the\n * getter catches the user making this mistake, it throws an error with a\n * helpful message.\n *\n * There are two ways in which this mistake can be made. The first way is by\n * chaining the `length` assertion directly off of an uninvoked chainable\n * method. In this case, Chai suggests that the user use `lengthOf` instead. The\n * second way is by chaining the `length` assertion directly off of an uninvoked\n * non-chainable method. Non-chainable methods must be invoked prior to\n * chaining. In this case, Chai suggests that the user consult the docs for the\n * given assertion.\n *\n * If the `length` property of functions is unconfigurable, then return `fn`\n * without modification.\n *\n * Note that in ES6, the function's `length` property is configurable, so once\n * support for legacy environments is dropped, Chai's `length` property can\n * replace the built-in function's `length` property, and this length guard will\n * no longer be necessary. In the mean time, maintaining consistency across all\n * environments is the priority.\n *\n * @param {Function} fn\n * @param {String} assertionName\n * @param {Boolean} isChainable\n * @namespace Utils\n * @name addLengthGuard\n */\n\nmodule.exports = function addLengthGuard (fn, assertionName, isChainable) {\n if (!fnLengthDesc.configurable) return fn;\n\n Object.defineProperty(fn, 'length', {\n get: function () {\n if (isChainable) {\n throw Error('Invalid Chai property: ' + assertionName + '.length. Due' +\n ' to a compatibility issue, \"length\" cannot directly follow \"' +\n assertionName + '\". Use \"' + assertionName + '.lengthOf\" instead.');\n }\n\n throw Error('Invalid Chai property: ' + assertionName + '.length. See' +\n ' docs for proper usage of \"' + assertionName + '\".');\n }\n });\n\n return fn;\n};\n", "/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n var result = Object.getOwnPropertyNames(object);\n\n function addProperty(property) {\n if (result.indexOf(property) === -1) {\n result.push(property);\n }\n }\n\n var proto = Object.getPrototypeOf(object);\n while (proto !== null) {\n Object.getOwnPropertyNames(proto).forEach(addProperty);\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n};\n", "var config = require('../config');\nvar flag = require('./flag');\nvar getProperties = require('./getProperties');\nvar isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * Chai - proxify utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .proxify(object)\n *\n * Return a proxy of given object that throws an error when a non-existent\n * property is read. By default, the root cause is assumed to be a misspelled\n * property, and thus an attempt is made to offer a reasonable suggestion from\n * the list of existing properties. However, if a nonChainableMethodName is\n * provided, then the root cause is instead a failure to invoke a non-chainable\n * method prior to reading the non-existent property.\n *\n * If proxies are unsupported or disabled via the user's Chai config, then\n * return object without modification.\n *\n * @param {Object} obj\n * @param {String} nonChainableMethodName\n * @namespace Utils\n * @name proxify\n */\n\nvar builtins = ['__flags', '__methods', '_obj', 'assert'];\n\nmodule.exports = function proxify(obj, nonChainableMethodName) {\n if (!isProxyEnabled()) return obj;\n\n return new Proxy(obj, {\n get: function proxyGetter(target, property) {\n // This check is here because we should not throw errors on Symbol properties\n // such as `Symbol.toStringTag`.\n // The values for which an error should be thrown can be configured using\n // the `config.proxyExcludedKeys` setting.\n if (typeof property === 'string' &&\n config.proxyExcludedKeys.indexOf(property) === -1 &&\n !Reflect.has(target, property)) {\n // Special message for invalid property access of non-chainable methods.\n if (nonChainableMethodName) {\n throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' +\n property + '. See docs for proper usage of \"' +\n nonChainableMethodName + '\".');\n }\n\n // If the property is reasonably close to an existing Chai property,\n // suggest that property to the user. Only suggest properties with a\n // distance less than 4.\n var suggestion = null;\n var suggestionDistance = 4;\n getProperties(target).forEach(function(prop) {\n if (\n !Object.prototype.hasOwnProperty(prop) &&\n builtins.indexOf(prop) === -1\n ) {\n var dist = stringDistanceCapped(\n property,\n prop,\n suggestionDistance\n );\n if (dist < suggestionDistance) {\n suggestion = prop;\n suggestionDistance = dist;\n }\n }\n });\n\n if (suggestion !== null) {\n throw Error('Invalid Chai property: ' + property +\n '. Did you mean \"' + suggestion + '\"?');\n } else {\n throw Error('Invalid Chai property: ' + property);\n }\n }\n\n // Use this proxy getter as the starting point for removing implementation\n // frames from the stack trace of a failed assertion. For property\n // assertions, this prevents the proxy getter from showing up in the stack\n // trace since it's invoked before the property getter. For method and\n // chainable method assertions, this flag will end up getting changed to\n // the method wrapper, which is good since this frame will no longer be in\n // the stack once the method is invoked. Note that Chai builtin assertion\n // properties such as `__flags` are skipped since this is only meant to\n // capture the starting point of an assertion. This step is also skipped\n // if the `lockSsfi` flag is set, thus indicating that this assertion is\n // being called from within another assertion. In that case, the `ssfi`\n // flag is already set to the outer assertion's starting point.\n if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) {\n flag(target, 'ssfi', proxyGetter);\n }\n\n return Reflect.get(target, property);\n }\n });\n};\n\n/**\n * # stringDistanceCapped(strA, strB, cap)\n * Return the Levenshtein distance between two strings, but no more than cap.\n * @param {string} strA\n * @param {string} strB\n * @param {number} number\n * @return {number} min(string distance between strA and strB, cap)\n * @api private\n */\n\nfunction stringDistanceCapped(strA, strB, cap) {\n if (Math.abs(strA.length - strB.length) >= cap) {\n return cap;\n }\n\n var memo = [];\n // `memo` is a two-dimensional array containing distances.\n // memo[i][j] is the distance between strA.slice(0, i) and\n // strB.slice(0, j).\n for (var i = 0; i <= strA.length; i++) {\n memo[i] = Array(strB.length + 1).fill(0);\n memo[i][0] = i;\n }\n for (var j = 0; j < strB.length; j++) {\n memo[0][j] = j;\n }\n\n for (var i = 1; i <= strA.length; i++) {\n var ch = strA.charCodeAt(i - 1);\n for (var j = 1; j <= strB.length; j++) {\n if (Math.abs(i - j) >= cap) {\n memo[i][j] = cap;\n continue;\n }\n memo[i][j] = Math.min(\n memo[i - 1][j] + 1,\n memo[i][j - 1] + 1,\n memo[i - 1][j - 1] +\n (ch === strB.charCodeAt(j - 1) ? 0 : 1)\n );\n }\n }\n\n return memo[strA.length][strB.length];\n}\n", "/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addMethod(ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\n\nmodule.exports = function addMethod(ctx, name, method) {\n var methodWrapper = function () {\n // Setting the `ssfi` flag to `methodWrapper` causes this function to be the\n // starting point for removing implementation frames from the stack trace of\n // a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', methodWrapper);\n }\n\n var result = method.apply(this, arguments);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(methodWrapper, name, false);\n ctx[name] = proxify(methodWrapper, name);\n};\n", "/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteProperty(ctx, name, fn)\n *\n * Overwrites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n * return function () {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.name).to.equal('bar');\n * } else {\n * _super.call(this);\n * }\n * }\n * });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function overwriteProperty(ctx, name, getter) {\n var _get = Object.getOwnPropertyDescriptor(ctx, name)\n , _super = function () {};\n\n if (_get && 'function' === typeof _get.get)\n _super = _get.get\n\n Object.defineProperty(ctx, name,\n { get: function overwritingPropertyGetter() {\n // Setting the `ssfi` flag to `overwritingPropertyGetter` causes this\n // function to be the starting point for removing implementation frames\n // from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingPropertyGetter);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten\n // assertion from changing the `ssfi` flag. By this point, the `ssfi`\n // flag is already set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = getter(_super).call(this);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n", "/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteMethod(ctx, name, fn)\n *\n * Overwrites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n * return function (str) {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.value).to.equal(str);\n * } else {\n * _super.apply(this, arguments);\n * }\n * }\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function overwriteMethod(ctx, name, method) {\n var _method = ctx[name]\n , _super = function () {\n throw new Error(name + ' is not a function');\n };\n\n if (_method && 'function' === typeof _method)\n _super = _method;\n\n var overwritingMethodWrapper = function () {\n // Setting the `ssfi` flag to `overwritingMethodWrapper` causes this\n // function to be the starting point for removing implementation frames from\n // the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingMethodWrapper);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten assertion\n // from changing the `ssfi` flag. By this point, the `ssfi` flag is already\n // set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = method(_super).apply(this, arguments);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n\n addLengthGuard(overwritingMethodWrapper, name, false);\n ctx[name] = proxify(overwritingMethodWrapper, name);\n};\n", "/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/*!\n * Module variables\n */\n\n// Check whether `Object.setPrototypeOf` is supported\nvar canSetPrototype = typeof Object.setPrototypeOf === 'function';\n\n// Without `Object.setPrototypeOf` support, this module will need to add properties to a function.\n// However, some of functions' own props are not configurable and should be skipped.\nvar testFn = function() {};\nvar excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) {\n var propDesc = Object.getOwnPropertyDescriptor(testFn, name);\n\n // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties,\n // but then returns `undefined` as the property descriptor for `callee`. As a\n // workaround, we perform an otherwise unnecessary type-check for `propDesc`,\n // and then filter it out if it's not an object as it should be.\n if (typeof propDesc !== 'object')\n return true;\n\n return !propDesc.configurable;\n});\n\n// Cache `Function` properties\nvar call = Function.prototype.call,\n apply = Function.prototype.apply;\n\n/**\n * ### .addChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n * expect(fooStr).to.be.foo('bar');\n * expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function addChainableMethod(ctx, name, method, chainingBehavior) {\n if (typeof chainingBehavior !== 'function') {\n chainingBehavior = function () { };\n }\n\n var chainableBehavior = {\n method: method\n , chainingBehavior: chainingBehavior\n };\n\n // save the methods so we can overwrite them later, if we need to.\n if (!ctx.__methods) {\n ctx.__methods = {};\n }\n ctx.__methods[name] = chainableBehavior;\n\n Object.defineProperty(ctx, name,\n { get: function chainableMethodGetter() {\n chainableBehavior.chainingBehavior.call(this);\n\n var chainableMethodWrapper = function () {\n // Setting the `ssfi` flag to `chainableMethodWrapper` causes this\n // function to be the starting point for removing implementation\n // frames from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then this assertion is being\n // invoked from inside of another assertion. In this case, the `ssfi`\n // flag has already been set by the outer assertion.\n //\n // Note that overwriting a chainable method merely replaces the saved\n // methods in `ctx.__methods` instead of completely replacing the\n // overwritten assertion. Therefore, an overwriting assertion won't\n // set the `ssfi` or `lockSsfi` flags.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', chainableMethodWrapper);\n }\n\n var result = chainableBehavior.method.apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(chainableMethodWrapper, name, true);\n\n // Use `Object.setPrototypeOf` if available\n if (canSetPrototype) {\n // Inherit all properties from the object by replacing the `Function` prototype\n var prototype = Object.create(this);\n // Restore the `call` and `apply` methods from `Function`\n prototype.call = call;\n prototype.apply = apply;\n Object.setPrototypeOf(chainableMethodWrapper, prototype);\n }\n // Otherwise, redefine all properties (slow!)\n else {\n var asserterNames = Object.getOwnPropertyNames(ctx);\n asserterNames.forEach(function (asserterName) {\n if (excludeNames.indexOf(asserterName) !== -1) {\n return;\n }\n\n var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n Object.defineProperty(chainableMethodWrapper, asserterName, pd);\n });\n }\n\n transferFlags(this, chainableMethodWrapper);\n return proxify(chainableMethodWrapper);\n }\n , configurable: true\n });\n};\n", "/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Overwrites an already existing chainable method\n * and provides access to the previous function or\n * property. Must return functions to be used for\n * name.\n *\n * utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',\n * function (_super) {\n * }\n * , function (_super) {\n * }\n * );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.have.lengthOf(3);\n * expect(myFoo).to.have.lengthOf.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) {\n var chainableBehavior = ctx.__methods[name];\n\n var _chainingBehavior = chainableBehavior.chainingBehavior;\n chainableBehavior.chainingBehavior = function overwritingChainableMethodGetter() {\n var result = chainingBehavior(_chainingBehavior).call(this);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n var _method = chainableBehavior.method;\n chainableBehavior.method = function overwritingChainableMethodWrapper() {\n var result = method(_method).apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n};\n", "/*!\n * Chai - compareByInspect utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\n\n/**\n * ### .compareByInspect(mixed, mixed)\n *\n * To be used as a compareFunction with Array.prototype.sort. Compares elements\n * using inspect instead of default behavior of using toString so that Symbols\n * and objects with irregular/missing toString can still be sorted without a\n * TypeError.\n *\n * @param {Mixed} first element to compare\n * @param {Mixed} second element to compare\n * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1\n * @name compareByInspect\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function compareByInspect(a, b) {\n return inspect(a) < inspect(b) ? -1 : 1;\n};\n", "/*!\n * Chai - getOwnEnumerablePropertySymbols utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getOwnEnumerablePropertySymbols(object)\n *\n * This allows the retrieval of directly-owned enumerable property symbols of an\n * object. This function is necessary because Object.getOwnPropertySymbols\n * returns both enumerable and non-enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerablePropertySymbols\n * @api public\n */\n\nmodule.exports = function getOwnEnumerablePropertySymbols(obj) {\n if (typeof Object.getOwnPropertySymbols !== 'function') return [];\n\n return Object.getOwnPropertySymbols(obj).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(obj, sym).enumerable;\n });\n};\n", "/*!\n * Chai - getOwnEnumerableProperties utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/**\n * ### .getOwnEnumerableProperties(object)\n *\n * This allows the retrieval of directly-owned enumerable property names and\n * symbols of an object. This function is necessary because Object.keys only\n * returns enumerable property names, not enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getOwnEnumerableProperties(obj) {\n return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));\n};\n", "'use strict';\n\n/* !\n * Chai - checkError utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar getFunctionName = require('get-func-name');\n/**\n * ### .checkError\n *\n * Checks that an error conforms to a given set of criteria and/or retrieves information about it.\n *\n * @api public\n */\n\n/**\n * ### .compatibleInstance(thrown, errorLike)\n *\n * Checks if two instances are compatible (strict equal).\n * Returns false if errorLike is not an instance of Error, because instances\n * can only be compatible if they're both error instances.\n *\n * @name compatibleInstance\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleInstance(thrown, errorLike) {\n return errorLike instanceof Error && thrown === errorLike;\n}\n\n/**\n * ### .compatibleConstructor(thrown, errorLike)\n *\n * Checks if two constructors are compatible.\n * This function can receive either an error constructor or\n * an error instance as the `errorLike` argument.\n * Constructors are compatible if they're the same or if one is\n * an instance of another.\n *\n * @name compatibleConstructor\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleConstructor(thrown, errorLike) {\n if (errorLike instanceof Error) {\n // If `errorLike` is an instance of any error we compare their constructors\n return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor;\n } else if (errorLike.prototype instanceof Error || errorLike === Error) {\n // If `errorLike` is a constructor that inherits from Error, we compare `thrown` to `errorLike` directly\n return thrown.constructor === errorLike || thrown instanceof errorLike;\n }\n\n return false;\n}\n\n/**\n * ### .compatibleMessage(thrown, errMatcher)\n *\n * Checks if an error's message is compatible with a matcher (String or RegExp).\n * If the message contains the String or passes the RegExp test,\n * it is considered compatible.\n *\n * @name compatibleMessage\n * @param {Error} thrown error\n * @param {String|RegExp} errMatcher to look for into the message\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleMessage(thrown, errMatcher) {\n var comparisonString = typeof thrown === 'string' ? thrown : thrown.message;\n if (errMatcher instanceof RegExp) {\n return errMatcher.test(comparisonString);\n } else if (typeof errMatcher === 'string') {\n return comparisonString.indexOf(errMatcher) !== -1; // eslint-disable-line no-magic-numbers\n }\n\n return false;\n}\n\n/**\n * ### .getConstructorName(errorLike)\n *\n * Gets the constructor name for an Error instance or constructor itself.\n *\n * @name getConstructorName\n * @param {Error|ErrorConstructor} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getConstructorName(errorLike) {\n var constructorName = errorLike;\n if (errorLike instanceof Error) {\n constructorName = getFunctionName(errorLike.constructor);\n } else if (typeof errorLike === 'function') {\n // If `err` is not an instance of Error it is an error constructor itself or another function.\n // If we've got a common function we get its name, otherwise we may need to create a new instance\n // of the error just in case it's a poorly-constructed error. Please see chaijs/chai/issues/45 to know more.\n constructorName = getFunctionName(errorLike);\n if (constructorName === '') {\n var newConstructorName = getFunctionName(new errorLike()); // eslint-disable-line new-cap\n constructorName = newConstructorName || constructorName;\n }\n }\n\n return constructorName;\n}\n\n/**\n * ### .getMessage(errorLike)\n *\n * Gets the error message from an error.\n * If `err` is a String itself, we return it.\n * If the error has no message, we return an empty string.\n *\n * @name getMessage\n * @param {Error|String} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getMessage(errorLike) {\n var msg = '';\n if (errorLike && errorLike.message) {\n msg = errorLike.message;\n } else if (typeof errorLike === 'string') {\n msg = errorLike;\n }\n\n return msg;\n}\n\nmodule.exports = {\n compatibleInstance: compatibleInstance,\n compatibleConstructor: compatibleConstructor,\n compatibleMessage: compatibleMessage,\n getMessage: getMessage,\n getConstructorName: getConstructorName,\n};\n", "/*!\n * Chai - isNaN utility\n * Copyright(c) 2012-2015 Sakthipriyan Vairamani <thechargingvolcano@gmail.com>\n * MIT Licensed\n */\n\n/**\n * ### .isNaN(value)\n *\n * Checks if the given value is NaN or not.\n *\n * utils.isNaN(NaN); // true\n *\n * @param {Value} The value which has to be checked if it is NaN\n * @name isNaN\n * @api private\n */\n\nfunction isNaN(value) {\n // Refer http://www.ecma-international.org/ecma-262/6.0/#sec-isnan-number\n // section's NOTE.\n return value !== value;\n}\n\n// If ECMAScript 6's Number.isNaN is present, prefer that.\nmodule.exports = Number.isNaN || isNaN;\n", "var type = require('type-detect');\n\nvar flag = require('./flag');\n\nfunction isObjectType(obj) {\n var objectType = type(obj);\n var objectTypes = ['Array', 'Object', 'function'];\n\n return objectTypes.indexOf(objectType) !== -1;\n}\n\n/**\n * ### .getOperator(message)\n *\n * Extract the operator from error message.\n * Operator defined is based on below link\n * https://nodejs.org/api/assert.html#assert_assert.\n *\n * Returns the `operator` or `undefined` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getOperator\n * @api public\n */\n\nmodule.exports = function getOperator(obj, args) {\n var operator = flag(obj, 'operator');\n var negate = flag(obj, 'negate');\n var expected = args[3];\n var msg = negate ? args[2] : args[1];\n\n if (operator) {\n return operator;\n }\n\n if (typeof msg === 'function') msg = msg();\n\n msg = msg || '';\n if (!msg) {\n return undefined;\n }\n\n if (/\\shave\\s/.test(msg)) {\n return undefined;\n }\n\n var isObject = isObjectType(expected);\n if (/\\snot\\s/.test(msg)) {\n return isObject ? 'notDeepStrictEqual' : 'notStrictEqual';\n }\n\n return isObject ? 'deepStrictEqual' : 'strictEqual';\n};\n", "/*!\n * chai\n * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Dependencies that are used for multiple exports are required here only once\n */\n\nvar pathval = require('pathval');\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = pathval.getPathInfo;\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = pathval.hasProperty;\n\n/*!\n * Function name\n */\n\nexports.getName = require('get-func-name');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n\n/*!\n * Compare by inspect method\n */\n\nexports.compareByInspect = require('./compareByInspect');\n\n/*!\n * Get own enumerable property symbols method\n */\n\nexports.getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/*!\n * Get own enumerable properties method\n */\n\nexports.getOwnEnumerableProperties = require('./getOwnEnumerableProperties');\n\n/*!\n * Checks error against a given set of criteria\n */\n\nexports.checkError = require('check-error');\n\n/*!\n * Proxify util\n */\n\nexports.proxify = require('./proxify');\n\n/*!\n * addLengthGuard util\n */\n\nexports.addLengthGuard = require('./addLengthGuard');\n\n/*!\n * isProxyEnabled helper\n */\n\nexports.isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * isNaN method\n */\n\nexports.isNaN = require('./isNaN');\n\n/*!\n * getOperator method\n */\n\nexports.getOperator = require('./getOperator');", "/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n /*!\n * Module dependencies.\n */\n\n var AssertionError = _chai.AssertionError\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n _chai.Assertion = Assertion;\n\n /*!\n * Assertion Constructor\n *\n * Creates object for chaining.\n *\n * `Assertion` objects contain metadata in the form of flags. Three flags can\n * be assigned during instantiation by passing arguments to this constructor:\n *\n * - `object`: This flag contains the target of the assertion. For example, in\n * the assertion `expect(numKittens).to.equal(7);`, the `object` flag will\n * contain `numKittens` so that the `equal` assertion can reference it when\n * needed.\n *\n * - `message`: This flag contains an optional custom error message to be\n * prepended to the error message that's generated by the assertion when it\n * fails.\n *\n * - `ssfi`: This flag stands for \"start stack function indicator\". It\n * contains a function reference that serves as the starting point for\n * removing frames from the stack trace of the error that's created by the\n * assertion when it fails. The goal is to provide a cleaner stack trace to\n * end users by removing Chai's internal functions. Note that it only works\n * in environments that support `Error.captureStackTrace`, and only when\n * `Chai.config.includeStack` hasn't been set to `false`.\n *\n * - `lockSsfi`: This flag controls whether or not the given `ssfi` flag\n * should retain its current value, even as assertions are chained off of\n * this object. This is usually set to `true` when creating a new assertion\n * from within another assertion. It's also temporarily set to `true` before\n * an overwritten assertion gets called by the overwriting assertion.\n *\n * - `eql`: This flag contains the deepEqual function to be used by the assertion.\n *\n * @param {Mixed} obj target of the assertion\n * @param {String} msg (optional) custom error message\n * @param {Function} ssfi (optional) starting point for removing stack frames\n * @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked\n * @api private\n */\n\n function Assertion (obj, msg, ssfi, lockSsfi) {\n flag(this, 'ssfi', ssfi || Assertion);\n flag(this, 'lockSsfi', lockSsfi);\n flag(this, 'object', obj);\n flag(this, 'message', msg);\n flag(this, 'eql', config.deepEqual || util.eql);\n\n return util.proxify(this);\n }\n\n Object.defineProperty(Assertion, 'includeStack', {\n get: function() {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n return config.includeStack;\n },\n set: function(value) {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n config.includeStack = value;\n }\n });\n\n Object.defineProperty(Assertion, 'showDiff', {\n get: function() {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n return config.showDiff;\n },\n set: function(value) {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n config.showDiff = value;\n }\n });\n\n Assertion.addProperty = function (name, fn) {\n util.addProperty(this.prototype, name, fn);\n };\n\n Assertion.addMethod = function (name, fn) {\n util.addMethod(this.prototype, name, fn);\n };\n\n Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n Assertion.overwriteProperty = function (name, fn) {\n util.overwriteProperty(this.prototype, name, fn);\n };\n\n Assertion.overwriteMethod = function (name, fn) {\n util.overwriteMethod(this.prototype, name, fn);\n };\n\n Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n /**\n * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n *\n * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n *\n * @name assert\n * @param {Philosophical} expression to be tested\n * @param {String|Function} message or function that returns message to display if expression fails\n * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n * @param {Mixed} expected value (remember to check for negation)\n * @param {Mixed} actual (optional) will default to `this.obj`\n * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n * @api private\n */\n\n Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n var ok = util.test(this, arguments);\n if (false !== showDiff) showDiff = true;\n if (undefined === expected && undefined === _actual) showDiff = false;\n if (true !== config.showDiff) showDiff = false;\n\n if (!ok) {\n msg = util.getMessage(this, arguments);\n var actual = util.getActual(this, arguments);\n var assertionErrorObjectProperties = {\n actual: actual\n , expected: expected\n , showDiff: showDiff\n };\n\n var operator = util.getOperator(this, arguments);\n if (operator) {\n assertionErrorObjectProperties.operator = operator;\n }\n\n throw new AssertionError(\n msg,\n assertionErrorObjectProperties,\n (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n }\n };\n\n /*!\n * ### ._obj\n *\n * Quick reference to stored `actual` value for plugin developers.\n *\n * @api private\n */\n\n Object.defineProperty(Assertion.prototype, '_obj',\n { get: function () {\n return flag(this, 'object');\n }\n , set: function (val) {\n flag(this, 'object', val);\n }\n });\n};\n", "/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n var Assertion = chai.Assertion\n , AssertionError = chai.AssertionError\n , flag = _.flag;\n\n /**\n * ### Language Chains\n *\n * The following are provided as chainable getters to improve the readability\n * of your assertions.\n *\n * **Chains**\n *\n * - to\n * - be\n * - been\n * - is\n * - that\n * - which\n * - and\n * - has\n * - have\n * - with\n * - at\n * - of\n * - same\n * - but\n * - does\n * - still\n * - also\n *\n * @name language chains\n * @namespace BDD\n * @api public\n */\n\n [ 'to', 'be', 'been', 'is'\n , 'and', 'has', 'have', 'with'\n , 'that', 'which', 'at', 'of'\n , 'same', 'but', 'does', 'still', \"also\" ].forEach(function (chain) {\n Assertion.addProperty(chain);\n });\n\n /**\n * ### .not\n *\n * Negates all assertions that follow in the chain.\n *\n * expect(function () {}).to.not.throw();\n * expect({a: 1}).to.not.have.property('b');\n * expect([1, 2]).to.be.an('array').that.does.not.include(3);\n *\n * Just because you can negate any assertion with `.not` doesn't mean you\n * should. With great power comes great responsibility. It's often best to\n * assert that the one expected output was produced, rather than asserting\n * that one of countless unexpected outputs wasn't produced. See individual\n * assertions for specific guidance.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.equal(1); // Not recommended\n *\n * @name not\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('not', function () {\n flag(this, 'negate', true);\n });\n\n /**\n * ### .deep\n *\n * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property`\n * assertions that follow in the chain to use deep equality instead of strict\n * (`===`) equality. See the `deep-eql` project page for info on the deep\n * equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]);\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * @name deep\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('deep', function () {\n flag(this, 'deep', true);\n });\n\n /**\n * ### .nested\n *\n * Enables dot- and bracket-notation in all `.property` and `.include`\n * assertions that follow in the chain.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n * expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 'x'});\n *\n * `.nested` cannot be combined with `.own`.\n *\n * @name nested\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('nested', function () {\n flag(this, 'nested', true);\n });\n\n /**\n * ### .own\n *\n * Causes all `.property` and `.include` assertions that follow in the chain\n * to ignore inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * `.own` cannot be combined with `.nested`.\n *\n * @name own\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('own', function () {\n flag(this, 'own', true);\n });\n\n /**\n * ### .ordered\n *\n * Causes all `.members` assertions that follow in the chain to require that\n * members be in the same order.\n *\n * expect([1, 2]).to.have.ordered.members([1, 2])\n * .but.not.have.ordered.members([2, 1]);\n *\n * When `.include` and `.ordered` are combined, the ordering begins at the\n * start of both arrays.\n *\n * expect([1, 2, 3]).to.include.ordered.members([1, 2])\n * .but.not.include.ordered.members([2, 3]);\n *\n * @name ordered\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ordered', function () {\n flag(this, 'ordered', true);\n });\n\n /**\n * ### .any\n *\n * Causes all `.keys` assertions that follow in the chain to only require that\n * the target have at least one of the given keys. This is the opposite of\n * `.all`, which requires that the target have all of the given keys.\n *\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name any\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('any', function () {\n flag(this, 'any', true);\n flag(this, 'all', false);\n });\n\n /**\n * ### .all\n *\n * Causes all `.keys` assertions that follow in the chain to require that the\n * target have all of the given keys. This is the opposite of `.any`, which\n * only requires that the target have at least one of the given keys.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` are\n * added earlier in the chain. However, it's often best to add `.all` anyway\n * because it improves readability.\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name all\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('all', function () {\n flag(this, 'all', true);\n flag(this, 'any', false);\n });\n\n /**\n * ### .a(type[, msg])\n *\n * Asserts that the target's type is equal to the given string `type`. Types\n * are case insensitive. See the `type-detect` project page for info on the\n * type detection algorithm: https://github.com/chaijs/type-detect.\n *\n * expect('foo').to.be.a('string');\n * expect({a: 1}).to.be.an('object');\n * expect(null).to.be.a('null');\n * expect(undefined).to.be.an('undefined');\n * expect(new Error).to.be.an('error');\n * expect(Promise.resolve()).to.be.a('promise');\n * expect(new Float32Array).to.be.a('float32array');\n * expect(Symbol()).to.be.a('symbol');\n *\n * `.a` supports objects that have a custom type set via `Symbol.toStringTag`.\n *\n * var myObj = {\n * [Symbol.toStringTag]: 'myCustomType'\n * };\n *\n * expect(myObj).to.be.a('myCustomType').but.not.an('object');\n *\n * It's often best to use `.a` to check a target's type before making more\n * assertions on the same target. That way, you avoid unexpected behavior from\n * any assertion that does different things based on the target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.a`. However, it's often best to\n * assert that the target is the expected type, rather than asserting that it\n * isn't one of many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.an('array'); // Not recommended\n *\n * `.a` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * expect(1).to.be.a('string', 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.a('string');\n *\n * `.a` can also be used as a language chain to improve the readability of\n * your assertions.\n *\n * expect({b: 2}).to.have.a.property('b');\n *\n * The alias `.an` can be used interchangeably with `.a`.\n *\n * @name a\n * @alias an\n * @param {String} type\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function an (type, msg) {\n if (msg) flag(this, 'message', msg);\n type = type.toLowerCase();\n var obj = flag(this, 'object')\n , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n this.assert(\n type === _.type(obj).toLowerCase()\n , 'expected #{this} to be ' + article + type\n , 'expected #{this} not to be ' + article + type\n );\n }\n\n Assertion.addChainableMethod('an', an);\n Assertion.addChainableMethod('a', an);\n\n /**\n * ### .include(val[, msg])\n *\n * When the target is a string, `.include` asserts that the given string `val`\n * is a substring of the target.\n *\n * expect('foobar').to.include('foo');\n *\n * When the target is an array, `.include` asserts that the given `val` is a\n * member of the target.\n *\n * expect([1, 2, 3]).to.include(2);\n *\n * When the target is an object, `.include` asserts that the given object\n * `val`'s properties are a subset of the target's properties.\n *\n * expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2});\n *\n * When the target is a Set or WeakSet, `.include` asserts that the given `val` is a\n * member of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Set([1, 2])).to.include(2);\n *\n * When the target is a Map, `.include` asserts that the given `val` is one of\n * the values of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.include(2);\n *\n * Because `.include` does different things based on the target's type, it's\n * important to check the target's type before using `.include`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n *\n * By default, strict (`===`) equality is used to compare array members and\n * object properties. Add `.deep` earlier in the chain to use deep equality\n * instead (WeakSet targets are not supported). See the `deep-eql` project\n * page for info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * By default, all of the target's properties are searched when working with\n * objects. This includes properties that are inherited and/or non-enumerable.\n * Add `.own` earlier in the chain to exclude the target's inherited\n * properties from the search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * Note that a target object is always only searched for `val`'s own\n * enumerable properties.\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 2}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 2});\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.include`.\n *\n * expect('foobar').to.not.include('taco');\n * expect([1, 2, 3]).to.not.include(4);\n *\n * However, it's dangerous to negate `.include` when the target is an object.\n * The problem is that it creates uncertain expectations by asserting that the\n * target object doesn't have all of `val`'s key/value pairs but may or may\n * not have some of them. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target object isn't even expected to have `val`'s keys, it's\n * often best to assert exactly that.\n *\n * expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended\n * expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * When the target object is expected to have `val`'s keys, it's often best to\n * assert that each of the properties has its expected value, rather than\n * asserting that each property doesn't have one of many unexpected values.\n *\n * expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended\n * expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * `.include` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.include(4, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.include(4);\n *\n * `.include` can also be used as a language chain, causing all `.members` and\n * `.keys` assertions that follow in the chain to require the target to be a\n * superset of the expected set, rather than an identical set. Note that\n * `.members` ignores duplicates in the subset when `.include` is added.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * Note that adding `.any` earlier in the chain causes the `.keys` assertion\n * to ignore `.include`.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.include.any.keys('a', 'b');\n * expect({a: 1}).to.have.any.keys('a', 'b');\n *\n * The aliases `.includes`, `.contain`, and `.contains` can be used\n * interchangeably with `.include`.\n *\n * @name include\n * @alias contain\n * @alias includes\n * @alias contains\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function SameValueZero(a, b) {\n return (_.isNaN(a) && _.isNaN(b)) || a === b;\n }\n\n function includeChainingBehavior () {\n flag(this, 'contains', true);\n }\n\n function include (val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate')\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , descriptor = isDeep ? 'deep ' : ''\n , isEql = isDeep ? flag(this, 'eql') : SameValueZero;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n var included = false;\n\n switch (objType) {\n case 'string':\n included = obj.indexOf(val) !== -1;\n break;\n\n case 'weakset':\n if (isDeep) {\n throw new AssertionError(\n flagMsg + 'unable to use .deep.include with WeakSet',\n undefined,\n ssfi\n );\n }\n\n included = obj.has(val);\n break;\n\n case 'map':\n obj.forEach(function (item) {\n included = included || isEql(item, val);\n });\n break;\n\n case 'set':\n if (isDeep) {\n obj.forEach(function (item) {\n included = included || isEql(item, val);\n });\n } else {\n included = obj.has(val);\n }\n break;\n\n case 'array':\n if (isDeep) {\n included = obj.some(function (item) {\n return isEql(item, val);\n })\n } else {\n included = obj.indexOf(val) !== -1;\n }\n break;\n\n default:\n // This block is for asserting a subset of properties in an object.\n // `_.expectTypes` isn't used here because `.include` should work with\n // objects with a custom `@@toStringTag`.\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + 'the given combination of arguments ('\n + objType + ' and '\n + _.type(val).toLowerCase() + ')'\n + ' is invalid for this assertion. '\n + 'You can use an array, a map, an object, a set, a string, '\n + 'or a weakset instead of a '\n + _.type(val).toLowerCase(),\n undefined,\n ssfi\n );\n }\n\n var props = Object.keys(val)\n , firstErr = null\n , numErrs = 0;\n\n props.forEach(function (prop) {\n var propAssertion = new Assertion(obj);\n _.transferFlags(this, propAssertion, true);\n flag(propAssertion, 'lockSsfi', true);\n\n if (!negate || props.length === 1) {\n propAssertion.property(prop, val[prop]);\n return;\n }\n\n try {\n propAssertion.property(prop, val[prop]);\n } catch (err) {\n if (!_.checkError.compatibleConstructor(err, AssertionError)) {\n throw err;\n }\n if (firstErr === null) firstErr = err;\n numErrs++;\n }\n }, this);\n\n // When validating .not.include with multiple properties, we only want\n // to throw an assertion error if all of the properties are included,\n // in which case we throw the first property assertion error that we\n // encountered.\n if (negate && props.length > 1 && numErrs === props.length) {\n throw firstErr;\n }\n return;\n }\n\n // Assert inclusion in collection or substring in a string.\n this.assert(\n included\n , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val)\n , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val));\n }\n\n Assertion.addChainableMethod('include', include, includeChainingBehavior);\n Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n /**\n * ### .ok\n *\n * Asserts that the target is a truthy value (considered `true` in boolean context).\n * However, it's often best to assert that the target is strictly (`===`) or\n * deeply equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.ok; // Not recommended\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.be.ok; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.ok`.\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.not.be.ok; // Not recommended\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.ok; // Not recommended\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.be.ok; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.be.ok; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.ok;\n *\n * @name ok\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ok', function () {\n this.assert(\n flag(this, 'object')\n , 'expected #{this} to be truthy'\n , 'expected #{this} to be falsy');\n });\n\n /**\n * ### .true\n *\n * Asserts that the target is strictly (`===`) equal to `true`.\n *\n * expect(true).to.be.true;\n *\n * Add `.not` earlier in the chain to negate `.true`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `true`.\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.true; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.true; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.true;\n *\n * @name true\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('true', function () {\n this.assert(\n true === flag(this, 'object')\n , 'expected #{this} to be true'\n , 'expected #{this} to be false'\n , flag(this, 'negate') ? false : true\n );\n });\n\n /**\n * ### .false\n *\n * Asserts that the target is strictly (`===`) equal to `false`.\n *\n * expect(false).to.be.false;\n *\n * Add `.not` earlier in the chain to negate `.false`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `false`.\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.not.be.false; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.false; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(true, 'nooo why fail??').to.be.false;\n *\n * @name false\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('false', function () {\n this.assert(\n false === flag(this, 'object')\n , 'expected #{this} to be false'\n , 'expected #{this} to be true'\n , flag(this, 'negate') ? true : false\n );\n });\n\n /**\n * ### .null\n *\n * Asserts that the target is strictly (`===`) equal to `null`.\n *\n * expect(null).to.be.null;\n *\n * Add `.not` earlier in the chain to negate `.null`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `null`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.null; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.null;\n *\n * @name null\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('null', function () {\n this.assert(\n null === flag(this, 'object')\n , 'expected #{this} to be null'\n , 'expected #{this} not to be null'\n );\n });\n\n /**\n * ### .undefined\n *\n * Asserts that the target is strictly (`===`) equal to `undefined`.\n *\n * expect(undefined).to.be.undefined;\n *\n * Add `.not` earlier in the chain to negate `.undefined`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `undefined`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.undefined; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.undefined;\n *\n * @name undefined\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('undefined', function () {\n this.assert(\n undefined === flag(this, 'object')\n , 'expected #{this} to be undefined'\n , 'expected #{this} not to be undefined'\n );\n });\n\n /**\n * ### .NaN\n *\n * Asserts that the target is exactly `NaN`.\n *\n * expect(NaN).to.be.NaN;\n *\n * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `NaN`.\n *\n * expect('foo').to.equal('foo'); // Recommended\n * expect('foo').to.not.be.NaN; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.NaN;\n *\n * @name NaN\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('NaN', function () {\n this.assert(\n _.isNaN(flag(this, 'object'))\n , 'expected #{this} to be NaN'\n , 'expected #{this} not to be NaN'\n );\n });\n\n /**\n * ### .exist\n *\n * Asserts that the target is not strictly (`===`) equal to either `null` or\n * `undefined`. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.exist; // Not recommended\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.exist; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.exist`.\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.exist; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.exist; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(null, 'nooo why fail??').to.exist;\n *\n * The alias `.exists` can be used interchangeably with `.exist`.\n *\n * @name exist\n * @alias exists\n * @namespace BDD\n * @api public\n */\n\n function assertExist () {\n var val = flag(this, 'object');\n this.assert(\n val !== null && val !== undefined\n , 'expected #{this} to exist'\n , 'expected #{this} to not exist'\n );\n }\n\n Assertion.addProperty('exist', assertExist);\n Assertion.addProperty('exists', assertExist);\n\n /**\n * ### .empty\n *\n * When the target is a string or array, `.empty` asserts that the target's\n * `length` property is strictly (`===`) equal to `0`.\n *\n * expect([]).to.be.empty;\n * expect('').to.be.empty;\n *\n * When the target is a map or set, `.empty` asserts that the target's `size`\n * property is strictly equal to `0`.\n *\n * expect(new Set()).to.be.empty;\n * expect(new Map()).to.be.empty;\n *\n * When the target is a non-function object, `.empty` asserts that the target\n * doesn't have any own enumerable properties. Properties with Symbol-based\n * keys are excluded from the count.\n *\n * expect({}).to.be.empty;\n *\n * Because `.empty` does different things based on the target's type, it's\n * important to check the target's type before using `.empty`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.empty`. However, it's often\n * best to assert that the target contains its expected number of values,\n * rather than asserting that it's not empty.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.not.be.empty; // Not recommended\n *\n * expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended\n * expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended\n *\n * expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended\n * expect({a: 1}).to.not.be.empty; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect([1, 2, 3], 'nooo why fail??').to.be.empty;\n *\n * @name empty\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('empty', function () {\n var val = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , itemsCount;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n switch (_.type(val).toLowerCase()) {\n case 'array':\n case 'string':\n itemsCount = val.length;\n break;\n case 'map':\n case 'set':\n itemsCount = val.size;\n break;\n case 'weakmap':\n case 'weakset':\n throw new AssertionError(\n flagMsg + '.empty was passed a weak collection',\n undefined,\n ssfi\n );\n case 'function':\n var msg = flagMsg + '.empty was passed a function ' + _.getName(val);\n throw new AssertionError(msg.trim(), undefined, ssfi);\n default:\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + '.empty was passed non-string primitive ' + _.inspect(val),\n undefined,\n ssfi\n );\n }\n itemsCount = Object.keys(val).length;\n }\n\n this.assert(\n 0 === itemsCount\n , 'expected #{this} to be empty'\n , 'expected #{this} not to be empty'\n );\n });\n\n /**\n * ### .arguments\n *\n * Asserts that the target is an `arguments` object.\n *\n * function test () {\n * expect(arguments).to.be.arguments;\n * }\n *\n * test();\n *\n * Add `.not` earlier in the chain to negate `.arguments`. However, it's often\n * best to assert which type the target is expected to be, rather than\n * asserting that it\u2019s not an `arguments` object.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.arguments; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({}, 'nooo why fail??').to.be.arguments;\n *\n * The alias `.Arguments` can be used interchangeably with `.arguments`.\n *\n * @name arguments\n * @alias Arguments\n * @namespace BDD\n * @api public\n */\n\n function checkArguments () {\n var obj = flag(this, 'object')\n , type = _.type(obj);\n this.assert(\n 'Arguments' === type\n , 'expected #{this} to be arguments but got ' + type\n , 'expected #{this} to not be arguments'\n );\n }\n\n Assertion.addProperty('arguments', checkArguments);\n Assertion.addProperty('Arguments', checkArguments);\n\n /**\n * ### .equal(val[, msg])\n *\n * Asserts that the target is strictly (`===`) equal to the given `val`.\n *\n * expect(1).to.equal(1);\n * expect('foo').to.equal('foo');\n *\n * Add `.deep` earlier in the chain to use deep equality instead. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) equals `[1, 2]`\n * expect([1, 2]).to.deep.equal([1, 2]);\n * expect([1, 2]).to.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.equal`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to one of countless unexpected values.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.equal(2); // Not recommended\n *\n * `.equal` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.equal(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.equal(2);\n *\n * The aliases `.equals` and `eq` can be used interchangeably with `.equal`.\n *\n * @name equal\n * @alias equals\n * @alias eq\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEqual (val, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'deep')) {\n var prevLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n this.eql(val);\n flag(this, 'lockSsfi', prevLockSsfi);\n } else {\n this.assert(\n val === obj\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{exp}'\n , val\n , this._obj\n , true\n );\n }\n }\n\n Assertion.addMethod('equal', assertEqual);\n Assertion.addMethod('equals', assertEqual);\n Assertion.addMethod('eq', assertEqual);\n\n /**\n * ### .eql(obj[, msg])\n *\n * Asserts that the target is deeply equal to the given `obj`. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object is deeply (but not strictly) equal to {a: 1}\n * expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1});\n *\n * // Target array is deeply (but not strictly) equal to [1, 2]\n * expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.eql`. However, it's often best\n * to assert that the target is deeply equal to its expected value, rather\n * than not deeply equal to one of countless unexpected values.\n *\n * expect({a: 1}).to.eql({a: 1}); // Recommended\n * expect({a: 1}).to.not.eql({b: 2}); // Not recommended\n *\n * `.eql` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect({a: 1}).to.eql({b: 2}, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.eql({b: 2});\n *\n * The alias `.eqls` can be used interchangeably with `.eql`.\n *\n * The `.deep.equal` assertion is almost identical to `.eql` but with one\n * difference: `.deep.equal` causes deep equality comparisons to also be used\n * for any other assertions that follow in the chain.\n *\n * @name eql\n * @alias eqls\n * @param {Mixed} obj\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEql(obj, msg) {\n if (msg) flag(this, 'message', msg);\n var eql = flag(this, 'eql');\n this.assert(\n eql(obj, flag(this, 'object'))\n , 'expected #{this} to deeply equal #{exp}'\n , 'expected #{this} to not deeply equal #{exp}'\n , obj\n , this._obj\n , true\n );\n }\n\n Assertion.addMethod('eql', assertEql);\n Assertion.addMethod('eqls', assertEql);\n\n /**\n * ### .above(n[, msg])\n *\n * Asserts that the target is a number or a date greater than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.above(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.above(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.above`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(1).to.not.be.above(2); // Not recommended\n *\n * `.above` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.above(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.above(2);\n *\n * The aliases `.gt` and `.greaterThan` can be used interchangeably with\n * `.above`.\n *\n * @name above\n * @alias gt\n * @alias greaterThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertAbove (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to above must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to above must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount > n\n , 'expected #{this} to have a ' + descriptor + ' above #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj > n\n , 'expected #{this} to be above #{exp}'\n , 'expected #{this} to be at most #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('above', assertAbove);\n Assertion.addMethod('gt', assertAbove);\n Assertion.addMethod('greaterThan', assertAbove);\n\n /**\n * ### .least(n[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `n` respectively. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.at.least(1); // Not recommended\n * expect(2).to.be.at.least(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.least(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.least`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.at.least(2); // Not recommended\n *\n * `.least` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.at.least(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.at.least(2);\n *\n * The aliases `.gte` and `.greaterThanOrEqual` can be used interchangeably with\n * `.least`.\n *\n * @name least\n * @alias gte\n * @alias greaterThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLeast (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to least must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to least must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= n\n , 'expected #{this} to have a ' + descriptor + ' at least #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj >= n\n , 'expected #{this} to be at least #{exp}'\n , 'expected #{this} to be below #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('least', assertLeast);\n Assertion.addMethod('gte', assertLeast);\n Assertion.addMethod('greaterThanOrEqual', assertLeast);\n\n /**\n * ### .below(n[, msg])\n *\n * Asserts that the target is a number or a date less than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.below(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.below(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.length(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.below`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.below(1); // Not recommended\n *\n * `.below` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.below(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.below(1);\n *\n * The aliases `.lt` and `.lessThan` can be used interchangeably with\n * `.below`.\n *\n * @name below\n * @alias lt\n * @alias lessThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertBelow (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to below must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to below must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount < n\n , 'expected #{this} to have a ' + descriptor + ' below #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj < n\n , 'expected #{this} to be below #{exp}'\n , 'expected #{this} to be at least #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('below', assertBelow);\n Assertion.addMethod('lt', assertBelow);\n Assertion.addMethod('lessThan', assertBelow);\n\n /**\n * ### .most(n[, msg])\n *\n * Asserts that the target is a number or a date less than or equal to the given number\n * or date `n` respectively. However, it's often best to assert that the target is equal to its\n * expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.at.most(2); // Not recommended\n * expect(1).to.be.at.most(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.most(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.most`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.at.most(1); // Not recommended\n *\n * `.most` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.at.most(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.at.most(1);\n *\n * The aliases `.lte` and `.lessThanOrEqual` can be used interchangeably with\n * `.most`.\n *\n * @name most\n * @alias lte\n * @alias lessThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertMost (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to most must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to most must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount <= n\n , 'expected #{this} to have a ' + descriptor + ' at most #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj <= n\n , 'expected #{this} to be at most #{exp}'\n , 'expected #{this} to be above #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('most', assertMost);\n Assertion.addMethod('lte', assertMost);\n Assertion.addMethod('lessThanOrEqual', assertMost);\n\n /**\n * ### .within(start, finish[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `start`, and less than or equal to the given number or date `finish` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.within(1, 3); // Not recommended\n * expect(2).to.be.within(2, 3); // Not recommended\n * expect(2).to.be.within(1, 2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `start`, and less\n * than or equal to the given number `finish`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.within(2, 4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.within`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.within(2, 4); // Not recommended\n *\n * `.within` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(4).to.be.within(1, 3, 'nooo why fail??');\n * expect(4, 'nooo why fail??').to.be.within(1, 3);\n *\n * @name within\n * @param {Number} start lower bound inclusive\n * @param {Number} finish upper bound inclusive\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('within', function (start, finish, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , startType = _.type(start).toLowerCase()\n , finishType = _.type(finish).toLowerCase()\n , errorMessage\n , shouldThrow = true\n , range = (startType === 'date' && finishType === 'date')\n ? start.toISOString() + '..' + finish.toISOString()\n : start + '..' + finish;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && (startType !== 'date' || finishType !== 'date'))) {\n errorMessage = msgPrefix + 'the arguments to within must be dates';\n } else if ((startType !== 'number' || finishType !== 'number') && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the arguments to within must be numbers';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= start && itemsCount <= finish\n , 'expected #{this} to have a ' + descriptor + ' within ' + range\n , 'expected #{this} to not have a ' + descriptor + ' within ' + range\n );\n } else {\n this.assert(\n obj >= start && obj <= finish\n , 'expected #{this} to be within ' + range\n , 'expected #{this} to not be within ' + range\n );\n }\n });\n\n /**\n * ### .instanceof(constructor[, msg])\n *\n * Asserts that the target is an instance of the given `constructor`.\n *\n * function Cat () { }\n *\n * expect(new Cat()).to.be.an.instanceof(Cat);\n * expect([1, 2]).to.be.an.instanceof(Array);\n *\n * Add `.not` earlier in the chain to negate `.instanceof`.\n *\n * expect({a: 1}).to.not.be.an.instanceof(Array);\n *\n * `.instanceof` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.be.an.instanceof(Array, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.an.instanceof(Array);\n *\n * Due to limitations in ES5, `.instanceof` may not always work as expected\n * when using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing built-in object such as\n * `Array`, `Error`, and `Map`. See your transpiler's docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * The alias `.instanceOf` can be used interchangeably with `.instanceof`.\n *\n * @name instanceof\n * @param {Constructor} constructor\n * @param {String} msg _optional_\n * @alias instanceOf\n * @namespace BDD\n * @api public\n */\n\n function assertInstanceOf (constructor, msg) {\n if (msg) flag(this, 'message', msg);\n\n var target = flag(this, 'object')\n var ssfi = flag(this, 'ssfi');\n var flagMsg = flag(this, 'message');\n\n try {\n var isInstanceOf = target instanceof constructor;\n } catch (err) {\n if (err instanceof TypeError) {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n throw new AssertionError(\n flagMsg + 'The instanceof assertion needs a constructor but '\n + _.type(constructor) + ' was given.',\n undefined,\n ssfi\n );\n }\n throw err;\n }\n\n var name = _.getName(constructor);\n if (name === null) {\n name = 'an unnamed constructor';\n }\n\n this.assert(\n isInstanceOf\n , 'expected #{this} to be an instance of ' + name\n , 'expected #{this} to not be an instance of ' + name\n );\n };\n\n Assertion.addMethod('instanceof', assertInstanceOf);\n Assertion.addMethod('instanceOf', assertInstanceOf);\n\n /**\n * ### .property(name[, val[, msg]])\n *\n * Asserts that the target has a property with the given key `name`.\n *\n * expect({a: 1}).to.have.property('a');\n *\n * When `val` is provided, `.property` also asserts that the property's value\n * is equal to the given `val`.\n *\n * expect({a: 1}).to.have.property('a', 1);\n *\n * By default, strict (`===`) equality is used. Add `.deep` earlier in the\n * chain to use deep equality instead. See the `deep-eql` project page for\n * info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * The target's enumerable and non-enumerable properties are always included\n * in the search. By default, both own and inherited properties are included.\n * Add `.own` earlier in the chain to exclude inherited properties from the\n * search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.own.property('a', 1);\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y');\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}})\n * .to.have.deep.nested.property('a.b[0]', {c: 3});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.property`.\n *\n * expect({a: 1}).to.not.have.property('b');\n *\n * However, it's dangerous to negate `.property` when providing `val`. The\n * problem is that it creates uncertain expectations by asserting that the\n * target either doesn't have a property with the given key `name`, or that it\n * does have a property with the given key `name` but its value isn't equal to\n * the given `val`. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property with the given key\n * `name`, it's often best to assert exactly that.\n *\n * expect({b: 2}).to.not.have.property('a'); // Recommended\n * expect({b: 2}).to.not.have.property('a', 1); // Not recommended\n *\n * When the target is expected to have a property with the given key `name`,\n * it's often best to assert that the property has its expected value, rather\n * than asserting that it doesn't have one of many unexpected values.\n *\n * expect({a: 3}).to.have.property('a', 3); // Recommended\n * expect({a: 3}).to.not.have.property('a', 1); // Not recommended\n *\n * `.property` changes the target of any assertions that follow in the chain\n * to be the value of the property from the original target object.\n *\n * expect({a: 1}).to.have.property('a').that.is.a('number');\n *\n * `.property` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing `val`, only use the\n * second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.property('a', 2, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.have.property('a', 2);\n * expect({a: 1}, 'nooo why fail??').to.have.property('b');\n *\n * // Not recommended\n * expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `val`. Instead,\n * it's asserting that the target object has a `b` property that's equal to\n * `undefined`.\n *\n * The assertions `.ownProperty` and `.haveOwnProperty` can be used\n * interchangeably with `.own.property`.\n *\n * @name property\n * @param {String} name\n * @param {Mixed} val (optional)\n * @param {String} msg _optional_\n * @returns value of property for chaining\n * @namespace BDD\n * @api public\n */\n\n function assertProperty (name, val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var isNested = flag(this, 'nested')\n , isOwn = flag(this, 'own')\n , flagMsg = flag(this, 'message')\n , obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , nameType = typeof name;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n if (isNested) {\n if (nameType !== 'string') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string when using nested syntax',\n undefined,\n ssfi\n );\n }\n } else {\n if (nameType !== 'string' && nameType !== 'number' && nameType !== 'symbol') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string, number, or symbol',\n undefined,\n ssfi\n );\n }\n }\n\n if (isNested && isOwn) {\n throw new AssertionError(\n flagMsg + 'The \"nested\" and \"own\" flags cannot be combined.',\n undefined,\n ssfi\n );\n }\n\n if (obj === null || obj === undefined) {\n throw new AssertionError(\n flagMsg + 'Target cannot be null or undefined.',\n undefined,\n ssfi\n );\n }\n\n var isDeep = flag(this, 'deep')\n , negate = flag(this, 'negate')\n , pathInfo = isNested ? _.getPathInfo(obj, name) : null\n , value = isNested ? pathInfo.value : obj[name]\n , isEql = isDeep ? flag(this, 'eql') : (val1, val2) => val1 === val2;;\n\n var descriptor = '';\n if (isDeep) descriptor += 'deep ';\n if (isOwn) descriptor += 'own ';\n if (isNested) descriptor += 'nested ';\n descriptor += 'property ';\n\n var hasProperty;\n if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name);\n else if (isNested) hasProperty = pathInfo.exists;\n else hasProperty = _.hasProperty(obj, name);\n\n // When performing a negated assertion for both name and val, merely having\n // a property with the given name isn't enough to cause the assertion to\n // fail. It must both have a property with the given name, and the value of\n // that property must equal the given val. Therefore, skip this assertion in\n // favor of the next.\n if (!negate || arguments.length === 1) {\n this.assert(\n hasProperty\n , 'expected #{this} to have ' + descriptor + _.inspect(name)\n , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n }\n\n if (arguments.length > 1) {\n this.assert(\n hasProperty && isEql(val, value)\n , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}'\n , val\n , value\n );\n }\n\n flag(this, 'object', value);\n }\n\n Assertion.addMethod('property', assertProperty);\n\n function assertOwnProperty (name, value, msg) {\n flag(this, 'own', true);\n assertProperty.apply(this, arguments);\n }\n\n Assertion.addMethod('ownProperty', assertOwnProperty);\n Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n /**\n * ### .ownPropertyDescriptor(name[, descriptor[, msg]])\n *\n * Asserts that the target has its own property descriptor with the given key\n * `name`. Enumerable and non-enumerable properties are included in the\n * search.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a');\n *\n * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that\n * the property's descriptor is deeply equal to the given `descriptor`. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`.\n *\n * expect({a: 1}).to.not.have.ownPropertyDescriptor('b');\n *\n * However, it's dangerous to negate `.ownPropertyDescriptor` when providing\n * a `descriptor`. The problem is that it creates uncertain expectations by\n * asserting that the target either doesn't have a property descriptor with\n * the given key `name`, or that it does have a property descriptor with the\n * given key `name` but it\u2019s not deeply equal to the given `descriptor`. It's\n * often best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property descriptor with the given\n * key `name`, it's often best to assert exactly that.\n *\n * // Recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a');\n *\n * // Not recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * When the target is expected to have a property descriptor with the given\n * key `name`, it's often best to assert that the property has its expected\n * descriptor, rather than asserting that it doesn't have one of many\n * unexpected descriptors.\n *\n * // Recommended\n * expect({a: 3}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 3,\n * });\n *\n * // Not recommended\n * expect({a: 3}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * `.ownPropertyDescriptor` changes the target of any assertions that follow\n * in the chain to be the value of the property descriptor from the original\n * target object.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a')\n * .that.has.property('enumerable', true);\n *\n * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a\n * custom error message to show when the assertion fails. The message can also\n * be given as the second argument to `expect`. When not providing\n * `descriptor`, only use the second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * }, 'nooo why fail??');\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * });\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b');\n *\n * // Not recommended\n * expect({a: 1})\n * .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `descriptor`.\n * Instead, it's asserting that the target object has a `b` property\n * descriptor that's deeply equal to `undefined`.\n *\n * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with\n * `.ownPropertyDescriptor`.\n *\n * @name ownPropertyDescriptor\n * @alias haveOwnPropertyDescriptor\n * @param {String} name\n * @param {Object} descriptor _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnPropertyDescriptor (name, descriptor, msg) {\n if (typeof descriptor === 'string') {\n msg = descriptor;\n descriptor = null;\n }\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n var eql = flag(this, 'eql');\n if (actualDescriptor && descriptor) {\n this.assert(\n eql(descriptor, actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n , descriptor\n , actualDescriptor\n , true\n );\n } else {\n this.assert(\n actualDescriptor\n , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n );\n }\n flag(this, 'object', actualDescriptor);\n }\n\n Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n /**\n * ### .lengthOf(n[, msg])\n *\n * Asserts that the target's `length` or `size` is equal to the given number\n * `n`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3);\n * expect('foo').to.have.lengthOf(3);\n * expect(new Set([1, 2, 3])).to.have.lengthOf(3);\n * expect(new Map([['a', 1], ['b', 2], ['c', 3]])).to.have.lengthOf(3);\n *\n * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often\n * best to assert that the target's `length` property is equal to its expected\n * value, rather than not equal to one of many unexpected values.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.not.have.lengthOf(4); // Not recommended\n *\n * `.lengthOf` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2);\n *\n * `.lengthOf` can also be used as a language chain, causing all `.above`,\n * `.below`, `.least`, `.most`, and `.within` assertions that follow in the\n * chain to use the target's `length` property as the target. However, it's\n * often best to assert that the target's `length` property is equal to its\n * expected length, rather than asserting that its `length` property falls\n * within some range of values.\n *\n * // Recommended\n * expect([1, 2, 3]).to.have.lengthOf(3);\n *\n * // Not recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2);\n * expect([1, 2, 3]).to.have.lengthOf.below(4);\n * expect([1, 2, 3]).to.have.lengthOf.at.least(3);\n * expect([1, 2, 3]).to.have.lengthOf.at.most(3);\n * expect([1, 2, 3]).to.have.lengthOf.within(2,4);\n *\n * Due to a compatibility issue, the alias `.length` can't be chained directly\n * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used\n * interchangeably with `.lengthOf` in every situation. It's recommended to\n * always use `.lengthOf` instead of `.length`.\n *\n * expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error\n * expect([1, 2, 3]).to.have.a.lengthOf(3); // passes as expected\n *\n * @name lengthOf\n * @alias length\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLengthChain () {\n flag(this, 'doLength', true);\n }\n\n function assertLength (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , descriptor = 'length'\n , itemsCount;\n\n switch (objType) {\n case 'map':\n case 'set':\n descriptor = 'size';\n itemsCount = obj.size;\n break;\n default:\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n itemsCount = obj.length;\n }\n\n this.assert(\n itemsCount == n\n , 'expected #{this} to have a ' + descriptor + ' of #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' of #{act}'\n , n\n , itemsCount\n );\n }\n\n Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain);\n\n /**\n * ### .match(re[, msg])\n *\n * Asserts that the target matches the given regular expression `re`.\n *\n * expect('foobar').to.match(/^foo/);\n *\n * Add `.not` earlier in the chain to negate `.match`.\n *\n * expect('foobar').to.not.match(/taco/);\n *\n * `.match` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect('foobar').to.match(/taco/, 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.match(/taco/);\n *\n * The alias `.matches` can be used interchangeably with `.match`.\n *\n * @name match\n * @alias matches\n * @param {RegExp} re\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n function assertMatch(re, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n re.exec(obj)\n , 'expected #{this} to match ' + re\n , 'expected #{this} not to match ' + re\n );\n }\n\n Assertion.addMethod('match', assertMatch);\n Assertion.addMethod('matches', assertMatch);\n\n /**\n * ### .string(str[, msg])\n *\n * Asserts that the target string contains the given substring `str`.\n *\n * expect('foobar').to.have.string('bar');\n *\n * Add `.not` earlier in the chain to negate `.string`.\n *\n * expect('foobar').to.not.have.string('taco');\n *\n * `.string` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect('foobar').to.have.string('taco', 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.have.string('taco');\n *\n * @name string\n * @param {String} str\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('string', function (str, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(obj, flagMsg, ssfi, true).is.a('string');\n\n this.assert(\n ~obj.indexOf(str)\n , 'expected #{this} to contain ' + _.inspect(str)\n , 'expected #{this} to not contain ' + _.inspect(str)\n );\n });\n\n /**\n * ### .keys(key1[, key2[, ...]])\n *\n * Asserts that the target object, array, map, or set has the given keys. Only\n * the target's own inherited properties are included in the search.\n *\n * When the target is an object or array, keys can be provided as one or more\n * string arguments, a single array argument, or a single object argument. In\n * the latter case, only the keys in the given object matter; the values are\n * ignored.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n * expect(['x', 'y']).to.have.all.keys(0, 1);\n *\n * expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']);\n * expect(['x', 'y']).to.have.all.keys([0, 1]);\n *\n * expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5\n * expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5\n *\n * When the target is a map or set, each key must be provided as a separate\n * argument.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b');\n * expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b');\n *\n * Because `.keys` does different things based on the target's type, it's\n * important to check the target's type before using `.keys`. See the `.a` doc\n * for info on testing a target's type.\n *\n * expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b');\n *\n * By default, strict (`===`) equality is used to compare keys of maps and\n * sets. Add `.deep` earlier in the chain to use deep equality instead. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]);\n *\n * By default, the target must have all of the given keys and no more. Add\n * `.any` earlier in the chain to only require that the target have at least\n * one of the given keys. Also, add `.not` earlier in the chain to negate\n * `.keys`. It's often best to add `.any` when negating `.keys`, and to use\n * `.all` when asserting `.keys` without negation.\n *\n * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts\n * exactly what's expected of the output, whereas `.not.all.keys` creates\n * uncertain expectations.\n *\n * // Recommended; asserts that target doesn't have any of the given keys\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * // Not recommended; asserts that target doesn't have all of the given\n * // keys but may or may not have some of them\n * expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd');\n *\n * When asserting `.keys` without negation, `.all` is preferred because\n * `.all.keys` asserts exactly what's expected of the output, whereas\n * `.any.keys` creates uncertain expectations.\n *\n * // Recommended; asserts that target has all the given keys\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * // Not recommended; asserts that target has at least one of the given\n * // keys but may or may not have more of them\n * expect({a: 1, b: 2}).to.have.any.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` appear\n * earlier in the chain. However, it's often best to add `.all` anyway because\n * it improves readability.\n *\n * // Both assertions are identical\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended\n * expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended\n *\n * Add `.include` earlier in the chain to require that the target's keys be a\n * superset of the expected keys, rather than identical sets.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * However, if `.any` and `.include` are combined, only the `.any` takes\n * effect. The `.include` is ignored in this case.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.have.any.keys('a', 'b');\n * expect({a: 1}).to.include.any.keys('a', 'b');\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.have.key('b');\n *\n * The alias `.key` can be used interchangeably with `.keys`.\n *\n * @name keys\n * @alias key\n * @param {...String|Array|Object} keys\n * @namespace BDD\n * @api public\n */\n\n function assertKeys (keys) {\n var obj = flag(this, 'object')\n , objType = _.type(obj)\n , keysType = _.type(keys)\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , str\n , deepStr = ''\n , actual\n , ok = true\n , flagMsg = flag(this, 'message');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments';\n\n if (objType === 'Map' || objType === 'Set') {\n deepStr = isDeep ? 'deeply ' : '';\n actual = [];\n\n // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach.\n obj.forEach(function (val, key) { actual.push(key) });\n\n if (keysType !== 'Array') {\n keys = Array.prototype.slice.call(arguments);\n }\n } else {\n actual = _.getOwnEnumerableProperties(obj);\n\n switch (keysType) {\n case 'Array':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n break;\n case 'Object':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n keys = Object.keys(keys);\n break;\n default:\n keys = Array.prototype.slice.call(arguments);\n }\n\n // Only stringify non-Symbols because Symbols would become \"Symbol()\"\n keys = keys.map(function (val) {\n return typeof val === 'symbol' ? val : String(val);\n });\n }\n\n if (!keys.length) {\n throw new AssertionError(flagMsg + 'keys required', undefined, ssfi);\n }\n\n var len = keys.length\n , any = flag(this, 'any')\n , all = flag(this, 'all')\n , expected = keys\n , isEql = isDeep ? flag(this, 'eql') : (val1, val2) => val1 === val2;\n\n if (!any && !all) {\n all = true;\n }\n\n // Has any\n if (any) {\n ok = expected.some(function(expectedKey) {\n return actual.some(function(actualKey) {\n return isEql(expectedKey, actualKey);\n });\n });\n }\n\n // Has all\n if (all) {\n ok = expected.every(function(expectedKey) {\n return actual.some(function(actualKey) {\n return isEql(expectedKey, actualKey);\n });\n });\n\n if (!flag(this, 'contains')) {\n ok = ok && keys.length == actual.length;\n }\n }\n\n // Key string\n if (len > 1) {\n keys = keys.map(function(key) {\n return _.inspect(key);\n });\n var last = keys.pop();\n if (all) {\n str = keys.join(', ') + ', and ' + last;\n }\n if (any) {\n str = keys.join(', ') + ', or ' + last;\n }\n } else {\n str = _.inspect(keys[0]);\n }\n\n // Form\n str = (len > 1 ? 'keys ' : 'key ') + str;\n\n // Have / include\n str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n // Assertion\n this.assert(\n ok\n , 'expected #{this} to ' + deepStr + str\n , 'expected #{this} to not ' + deepStr + str\n , expected.slice(0).sort(_.compareByInspect)\n , actual.sort(_.compareByInspect)\n , true\n );\n }\n\n Assertion.addMethod('keys', assertKeys);\n Assertion.addMethod('key', assertKeys);\n\n /**\n * ### .throw([errorLike], [errMsgMatcher], [msg])\n *\n * When no arguments are provided, `.throw` invokes the target function and\n * asserts that an error is thrown.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw();\n *\n * When one argument is provided, and it's an error constructor, `.throw`\n * invokes the target function and asserts that an error is thrown that's an\n * instance of that error constructor.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError);\n *\n * When one argument is provided, and it's an error instance, `.throw` invokes\n * the target function and asserts that an error is thrown that's strictly\n * (`===`) equal to that error instance.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(err);\n *\n * When one argument is provided, and it's a string, `.throw` invokes the\n * target function and asserts that an error is thrown with a message that\n * contains that string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw('salmon');\n *\n * When one argument is provided, and it's a regular expression, `.throw`\n * invokes the target function and asserts that an error is thrown with a\n * message that matches that regular expression.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(/salmon/);\n *\n * When two arguments are provided, and the first is an error instance or\n * constructor, and the second is a string or regular expression, `.throw`\n * invokes the function and asserts that an error is thrown that fulfills both\n * conditions as described above.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError, 'salmon');\n * expect(badFn).to.throw(TypeError, /salmon/);\n * expect(badFn).to.throw(err, 'salmon');\n * expect(badFn).to.throw(err, /salmon/);\n *\n * Add `.not` earlier in the chain to negate `.throw`.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw();\n *\n * However, it's dangerous to negate `.throw` when providing any arguments.\n * The problem is that it creates uncertain expectations by asserting that the\n * target either doesn't throw an error, or that it throws an error but of a\n * different type than the given type, or that it throws an error of the given\n * type but with a message that doesn't include the given string. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to throw an error, it's often best to assert\n * exactly that.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw(); // Recommended\n * expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * When the target is expected to throw an error, it's often best to assert\n * that the error is of its expected type, and has a message that includes an\n * expected string, rather than asserting that it doesn't have one of many\n * unexpected types, and doesn't have a message that includes some string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError, 'salmon'); // Recommended\n * expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * `.throw` changes the target of any assertions that follow in the chain to\n * be the error object that's thrown.\n *\n * var err = new TypeError('Illegal salmon!');\n * err.code = 42;\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError).with.property('code', 42);\n *\n * `.throw` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`. When not providing two arguments, always use\n * the second form.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??');\n * expect(goodFn, 'nooo why fail??').to.throw();\n *\n * Due to limitations in ES5, `.throw` may not always work as expected when\n * using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing the built-in `Error` object and\n * then passing the subclassed constructor to `.throw`. See your transpiler's\n * docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * Beware of some common mistakes when using the `throw` assertion. One common\n * mistake is to accidentally invoke the function yourself instead of letting\n * the `throw` assertion invoke the function for you. For example, when\n * testing if a function named `fn` throws, provide `fn` instead of `fn()` as\n * the target for the assertion.\n *\n * expect(fn).to.throw(); // Good! Tests `fn` as desired\n * expect(fn()).to.throw(); // Bad! Tests result of `fn()`, not `fn`\n *\n * If you need to assert that your function `fn` throws when passed certain\n * arguments, then wrap a call to `fn` inside of another function.\n *\n * expect(function () { fn(42); }).to.throw(); // Function expression\n * expect(() => fn(42)).to.throw(); // ES6 arrow function\n *\n * Another common mistake is to provide an object method (or any stand-alone\n * function that relies on `this`) as the target of the assertion. Doing so is\n * problematic because the `this` context will be lost when the function is\n * invoked by `.throw`; there's no way for it to know what `this` is supposed\n * to be. There are two ways around this problem. One solution is to wrap the\n * method or function call inside of another function. Another solution is to\n * use `bind`.\n *\n * expect(function () { cat.meow(); }).to.throw(); // Function expression\n * expect(() => cat.meow()).to.throw(); // ES6 arrow function\n * expect(cat.meow.bind(cat)).to.throw(); // Bind\n *\n * Finally, it's worth mentioning that it's a best practice in JavaScript to\n * only throw `Error` and derivatives of `Error` such as `ReferenceError`,\n * `TypeError`, and user-defined objects that extend `Error`. No other type of\n * value will generate a stack trace when initialized. With that said, the\n * `throw` assertion does technically support any type of value being thrown,\n * not just `Error` and its derivatives.\n *\n * The aliases `.throws` and `.Throw` can be used interchangeably with\n * `.throw`.\n *\n * @name throw\n * @alias throws\n * @alias Throw\n * @param {Error|ErrorConstructor} errorLike\n * @param {String|RegExp} errMsgMatcher error message\n * @param {String} msg _optional_\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @returns error for chaining (null if no error)\n * @namespace BDD\n * @api public\n */\n\n function assertThrows (errorLike, errMsgMatcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate') || false;\n new Assertion(obj, flagMsg, ssfi, true).is.a('function');\n\n if (errorLike instanceof RegExp || typeof errorLike === 'string') {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var caughtErr;\n try {\n obj();\n } catch (err) {\n caughtErr = err;\n }\n\n // If we have the negate flag enabled and at least one valid argument it means we do expect an error\n // but we want it to match a given set of criteria\n var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined;\n\n // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible\n // See Issue #551 and PR #683@GitHub\n var everyArgIsDefined = Boolean(errorLike && errMsgMatcher);\n var errorLikeFail = false;\n var errMsgMatcherFail = false;\n\n // Checking if error was thrown\n if (everyArgIsUndefined || !everyArgIsUndefined && !negate) {\n // We need this to display results correctly according to their types\n var errorLikeString = 'an error';\n if (errorLike instanceof Error) {\n errorLikeString = '#{exp}';\n } else if (errorLike) {\n errorLikeString = _.checkError.getConstructorName(errorLike);\n }\n\n this.assert(\n caughtErr\n , 'expected #{this} to throw ' + errorLikeString\n , 'expected #{this} to not throw an error but #{act} was thrown'\n , errorLike && errorLike.toString()\n , (caughtErr instanceof Error ?\n caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr &&\n _.checkError.getConstructorName(caughtErr)))\n );\n }\n\n if (errorLike && caughtErr) {\n // We should compare instances only if `errorLike` is an instance of `Error`\n if (errorLike instanceof Error) {\n var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike);\n\n if (isCompatibleInstance === negate) {\n // These checks were created to ensure we won't fail too soon when we've got both args and a negate\n // See Issue #551 and PR #683@GitHub\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '')\n , errorLike.toString()\n , caughtErr.toString()\n );\n }\n }\n }\n\n var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike);\n if (isCompatibleConstructor === negate) {\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n }\n }\n\n if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) {\n // Here we check compatible messages\n var placeholder = 'including';\n if (errMsgMatcher instanceof RegExp) {\n placeholder = 'matching'\n }\n\n var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher);\n if (isCompatibleMessage === negate) {\n if (everyArgIsDefined && negate) {\n errMsgMatcherFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}'\n , 'expected #{this} to throw error not ' + placeholder + ' #{exp}'\n , errMsgMatcher\n , _.checkError.getMessage(caughtErr)\n );\n }\n }\n }\n\n // If both assertions failed and both should've matched we throw an error\n if (errorLikeFail && errMsgMatcherFail) {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n\n flag(this, 'object', caughtErr);\n };\n\n Assertion.addMethod('throw', assertThrows);\n Assertion.addMethod('throws', assertThrows);\n Assertion.addMethod('Throw', assertThrows);\n\n /**\n * ### .respondTo(method[, msg])\n *\n * When the target is a non-function object, `.respondTo` asserts that the\n * target has a method with the given name `method`. The method can be own or\n * inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.respondTo('meow');\n *\n * When the target is a function, `.respondTo` asserts that the target's\n * `prototype` property has a method with the given name `method`. Again, the\n * method can be own or inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(Cat).to.respondTo('meow');\n *\n * Add `.itself` earlier in the chain to force `.respondTo` to treat the\n * target as a non-function object, even if it's a function. Thus, it asserts\n * that the target has a method with the given name `method`, rather than\n * asserting that the target's `prototype` property has a method with the\n * given name `method`.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * When not adding `.itself`, it's important to check the target's type before\n * using `.respondTo`. See the `.a` doc for info on checking a target's type.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.be.an('object').that.respondsTo('meow');\n *\n * Add `.not` earlier in the chain to negate `.respondTo`.\n *\n * function Dog () {}\n * Dog.prototype.bark = function () {};\n *\n * expect(new Dog()).to.not.respondTo('meow');\n *\n * `.respondTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect({}).to.respondTo('meow', 'nooo why fail??');\n * expect({}, 'nooo why fail??').to.respondTo('meow');\n *\n * The alias `.respondsTo` can be used interchangeably with `.respondTo`.\n *\n * @name respondTo\n * @alias respondsTo\n * @param {String} method\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function respondTo (method, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , itself = flag(this, 'itself')\n , context = ('function' === typeof obj && !itself)\n ? obj.prototype[method]\n : obj[method];\n\n this.assert(\n 'function' === typeof context\n , 'expected #{this} to respond to ' + _.inspect(method)\n , 'expected #{this} to not respond to ' + _.inspect(method)\n );\n }\n\n Assertion.addMethod('respondTo', respondTo);\n Assertion.addMethod('respondsTo', respondTo);\n\n /**\n * ### .itself\n *\n * Forces all `.respondTo` assertions that follow in the chain to behave as if\n * the target is a non-function object, even if it's a function. Thus, it\n * causes `.respondTo` to assert that the target has a method with the given\n * name, rather than asserting that the target's `prototype` property has a\n * method with the given name.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * @name itself\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('itself', function () {\n flag(this, 'itself', true);\n });\n\n /**\n * ### .satisfy(matcher[, msg])\n *\n * Invokes the given `matcher` function with the target being passed as the\n * first argument, and asserts that the value returned is truthy.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 0;\n * });\n *\n * Add `.not` earlier in the chain to negate `.satisfy`.\n *\n * expect(1).to.not.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * `.satisfy` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 2;\n * }, 'nooo why fail??');\n *\n * expect(1, 'nooo why fail??').to.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * The alias `.satisfies` can be used interchangeably with `.satisfy`.\n *\n * @name satisfy\n * @alias satisfies\n * @param {Function} matcher\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function satisfy (matcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var result = matcher(obj);\n this.assert(\n result\n , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n , flag(this, 'negate') ? false : true\n , result\n );\n }\n\n Assertion.addMethod('satisfy', satisfy);\n Assertion.addMethod('satisfies', satisfy);\n\n /**\n * ### .closeTo(expected, delta[, msg])\n *\n * Asserts that the target is a number that's within a given +/- `delta` range\n * of the given number `expected`. However, it's often best to assert that the\n * target is equal to its expected value.\n *\n * // Recommended\n * expect(1.5).to.equal(1.5);\n *\n * // Not recommended\n * expect(1.5).to.be.closeTo(1, 0.5);\n * expect(1.5).to.be.closeTo(2, 0.5);\n * expect(1.5).to.be.closeTo(1, 1);\n *\n * Add `.not` earlier in the chain to negate `.closeTo`.\n *\n * expect(1.5).to.equal(1.5); // Recommended\n * expect(1.5).to.not.be.closeTo(3, 1); // Not recommended\n *\n * `.closeTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??');\n * expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1);\n *\n * The alias `.approximately` can be used interchangeably with `.closeTo`.\n *\n * @name closeTo\n * @alias approximately\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function closeTo(expected, delta, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).is.a('number');\n if (typeof expected !== 'number' || typeof delta !== 'number') {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var deltaMessage = delta === undefined ? \", and a delta is required\" : \"\";\n throw new AssertionError(\n flagMsg + 'the arguments to closeTo or approximately must be numbers' + deltaMessage,\n undefined,\n ssfi\n );\n }\n\n this.assert(\n Math.abs(obj - expected) <= delta\n , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n );\n }\n\n Assertion.addMethod('closeTo', closeTo);\n Assertion.addMethod('approximately', closeTo);\n\n // Note: Duplicates are ignored if testing for inclusion instead of sameness.\n function isSubsetOf(subset, superset, cmp, contains, ordered) {\n if (!contains) {\n if (subset.length !== superset.length) return false;\n superset = superset.slice();\n }\n\n return subset.every(function(elem, idx) {\n if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx];\n\n if (!cmp) {\n var matchIdx = superset.indexOf(elem);\n if (matchIdx === -1) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n }\n\n return superset.some(function(elem2, matchIdx) {\n if (!cmp(elem, elem2)) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n });\n });\n }\n\n /**\n * ### .members(set[, msg])\n *\n * Asserts that the target array has the same members as the given array\n * `set`.\n *\n * expect([1, 2, 3]).to.have.members([2, 1, 3]);\n * expect([1, 2, 2]).to.have.members([2, 1, 2]);\n *\n * By default, members are compared using strict (`===`) equality. Add `.deep`\n * earlier in the chain to use deep equality instead. See the `deep-eql`\n * project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * By default, order doesn't matter. Add `.ordered` earlier in the chain to\n * require that members appear in the same order.\n *\n * expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]);\n * expect([1, 2, 3]).to.have.members([2, 1, 3])\n * .but.not.ordered.members([2, 1, 3]);\n *\n * By default, both arrays must be the same size. Add `.include` earlier in\n * the chain to require that the target's members be a superset of the\n * expected members. Note that duplicates are ignored in the subset when\n * `.include` is added.\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * `.deep`, `.ordered`, and `.include` can all be combined. However, if\n * `.include` and `.ordered` are combined, the ordering begins at the start of\n * both arrays.\n *\n * expect([{a: 1}, {b: 2}, {c: 3}])\n * .to.include.deep.ordered.members([{a: 1}, {b: 2}])\n * .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]);\n *\n * Add `.not` earlier in the chain to negate `.members`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the target array doesn't have all of the same members as\n * the given array `set` but may or may not have some of them. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended\n * expect([1, 2]).to.not.have.members([3, 4]); // Not recommended\n *\n * `.members` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??');\n * expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]);\n *\n * @name members\n * @param {Array} set\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('members', function (subset, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).to.be.an('array');\n new Assertion(subset, flagMsg, ssfi, true).to.be.an('array');\n\n var contains = flag(this, 'contains');\n var ordered = flag(this, 'ordered');\n\n var subject, failMsg, failNegateMsg;\n\n if (contains) {\n subject = ordered ? 'an ordered superset' : 'a superset';\n failMsg = 'expected #{this} to be ' + subject + ' of #{exp}';\n failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}';\n } else {\n subject = ordered ? 'ordered members' : 'members';\n failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}';\n failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}';\n }\n\n var cmp = flag(this, 'deep') ? flag(this, 'eql') : undefined;\n\n this.assert(\n isSubsetOf(subset, obj, cmp, contains, ordered)\n , failMsg\n , failNegateMsg\n , subset\n , obj\n , true\n );\n });\n\n /**\n * ### .oneOf(list[, msg])\n *\n * Asserts that the target is a member of the given array `list`. However,\n * it's often best to assert that the target is equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.oneOf([1, 2, 3]); // Not recommended\n *\n * Comparisons are performed using strict (`===`) equality.\n *\n * Add `.not` earlier in the chain to negate `.oneOf`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended\n *\n * It can also be chained with `.contain` or `.include`, which will work with\n * both arrays and strings:\n *\n * expect('Today is sunny').to.contain.oneOf(['sunny', 'cloudy'])\n * expect('Today is rainy').to.not.contain.oneOf(['sunny', 'cloudy'])\n * expect([1,2,3]).to.contain.oneOf([3,4,5])\n * expect([1,2,3]).to.not.contain.oneOf([4,5,6])\n *\n * `.oneOf` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]);\n *\n * @name oneOf\n * @param {Array<*>} list\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function oneOf (list, msg) {\n if (msg) flag(this, 'message', msg);\n var expected = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , contains = flag(this, 'contains')\n , isDeep = flag(this, 'deep')\n , eql = flag(this, 'eql');\n new Assertion(list, flagMsg, ssfi, true).to.be.an('array');\n\n if (contains) {\n this.assert(\n list.some(function(possibility) { return expected.indexOf(possibility) > -1 })\n , 'expected #{this} to contain one of #{exp}'\n , 'expected #{this} to not contain one of #{exp}'\n , list\n , expected\n );\n } else {\n if (isDeep) {\n this.assert(\n list.some(function(possibility) { return eql(expected, possibility) })\n , 'expected #{this} to deeply equal one of #{exp}'\n , 'expected #{this} to deeply equal one of #{exp}'\n , list\n , expected\n );\n } else {\n this.assert(\n list.indexOf(expected) > -1\n , 'expected #{this} to be one of #{exp}'\n , 'expected #{this} to not be one of #{exp}'\n , list\n , expected\n );\n }\n }\n }\n\n Assertion.addMethod('oneOf', oneOf);\n\n /**\n * ### .change(subject[, prop[, msg]])\n *\n * When one argument is provided, `.change` asserts that the given function\n * `subject` returns a different value when it's invoked before the target\n * function compared to when it's invoked afterward. However, it's often best\n * to assert that `subject` is equal to its expected value.\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * // Recommended\n * expect(getDots()).to.equal('');\n * addDot();\n * expect(getDots()).to.equal('.');\n *\n * // Not recommended\n * expect(addDot).to.change(getDots);\n *\n * When two arguments are provided, `.change` asserts that the value of the\n * given object `subject`'s `prop` property is different before invoking the\n * target function compared to afterward.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * // Recommended\n * expect(myObj).to.have.property('dots', '');\n * addDot();\n * expect(myObj).to.have.property('dots', '.');\n *\n * // Not recommended\n * expect(addDot).to.change(myObj, 'dots');\n *\n * Strict (`===`) equality is used to compare before and after values.\n *\n * Add `.not` earlier in the chain to negate `.change`.\n *\n * var dots = ''\n * , noop = function () {}\n * , getDots = function () { return dots; };\n *\n * expect(noop).to.not.change(getDots);\n *\n * var myObj = {dots: ''}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'dots');\n *\n * `.change` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??');\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * expect(addDot, 'nooo why fail??').to.not.change(getDots);\n *\n * `.change` also causes all `.by` assertions that follow in the chain to\n * assert how much a numeric subject was increased or decreased by. However,\n * it's dangerous to use `.change.by`. The problem is that it creates\n * uncertain expectations by asserting that the subject either increases by\n * the given delta, or that it decreases by the given delta. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * The alias `.changes` can be used interchangeably with `.change`.\n *\n * @name change\n * @alias changes\n * @param {String} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertChanges (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n // This gets flagged because of the .by(delta) assertion\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'change');\n flag(this, 'realDelta', final !== initial);\n\n this.assert(\n initial !== final\n , 'expected ' + msgObj + ' to change'\n , 'expected ' + msgObj + ' to not change'\n );\n }\n\n Assertion.addMethod('change', assertChanges);\n Assertion.addMethod('changes', assertChanges);\n\n /**\n * ### .increase(subject[, prop[, msg]])\n *\n * When one argument is provided, `.increase` asserts that the given function\n * `subject` returns a greater number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.increase` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * greater of a number is returned. It's often best to assert that the return\n * value increased by the expected amount, rather than asserting it increased\n * by any amount.\n *\n * var val = 1\n * , addTwo = function () { val += 2; }\n * , getVal = function () { return val; };\n *\n * expect(addTwo).to.increase(getVal).by(2); // Recommended\n * expect(addTwo).to.increase(getVal); // Not recommended\n *\n * When two arguments are provided, `.increase` asserts that the value of the\n * given object `subject`'s `prop` property is greater after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.increase(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.increase`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either decreases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to decrease, it's often best to assert that it\n * decreased by the expected amount.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.increase(myObj, 'val'); // Not recommended\n *\n * `.increase` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.increase(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.increase(getVal);\n *\n * The alias `.increases` can be used interchangeably with `.increase`.\n *\n * @name increase\n * @alias increases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertIncreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'increase');\n flag(this, 'realDelta', final - initial);\n\n this.assert(\n final - initial > 0\n , 'expected ' + msgObj + ' to increase'\n , 'expected ' + msgObj + ' to not increase'\n );\n }\n\n Assertion.addMethod('increase', assertIncreases);\n Assertion.addMethod('increases', assertIncreases);\n\n /**\n * ### .decrease(subject[, prop[, msg]])\n *\n * When one argument is provided, `.decrease` asserts that the given function\n * `subject` returns a lesser number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.decrease` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * lesser of a number is returned. It's often best to assert that the return\n * value decreased by the expected amount, rather than asserting it decreased\n * by any amount.\n *\n * var val = 1\n * , subtractTwo = function () { val -= 2; }\n * , getVal = function () { return val; };\n *\n * expect(subtractTwo).to.decrease(getVal).by(2); // Recommended\n * expect(subtractTwo).to.decrease(getVal); // Not recommended\n *\n * When two arguments are provided, `.decrease` asserts that the value of the\n * given object `subject`'s `prop` property is lesser after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.decrease`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either increases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to increase, it's often best to assert that it\n * increased by the expected amount.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * `.decrease` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.decrease(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.decrease(getVal);\n *\n * The alias `.decreases` can be used interchangeably with `.decrease`.\n *\n * @name decrease\n * @alias decreases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDecreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'decrease');\n flag(this, 'realDelta', initial - final);\n\n this.assert(\n final - initial < 0\n , 'expected ' + msgObj + ' to decrease'\n , 'expected ' + msgObj + ' to not decrease'\n );\n }\n\n Assertion.addMethod('decrease', assertDecreases);\n Assertion.addMethod('decreases', assertDecreases);\n\n /**\n * ### .by(delta[, msg])\n *\n * When following an `.increase` assertion in the chain, `.by` asserts that\n * the subject of the `.increase` assertion increased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * When following a `.decrease` assertion in the chain, `.by` asserts that the\n * subject of the `.decrease` assertion decreased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2);\n *\n * When following a `.change` assertion in the chain, `.by` asserts that the\n * subject of the `.change` assertion either increased or decreased by the\n * given `delta`. However, it's dangerous to use `.change.by`. The problem is\n * that it creates uncertain expectations. It's often best to identify the\n * exact output that's expected, and then write an assertion that only accepts\n * that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.by`. However, it's often best\n * to assert that the subject changed by its expected delta, rather than\n * asserting that it didn't change by one of countless unexpected deltas.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * // Recommended\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * // Not recommended\n * expect(addTwo).to.increase(myObj, 'val').but.not.by(3);\n *\n * `.by` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??');\n * expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3);\n *\n * @name by\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDelta(delta, msg) {\n if (msg) flag(this, 'message', msg);\n\n var msgObj = flag(this, 'deltaMsgObj');\n var initial = flag(this, 'initialDeltaValue');\n var final = flag(this, 'finalDeltaValue');\n var behavior = flag(this, 'deltaBehavior');\n var realDelta = flag(this, 'realDelta');\n\n var expression;\n if (behavior === 'change') {\n expression = Math.abs(final - initial) === Math.abs(delta);\n } else {\n expression = realDelta === Math.abs(delta);\n }\n\n this.assert(\n expression\n , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta\n , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta\n );\n }\n\n Assertion.addMethod('by', assertDelta);\n\n /**\n * ### .extensible\n *\n * Asserts that the target is extensible, which means that new properties can\n * be added to it. Primitives are never extensible.\n *\n * expect({a: 1}).to.be.extensible;\n *\n * Add `.not` earlier in the chain to negate `.extensible`.\n *\n * var nonExtensibleObject = Object.preventExtensions({})\n * , sealedObject = Object.seal({})\n * , frozenObject = Object.freeze({});\n *\n * expect(nonExtensibleObject).to.not.be.extensible;\n * expect(sealedObject).to.not.be.extensible;\n * expect(frozenObject).to.not.be.extensible;\n * expect(1).to.not.be.extensible;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(1, 'nooo why fail??').to.be.extensible;\n *\n * @name extensible\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('extensible', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n // The following provides ES6 behavior for ES5 environments.\n\n var isExtensible = obj === Object(obj) && Object.isExtensible(obj);\n\n this.assert(\n isExtensible\n , 'expected #{this} to be extensible'\n , 'expected #{this} to not be extensible'\n );\n });\n\n /**\n * ### .sealed\n *\n * Asserts that the target is sealed, which means that new properties can't be\n * added to it, and its existing properties can't be reconfigured or deleted.\n * However, it's possible that its existing properties can still be reassigned\n * to different values. Primitives are always sealed.\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect(sealedObject).to.be.sealed;\n * expect(frozenObject).to.be.sealed;\n * expect(1).to.be.sealed;\n *\n * Add `.not` earlier in the chain to negate `.sealed`.\n *\n * expect({a: 1}).to.not.be.sealed;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.sealed;\n *\n * @name sealed\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('sealed', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n // The following provides ES6 behavior for ES5 environments.\n\n var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true;\n\n this.assert(\n isSealed\n , 'expected #{this} to be sealed'\n , 'expected #{this} to not be sealed'\n );\n });\n\n /**\n * ### .frozen\n *\n * Asserts that the target is frozen, which means that new properties can't be\n * added to it, and its existing properties can't be reassigned to different\n * values, reconfigured, or deleted. Primitives are always frozen.\n *\n * var frozenObject = Object.freeze({});\n *\n * expect(frozenObject).to.be.frozen;\n * expect(1).to.be.frozen;\n *\n * Add `.not` earlier in the chain to negate `.frozen`.\n *\n * expect({a: 1}).to.not.be.frozen;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.frozen;\n *\n * @name frozen\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('frozen', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n // The following provides ES6 behavior for ES5 environments.\n\n var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true;\n\n this.assert(\n isFrozen\n , 'expected #{this} to be frozen'\n , 'expected #{this} to not be frozen'\n );\n });\n\n /**\n * ### .finite\n *\n * Asserts that the target is a number, and isn't `NaN` or positive/negative\n * `Infinity`.\n *\n * expect(1).to.be.finite;\n *\n * Add `.not` earlier in the chain to negate `.finite`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either isn't a number, or that it's `NaN`, or\n * that it's positive `Infinity`, or that it's negative `Infinity`. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to be a number, it's often best to assert\n * that it's the expected type, rather than asserting that it isn't one of\n * many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.finite; // Not recommended\n *\n * When the target is expected to be `NaN`, it's often best to assert exactly\n * that.\n *\n * expect(NaN).to.be.NaN; // Recommended\n * expect(NaN).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be positive infinity, it's often best to\n * assert exactly that.\n *\n * expect(Infinity).to.equal(Infinity); // Recommended\n * expect(Infinity).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be negative infinity, it's often best to\n * assert exactly that.\n *\n * expect(-Infinity).to.equal(-Infinity); // Recommended\n * expect(-Infinity).to.not.be.finite; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect('foo', 'nooo why fail??').to.be.finite;\n *\n * @name finite\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('finite', function(msg) {\n var obj = flag(this, 'object');\n\n this.assert(\n typeof obj === 'number' && isFinite(obj)\n , 'expected #{this} to be a finite number'\n , 'expected #{this} to not be a finite number'\n );\n });\n};\n", "/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n chai.expect = function (val, message) {\n return new chai.Assertion(val, message);\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * expect.fail();\n * expect.fail(\"custom error message\");\n * expect.fail(1, 2);\n * expect.fail(1, 2, \"custom error message\");\n * expect.fail(1, 2, \"custom error message\", \">\");\n * expect.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n chai.expect.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'expect.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, chai.expect.fail);\n };\n};\n", "/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n var Assertion = chai.Assertion;\n\n function loadShould () {\n // explicitly define this method as function as to have it's name to include as `ssfi`\n function shouldGetter() {\n if (this instanceof String\n || this instanceof Number\n || this instanceof Boolean\n || typeof Symbol === 'function' && this instanceof Symbol\n || typeof BigInt === 'function' && this instanceof BigInt) {\n return new Assertion(this.valueOf(), null, shouldGetter);\n }\n return new Assertion(this, null, shouldGetter);\n }\n function shouldSetter(value) {\n // See https://github.com/chaijs/chai/issues/86: this makes\n // `whatever.should = someValue` actually set `someValue`, which is\n // especially useful for `global.should = require('chai').should()`.\n //\n // Note that we have to use [[DefineProperty]] instead of [[Put]]\n // since otherwise we would trigger this very setter!\n Object.defineProperty(this, 'should', {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n // modify Object.prototype to have `should`\n Object.defineProperty(Object.prototype, 'should', {\n set: shouldSetter\n , get: shouldGetter\n , configurable: true\n });\n\n var should = {};\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * should.fail();\n * should.fail(\"custom error message\");\n * should.fail(1, 2);\n * should.fail(1, 2, \"custom error message\");\n * should.fail(1, 2, \"custom error message\", \">\");\n * should.fail(1, 2, undefined, \">\");\n *\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n should.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'should.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, should.fail);\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * should.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * should.throw(fn, 'function throws a reference error');\n * should.throw(fn, /function throws a reference error/);\n * should.throw(fn, ReferenceError);\n * should.throw(fn, ReferenceError, 'function throws a reference error');\n * should.throw(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.Throw(errt, errs);\n };\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * should.exist(foo, 'foo exists');\n *\n * @name exist\n * @namespace Should\n * @api public\n */\n\n should.exist = function (val, msg) {\n new Assertion(val, msg).to.exist;\n }\n\n // negation\n should.not = {}\n\n /**\n * ### .not.equal(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * should.not.equal(3, 4, 'these numbers are not equal');\n *\n * @name not.equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.not.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.not.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * should.not.throw(fn, Error, 'function does not throw');\n *\n * @name not.throw\n * @alias not.Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.not.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.not.Throw(errt, errs);\n };\n\n /**\n * ### .not.exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var bar = null;\n *\n * should.not.exist(bar, 'bar does not exist');\n *\n * @name not.exist\n * @namespace Should\n * @api public\n */\n\n should.not.exist = function (val, msg) {\n new Assertion(val, msg).to.not.exist;\n }\n\n should['throw'] = should['Throw'];\n should.not['throw'] = should.not['Throw'];\n\n return should;\n };\n\n chai.should = loadShould;\n chai.Should = loadShould;\n};\n", "/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n /*!\n * Chai dependencies.\n */\n\n var Assertion = chai.Assertion\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n /**\n * ### assert(expression, message)\n *\n * Write your own test expressions.\n *\n * assert('foo' !== 'bar', 'foo is not bar');\n * assert(Array.isArray([]), 'empty arrays are arrays');\n *\n * @param {Mixed} expression to test for truthiness\n * @param {String} message to display on error\n * @name assert\n * @namespace Assert\n * @api public\n */\n\n var assert = chai.assert = function (express, errmsg) {\n var test = new Assertion(null, null, chai.assert, true);\n test.assert(\n express\n , errmsg\n , '[ negation message unavailable ]'\n );\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure. Node.js `assert` module-compatible.\n *\n * assert.fail();\n * assert.fail(\"custom error message\");\n * assert.fail(1, 2);\n * assert.fail(1, 2, \"custom error message\");\n * assert.fail(1, 2, \"custom error message\", \">\");\n * assert.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Assert\n * @api public\n */\n\n assert.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n // Comply with Node's fail([message]) interface\n\n message = actual;\n actual = undefined;\n }\n\n message = message || 'assert.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, assert.fail);\n };\n\n /**\n * ### .isOk(object, [message])\n *\n * Asserts that `object` is truthy.\n *\n * assert.isOk('everything', 'everything is ok');\n * assert.isOk(false, 'this will fail');\n *\n * @name isOk\n * @alias ok\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isOk = function (val, msg) {\n new Assertion(val, msg, assert.isOk, true).is.ok;\n };\n\n /**\n * ### .isNotOk(object, [message])\n *\n * Asserts that `object` is falsy.\n *\n * assert.isNotOk('everything', 'this will fail');\n * assert.isNotOk(false, 'this will pass');\n *\n * @name isNotOk\n * @alias notOk\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotOk = function (val, msg) {\n new Assertion(val, msg, assert.isNotOk, true).is.not.ok;\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * assert.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.equal = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.equal, true);\n\n test.assert(\n exp == flag(test, 'object')\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .notEqual(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * assert.notEqual(3, 4, 'these numbers are not equal');\n *\n * @name notEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notEqual = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.notEqual, true);\n\n test.assert(\n exp != flag(test, 'object')\n , 'expected #{this} to not equal #{exp}'\n , 'expected #{this} to equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .strictEqual(actual, expected, [message])\n *\n * Asserts strict equality (`===`) of `actual` and `expected`.\n *\n * assert.strictEqual(true, true, 'these booleans are strictly equal');\n *\n * @name strictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.strictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.strictEqual, true).to.equal(exp);\n };\n\n /**\n * ### .notStrictEqual(actual, expected, [message])\n *\n * Asserts strict inequality (`!==`) of `actual` and `expected`.\n *\n * assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n *\n * @name notStrictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notStrictEqual, true).to.not.equal(exp);\n };\n\n /**\n * ### .deepEqual(actual, expected, [message])\n *\n * Asserts that `actual` is deeply equal to `expected`.\n *\n * assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n *\n * @name deepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @alias deepStrictEqual\n * @namespace Assert\n * @api public\n */\n\n assert.deepEqual = assert.deepStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.deepEqual, true).to.eql(exp);\n };\n\n /**\n * ### .notDeepEqual(actual, expected, [message])\n *\n * Assert that `actual` is not deeply equal to `expected`.\n *\n * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n *\n * @name notDeepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notDeepEqual, true).to.not.eql(exp);\n };\n\n /**\n * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n *\n * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`.\n *\n * assert.isAbove(5, 2, '5 is strictly greater than 2');\n *\n * @name isAbove\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAbove\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAbove = function (val, abv, msg) {\n new Assertion(val, msg, assert.isAbove, true).to.be.above(abv);\n };\n\n /**\n * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n *\n * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`.\n *\n * assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n * assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n *\n * @name isAtLeast\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtLeast\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtLeast = function (val, atlst, msg) {\n new Assertion(val, msg, assert.isAtLeast, true).to.be.least(atlst);\n };\n\n /**\n * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n *\n * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`.\n *\n * assert.isBelow(3, 6, '3 is strictly less than 6');\n *\n * @name isBelow\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeBelow\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBelow = function (val, blw, msg) {\n new Assertion(val, msg, assert.isBelow, true).to.be.below(blw);\n };\n\n /**\n * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n *\n * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`.\n *\n * assert.isAtMost(3, 6, '3 is less than or equal to 6');\n * assert.isAtMost(4, 4, '4 is less than or equal to 4');\n *\n * @name isAtMost\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtMost\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtMost = function (val, atmst, msg) {\n new Assertion(val, msg, assert.isAtMost, true).to.be.most(atmst);\n };\n\n /**\n * ### .isTrue(value, [message])\n *\n * Asserts that `value` is true.\n *\n * var teaServed = true;\n * assert.isTrue(teaServed, 'the tea has been served');\n *\n * @name isTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isTrue = function (val, msg) {\n new Assertion(val, msg, assert.isTrue, true).is['true'];\n };\n\n /**\n * ### .isNotTrue(value, [message])\n *\n * Asserts that `value` is not true.\n *\n * var tea = 'tasty chai';\n * assert.isNotTrue(tea, 'great, time for tea!');\n *\n * @name isNotTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotTrue = function (val, msg) {\n new Assertion(val, msg, assert.isNotTrue, true).to.not.equal(true);\n };\n\n /**\n * ### .isFalse(value, [message])\n *\n * Asserts that `value` is false.\n *\n * var teaServed = false;\n * assert.isFalse(teaServed, 'no tea yet? hmm...');\n *\n * @name isFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFalse = function (val, msg) {\n new Assertion(val, msg, assert.isFalse, true).is['false'];\n };\n\n /**\n * ### .isNotFalse(value, [message])\n *\n * Asserts that `value` is not false.\n *\n * var tea = 'tasty chai';\n * assert.isNotFalse(tea, 'great, time for tea!');\n *\n * @name isNotFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFalse = function (val, msg) {\n new Assertion(val, msg, assert.isNotFalse, true).to.not.equal(false);\n };\n\n /**\n * ### .isNull(value, [message])\n *\n * Asserts that `value` is null.\n *\n * assert.isNull(err, 'there was no error');\n *\n * @name isNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNull = function (val, msg) {\n new Assertion(val, msg, assert.isNull, true).to.equal(null);\n };\n\n /**\n * ### .isNotNull(value, [message])\n *\n * Asserts that `value` is not null.\n *\n * var tea = 'tasty chai';\n * assert.isNotNull(tea, 'great, time for tea!');\n *\n * @name isNotNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNull = function (val, msg) {\n new Assertion(val, msg, assert.isNotNull, true).to.not.equal(null);\n };\n\n /**\n * ### .isNaN\n *\n * Asserts that value is NaN.\n *\n * assert.isNaN(NaN, 'NaN is NaN');\n *\n * @name isNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNaN, true).to.be.NaN;\n };\n\n /**\n * ### .isNotNaN\n *\n * Asserts that value is not NaN.\n *\n * assert.isNotNaN(4, '4 is not NaN');\n *\n * @name isNotNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n assert.isNotNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNotNaN, true).not.to.be.NaN;\n };\n\n /**\n * ### .exists\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * assert.exists(foo, 'foo is neither `null` nor `undefined`');\n *\n * @name exists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.exists = function (val, msg) {\n new Assertion(val, msg, assert.exists, true).to.exist;\n };\n\n /**\n * ### .notExists\n *\n * Asserts that the target is either `null` or `undefined`.\n *\n * var bar = null\n * , baz;\n *\n * assert.notExists(bar);\n * assert.notExists(baz, 'baz is either null or undefined');\n *\n * @name notExists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notExists = function (val, msg) {\n new Assertion(val, msg, assert.notExists, true).to.not.exist;\n };\n\n /**\n * ### .isUndefined(value, [message])\n *\n * Asserts that `value` is `undefined`.\n *\n * var tea;\n * assert.isUndefined(tea, 'no tea defined');\n *\n * @name isUndefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isUndefined = function (val, msg) {\n new Assertion(val, msg, assert.isUndefined, true).to.equal(undefined);\n };\n\n /**\n * ### .isDefined(value, [message])\n *\n * Asserts that `value` is not `undefined`.\n *\n * var tea = 'cup of chai';\n * assert.isDefined(tea, 'tea has been defined');\n *\n * @name isDefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isDefined = function (val, msg) {\n new Assertion(val, msg, assert.isDefined, true).to.not.equal(undefined);\n };\n\n /**\n * ### .isFunction(value, [message])\n *\n * Asserts that `value` is a function.\n *\n * function serveTea() { return 'cup of tea'; };\n * assert.isFunction(serveTea, 'great, we can have tea now');\n *\n * @name isFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFunction = function (val, msg) {\n new Assertion(val, msg, assert.isFunction, true).to.be.a('function');\n };\n\n /**\n * ### .isNotFunction(value, [message])\n *\n * Asserts that `value` is _not_ a function.\n *\n * var serveTea = [ 'heat', 'pour', 'sip' ];\n * assert.isNotFunction(serveTea, 'great, we have listed the steps');\n *\n * @name isNotFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFunction = function (val, msg) {\n new Assertion(val, msg, assert.isNotFunction, true).to.not.be.a('function');\n };\n\n /**\n * ### .isObject(value, [message])\n *\n * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n * _The assertion does not match subclassed objects._\n *\n * var selection = { name: 'Chai', serve: 'with spices' };\n * assert.isObject(selection, 'tea selection is an object');\n *\n * @name isObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isObject = function (val, msg) {\n new Assertion(val, msg, assert.isObject, true).to.be.a('object');\n };\n\n /**\n * ### .isNotObject(value, [message])\n *\n * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n *\n * var selection = 'chai'\n * assert.isNotObject(selection, 'tea selection is not an object');\n * assert.isNotObject(null, 'null is not an object');\n *\n * @name isNotObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotObject = function (val, msg) {\n new Assertion(val, msg, assert.isNotObject, true).to.not.be.a('object');\n };\n\n /**\n * ### .isArray(value, [message])\n *\n * Asserts that `value` is an array.\n *\n * var menu = [ 'green', 'chai', 'oolong' ];\n * assert.isArray(menu, 'what kind of tea do we want?');\n *\n * @name isArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isArray = function (val, msg) {\n new Assertion(val, msg, assert.isArray, true).to.be.an('array');\n };\n\n /**\n * ### .isNotArray(value, [message])\n *\n * Asserts that `value` is _not_ an array.\n *\n * var menu = 'green|chai|oolong';\n * assert.isNotArray(menu, 'what kind of tea do we want?');\n *\n * @name isNotArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotArray = function (val, msg) {\n new Assertion(val, msg, assert.isNotArray, true).to.not.be.an('array');\n };\n\n /**\n * ### .isString(value, [message])\n *\n * Asserts that `value` is a string.\n *\n * var teaOrder = 'chai';\n * assert.isString(teaOrder, 'order placed');\n *\n * @name isString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isString = function (val, msg) {\n new Assertion(val, msg, assert.isString, true).to.be.a('string');\n };\n\n /**\n * ### .isNotString(value, [message])\n *\n * Asserts that `value` is _not_ a string.\n *\n * var teaOrder = 4;\n * assert.isNotString(teaOrder, 'order placed');\n *\n * @name isNotString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotString = function (val, msg) {\n new Assertion(val, msg, assert.isNotString, true).to.not.be.a('string');\n };\n\n /**\n * ### .isNumber(value, [message])\n *\n * Asserts that `value` is a number.\n *\n * var cups = 2;\n * assert.isNumber(cups, 'how many cups');\n *\n * @name isNumber\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNumber, true).to.be.a('number');\n };\n\n /**\n * ### .isNotNumber(value, [message])\n *\n * Asserts that `value` is _not_ a number.\n *\n * var cups = '2 cups please';\n * assert.isNotNumber(cups, 'how many cups');\n *\n * @name isNotNumber\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNotNumber, true).to.not.be.a('number');\n };\n\n /**\n * ### .isFinite(value, [message])\n *\n * Asserts that `value` is a finite number. Unlike `.isNumber`, this will fail for `NaN` and `Infinity`.\n *\n * var cups = 2;\n * assert.isFinite(cups, 'how many cups');\n *\n * assert.isFinite(NaN); // throws\n *\n * @name isFinite\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFinite = function (val, msg) {\n new Assertion(val, msg, assert.isFinite, true).to.be.finite;\n };\n\n /**\n * ### .isBoolean(value, [message])\n *\n * Asserts that `value` is a boolean.\n *\n * var teaReady = true\n * , teaServed = false;\n *\n * assert.isBoolean(teaReady, 'is the tea ready');\n * assert.isBoolean(teaServed, 'has tea been served');\n *\n * @name isBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isBoolean, true).to.be.a('boolean');\n };\n\n /**\n * ### .isNotBoolean(value, [message])\n *\n * Asserts that `value` is _not_ a boolean.\n *\n * var teaReady = 'yep'\n * , teaServed = 'nope';\n *\n * assert.isNotBoolean(teaReady, 'is the tea ready');\n * assert.isNotBoolean(teaServed, 'has tea been served');\n *\n * @name isNotBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isNotBoolean, true).to.not.be.a('boolean');\n };\n\n /**\n * ### .typeOf(value, name, [message])\n *\n * Asserts that `value`'s type is `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n * assert.typeOf('tea', 'string', 'we have a string');\n * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n * assert.typeOf(null, 'null', 'we have a null');\n * assert.typeOf(undefined, 'undefined', 'we have an undefined');\n *\n * @name typeOf\n * @param {Mixed} value\n * @param {String} name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.typeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.typeOf, true).to.be.a(type);\n };\n\n /**\n * ### .notTypeOf(value, name, [message])\n *\n * Asserts that `value`'s type is _not_ `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.notTypeOf('tea', 'number', 'strings are not numbers');\n *\n * @name notTypeOf\n * @param {Mixed} value\n * @param {String} typeof name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notTypeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notTypeOf, true).to.not.be.a(type);\n };\n\n /**\n * ### .instanceOf(object, constructor, [message])\n *\n * Asserts that `value` is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new Tea('chai');\n *\n * assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n *\n * @name instanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.instanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.instanceOf, true).to.be.instanceOf(type);\n };\n\n /**\n * ### .notInstanceOf(object, constructor, [message])\n *\n * Asserts `value` is not an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new String('chai');\n *\n * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n *\n * @name notInstanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInstanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notInstanceOf, true)\n .to.not.be.instanceOf(type);\n };\n\n /**\n * ### .include(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.include([1,2,3], 2, 'array contains value');\n * assert.include('foobar', 'foo', 'string contains substring');\n * assert.include({ foo: 'bar', hello: 'universe' }, { foo: 'bar' }, 'object contains property');\n *\n * Strict equality (===) is used. When asserting the inclusion of a value in\n * an array, the array is searched for an element that's strictly equal to the\n * given value. When asserting a subset of properties in an object, the object\n * is searched for the given property keys, checking that each one is present\n * and strictly equal to the given property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.include([obj1, obj2], obj1);\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1});\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1, bar: obj2});\n *\n * @name include\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.include = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.include, true).include(inc);\n };\n\n /**\n * ### .notInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.notInclude([1,2,3], 4, \"array doesn't contain value\");\n * assert.notInclude('foobar', 'baz', \"string doesn't contain substring\");\n * assert.notInclude({ foo: 'bar', hello: 'universe' }, { foo: 'baz' }, 'object doesn't contain property');\n *\n * Strict equality (===) is used. When asserting the absence of a value in an\n * array, the array is searched to confirm the absence of an element that's\n * strictly equal to the given value. When asserting a subset of properties in\n * an object, the object is searched to confirm that at least one of the given\n * property keys is either not present or not strictly equal to the given\n * property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notInclude([obj1, obj2], {a: 1});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: obj1, bar: {b: 2}});\n *\n * @name notInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notInclude, true).not.include(inc);\n };\n\n /**\n * ### .deepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.deepInclude([obj1, obj2], {a: 1});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 2}});\n *\n * @name deepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.deepInclude, true).deep.include(inc);\n };\n\n /**\n * ### .notDeepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notDeepInclude([obj1, obj2], {a: 9});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 9}});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 9}});\n *\n * @name notDeepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepInclude, true).not.deep.include(inc);\n };\n\n /**\n * ### .nestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.nestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.[b]': 'x'});\n * assert.nestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'x'});\n *\n * @name nestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.nestedInclude, true).nested.include(inc);\n };\n\n /**\n * ### .notNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.b': 'y'});\n * assert.notNestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'y'});\n *\n * @name notNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notNestedInclude, true)\n .not.nested.include(inc);\n };\n\n /**\n * ### .deepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}});\n * assert.deepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {x: 1}});\n *\n * @name deepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepNestedInclude, true)\n .deep.nested.include(inc);\n };\n\n /**\n * ### .notDeepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}})\n * assert.notDeepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {y: 2}});\n *\n * @name notDeepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepNestedInclude, true)\n .not.deep.nested.include(inc);\n };\n\n /**\n * ### .ownInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * assert.ownInclude({ a: 1 }, { a: 1 });\n *\n * @name ownInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.ownInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.ownInclude, true).own.include(inc);\n };\n\n /**\n * ### .notOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * assert.notOwnInclude({ a: 1 }, { b: 2 });\n *\n * @name notOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notOwnInclude, true).not.own.include(inc);\n };\n\n /**\n * ### .deepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}});\n *\n * @name deepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepOwnInclude, true)\n .deep.own.include(inc);\n };\n\n /**\n * ### .notDeepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}});\n *\n * @name notDeepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepOwnInclude, true)\n .not.deep.own.include(inc);\n };\n\n /**\n * ### .match(value, regexp, [message])\n *\n * Asserts that `value` matches the regular expression `regexp`.\n *\n * assert.match('foobar', /^foo/, 'regexp matches');\n *\n * @name match\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.match = function (exp, re, msg) {\n new Assertion(exp, msg, assert.match, true).to.match(re);\n };\n\n /**\n * ### .notMatch(value, regexp, [message])\n *\n * Asserts that `value` does not match the regular expression `regexp`.\n *\n * assert.notMatch('foobar', /^foo/, 'regexp does not match');\n *\n * @name notMatch\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notMatch = function (exp, re, msg) {\n new Assertion(exp, msg, assert.notMatch, true).to.not.match(re);\n };\n\n /**\n * ### .property(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`.\n *\n * assert.property({ tea: { green: 'matcha' }}, 'tea');\n * assert.property({ tea: { green: 'matcha' }}, 'toString');\n *\n * @name property\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.property = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.property, true).to.have.property(prop);\n };\n\n /**\n * ### .notProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property`.\n *\n * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n *\n * @name notProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notProperty, true)\n .to.not.have.property(prop);\n };\n\n /**\n * ### .propertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n *\n * @name propertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.propertyVal, true)\n .to.have.property(prop, val);\n };\n\n /**\n * ### .notPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.notPropertyVal({ tea: 'is good' }, 'tea', 'is bad');\n * assert.notPropertyVal({ tea: 'is good' }, 'coffee', 'is good');\n *\n * @name notPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notPropertyVal, true)\n .to.not.have.property(prop, val);\n };\n\n /**\n * ### .deepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a deep equality check.\n *\n * assert.deepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepPropertyVal, true)\n .to.have.deep.property(prop, val);\n };\n\n /**\n * ### .notDeepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a deep equality check.\n *\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n *\n * @name notDeepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepPropertyVal, true)\n .to.not.have.deep.property(prop, val);\n };\n\n /**\n * ### .ownProperty(object, property, [message])\n *\n * Asserts that `object` has a direct property named by `property`. Inherited\n * properties aren't checked.\n *\n * assert.ownProperty({ tea: { green: 'matcha' }}, 'tea');\n *\n * @name ownProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.ownProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.ownProperty, true)\n .to.have.own.property(prop);\n };\n\n /**\n * ### .notOwnProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by\n * `property`. Inherited properties aren't checked.\n *\n * assert.notOwnProperty({ tea: { green: 'matcha' }}, 'coffee');\n * assert.notOwnProperty({}, 'toString');\n *\n * @name notOwnProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.notOwnProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notOwnProperty, true)\n .to.not.have.own.property(prop);\n };\n\n /**\n * ### .ownPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a strict equality check (===).\n * Inherited properties aren't checked.\n *\n * assert.ownPropertyVal({ coffee: 'is good'}, 'coffee', 'is good');\n *\n * @name ownPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.ownPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.ownPropertyVal, true)\n .to.have.own.property(prop, value);\n };\n\n /**\n * ### .notOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a strict equality check\n * (===). Inherited properties aren't checked.\n *\n * assert.notOwnPropertyVal({ tea: 'is better'}, 'tea', 'is worse');\n * assert.notOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notOwnPropertyVal, true)\n .to.not.have.own.property(prop, value);\n };\n\n /**\n * ### .deepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a deep equality check. Inherited\n * properties aren't checked.\n *\n * assert.deepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.deepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.deepOwnPropertyVal, true)\n .to.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .notDeepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a deep equality check.\n * Inherited properties aren't checked.\n *\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n * assert.notDeepOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notDeepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notDeepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notDeepOwnPropertyVal, true)\n .to.not.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .nestedProperty(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`, which can be a string using dot- and bracket-notation for\n * nested reference.\n *\n * assert.nestedProperty({ tea: { green: 'matcha' }}, 'tea.green');\n *\n * @name nestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.nestedProperty, true)\n .to.have.nested.property(prop);\n };\n\n /**\n * ### .notNestedProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`, which\n * can be a string using dot- and bracket-notation for nested reference. The\n * property cannot exist on the object nor anywhere in its prototype chain.\n *\n * assert.notNestedProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n *\n * @name notNestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notNestedProperty, true)\n .to.not.have.nested.property(prop);\n };\n\n /**\n * ### .nestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a strict equality check (===).\n *\n * assert.nestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n *\n * @name nestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.nestedPropertyVal, true)\n .to.have.nested.property(prop, val);\n };\n\n /**\n * ### .notNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a strict equality check (===).\n *\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'coffee.green', 'matcha');\n *\n * @name notNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notNestedPropertyVal, true)\n .to.not.have.nested.property(prop, val);\n };\n\n /**\n * ### .deepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with a value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a deep equality check.\n *\n * assert.deepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yum' });\n *\n * @name deepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepNestedPropertyVal, true)\n .to.have.deep.nested.property(prop, val);\n };\n\n /**\n * ### .notDeepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a deep equality check.\n *\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { oolong: 'yum' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yuck' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.black', { matcha: 'yum' });\n *\n * @name notDeepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepNestedPropertyVal, true)\n .to.not.have.deep.nested.property(prop, val);\n }\n\n /**\n * ### .lengthOf(object, length, [message])\n *\n * Asserts that `object` has a `length` or `size` with the expected value.\n *\n * assert.lengthOf([1,2,3], 3, 'array has length of 3');\n * assert.lengthOf('foobar', 6, 'string has length of 6');\n * assert.lengthOf(new Set([1,2,3]), 3, 'set has size of 3');\n * assert.lengthOf(new Map([['a',1],['b',2],['c',3]]), 3, 'map has size of 3');\n *\n * @name lengthOf\n * @param {Mixed} object\n * @param {Number} length\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.lengthOf = function (exp, len, msg) {\n new Assertion(exp, msg, assert.lengthOf, true).to.have.lengthOf(len);\n };\n\n /**\n * ### .hasAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'iDontExist', 'baz']);\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, iDontExist: 99, baz: 1337});\n * assert.hasAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAnyKeys(new Set([{foo: 'bar'}, 'anotherKey']), [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAnyKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyKeys, true).to.have.any.keys(keys);\n }\n\n /**\n * ### .hasAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337]);\n * assert.hasAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllKeys, true).to.have.all.keys(keys);\n }\n\n /**\n * ### .containsAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all of the `keys` provided but may have more keys not listed.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, baz: 1337});\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337});\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}]);\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}]);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name containsAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllKeys, true)\n .to.contain.all.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAnyKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAnyKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyKeys, true)\n .to.not.have.any.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllKeys, true)\n .to.not.have.all.keys(keys);\n }\n\n /**\n * ### .hasAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {three: 'three'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyDeepKeys, true)\n .to.have.any.deep.keys(keys);\n }\n\n /**\n * ### .hasAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne']]), {one: 'one'});\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAllDeepKeys(new Set([{one: 'one'}]), {one: 'one'});\n * assert.hasAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllDeepKeys, true)\n .to.have.all.deep.keys(keys);\n }\n\n /**\n * ### .containsAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` contains all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name containsAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllDeepKeys, true)\n .to.contain.all.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyDeepKeys, true)\n .to.not.have.any.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {one: 'one'}]);\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllDeepKeys, true)\n .to.not.have.all.deep.keys(keys);\n }\n\n /**\n * ### .throws(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will have a\n * message matching `errMsgMatcher`.\n *\n * assert.throws(fn, 'Error thrown must have this msg');\n * assert.throws(fn, /Error thrown must have a msg that matches this/);\n * assert.throws(fn, ReferenceError);\n * assert.throws(fn, errorInstance);\n * assert.throws(fn, ReferenceError, 'Error thrown must be a ReferenceError and have this msg');\n * assert.throws(fn, errorInstance, 'Error thrown must be the same errorInstance and have this msg');\n * assert.throws(fn, ReferenceError, /Error thrown must be a ReferenceError and match this/);\n * assert.throws(fn, errorInstance, /Error thrown must be the same errorInstance and match this/);\n *\n * @name throws\n * @alias throw\n * @alias Throw\n * @param {Function} fn\n * @param {ErrorConstructor|Error} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.throws = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var assertErr = new Assertion(fn, msg, assert.throws, true)\n .to.throw(errorLike, errMsgMatcher);\n return flag(assertErr, 'object');\n };\n\n /**\n * ### .doesNotThrow(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will _not_ throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is _not_ the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will _not_ have a\n * message matching `errMsgMatcher`.\n *\n * assert.doesNotThrow(fn, 'Any Error thrown must not have this message');\n * assert.doesNotThrow(fn, /Any Error thrown must not match this/);\n * assert.doesNotThrow(fn, Error);\n * assert.doesNotThrow(fn, errorInstance);\n * assert.doesNotThrow(fn, Error, 'Error must not have this message');\n * assert.doesNotThrow(fn, errorInstance, 'Error must not have this message');\n * assert.doesNotThrow(fn, Error, /Error must not match this/);\n * assert.doesNotThrow(fn, errorInstance, /Error must not match this/);\n *\n * @name doesNotThrow\n * @param {Function} fn\n * @param {ErrorConstructor} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotThrow = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n new Assertion(fn, msg, assert.doesNotThrow, true)\n .to.not.throw(errorLike, errMsgMatcher);\n };\n\n /**\n * ### .operator(val1, operator, val2, [message])\n *\n * Compares two values using `operator`.\n *\n * assert.operator(1, '<', 2, 'everything is ok');\n * assert.operator(1, '>', 2, 'this will fail');\n *\n * @name operator\n * @param {Mixed} val1\n * @param {String} operator\n * @param {Mixed} val2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.operator = function (val, operator, val2, msg) {\n var ok;\n switch(operator) {\n case '==':\n ok = val == val2;\n break;\n case '===':\n ok = val === val2;\n break;\n case '>':\n ok = val > val2;\n break;\n case '>=':\n ok = val >= val2;\n break;\n case '<':\n ok = val < val2;\n break;\n case '<=':\n ok = val <= val2;\n break;\n case '!=':\n ok = val != val2;\n break;\n case '!==':\n ok = val !== val2;\n break;\n default:\n msg = msg ? msg + ': ' : msg;\n throw new chai.AssertionError(\n msg + 'Invalid operator \"' + operator + '\"',\n undefined,\n assert.operator\n );\n }\n var test = new Assertion(ok, msg, assert.operator, true);\n test.assert(\n true === flag(test, 'object')\n , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n };\n\n /**\n * ### .closeTo(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n *\n * @name closeTo\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.closeTo = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.closeTo, true).to.be.closeTo(exp, delta);\n };\n\n /**\n * ### .approximately(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.approximately(1.5, 1, 0.5, 'numbers are close');\n *\n * @name approximately\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.approximately = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.approximately, true)\n .to.be.approximately(exp, delta);\n };\n\n /**\n * ### .sameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * strict equality check (===).\n *\n * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n *\n * @name sameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameMembers, true)\n .to.have.same.members(set2);\n }\n\n /**\n * ### .notSameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a strict equality check (===).\n *\n * assert.notSameMembers([ 1, 2, 3 ], [ 5, 1, 3 ], 'not same members');\n *\n * @name notSameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameMembers, true)\n .to.not.have.same.members(set2);\n }\n\n /**\n * ### .sameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * deep equality check.\n *\n * assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');\n *\n * @name sameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepMembers, true)\n .to.have.same.deep.members(set2);\n }\n\n /**\n * ### .notSameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a deep equality check.\n *\n * assert.notSameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { f: 5 }], 'not same deep members');\n *\n * @name notSameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepMembers, true)\n .to.not.have.same.deep.members(set2);\n }\n\n /**\n * ### .sameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a strict equality check (===).\n *\n * assert.sameOrderedMembers([ 1, 2, 3 ], [ 1, 2, 3 ], 'same ordered members');\n *\n * @name sameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameOrderedMembers, true)\n .to.have.same.ordered.members(set2);\n }\n\n /**\n * ### .notSameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a strict equality check (===).\n *\n * assert.notSameOrderedMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'not same ordered members');\n *\n * @name notSameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameOrderedMembers, true)\n .to.not.have.same.ordered.members(set2);\n }\n\n /**\n * ### .sameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a deep equality check.\n *\n * assert.sameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { c: 3 } ], 'same deep ordered members');\n *\n * @name sameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepOrderedMembers, true)\n .to.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .notSameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a deep equality check.\n *\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { z: 5 } ], 'not same deep ordered members');\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { c: 3 } ], 'not same deep ordered members');\n *\n * @name notSameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepOrderedMembers, true)\n .to.not.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .includeMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.includeMembers([ 1, 2, 3 ], [ 2, 1, 2 ], 'include members');\n *\n * @name includeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeMembers, true)\n .to.include.members(subset);\n }\n\n /**\n * ### .notIncludeMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.notIncludeMembers([ 1, 2, 3 ], [ 5, 1 ], 'not include members');\n *\n * @name notIncludeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeMembers, true)\n .to.not.include.members(subset);\n }\n\n /**\n * ### .includeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a deep\n * equality check. Duplicates are ignored.\n *\n * assert.includeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { b: 2 } ], 'include deep members');\n *\n * @name includeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepMembers, true)\n .to.include.deep.members(subset);\n }\n\n /**\n * ### .notIncludeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * deep equality check. Duplicates are ignored.\n *\n * assert.notIncludeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { f: 5 } ], 'not include deep members');\n *\n * @name notIncludeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepMembers, true)\n .to.not.include.deep.members(subset);\n }\n\n /**\n * ### .includeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.includeOrderedMembers([ 1, 2, 3 ], [ 1, 2 ], 'include ordered members');\n *\n * @name includeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeOrderedMembers, true)\n .to.include.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 1 ], 'not include ordered members');\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 3 ], 'not include ordered members');\n *\n * @name notIncludeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeOrderedMembers, true)\n .to.not.include.ordered.members(subset);\n }\n\n /**\n * ### .includeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.includeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 } ], 'include deep ordered members');\n *\n * @name includeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepOrderedMembers, true)\n .to.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { f: 5 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { c: 3 } ], 'not include deep ordered members');\n *\n * @name notIncludeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepOrderedMembers, true)\n .to.not.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .oneOf(inList, list, [message])\n *\n * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n *\n * assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n *\n * @name oneOf\n * @param {*} inList\n * @param {Array<*>} list\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.oneOf = function (inList, list, msg) {\n new Assertion(inList, msg, assert.oneOf, true).to.be.oneOf(list);\n }\n\n /**\n * ### .changes(function, object, property, [message])\n *\n * Asserts that a function changes the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 22 };\n * assert.changes(fn, obj, 'val');\n *\n * @name changes\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changes = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changes, true).to.change(obj, prop);\n }\n\n /**\n * ### .changesBy(function, object, property, delta, [message])\n *\n * Asserts that a function changes the value of a property by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 2 };\n * assert.changesBy(fn, obj, 'val', 2);\n *\n * @name changesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesBy, true)\n .to.change(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotChange(function, object, property, [message])\n *\n * Asserts that a function does not change the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { console.log('foo'); };\n * assert.doesNotChange(fn, obj, 'val');\n *\n * @name doesNotChange\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotChange = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotChange, true)\n .to.not.change(obj, prop);\n }\n\n /**\n * ### .changesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not change the value of a property or of a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.changesButNotBy(fn, obj, 'val', 5);\n *\n * @name changesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesButNotBy, true)\n .to.change(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .increases(function, object, property, [message])\n *\n * Asserts that a function increases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 13 };\n * assert.increases(fn, obj, 'val');\n *\n * @name increases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.increases, true)\n .to.increase(obj, prop);\n }\n\n /**\n * ### .increasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function increases a numeric object property or a function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.increasesBy(fn, obj, 'val', 10);\n *\n * @name increasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesBy, true)\n .to.increase(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotIncrease(function, object, property, [message])\n *\n * Asserts that a function does not increase a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 8 };\n * assert.doesNotIncrease(fn, obj, 'val');\n *\n * @name doesNotIncrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotIncrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotIncrease, true)\n .to.not.increase(obj, prop);\n }\n\n /**\n * ### .increasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not increase a numeric object property or function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.increasesButNotBy(fn, obj, 'val', 10);\n *\n * @name increasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesButNotBy, true)\n .to.increase(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .decreases(function, object, property, [message])\n *\n * Asserts that a function decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreases(fn, obj, 'val');\n *\n * @name decreases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.decreases, true)\n .to.decrease(obj, prop);\n }\n\n /**\n * ### .decreasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val -= 5 };\n * assert.decreasesBy(fn, obj, 'val', 5);\n *\n * @name decreasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesBy, true)\n .to.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotDecrease(function, object, property, [message])\n *\n * Asserts that a function does not decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.doesNotDecrease(fn, obj, 'val');\n *\n * @name doesNotDecrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecrease, true)\n .to.not.decrease(obj, prop);\n }\n\n /**\n * ### .doesNotDecreaseBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.doesNotDecreaseBy(fn, obj, 'val', 1);\n *\n * @name doesNotDecreaseBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecreaseBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecreaseBy, true)\n .to.not.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .decreasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreasesButNotBy(fn, obj, 'val', 1);\n *\n * @name decreasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesButNotBy, true)\n .to.decrease(obj, prop).but.not.by(delta);\n }\n\n /*!\n * ### .ifError(object)\n *\n * Asserts if value is not a false value, and throws if it is a true value.\n * This is added to allow for chai to be a drop-in replacement for Node's\n * assert class.\n *\n * var err = new Error('I am a custom error');\n * assert.ifError(err); // Rethrows err!\n *\n * @name ifError\n * @param {Object} object\n * @namespace Assert\n * @api public\n */\n\n assert.ifError = function (val) {\n if (val) {\n throw(val);\n }\n };\n\n /**\n * ### .isExtensible(object)\n *\n * Asserts that `object` is extensible (can have new properties added to it).\n *\n * assert.isExtensible({});\n *\n * @name isExtensible\n * @alias extensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isExtensible, true).to.be.extensible;\n };\n\n /**\n * ### .isNotExtensible(object)\n *\n * Asserts that `object` is _not_ extensible.\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * assert.isNotExtensible(nonExtensibleObject);\n * assert.isNotExtensible(sealedObject);\n * assert.isNotExtensible(frozenObject);\n *\n * @name isNotExtensible\n * @alias notExtensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotExtensible, true).to.not.be.extensible;\n };\n\n /**\n * ### .isSealed(object)\n *\n * Asserts that `object` is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.seal({});\n *\n * assert.isSealed(sealedObject);\n * assert.isSealed(frozenObject);\n *\n * @name isSealed\n * @alias sealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isSealed, true).to.be.sealed;\n };\n\n /**\n * ### .isNotSealed(object)\n *\n * Asserts that `object` is _not_ sealed.\n *\n * assert.isNotSealed({});\n *\n * @name isNotSealed\n * @alias notSealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotSealed, true).to.not.be.sealed;\n };\n\n /**\n * ### .isFrozen(object)\n *\n * Asserts that `object` is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n * assert.frozen(frozenObject);\n *\n * @name isFrozen\n * @alias frozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isFrozen, true).to.be.frozen;\n };\n\n /**\n * ### .isNotFrozen(object)\n *\n * Asserts that `object` is _not_ frozen.\n *\n * assert.isNotFrozen({});\n *\n * @name isNotFrozen\n * @alias notFrozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotFrozen, true).to.not.be.frozen;\n };\n\n /**\n * ### .isEmpty(target)\n *\n * Asserts that the target does not contain any values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isEmpty([]);\n * assert.isEmpty('');\n * assert.isEmpty(new Map);\n * assert.isEmpty({});\n *\n * @name isEmpty\n * @alias empty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isEmpty, true).to.be.empty;\n };\n\n /**\n * ### .isNotEmpty(target)\n *\n * Asserts that the target contains values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isNotEmpty([1, 2]);\n * assert.isNotEmpty('34');\n * assert.isNotEmpty(new Set([5, 6]));\n * assert.isNotEmpty({ key: 7 });\n *\n * @name isNotEmpty\n * @alias notEmpty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isNotEmpty, true).to.not.be.empty;\n };\n\n /*!\n * Aliases.\n */\n\n (function alias(name, as){\n assert[as] = assert[name];\n return alias;\n })\n ('isOk', 'ok')\n ('isNotOk', 'notOk')\n ('throws', 'throw')\n ('throws', 'Throw')\n ('isExtensible', 'extensible')\n ('isNotExtensible', 'notExtensible')\n ('isSealed', 'sealed')\n ('isNotSealed', 'notSealed')\n ('isFrozen', 'frozen')\n ('isNotFrozen', 'notFrozen')\n ('isEmpty', 'empty')\n ('isNotEmpty', 'notEmpty');\n};\n", "/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar used = [];\n\n/*!\n * Chai version\n */\n\nexports.version = '4.3.8';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai.\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n if (!~used.indexOf(fn)) {\n fn(exports, util);\n used.push(fn);\n }\n\n return exports;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n", "module.exports = require('./lib/chai');\n", "import chai from './index.js';\n\nexport const expect = chai.expect;\nexport const version = chai.version;\nexport const Assertion = chai.Assertion;\nexport const AssertionError = chai.AssertionError;\nexport const util = chai.util;\nexport const config = chai.config;\nexport const use = chai.use;\nexport const should = chai.should;\nexport const assert = chai.assert;\nexport const core = chai.core;\n\nexport default chai;\n", "import Chai from \"chai\"\n\nconst tests = [\n {\"slug\": \"add\", \"func\": () => Chai.expect(2 + 2).to.equal(4)},\n {\"slug\": \"divide\", \"func\": () => Chai.expect(2 / 2).to.equal(1)},\n {\"slug\": \"multiply\", \"func\": () => Chai.expect(2 * 3).to.equal(6)},\n {\"slug\": \"remainder\", \"func\": () => Chai.expect(2 % 3).to.equal(2)},\n {\"slug\": \"subtract\", \"func\": () => Chai.expect(2 - 3).to.equal(999)}, // If you find this, fix it and delete this comment :]\n {\"slug\": \"rightshift\", \"func\": () => Chai.expect(2 >> 3).to.equal(0)},\n {\"slug\": \"leftshift\", \"func\": () => Chai.expect(2 << 3).to.equal(16)},\n {\"slug\": \"leftshift\", \"func\": () => Chai.expect(2 ** 3).to.equal(8)},\n]\n\n// var context = require.context(\"@frog/source/tests\", false, /.test.js$/)\n// const tests2 = context.keys().map((key) => {\n// const tests = context(key)\n// tests = tests.concat(tests)\n// return tests\n// })\n\n// window.frog = window.frog || {}\n// window.frog.tests = window.frog.tests || tests\n\nexport default tests\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "/* eslint-env browser */\n\nconst level = (() => {\n\tif (navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "import Objdict from \"objdict\"\n\nimport chalk from \"chalk\"\n\nconst betterValues = {\n \"red\": \"#B9314F\",\n \"green\": \"#52B788\"\n}\n\nexport default class Prettylog {\n static style(components) {\n if(components instanceof Array == false) {\n components = [components]\n }\n if(typeof window != \"undefined\") {\n return Prettylog.browserstyle(components)\n } else {\n return Prettylog.terminalstyle(components)\n }\n }\n static browserstyle(components) {\n let text = \"\"\n const styles = []\n components.forEach((component) => {\n if(component == false\n || component.isSkipped) {\n return\n }\n if(text.length > 0) {\n text += \"%c \"\n styles.push(\"\")\n }\n\n text += \"%c\"\n text += component.text\n\n if(component.style == undefined) {\n styles.push(\"\")\n } else {\n let style = \"\"\n Objdict.forEach(component.style, (value, key) => {\n value = betterValues[value] || value\n style += key + \":\" + value + \";\"\n })\n styles.push(style)\n }\n })\n return [text].concat(styles)\n }\n static terminalstyle(components) {\n let text = \"\"\n components.forEach((component) => {\n if(component == false\n || component.isSkipped) {\n return\n }\n if(text.length > 0) {\n text += \" \"\n }\n\n let style = chalk\n if(component.style != undefined) {\n if(component.style[\"background-color\"]) {\n const color = component.style[\"background-color\"]\n style = style[\"bg\" + color.charAt(0).toUpperCase() + color.slice(1)]\n }\n if(component.style[\"color\"] != undefined) {\n style = style[component.style[\"color\"]]\n }\n if(component.style[\"font-weight\"] == \"bold\") {\n style = style[\"bold\"]\n }\n }\n\n text += style(component.text)\n })\n return [text]\n }\n}\n\n// TODO: Structured grouping\n// function consolegroup(logs = []) {\n// console.groupCollapsed(logs.shift())\n// while(log.length > 0) {\n// console.log(logs.shift())\n// }\n// console.groupEnd()\n// }\n\n// TODO: support for more console rendering, like images.\n", "export default function parseMilliseconds(milliseconds) {\n\tif (typeof milliseconds !== 'number') {\n\t\tthrow new TypeError('Expected a number');\n\t}\n\n\tconst roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil;\n\n\treturn {\n\t\tdays: roundTowardsZero(milliseconds / 86400000),\n\t\thours: roundTowardsZero(milliseconds / 3600000) % 24,\n\t\tminutes: roundTowardsZero(milliseconds / 60000) % 60,\n\t\tseconds: roundTowardsZero(milliseconds / 1000) % 60,\n\t\tmilliseconds: roundTowardsZero(milliseconds) % 1000,\n\t\tmicroseconds: roundTowardsZero(milliseconds * 1000) % 1000,\n\t\tnanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000\n\t};\n}\n", "import parseMilliseconds from 'parse-ms';\n\nconst pluralize = (word, count) => count === 1 ? word : `${word}s`;\n\nconst SECOND_ROUNDING_EPSILON = 0.000_000_1;\n\nexport default function prettyMilliseconds(milliseconds, options = {}) {\n\tif (!Number.isFinite(milliseconds)) {\n\t\tthrow new TypeError('Expected a finite number');\n\t}\n\n\tif (options.colonNotation) {\n\t\toptions.compact = false;\n\t\toptions.formatSubMilliseconds = false;\n\t\toptions.separateMilliseconds = false;\n\t\toptions.verbose = false;\n\t}\n\n\tif (options.compact) {\n\t\toptions.secondsDecimalDigits = 0;\n\t\toptions.millisecondsDecimalDigits = 0;\n\t}\n\n\tconst result = [];\n\n\tconst floorDecimals = (value, decimalDigits) => {\n\t\tconst flooredInterimValue = Math.floor((value * (10 ** decimalDigits)) + SECOND_ROUNDING_EPSILON);\n\t\tconst flooredValue = Math.round(flooredInterimValue) / (10 ** decimalDigits);\n\t\treturn flooredValue.toFixed(decimalDigits);\n\t};\n\n\tconst add = (value, long, short, valueString) => {\n\t\tif ((result.length === 0 || !options.colonNotation) && value === 0 && !(options.colonNotation && short === 'm')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalueString = (valueString || value || '0').toString();\n\t\tlet prefix;\n\t\tlet suffix;\n\t\tif (options.colonNotation) {\n\t\t\tprefix = result.length > 0 ? ':' : '';\n\t\t\tsuffix = '';\n\t\t\tconst wholeDigits = valueString.includes('.') ? valueString.split('.')[0].length : valueString.length;\n\t\t\tconst minLength = result.length > 0 ? 2 : 1;\n\t\t\tvalueString = '0'.repeat(Math.max(0, minLength - wholeDigits)) + valueString;\n\t\t} else {\n\t\t\tprefix = '';\n\t\t\tsuffix = options.verbose ? ' ' + pluralize(long, value) : short;\n\t\t}\n\n\t\tresult.push(prefix + valueString + suffix);\n\t};\n\n\tconst parsed = parseMilliseconds(milliseconds);\n\n\tadd(Math.trunc(parsed.days / 365), 'year', 'y');\n\tadd(parsed.days % 365, 'day', 'd');\n\tadd(parsed.hours, 'hour', 'h');\n\tadd(parsed.minutes, 'minute', 'm');\n\n\tif (\n\t\toptions.separateMilliseconds\n\t\t|| options.formatSubMilliseconds\n\t\t|| (!options.colonNotation && milliseconds < 1000)\n\t) {\n\t\tadd(parsed.seconds, 'second', 's');\n\t\tif (options.formatSubMilliseconds) {\n\t\t\tadd(parsed.milliseconds, 'millisecond', 'ms');\n\t\t\tadd(parsed.microseconds, 'microsecond', '\u00B5s');\n\t\t\tadd(parsed.nanoseconds, 'nanosecond', 'ns');\n\t\t} else {\n\t\t\tconst millisecondsAndBelow\n\t\t\t\t= parsed.milliseconds\n\t\t\t\t+ (parsed.microseconds / 1000)\n\t\t\t\t+ (parsed.nanoseconds / 1e6);\n\n\t\t\tconst millisecondsDecimalDigits\n\t\t\t\t= typeof options.millisecondsDecimalDigits === 'number'\n\t\t\t\t\t? options.millisecondsDecimalDigits\n\t\t\t\t\t: 0;\n\n\t\t\tconst roundedMiliseconds = millisecondsAndBelow >= 1\n\t\t\t\t? Math.round(millisecondsAndBelow)\n\t\t\t\t: Math.ceil(millisecondsAndBelow);\n\n\t\t\tconst millisecondsString = millisecondsDecimalDigits\n\t\t\t\t? millisecondsAndBelow.toFixed(millisecondsDecimalDigits)\n\t\t\t\t: roundedMiliseconds;\n\n\t\t\tadd(\n\t\t\t\tNumber.parseFloat(millisecondsString),\n\t\t\t\t'millisecond',\n\t\t\t\t'ms',\n\t\t\t\tmillisecondsString,\n\t\t\t);\n\t\t}\n\t} else {\n\t\tconst seconds = (milliseconds / 1000) % 60;\n\t\tconst secondsDecimalDigits\n\t\t\t= typeof options.secondsDecimalDigits === 'number'\n\t\t\t\t? options.secondsDecimalDigits\n\t\t\t\t: 1;\n\t\tconst secondsFixed = floorDecimals(seconds, secondsDecimalDigits);\n\t\tconst secondsString = options.keepDecimalsOnWholeSeconds\n\t\t\t? secondsFixed\n\t\t\t: secondsFixed.replace(/\\.0+$/, '');\n\t\tadd(Number.parseFloat(secondsString), 'second', 's', secondsString);\n\t}\n\n\tif (result.length === 0) {\n\t\treturn '0' + (options.verbose ? ' milliseconds' : 'ms');\n\t}\n\n\tif (options.compact) {\n\t\treturn result[0];\n\t}\n\n\tif (typeof options.unitCount === 'number') {\n\t\tconst separator = options.colonNotation ? '' : ' ';\n\t\treturn result.slice(0, Math.max(options.unitCount, 1)).join(separator);\n\t}\n\n\treturn options.colonNotation ? result.join('') : result.join(' ');\n}\n", ";(function(root, factory) { // eslint-disable-line no-extra-semi\n var deepDiff = factory(root);\n // eslint-disable-next-line no-undef\n if (typeof define === 'function' && define.amd) {\n // AMD\n define('DeepDiff', function() { // eslint-disable-line no-undef\n return deepDiff;\n });\n } else if (typeof exports === 'object' || typeof navigator === 'object' && navigator.product.match(/ReactNative/i)) {\n // Node.js or ReactNative\n module.exports = deepDiff;\n } else {\n // Browser globals\n var _deepdiff = root.DeepDiff;\n deepDiff.noConflict = function() {\n if (root.DeepDiff === deepDiff) {\n root.DeepDiff = _deepdiff;\n }\n return deepDiff;\n };\n root.DeepDiff = deepDiff;\n }\n}(this, function(root) {\n var validKinds = ['N', 'E', 'A', 'D'];\n\n // nodejs compatible on server side and in the browser.\n function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n\n function Diff(kind, path) {\n Object.defineProperty(this, 'kind', {\n value: kind,\n enumerable: true\n });\n if (path && path.length) {\n Object.defineProperty(this, 'path', {\n value: path,\n enumerable: true\n });\n }\n }\n\n function DiffEdit(path, origin, value) {\n DiffEdit.super_.call(this, 'E', path);\n Object.defineProperty(this, 'lhs', {\n value: origin,\n enumerable: true\n });\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffEdit, Diff);\n\n function DiffNew(path, value) {\n DiffNew.super_.call(this, 'N', path);\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffNew, Diff);\n\n function DiffDeleted(path, value) {\n DiffDeleted.super_.call(this, 'D', path);\n Object.defineProperty(this, 'lhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffDeleted, Diff);\n\n function DiffArray(path, index, item) {\n DiffArray.super_.call(this, 'A', path);\n Object.defineProperty(this, 'index', {\n value: index,\n enumerable: true\n });\n Object.defineProperty(this, 'item', {\n value: item,\n enumerable: true\n });\n }\n inherits(DiffArray, Diff);\n\n function arrayRemove(arr, from, to) {\n var rest = arr.slice((to || from) + 1 || arr.length);\n arr.length = from < 0 ? arr.length + from : from;\n arr.push.apply(arr, rest);\n return arr;\n }\n\n function realTypeOf(subject) {\n var type = typeof subject;\n if (type !== 'object') {\n return type;\n }\n\n if (subject === Math) {\n return 'math';\n } else if (subject === null) {\n return 'null';\n } else if (Array.isArray(subject)) {\n return 'array';\n } else if (Object.prototype.toString.call(subject) === '[object Date]') {\n return 'date';\n } else if (typeof subject.toString === 'function' && /^\\/.*\\//.test(subject.toString())) {\n return 'regexp';\n }\n return 'object';\n }\n\n // http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n function hashThisString(string) {\n var hash = 0;\n if (string.length === 0) { return hash; }\n for (var i = 0; i < string.length; i++) {\n var char = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n }\n\n // Gets a hash of the given object in an array order-independent fashion\n // also object key order independent (easier since they can be alphabetized)\n function getOrderIndependentHash(object) {\n var accum = 0;\n var type = realTypeOf(object);\n\n if (type === 'array') {\n object.forEach(function (item) {\n // Addition is commutative so this is order indep\n accum += getOrderIndependentHash(item);\n });\n\n var arrayString = '[type: array, hash: ' + accum + ']';\n return accum + hashThisString(arrayString);\n }\n\n if (type === 'object') {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var keyValueString = '[ type: object, key: ' + key + ', value hash: ' + getOrderIndependentHash(object[key]) + ']';\n accum += hashThisString(keyValueString);\n }\n }\n\n return accum;\n }\n\n // Non object, non array...should be good?\n var stringToHash = '[ type: ' + type + ' ; value: ' + object + ']';\n return accum + hashThisString(stringToHash);\n }\n\n function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndependent) {\n changes = changes || [];\n path = path || [];\n stack = stack || [];\n var currentPath = path.slice(0);\n if (typeof key !== 'undefined' && key !== null) {\n if (prefilter) {\n if (typeof (prefilter) === 'function' && prefilter(currentPath, key)) {\n return;\n } else if (typeof (prefilter) === 'object') {\n if (prefilter.prefilter && prefilter.prefilter(currentPath, key)) {\n return;\n }\n if (prefilter.normalize) {\n var alt = prefilter.normalize(currentPath, key, lhs, rhs);\n if (alt) {\n lhs = alt[0];\n rhs = alt[1];\n }\n }\n }\n }\n currentPath.push(key);\n }\n\n // Use string comparison for regexes\n if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {\n lhs = lhs.toString();\n rhs = rhs.toString();\n }\n\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n var i, j, k, other;\n\n var ldefined = ltype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].lhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].lhs, key));\n var rdefined = rtype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].rhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].rhs, key));\n\n if (!ldefined && rdefined) {\n changes.push(new DiffNew(currentPath, rhs));\n } else if (!rdefined && ldefined) {\n changes.push(new DiffDeleted(currentPath, lhs));\n } else if (realTypeOf(lhs) !== realTypeOf(rhs)) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (realTypeOf(lhs) === 'date' && (lhs - rhs) !== 0) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (ltype === 'object' && lhs !== null && rhs !== null) {\n for (i = stack.length - 1; i > -1; --i) {\n if (stack[i].lhs === lhs) {\n other = true;\n break;\n }\n }\n if (!other) {\n stack.push({ lhs: lhs, rhs: rhs });\n if (Array.isArray(lhs)) {\n // If order doesn't matter, we need to sort our arrays\n if (orderIndependent) {\n lhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n\n rhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n }\n i = rhs.length - 1;\n j = lhs.length - 1;\n while (i > j) {\n changes.push(new DiffArray(currentPath, i, new DiffNew(undefined, rhs[i--])));\n }\n while (j > i) {\n changes.push(new DiffArray(currentPath, j, new DiffDeleted(undefined, lhs[j--])));\n }\n for (; i >= 0; --i) {\n deepDiff(lhs[i], rhs[i], changes, prefilter, currentPath, i, stack, orderIndependent);\n }\n } else {\n var akeys = Object.keys(lhs);\n var pkeys = Object.keys(rhs);\n for (i = 0; i < akeys.length; ++i) {\n k = akeys[i];\n other = pkeys.indexOf(k);\n if (other >= 0) {\n deepDiff(lhs[k], rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n pkeys[other] = null;\n } else {\n deepDiff(lhs[k], undefined, changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n for (i = 0; i < pkeys.length; ++i) {\n k = pkeys[i];\n if (k) {\n deepDiff(undefined, rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n }\n stack.length = stack.length - 1;\n } else if (lhs !== rhs) {\n // lhs is contains a cycle at this element and it differs from rhs\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n } else if (lhs !== rhs) {\n if (!(ltype === 'number' && isNaN(lhs) && isNaN(rhs))) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n }\n }\n\n function observableDiff(lhs, rhs, observer, prefilter, orderIndependent) {\n var changes = [];\n deepDiff(lhs, rhs, changes, prefilter, null, null, null, orderIndependent);\n if (observer) {\n for (var i = 0; i < changes.length; ++i) {\n observer(changes[i]);\n }\n }\n return changes;\n }\n\n function orderIndependentDeepDiff(lhs, rhs, changes, prefilter, path, key, stack) {\n return deepDiff(lhs, rhs, changes, prefilter, path, key, stack, true);\n }\n\n function accumulateDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function accumulateOrderIndependentDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter, true);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function applyArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n applyArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n } else {\n switch (change.kind) {\n case 'A':\n applyArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr = arrayRemove(arr, index);\n break;\n case 'E':\n case 'N':\n arr[index] = change.rhs;\n break;\n }\n }\n return arr;\n }\n\n function applyChange(target, source, change) {\n if (typeof change === 'undefined' && source && ~validKinds.indexOf(source.kind)) {\n change = source;\n }\n if (target && change && change.kind) {\n var it = target,\n i = -1,\n last = change.path ? change.path.length - 1 : 0;\n while (++i < last) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = (typeof change.path[i + 1] !== 'undefined' && typeof change.path[i + 1] === 'number') ? [] : {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n if (change.path && typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = [];\n }\n applyArrayChange(change.path ? it[change.path[i]] : it, change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n }\n }\n\n function revertArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n // the structure of the object at the index has changed...\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n delete it[change.path[i]];\n break;\n }\n } else {\n // the array item is different...\n switch (change.kind) {\n case 'A':\n revertArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr[index] = change.lhs;\n break;\n case 'E':\n arr[index] = change.lhs;\n break;\n case 'N':\n arr = arrayRemove(arr, index);\n break;\n }\n }\n return arr;\n }\n\n function revertChange(target, source, change) {\n if (target && source && change && change.kind) {\n var it = target,\n i, u;\n u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n // Array was modified...\n // it will be an array...\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n // Item was deleted...\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n // Item was edited...\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n // Item is new...\n delete it[change.path[i]];\n break;\n }\n }\n }\n\n function applyDiff(target, source, filter) {\n if (target && source) {\n var onChange = function (change) {\n if (!filter || filter(target, source, change)) {\n applyChange(target, source, change);\n }\n };\n observableDiff(target, source, onChange);\n }\n }\n\n Object.defineProperties(accumulateDiff, {\n\n diff: {\n value: accumulateDiff,\n enumerable: true\n },\n orderIndependentDiff: {\n value: accumulateOrderIndependentDiff,\n enumerable: true\n },\n observableDiff: {\n value: observableDiff,\n enumerable: true\n },\n orderIndependentObservableDiff: {\n value: orderIndependentDeepDiff,\n enumerable: true\n },\n orderIndepHash: {\n value: getOrderIndependentHash,\n enumerable: true\n },\n applyDiff: {\n value: applyDiff,\n enumerable: true\n },\n applyChange: {\n value: applyChange,\n enumerable: true\n },\n revertChange: {\n value: revertChange,\n enumerable: true\n },\n isConflict: {\n value: function () {\n return typeof $conflict !== 'undefined';\n },\n enumerable: true\n }\n });\n\n // hackish...\n accumulateDiff.DeepDiff = accumulateDiff;\n // ...but works with:\n // import DeepDiff from 'deep-diff'\n // import { DeepDiff } from 'deep-diff'\n // const DeepDiff = require('deep-diff');\n // const { DeepDiff } = require('deep-diff');\n\n if (root) {\n root.DeepDiff = accumulateDiff;\n }\n\n return accumulateDiff;\n}));\n", "import Prettylog from \"@frog/source/tests/utility/Prettylog.js\"\nimport prettyms from \"pretty-ms\"\n// import present from \"present\"\nimport diff from \"deep-diff\"\nimport {nanoid} from \"nanoid\"\n// import diff from \"deep-object-diff\"\n\nfunction present() {\n return Date.now()\n}\n\n// {\n// \"type\": \"test\",\n// \"slug\": \"skills/farstrike/push\",\n// \"description\": \"Something can happen\",\n// \"func\": function() {},\n// \"status\": \"bad\",\n// \"duration\": 231232,\n// }\n// {\n// \"type\": \"testgroup\",\n// \"slug\": \"skills\",\n// \"count\": 0,\n// \"badcount\": 0,\n// \"tests\": [],\n// }\n\nfunction trimErrorDepth(stack = \"\", string) {\n let calls = stack.split(\"\\n\")\n const message = calls.shift()\n calls = calls.slice(0, calls.findIndex((call) => call.includes(string)))\n calls.unshift(message)\n calls = calls.join(\"\\n\")\n return calls\n}\nfunction trimErrorType(stack) {\n return stack.substring(stack.indexOf(\"Error\"))\n}\nfunction replaceErrorHeader(stack, header = \"Call Stack\") {\n return \"Error \" + header + \"\\n\" + stack.split(\"\\n\").slice(1).join(\"\\n\")\n}\n\nexport default class Testlaunch {\n static perform(tests) {\n if(tests instanceof Array == false) {\n tests = [tests]\n }\n return tests.map((test) => {\n if(test.xslug != undefined) {\n test.slug = test.xslug\n test.status = \"skipped\"\n test.duration = 0\n return\n }\n const startTime = present()\n try {\n test.func()\n test.status = \"good\"\n } catch(error) {\n test.status = \"bad\"\n test.error = error\n }\n const endTime = present()\n test.duration = endTime - startTime\n return test\n })\n }\n static report(test, options = {}) {\n if(test.type == \"test\") {\n Testlaunch.reportTest(test, options)\n } else if(test.type == \"testgroup\") {\n Testlaunch.reportTestgroup(test, options)\n }\n }\n static group(tests) {\n const rootTestgroup = {\n \"tests\": {},\n \"type\": \"testgroup\",\n \"root\": true,\n \"count\": 0,\n \"badcount\": 0,\n \"goodcount\": 0,\n \"duration\": 0\n }\n tests.forEach((test) => {\n test.type = test.type || \"test\"\n test.slug = test.slug || nanoid()\n\n const sections = test.slug.split(\"/\")\n let currentTestgroup = rootTestgroup\n\n while(currentTestgroup != undefined) {\n currentTestgroup.badcount += (test.status == \"bad\") ? 1 : 0\n currentTestgroup.goodcount += (test.status == \"good\") ? 1 : 0\n currentTestgroup.count += 1\n currentTestgroup.duration += test.duration\n\n if(sections.length > 1) {\n const section = sections.shift()\n currentTestgroup.tests[section] = currentTestgroup.tests[section] || {\n \"tests\": {},\n \"type\": \"testgroup\",\n \"slug\": (currentTestgroup.slug ? currentTestgroup.slug + \"/\" : \"\") + section,\n \"count\": 0,\n \"badcount\": 0,\n \"goodcount\": 0,\n \"duration\": 0\n }\n currentTestgroup = currentTestgroup.tests[section]\n } else {\n currentTestgroup.tests[test.slug] = test\n currentTestgroup = undefined\n }\n }\n })\n return rootTestgroup\n }\n static normalizeOptions(options = {}) {\n if(options.hierarchy === undefined) options.hierarchy = true\n if(options.header === undefined) options.header = false\n if(options.footer === undefined) options.footer = false\n if(options.includePassingTests === undefined) options.includePassingTests = true\n if(options.includeFailingTests === undefined) options.includeFailingTests = true\n if(options.includeSkippedTests === undefined) options.includeSkippedTests = true\n if(options.includeErrorMessages === undefined) options.includeErrorMessages = true\n if(options.collapseErrors === undefined) options.collapseErrors = false\n }\n static reportTest(test, options = {}) {\n Testlaunch.normalizeOptions(options)\n\n if(test.status == \"bad\"\n && options.includeFailingTests == true) {\n let logger = \"group\"\n if(options.collapseErrors == true) {\n logger = \"groupCollapsed\"\n }\n if(options.hierarchy == false\n || options.includeErrorMessages == false) {\n logger = \"log\"\n }\n console[logger](...Prettylog.style([\n {\"text\": \"\uD83D\uDD34\"}, // \uD83D\uDFE5\n {\"text\": options.hierarchy === false ? test.slug : test.slug.split(\"/\").pop(), \"style\": {\"font-weight\": \"bold\", \"color\": \"red\"}},\n {\"text\": \"-\"},\n {\"text\": test.description},\n {\"text\": \"-\"},\n {\"text\": prettyms(test.duration)},\n ]))\n if(options.includeErrorMessages == false) {\n return\n }\n if(typeof test.error == \"string\") {\n test.error = {\"message\": test.error}\n }\n console.log(...Prettylog.style({\"text\": test.error.message}))\n console.log(\" \")\n\n // console.log(\"!!\", \"webpack:///./source/tests/Skills.test.js:30\")\n if(test.error.expected != test.error.actual) {\n // console.log(\"Expected:\", test.error.expected)\n // console.log(\"Actual:\", test.error.actual)\n const changes = diff.diff(test.error.expected, test.error.actual)\n changes.forEach((change) => {\n let path = \"\"\n if(change.path != undefined) {\n path = change.path.reduce((path, pathpart) => {\n return path + (isNaN(pathpart) ? \".\" + pathpart : \"[\" + pathpart + \"]\")\n }, \"\")\n }\n let expected = \"\"\n let computed = \"\"\n if(\"lhs\" in change) {\n if(typeof change.lhs === \"string\") {\n expected = \"\\\"\" + change.lhs + \"\\\"\"\n } else if(typeof change.lhs === \"undefined\") {\n expected = \"undefined\"\n } else {\n // expected = change.lhs\n expected = JSON.stringify(change.lhs)\n }\n }\n if(\"rhs\" in change) {\n if(typeof change.rhs === \"string\") {\n computed = \"\\\"\" + change.rhg + \"\\\"\"\n } else if(typeof change.rhs === \"undefined\") {\n computed = \"undefined\"\n } else {\n // computed = change.rhs\n computed = JSON.stringify(change.rhs)\n }\n }\n console.log(...Prettylog.style([\n {\"text\": \"expected\" + path, \"style\": {\"color\": \"green\"}},\n {\"text\": \"=\"},\n {\"text\": expected, \"style\": {\"background-color\": \"green\"}},\n ]))\n console.log(...Prettylog.style([\n {\"text\": \"computed\" + path, \"style\": {\"color\": \"red\"}},\n {\"text\": \"=\"},\n {\"text\": computed, \"style\": {\"background-color\": \"red\"}},\n ]))\n\n console.log(\" \")\n })\n\n if(typeof window != \"undefined\") {\n console.log(\"expected:\", test.error.expected)\n console.log(\"computed:\", test.error.actual)\n console.log(\" \")\n }\n }\n\n test.error.stack = trimErrorDepth(test.error.stack, \"Function.perform\")\n test.error.stack = replaceErrorHeader(test.error.stack)\n console.log(test.error.stack)\n\n if(test.snapshot != undefined) {\n console.log(\" \")\n console.log(\"Test for yourself at\", \"http://localhost:8080/dev/tests/\" + test.slug)\n }\n\n if(logger == \"group\"\n || logger == \"groupCollapsed\") {\n console.groupEnd()\n } else if(logger == \"log\") {\n console.log(\" \")\n console.log(\" \")\n console.log(\" \")\n }\n return\n }\n if(test.status == \"good\"\n && options.includePassingTests == true) {\n console.log(...Prettylog.style([\n {\"text\": \"\u2705\"}, // \uD83D\uDFE9\n {\"text\": options.hierarchy === false ? test.slug : test.slug.split(\"/\").pop(), \"style\": {\"font-weight\": \"bold\"}},\n {\"text\": \"-\"},\n {\"text\": test.description},\n {\"text\": \"-\"},\n {\"text\": prettyms(test.duration)},\n ]))\n return\n }\n if(test.status == \"skipped\"\n && options.includeSkippedTests == true) {\n console.log(...Prettylog.style([\n {\"text\": \"\uD83D\uDE36\"},\n {\"text\": options.hierarchy === false ? test.slug : test.slug.split(\"/\").pop(), \"style\": {\"font-weight\": \"bold\"}},\n {\"text\": \"-\"},\n {\"text\": test.description},\n {\"text\": \"-\"},\n {\"text\": \"SKIPPED\"},\n ]))\n }\n }\n static reportTestgroup(testgroup, options = {}) {\n Testlaunch.normalizeOptions(options)\n\n if(options.header == true\n && testgroup.root == true) {\n Testlaunch.reportSummary(testgroup, options)\n console.log(\" \")\n }\n\n if(options.hierarchy == true) {\n if(testgroup.badcount > 0) {\n console.group(...Prettylog.style([\n {\"text\": \"\uD83D\uDD34\"}, // \uD83D\uDFE5\n testgroup.slug != undefined && {\"text\": testgroup.slug.split(\"/\").pop(), \"style\": {\"color\": \"red\", \"font-weight\": \"bold\"}},\n testgroup.slug != undefined && {\"text\": \"-\"},\n {\"text\": testgroup.badcount + \" out of \" + testgroup.count + \" test\" + (testgroup.count > 1 ? \"s\" : \"\") + \" failing\"},\n {\"text\": \"-\"},\n {\"text\": prettyms(testgroup.duration)},\n ]))\n } else if(testgroup.badcount <= 0) {\n console.groupCollapsed(...Prettylog.style([\n {\"text\": \"\u2705\"}, // \uD83D\uDFE9\n testgroup.slug != undefined && {\"text\": testgroup.slug.split(\"/\").pop(), \"style\": {\"font-weight\": \"bold\"}},\n testgroup.slug != undefined && {\"text\": \"-\"},\n {\"text\": testgroup.count + \" test\" + (testgroup.count > 1 ? \"s\" : \"\")},\n {\"text\": \"-\"},\n {\"text\": prettyms(testgroup.duration)},\n ]))\n }\n }\n const tests = Object.values(testgroup.tests).sort((a, b) => {\n if(a.type == \"testgroup\" && b.type != \"testgroup\") {\n return -1\n }\n if(a.type != \"testgroup\" && b.type == \"testgroup\") {\n return +1\n }\n })\n tests.forEach((test) => {\n if(test.type == \"testgroup\") {\n Testlaunch.reportTestgroup(test, options)\n } else if(test.type == \"test\") {\n Testlaunch.reportTest(test, options)\n }\n })\n if(options.hierarchy == true) {\n console.groupEnd()\n }\n\n if(options.footer == true\n && testgroup.root == true) {\n console.log(\" \")\n Testlaunch.reportSummary(testgroup, options)\n }\n }\n static reportSummary(testgroup, options = {}) {\n if(testgroup.badcount > 0) {\n console.log(...Prettylog.style([\n {\"text\": \"\uD83D\uDD34\"}, // \uD83D\uDFE5\n {\"text\": testgroup.badcount + \" out of \" + testgroup.count + \" test\" + (testgroup.count > 1 ? \"s\" : \"\") + \" failing\", \"style\": {\"color\": \"red\"}},\n {\"text\": \"-\"},\n {\"text\": prettyms(testgroup.duration)},\n ]))\n } else if(testgroup.badcount <= 0) {\n console.log(...Prettylog.style([\n {\"text\": \"\u2705\"}, // \uD83D\uDFE9\n {\"text\": testgroup.count + \" test\" + (testgroup.count > 1 ? \"s\" : \"\")},\n {\"text\": \"-\"},\n {\"text\": prettyms(testgroup.duration)},\n ]))\n }\n }\n}\n", "import NavigationRouter from \"@frog/source/utility/NavigationRouter.js\"\nimport UserError from \"@frog/source/utility/UserError.js\"\n\nimport games from \"@frog/source/data/games/index.js\"\nimport tests from \"@frog/source/tests/testlist.js\"\nimport sizes from \"@frog/source/data/sizes.js\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport Testlaunch from \"@frog/source/tests/utility/Testlaunch.js\"\n\nfunction clearLivePlaytestSavestatesFromGame(game, gameSlug) {\n for(chapterSlug of Object.keys(game.chapters)) {\n localStorage.removeItem(\"savestate_\" + gameSlug + \"_\" + chapterSlug + \"_livePlaytest\")\n }\n}\n\n////////////////////\n// INSTANTIATION //\n//////////////////\n\nconst DEFAULT_GAME_SLUG = \"dungeon\" // Object.keys(games)[0]\nconst STARTING_STATE = {\n \"screen\": \"TitleScreen\",\n \"gameSlug\": DEFAULT_GAME_SLUG,\n}\n\nconst Navigation = new NavigationRouter(STARTING_STATE)\nexport default Navigation\n\nwindow.frog = window.frog || {}\nwindow.frog.navigation = Navigation\n\n//////////////////\n// GAME ROUTES //\n////////////////\n\nNavigation.on(\"/title\", function(request) {\n const gameSlug = DEFAULT_GAME_SLUG\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n clearLivePlaytestSavestatesFromGame(game, gameSlug)\n\n Audiomix.trigger(\"Music:Title\")\n Navigation.state = {\"screen\": \"TitleScreen\", \"gameSlug\": gameSlug, \"isSplashing\": false}\n})\n\nNavigation.on(\"/games/:gameSlug\", function(request) {\n const gameSlug = request.wildcards.gameSlug\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n clearLivePlaytestSavestatesFromGame(game, gameSlug)\n\n Audiomix.trigger(\"Music:Title\")\n Navigation.state = {\"screen\": \"TitleScreen\", \"gameSlug\": gameSlug}\n})\n\nNavigation.on(\"/games/:gameSlug/title\", function(request) {\n const gameSlug = request.wildcards.gameSlug\n\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n\n clearLivePlaytestSavestatesFromGame(game, gameSlug)\n\n Audiomix.trigger(\"Music:Title\")\n Navigation.state = {\"screen\": \"TitleScreen\", \"gameSlug\": gameSlug, \"isSplashing\": false}\n})\n\nNavigation.on(\"/games/:gameSlug/chapters/:chapterSlug\", function(request) {\n const slug = request.wildcards.chapterSlug\n const gameSlug = request.wildcards.gameSlug\n\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n const chapter = game.chapters[slug]\n if(chapter == undefined) throw new UserError(\"Could not find chapter:\", slug)\n\n App.load({\"game\": {...game, chapter}})\n\n Navigation.state = {\"screen\": \"ChapterScreen\", \"gameSlug\": gameSlug, \"chapterSlug\": slug}\n})\n\nNavigation.on(\"/games/:gameSlug/chapters/:chapterSlug/encounters/:encounterSlug\", function(request) {\n const slug = request.wildcards.chapterSlug\n const gameSlug = request.wildcards.gameSlug\n const encounterSlug = request.wildcards.encounterSlug\n\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n const chapter = game.chapters[slug]\n if(chapter == undefined) throw new UserError(\"Could not find chapter:\", slug)\n\n App.load({\"game\": {...game, chapter}})\n\n if(encounterSlug == (chapter.startingEncounter || 1)) {\n App.game.chapter.restart()\n } else {\n const isSuccessfulReload = Dev.reloadSavestate(\"advanceToEncounter\" + encounterSlug)\n if(isSuccessfulReload == false) {\n const stage = App.game.chapter.stage\n stage.currentEncounterKey = encounterSlug\n const selection = App.game.chapter.selection\n selection.camera.position = selection.calculateNextCameraPosition(stage)\n }\n }\n\n Navigation.state = {\"screen\": \"ChapterScreen\", \"gameSlug\": gameSlug, \"chapterSlug\": slug, \"encounterSlug\": encounterSlug}\n})\n\nNavigation.on(\"/games/:gameSlug/overworld\", function(request) {\n const gameSlug = request.wildcards.gameSlug\n const game = games[gameSlug]\n if(game == undefined) throw new UserError(\"Could not find game:\", gameSlug)\n App.load({\"game\": {...game}})\n Navigation.state = {\"screen\": \"OverworldScreen\"}\n})\n\nNavigation.on(\"/games/:gameSlug/overworld/:overworldKey\", function(request) {\n Navigation.state = {\"screen\": \"OverworldScreen\", \"overworldKey\": request.wildcards.overworldKey}\n})\n\nNavigation.on(\"/credits\", function(request) {\n Audiomix.trigger(\"Music:Credits\")\n Navigation.state = {\"screen\": \"CreditsScreen\"}\n})\n\n/////////////////\n// DEV ROUTES //\n///////////////\n\nNavigation.on(\"/dev\", function(request) {\n Navigation.state = {\"screen\": \"DevHellScreen\"}\n})\n\nNavigation.on(\"/dev/tests\", function(request) {\n Testlaunch.perform(tests)\n Navigation.state = {\"screen\": \"DevTestListScreen\"}\n})\n\nNavigation.on(\"/dev/tests/:testslug\", function(request) {\n const testslug = request.wildcards.testslug\n const test = tests.find((test) => test.slug == testslug)\n if(test == undefined) {\n throw new UserError(\"Could not find test \" + testslug)\n }\n Testlaunch.perform(test)\n Navigation.state = {\"screen\": \"DevTestScreen\", \"test\": test}\n})\n\nNavigation.on(\"/dev/audio\", function(request) {\n Navigation.state = {\"screen\": \"DevAudioListScreen\"}\n})\n\nNavigation.on(\"/dev/experiment\", function(request) {\n Navigation.state = {\"screen\": \"DevExperimentScreen\"}\n})\n\nNavigation.on(\"/dev/units\", function(request) {\n Navigation.state = {\"screen\": \"DevUnitListScreen\"}\n})\n\nNavigation.on(\"/dev/chapters\", function(request) {\n Navigation.state = {\"screen\": \"DevChapterListScreen\"}\n})\n\nNavigation.on(\"/dev/encounterEditor\", function(request) {\n this.areDevPanelsOpen = true\n this.inProtoMode = true\n Navigation.state = {\"screen\": \"DevEncounterEditorScreen\"}\n})\n\n//////////////////\n// MISC ROUTES //\n////////////////\n\nNavigation.on(\"/screens/:screenName\", function(request) {\n Navigation.state = {\"screen\": request.wildcards.screenName}\n})\n\nNavigation.on(\"/*\", function(request) {\n throw new UserError(\"Could not find \" + request.path)\n})\n\nNavigation.onUserError = function(request) {\n Navigation.state = {\"screen\": \"ErrorScreen\", \"message\": request.error.message}\n}\nNavigation.onError = function(request) {\n Navigation.state = {\"screen\": \"ErrorScreen\", \"message\": \"Something went wrong!!\"}\n}\n", "import App from \"@frog/source/models/App.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport World from \"@frog/source/models/World.js\"\nimport Delta from \"@frog/source/models/Delta.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Objdict from \"objdict\"\n\nimport * as Motions from \"@frog/source/juice/utility/Motions.js\"\nimport Timings from \"@frog/source/juice/utility/Timings.js\"\nimport {colortween, tween} from \"@frog/source/juice/utility/Tweens.js\"\n\nimport skills from \"@frog/source/data/skills.js\"\nimport animations from \"@frog/source/juice/animations.js\"\nimport app from \"@frog/source/models/App.js\"\n\n// import FMODManager from \"@frog/source/utility/FMOD/FMODManager.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\n\n// TODO: Combine with Step.js\nexport default class Step {\n static copy(step) {\n const copystep = {}\n for(let key in step) {\n copystep[key] = step[key]\n }\n return copystep\n // return {\n // \"type\": step.type, // \"move\" | \"invoke skill\" | \"death\",\n // \"alphastage\": step.alphastage,\n // \"omegastage\": step.omegastage,\n // \"deltastages\": step.deltastages,\n // // TOOD: ALL OF THIS IS COPY BY REFERENCE...?\n // }\n }\n static instantiate(step) {\n step.hasStarted = false\n step.hasFinished = false\n step.isInstantiated = true\n step.time = 0 // in milliseconds\n\n if(step.func != undefined) return step\n\n if(step.alphastage != undefined) {\n step.stage = Stage.copy(step.alphastage)\n }\n if(animations[step.type] != undefined) {\n step.animation = animations[step.type || \"invoke skill\"](step)\n }\n if(step.animation != undefined) {\n step.animation = Step.processAnimation(step.animation)\n }\n\n return step\n }\n static updateStep(step, delta) {\n step.hasStarted = true\n\n step.time += delta.ms\n step.accumulatedTime += delta.ms\n\n while(step.sequence.length > 0) {\n if(step.sequence[0] instanceof Function) {\n step.sequence[0].call()\n step.sequence.shift()\n continue\n }\n if(step.sequence[0].execute instanceof Function) {\n step.sequence[0].execute(step.time)\n }\n if(step.sequence[0].duration != undefined) {\n if(step.accumulatedTime > step.sequence[0].duration) {\n step.accumulatedTime -= step.sequence[0].duration\n step.sequence.shift()\n continue\n } else {\n break\n }\n }\n // else {\n // step.sequence.shift()\n // continue\n // }\n if(step.sequence[0].condition != undefined) {\n if(!!step.sequence[0].condition()) {\n step.sequence.shift()\n continue\n } else {\n break\n }\n }\n // if(step.sequence[0].isUnskippable == true) {\n // step.sequence.shift()\n // return\n // }\n }\n\n if(step.sequence.length == 0) {\n Step.finish(step)\n }\n }\n static finish(step) {\n step.hasFinished = true\n\n if(step.onFinish instanceof Function) {\n step.onFinish()\n }\n }\n // accepts: an array of either keyframes or subarrays of keyframes.\n // outputs: an array of keyframes\n static flattenKeyframes(keyframes) {\n let output = []\n keyframes.forEach((keyframe) => {\n if(keyframe instanceof Array) {\n output = output.concat(Step.flattenKeyframes(keyframe))\n } else {\n output.push(keyframe)\n }\n })\n return output\n }\n static processAnimation(animation) {\n animation.maxmark = 0\n\n // Flatten arrays of arrays of arrays of keyframes to just a single array of keyframes.\n animation.keyframes = Step.flattenKeyframes(animation.keyframes)\n\n // Remove any undefined keyframes, like conditionally skipped keyframes.\n animation.keyframes = animation.keyframes.filter((keyframe) => !!keyframe)\n\n // Separate each keyframe into their own timeline,\n // each for a different property.\n animation.timelines = {}\n animation.keyframes.forEach((keyframe) => {\n if(keyframe.dialogue != undefined) {\n animation.timelines[\"dialogue\"] = animation.timelines[\"dialogue\"] || []\n animation.timelines[\"dialogue\"].push({\n \"mark\": keyframe.mark,\n \"timing\": keyframe.timing,\n \"motion\": keyframe.motion,\n \"dialogue\": keyframe.dialogue\n })\n }\n // KEYFRAME SCHEMA v2 - a frame with timing and motion and a mark\n // to know when it happens, and then an object to be Delta.editStage'd,\n // currently only supporting keyframe.unit and keyframe.player\n if(keyframe.unit != undefined) {\n Object.keys(keyframe.unit).forEach((property) => {\n if(property == \"key\") return\n const timelineKey = keyframe.unit.key + \".\" + property\n\n animation.timelines[timelineKey] = animation.timelines[timelineKey] || []\n animation.timelines[timelineKey].push({\n \"mark\": keyframe.mark,\n \"timing\": keyframe.timing,\n \"motion\": keyframe.motion,\n \"unit\": {\n \"key\": keyframe.unit.key,\n [property]: keyframe.unit[property]\n },\n })\n })\n }\n if(keyframe.player != undefined) {\n Object.keys(keyframe.player).forEach((property) => {\n if(property == \"key\") return\n const timelineKey = \"player\" + \".\" + property\n\n animation.timelines[timelineKey] = animation.timelines[timelineKey] || []\n animation.timelines[timelineKey].push({\n \"mark\": keyframe.mark,\n \"timing\": keyframe.timing,\n \"motion\": keyframe.motion,\n \"player\": {\n [property]: keyframe.player[property]\n },\n })\n })\n }\n\n // KEYFRAME SCHEMA v1 - a big object that had a type (to decide between\n // particles and units) and key, a bunch of meta tweening data, and then\n // all other keys were to be tween'd individually. and of course a mark for\n // when to make this frame happen!\n if(keyframe.unit == undefined) {\n Object.keys(keyframe).forEach((key) => {\n if(key == \"key\"\n || key == \"mark\"\n || key == \"type\"\n || key == \"timing\"\n || key == \"motion\") {\n return\n }\n\n // keyframe has many properties.\n // key == property key\n\n const timelineKey = (keyframe.key !== undefined ? keyframe.key + \".\" : \"\") + key\n\n animation.timelines[timelineKey] = animation.timelines[timelineKey] || []\n animation.timelines[timelineKey].push({\n \"key\": keyframe.key,\n \"mark\": keyframe.mark,\n \"type\": keyframe.type,\n \"timing\": keyframe.timing,\n \"motion\": keyframe.motion,\n [key]: keyframe[key]\n })\n })\n }\n\n if(animation.maxmark < keyframe.mark + (keyframe.duration || 0)) {\n animation.maxmark = keyframe.mark + (keyframe.duration || 0)\n }\n })\n // console.log(JSON.stringify(animation.timelines[\"audio\"]))\n // console.log(animation.timelines) // DEBUG\n\n // Sort each timeline.\n Objdict.forEach(animation.timelines, (timeline) => {\n timeline.sort((a, b) => {\n if(a.mark < b.mark) return -1\n if(a.mark > b.mark) return +1\n return 0\n })\n })\n\n return animation\n }\n static executeAnimation({animation, stage, currentDuration}) {\n const tweenFrame = {\"mark\": currentDuration}\n\n if(animation.timelines != undefined) {\n Objdict.forEach(animation.timelines, (timeline) => {\n while(timeline.length > 0\n && timeline[0] != undefined\n && timeline[0].mark < tweenFrame.mark) {\n if(timeline[0].type == \"log\") {\n Step.performFrame(stage, timeline[0])\n timeline.shift()\n } else if(timeline[0].do instanceof Function) {\n timeline[0].do()\n timeline.shift()\n } else if(timeline[0].func instanceof Function) {\n // this is not to be confused with step.func, this is step.deltastages[x].func.\n timeline[0].func()\n } else if(timeline[0].function instanceof Function) {\n timeline[0].function()\n } else if(timeline[0].audio != undefined) {\n Step.performFrame(stage, timeline[0])\n timeline.shift()\n } else {\n // Run this frame for every frame in-between\n\n const previousFrame = timeline[0]\n const nextFrame = timeline[1]\n Step.performFrame(stage, previousFrame, tweenFrame, nextFrame)\n }\n\n if(timeline[1] != undefined\n && timeline[1].mark < tweenFrame.mark) {\n timeline.shift()\n continue\n } else {\n return\n }\n }\n })\n }\n }\n static performFrame(stage, previousFrame, tweenFrame, nextFrame) {\n tweenFrame = tweenFrame || previousFrame\n nextFrame = nextFrame || previousFrame\n\n const progress = Math.min(1, (tweenFrame.mark - previousFrame.mark) / (nextFrame.mark - previousFrame.mark))\n const timing = nextFrame.timing || Timings.linear\n const motion = nextFrame.motion || Motions.line\n\n if(previousFrame.dialogue != undefined) {\n stage.dialogue = stage.dialogue || {}\n stage.dialogue.text = previousFrame.dialogue.text\n stage.dialogue.tags = previousFrame.dialogue.tags\n stage.dialogue.index = previousFrame.dialogue.index\n stage.dialogue.type = previousFrame.dialogue.type\n stage.dialogue.data = previousFrame.dialogue.data\n // stage.dialogue.speakingCharacter = previousFrame.dialogue.speakingCharacter\n\n // stage.dialogue.characters = stage.dialogue.characters || {}\n // stage.dialogue.characters[stage.dialogue.speakingCharacter] = stage.dialogue.characters[stage.dialogue.speakingCharacter] || {}\n // stage.dialogue.characters[stage.dialogue.speakingCharacter].tags = stage.dialogue.characters[stage.dialogue.speakingCharacter].tags || {}\n // Objdict.forEach(previousFrame.dialogue.tags, (value, key) => {\n // if(key == \"_\") return\n // stage.dialogue.characters[stage.dialogue.speakingCharacter].tags[key] = value\n // })\n // COPIED FROM DELTA.JS\n }\n\n // KEYFRAME SCHEMA v2\n if(previousFrame.unit != undefined) {\n if(previousFrame.unit.key == undefined) {\n return\n }\n\n const unit = stage.units[previousFrame.unit.key]\n if(unit == undefined) return\n\n const previousUnit = previousFrame.unit\n const nextUnit = nextFrame.unit\n\n const UnitProperties = {\n \"position\": \"motiontween\",\n \"opacity\": \"tween\",\n \"image\": \"static\",\n \"health\": \"static\",\n \"armor\": \"static\",\n \"inventory\": \"static\",\n \"affiliation\": \"static\",\n // \"static\": the moment this becomes the previousFrame, it happens\n // \"tween\": so long as the previousFrame also has this property,\n // this will start tweening it to moment this becomes the nextFrame.\n // we do not currently check nextFrame at all, so if the previous\n // frame is missing it, we don't default it. that would be wild\n // to try coding, right? because we'd be assuming that this is\n // where the animation starts from, and would need to backfill\n // a frame for that before the next frame. yeah, that'd suck.\n }\n\n Object.keys(previousUnit).forEach((property) => {\n if(property == \"key\") return\n\n // for all of these tweens, do i need to be checking if\n // next frame exists? currently, it defaults to this previous\n // frame, which owuld mean i'm just tweening from me to me.\n // if next frame exists but the propety isn't there? should\n // i default it? woudl that ever happen with this system of\n // corraled units?\n\n if(previousUnit[property] == undefined) {\n return\n }\n\n if(nextUnit[property] != undefined) {\n if(UnitProperties[property] == \"tween\") {\n unit[property] = tween(previousUnit[property], nextUnit[property], timing(progress))\n return\n }\n if(UnitProperties[property] == \"motiontween\") {\n unit[property] = motion(previousUnit[property], nextUnit[property], timing(progress))\n return\n }\n if(UnitProperties[property] == \"colortween\") {\n unit[property] = colortween(previousUnit[property], nextUnit[property], timing(progress))\n return\n }\n }\n\n // if(UnitProperties[property] == \"static\"\n // || UnitProperties[property] == undefined) {\n unit[property] = previousUnit[property]\n if(previousUnit[property] === null) {\n unit[property] = undefined\n }\n\n // i am currently supporting null for disabling a property.\n // hey what does that mean if i try tweening between a valid\n // value and null???\n })\n }\n // This is still in the keyframe v2 schema, but is not tweening, just static jumps.\n if(previousFrame.player != undefined) {\n const previousPlayer = previousFrame.player\n const nextPlayer = nextFrame.player\n\n // todo: hey, why am I rewriting what I already wrote in delta.editStage..?\n // shouldn't i be callign that here?\n // oh, because of tweening, like in score.\n\n if(previousPlayer.score !== undefined\n && nextPlayer.score !== undefined) {\n // stage.player.score = previousPlayer.score\n stage.player.score = tween(previousPlayer.score, nextPlayer.score, timing(progress))\n }\n\n if(previousPlayer.inventory !== undefined) {\n if(previousPlayer.inventory.items != undefined) {\n Objdict.forEach(previousPlayer.inventory.items, (item, key) => {\n if(item == undefined) {\n delete stage.player.inventory.items[key]\n } else {\n stage.player.inventory.items[key] = item\n }\n })\n }\n }\n }\n\n if(previousFrame.audio != undefined) {\n if(previousFrame.audio.triggerKey != undefined) {\n Audiomix.trigger(previousFrame.audio.triggerKey)\n }\n }\n\n // KEYFRAME SCHEMA v1\n // WHAT HAPPENS IF THE POSITION IS NOT DEFINED AND WE\n // STILL TRY TO TWEEN IT? BE SURE TO DEFAULT OR ABORT.\n if(previousFrame.type == \"particle\") {\n stage.particles = stage.particles || {}\n stage.particles[previousFrame.key] = stage.particles[previousFrame.key] || {}\n if(previousFrame.image != undefined) {\n stage.particles[previousFrame.key].image = previousFrame.image\n }if(previousFrame.space != undefined) {\n stage.particles[previousFrame.key].space = previousFrame.space\n }\n if(previousFrame.text != undefined) {\n stage.particles[previousFrame.key].text = previousFrame.text\n }\n if(previousFrame.stack != undefined) {\n stage.particles[previousFrame.key].stack = previousFrame.stack\n }\n if(previousFrame.color != undefined) {\n stage.particles[previousFrame.key].color = previousFrame.color\n }\n if(previousFrame.height != undefined) {\n stage.particles[previousFrame.key].height = previousFrame.height\n }\n if(previousFrame.width != undefined) {\n stage.particles[previousFrame.key].width = previousFrame.width\n }\n if(previousFrame.anchor != undefined) {\n stage.particles[previousFrame.key].anchor = previousFrame.anchor\n }\n if(previousFrame.scale != undefined) {\n if(nextFrame.scale != undefined) {\n if(previousFrame.scale instanceof Object) {\n stage.particles[previousFrame.key].scale = motion(previousFrame.scale, nextFrame.scale, timing(progress))\n } else {\n stage.particles[previousFrame.key].scale = tween(previousFrame.scale, nextFrame.scale, timing(progress))\n }\n } else {\n if(previousFrame.scale instanceof Object) {\n stage.particles[previousFrame.key].scale = stage.particles[previousFrame.key].scale || {}\n stage.particles[previousFrame.key].scale.x = previousFrame.scale.x\n stage.particles[previousFrame.key].scale.y = previousFrame.scale.y\n } else {\n stage.particles[previousFrame.key].scale = previousFrame.scale\n }\n }\n }\n if(previousFrame.tint != undefined) {\n stage.particles[previousFrame.key].tint = previousFrame.tint // TODO: tween\n }\n if(previousFrame.opacity != undefined && nextFrame.opacity != undefined) {\n stage.particles[previousFrame.key].opacity = tween(previousFrame.opacity, nextFrame.opacity, timing(progress))\n }\n if(previousFrame.position != undefined && nextFrame.position != undefined) {\n stage.particles[previousFrame.key].position = motion(previousFrame.position, nextFrame.position, timing(progress))\n }\n if(previousFrame.followTerrain != undefined) {\n const currentPosition = stage.particles[previousFrame.key].position\n if(currentPosition != undefined) {\n const flooredPosition = { \"x\": Math.floor(currentPosition.x), \"y\": Math.floor(currentPosition.y) }\n const terrain = World.getTerrain(stage.world, flooredPosition)\n let zOverride = null\n if(terrain != undefined) {\n zOverride = terrain.size.z\n if(previousFrame.followTerrain.zOffset != undefined) {\n zOverride += previousFrame.followTerrain.zOffset\n }\n }\n\n if(zOverride != null) {\n stage.particles[previousFrame.key].zOverride = zOverride\n } else {\n stage.particles[previousFrame.key].zOverride = undefined\n }\n }\n }\n if(previousFrame.anchor != undefined) { // && nextFrame.anchor != undefined) {\n stage.particles[previousFrame.key].anchor = previousFrame.anchor // motion(previousFrame.anchor, nextFrame.anchor, timing(progress))\n }\n if(previousFrame.rotation != undefined && nextFrame.rotation != undefined) {\n stage.particles[previousFrame.key].rotation = tween(previousFrame.rotation, nextFrame.rotation, timing(progress))\n }\n // TODO: this is done... when it's a previous frame, yeah? like health and the like? is that wieird?\n if(previousFrame.delete == true) {\n delete stage.particles[previousFrame.key]\n }\n return\n }\n\n if(previousFrame.type == \"log\") {\n stage.logs = stage.logs || []\n stage.logs.push({\n \"text\": previousFrame.text,\n })\n return\n }\n }\n}\n", "// TODO: Merge with Sequence class in Director.js\n\nimport Step from \"@frog/source/juice/Step.js\"\n\nexport default class Sequence {\n static seek(sequence) {\n if(sequence.steps == undefined) {\n return\n }\n Sequence.skip(sequence)\n\n // // Skip to the next \"important step\"\n // // or until their are no steps left.\n // while(sequence.steps.length > 0) {\n // if(sequence.steps[0].isImportant) {\n // break\n // }\n // if(sequence.steps[0].animation != undefined\n // && sequence.steps[0].animation.isImportant == true) {\n // break\n // }\n // Sequence.skip(sequence)\n // }\n }\n static skip(sequence) {\n const step = sequence.steps[0]\n let toBeRemoved = true\n\n if(step != undefined) {\n if(step.func instanceof Function) {\n step.func()\n }\n if(step?.animation?.keyframes != undefined) {\n step.animation.keyframes.forEach((keyframe) => {\n if(keyframe.function != undefined) {\n keyframe.function()\n }\n if(keyframe.func != undefined) {\n keyframe.func()\n }\n // TODO: keyframe.do and keyframe.func\n })\n if(step.animation.minduration != undefined\n && step.time < step.animation.minduration) {\n step.time = step.animation.minduration\n toBeRemoved = false\n\n Step.executeAnimation({\n \"stage\": step.stage,\n \"animation\": step.animation,\n \"currentDuration\": step.animation.minduration\n })\n }\n }\n // step.deltastages.forEach((deltastage) => {\n // if(deltastage.function instanceof Function) {\n // deltastage.function()\n // }\n // })\n }\n\n if(toBeRemoved) {\n sequence.steps.shift()\n\n if(sequence.isLooping == true) {\n sequence.steps.push(Step.instantiate(step))\n }\n }\n }\n}\n", "const EXPERIENCE_TO_NEXT_LEVELUP = 6\n\nexport default function getLevelStatus(score = 0) {\n return {\n \"level\": Math.floor(score / EXPERIENCE_TO_NEXT_LEVELUP) + 1,\n \"experience\": score % EXPERIENCE_TO_NEXT_LEVELUP,\n \"maxexperience\": EXPERIENCE_TO_NEXT_LEVELUP,\n }\n}\n", "import Keyb from \"keyb\"\nimport Pointer from \"poin\"\nimport Joyp from \"joyp\"\n\nimport Sequence from \"@frog/source/models/Sequence.js\"\n\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Selection from \"@frog/source/models/Selection.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport InkDialogue from \"@frog/source/utility/integration/InkDialogue.js\"\nimport getLevelStatus from \"@frog/source/models/logic/getLevelStatus.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport games from \"@frog/source/data/games/index.js\"\n\nimport {nanoid} from \"nanoid\"\nimport seedrandom from \"seedrandom\"\nimport querystring from \"query-string\"\n\nexport default class Chapter {\n static load(proto) {\n const chapter = new Chapter()\n chapter.type = \"combat\"\n chapter.player = proto.player || {\"affiliation\": \"good\"}\n chapter.slug = proto.chapter.slug\n chapter.gameslug = proto.gameslug\n chapter.images = proto.chapter.images\n chapter.audio = proto.chapter.audio\n chapter.hasTutorial = proto.chapter.hasTutorial\n chapter.hasPreparePhase = proto.chapter.hasPreparePhase\n chapter.hasUndoEndTurnButtons = proto.chapter.hasUndoEndTurnButtons\n chapter.isRandomized = proto.chapter.isRandomized\n\n chapter.decorations = proto.chapter.decorations || {}\n\n if(chapter.audio != undefined) {\n if(chapter.audio instanceof Array != true) {\n Audiomix.trigger(chapter.audio)\n } else {\n chapter.audio.forEach((audio) => {\n Audiomix.trigger(audio)\n })\n }\n }\n\n chapter.encounters = proto.chapter.encounters\n\n const query = querystring.parse(window.location.search)\n const seed = query.seed || proto.randomSeed || nanoid()\n Random.setSeed(seed)\n\n // chapter.events = proto.chapter.events\n chapter.stage = Stage.load({\n \"stage\": proto.chapter.stage,\n \"player\": proto.player,\n \"chapterParty\": proto.chapterParty,\n \"hasPreparePhase\": chapter.hasPreparePhase,\n \"startingEncounter\": proto.chapter.startingEncounter,\n \"chapterSlug\": chapter.slug,\n \"gameSlug\": chapter.gameslug,\n })\n if(proto.chapter.stage != undefined) {\n Dev.loadedProtostage = proto.chapter.stage\n }\n // let that = chapter\n // for(let key in that) {\n // this[key] = that[key]\n // }\n\n chapter.previousStages = []\n\n\n chapter.sequence = {\n \"steps\": []\n // .concat(Stage.getEventSteps(chapter.stage, \"turn:0:start\"))\n // .concat(Stage.getEventSteps(chapter.stage, \"turn:every:start\"))\n // .concat(Stage.getEventSteps(chapter.stage, \"turn:every-even:start\"))\n }\n if(chapter.sequence.steps != undefined\n && chapter.sequence.steps.length > 0) {\n chapter.stage = chapter.sequence.steps[chapter.sequence.steps.length - 1].omegastage\n }\n\n if(chapter.hasPreparePhase == true) {\n chapter.startPreparePhase()\n } else {\n chapter.startPlayPhase()\n }\n\n chapter.selection = new Selection({\"chapter\": chapter})\n\n return chapter\n }\n startPreparePhase() {\n this.phase = \"prepare\"\n }\n startPlayPhase({dialogue} = {}) {\n this.phase = \"play\"\n\n const events = []\n .concat(Stage.getEventSteps(this.stage, \"chapter:start\"))\n .concat(Stage.getEventSteps(this.stage, \"turn:0:start\"))\n .concat(Stage.getEventSteps(this.stage, \"turn:every:start\"))\n .concat(Stage.getEventSteps(this.stage, \"turn:every-even:start\"))\n const steps = Stage.processEventSteps(this.stage, events)\n\n if(steps.length > 0) {\n this.stage = steps[steps.length - 1].omegastage\n Stage.calculateActions(this.stage)\n this.sequence = {\"steps\": steps}\n }\n\n Stage.calculateActions(this.stage)\n }\n update(delta) {\n this.selection.update(delta)\n\n if(Dev.inProtoMode == false) {\n if(Keyb.wasJustPressed(\"Z\")\n || Joyp.wasJustPressed(0, \"left-bumper\", delta.ms)\n || Joyp.wasJustPressed(0, \"right-bumper\", delta.ms)) {\n Dev.actionTrace.push({\"type\": \"undoAction\"})\n Dev.recordSavestate(\"livePlaytest\")\n this.undoAction()\n }\n }\n\n if(Keyb.isPressed(\"<control>\") && Keyb.isPressed(\"R\")) {\n App.game.chapter.restart()\n }\n\n if(Dev.inProtoMode == false\n && this.stage != undefined) {\n if(Pointer.wasJustPressed(\"primary\", true, delta.ms)\n || Keyb.wasJustPressed(\"<space>\", delta.ms)\n || Joyp.wasJustPressed(0, \"south-button\", delta.ms)) {\n if(this.sequence != undefined) {\n Sequence.seek(this.sequence)\n }\n }\n if(Keyb.wasJustPressed(\"<enter>\")) {\n if(App.unskippable != true) {\n // TODO: this is maybe causing errors?\n this.sequence = undefined\n }\n }\n Director.updateSequence({\n \"sequence\": this.sequence,\n \"delta\": delta,\n })\n }\n }\n setStage(stage) {\n this.previousStages.push(this.stage)\n if(this.previousStages.length > 10) {\n this.previousStages.shift()\n }\n\n this.stage = stage\n }\n clearPreviousStages() {\n this.previousStages = []\n }\n reloadStage(stage) {\n let protogame = games[this.gameslug]\n let protochapter = protogame.chapters[this.slug]\n this.stage = Stage.load({\n \"stage\": protochapter.stage,\n \"player\": protogame.player,\n \"chapterParty\": protogame.chapterParty,\n \"hasPreparePhase\": protochapter.hasPreparePhase,\n \"startingEncounter\": this.stage.currentEncounterKey\n })\n this.recalculateStage()\n Dev.actionTrace = []\n }\n killAllEnemies() {\n this.saveStage()\n let currentZone = this.stage.encounters[this.stage.currentEncounterKey]\n Object.values(this.stage.units).map((unit) => {\n if(Zone.isInBounds(currentZone, unit.position)) {\n if(unit.affiliation == \"bad\" || unit.jobKey == \"door\") {\n unit.health = 0\n }\n }\n })\n this.recalculateStage()\n }\n undoAction() {\n if(this.previousStages.length > 0) {\n this.stage = this.previousStages.pop()\n\n // If we are also recording the\n // actions for a test snapshot, then\n // make sure we undo here as well.\n // TODO: read the protoactions from\n // our previousStages list?\n if(window.frog != undefined\n && window.frog.test != undefined\n && window.frog.test.snapshot != undefined) {\n window.frog.test.snapshot.protoactions.pop()\n\n // TODO: What happens if we undo before\n // the snapshot.alphastage? All following\n // protoactions wouldn't make any sense.\n }\n\n Audiomix.trigger(\"UndoAction\")\n // if(this.selection.canSelect(this.selection.selectedUnitKey, this.stage) == false) {\n // this.selection.reset()\n // }\n this.selection.reset()\n\n this.sequence = undefined\n }\n }\n performAction(action) {\n // if(window.frog != undefined\n // && window.frog.test != undefined\n // && window.frog.test.snapshot != undefined) {\n // window.frog.test.snapshot.protoactions.push({\n // \"unitKey\": action.performerKey,\n // \"position\": Geometry.copy(action.position),\n // \"actionKey\": action.key,\n // })\n // }\n\n App.game.chapter.sequence = {\"steps\": action.steps}\n // action.omegastage.steps = steps\n Stage.calculateActions(action.omegastage)\n this.setStage(action.omegastage)\n\n // Auto-finishing\n if(this.hasAutoEnd === true\n || this.hasUndoEndTurnButtons === false) {\n const hasFinishedTurn = Object.values(action.omegastage.units).filter((unit) => {\n if(unit.affiliation != App.game.chapter.stage.player.affiliation) return false\n if(unit.isDead == true) return false\n if(unit.hasBeenRemoved == true) return false\n if(Zone.isOutOfBounds(action.alphastage.encounters[action.alphastage.currentEncounterKey].zone, unit.position)) return false\n if(unit.subclasses != undefined) {\n return unit.energy[1] != false\n || unit.energy[2] != false\n } else {\n return unit.energy[1] != false\n }\n\n }).length == 0\n if(hasFinishedTurn == true) {\n return this.endPlayerTurn(action.omegastage)\n }\n }\n\n return action.omegastage\n }\n saveStage() {\n const omegastage = Stage.copy(this.stage)\n omegastage.steps = []\n this.setStage(omegastage)\n }\n recalculateStage() {\n Stage.calculateActions(this.stage, {\"force\": true})\n }\n endPlayerTurn(stage, options) {\n stage = stage || this.stage\n options = options || {}\n\n Audiomix.trigger(\"EndTurn\")\n\n // if(stage.turn.affiliation != this.player.affiliation) {\n // return console.error(\"not currently player turn.\")\n // }\n\n this.selection.reset()\n\n // And now.. perform the next turn!!\n\n if(stage.nextTurn == undefined) {\n Stage.calculateNextTurn(stage)\n }\n\n options.isReplayingActionTrace = options.isReplayingActionTrace || false\n if(options.isReplayingActionTrace == false) {\n Dev.actionTrace.push({\"type\": \"endTurn\"})\n Dev.recordSavestate(\"livePlaytest\")\n }\n\n const steps = stage.nextTurn.steps\n App.game.chapter.sequence = {\"steps\": steps}\n if(options.isReplayingActionTrace == false) {\n const savestateEvent = steps.find((step) => step.name == \"SavestateCapture\")\n if(savestateEvent != undefined) Dev.recordSavestate(savestateEvent.savestateSlug, savestateEvent.data)\n }\n\n\n const omegastage = steps[steps.length - 1].omegastage\n omegastage.steps = steps\n Stage.calculateActions(omegastage || this.stage)\n this.setStage(omegastage)\n this.clearPreviousStages()\n\n return omegastage\n }\n restart(options) {\n options = options || {}\n Dev.actionTrace = []\n App.load({\n \"game\": {\n \"slug\": this.gameslug,\n \"player\": App.game.player,\n \"chapter\": games[this.gameslug].chapters[App.game.chapter.slug],\n \"configuration\": games[this.gameslug].configuration,\n \"randomSeed\": options.randomSeed,\n }\n })\n }\n}\n", "import Chapter from \"@frog/source/models/Chapter.js\"\n\nexport default class Game {\n static update(game, delta) {\n if(game.chapter != undefined\n && game.chapter.update != undefined) {\n game.chapter.update(delta)\n }\n }\n static load(game) {\n if(game.chapter != undefined) {\n game.chapter = Chapter.load({\n \"chapter\": game.chapter,\n \"player\": game.player,\n \"gameslug\": game.slug,\n \"randomSeed\": game.randomSeed,\n })\n }\n return game\n }\n static save(game) {\n // console.log(\"Saving game...\", game)\n }\n}\n", "import Keyb from \"keyb\"\nimport Joyp from \"joyp\"\nimport Screenfull from \"screenfull\"\nimport Resize from \"@frog/source/utility/Resize.js\"\n\nimport Game from \"@frog/source/models/Game.js\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Step from \"@frog/source/juice/Step.js\"\n\nimport Stage from \"@frog/source/models/Stage.js\"\nimport Unit from \"@frog/source/models/Unit.js\"\nimport skills from \"@frog/source/data/skills.js\"\n\nexport default new class App {\n constructor() {\n window.frog = window.frog || {}\n window.frog.app = this\n\n this.tutorial = {}\n }\n update(delta) {\n if(Keyb.isPressed(\"<control>\")\n && Keyb.isPressed(\"Q\")) {\n Navigation.go(\"/title\")\n }\n\n if(Keyb.isPressed(\"<shift>\")\n && Keyb.wasJustPressed(\"F\")) {\n Screenfull.toggle()\n }\n\n if(Navigation.state.screen == \"ChapterScreen\") {\n if(Dev.inProtoMode == true) {\n Navigation.state.escape = undefined\n }\n if(Dev.inProtoMode == false\n && Keyb.wasJustPressed(\"<escape>\", delta.ms)) {\n if(Navigation.state.escape == undefined) {\n Navigation.state.escape = {\"section\": \"MainSection\"}\n } else if(Navigation.state.escape != undefined) {\n if(Navigation.state.escape.section == \"MainSection\") {\n Navigation.state.escape = undefined\n } else if(Navigation.state.escape.section == \"OptionsSection\") {\n Navigation.state.escape.section = \"MainSection\"\n }\n }\n }\n\n if(Navigation.state != undefined\n && Navigation.state.escape != undefined) {\n return // paused!!\n }\n }\n\n if(this.game != undefined) {\n Game.update(this.game, delta)\n }\n }\n load(app) {\n this.game = Game.load(app.game)\n }\n getActiveStage() {\n if(this.game != undefined\n && this.game.chapter != undefined\n && this.game.chapter.sequence != undefined\n && this.game.chapter.sequence.steps != undefined\n && this.game.chapter.sequence.steps[0] != undefined\n && this.game.chapter.sequence.steps[0].stage != undefined) {\n return this.game.chapter.sequence.steps[0].stage\n }\n if(this.game != undefined\n && this.game.chapter != undefined\n && this.game.chapter.sequence != undefined\n && this.game.chapter.sequence.steps != undefined\n && this.game.chapter.sequence.steps[0] != undefined\n && this.game.chapter.sequence.steps[0].omegastage != undefined) {\n return this.game.chapter.sequence.steps[0].omegastage\n }\n if(this.game != undefined\n && this.game.chapter != undefined) {\n return this.game.chapter.stage\n }\n }\n}\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.polygonClipping = factory());\n})(this, (function () { 'use strict';\n\n /**\n * splaytree v3.1.2\n * Fast Splay tree for Node and browser\n *\n * @author Alexander Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\n\n function __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n }\n var Node = /** @class */function () {\n function Node(key, data) {\n this.next = null;\n this.key = key;\n this.data = data;\n this.left = null;\n this.right = null;\n }\n return Node;\n }();\n\n /* follows \"An implementation of top-down splaying\"\r\n * by D. Sleator <sleator@cs.cmu.edu> March 1992\r\n */\n function DEFAULT_COMPARE(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n /**\r\n * Simple top down splay, not requiring i to be in the tree t.\r\n */\n function splay(i, t, comparator) {\n var N = new Node(null, null);\n var l = N;\n var r = N;\n while (true) {\n var cmp = comparator(i, t.key);\n //if (i < t.key) {\n if (cmp < 0) {\n if (t.left === null) break;\n //if (i < t.left.key) {\n if (comparator(i, t.left.key) < 0) {\n var y = t.left; /* rotate right */\n t.left = y.right;\n y.right = t;\n t = y;\n if (t.left === null) break;\n }\n r.left = t; /* link right */\n r = t;\n t = t.left;\n //} else if (i > t.key) {\n } else if (cmp > 0) {\n if (t.right === null) break;\n //if (i > t.right.key) {\n if (comparator(i, t.right.key) > 0) {\n var y = t.right; /* rotate left */\n t.right = y.left;\n y.left = t;\n t = y;\n if (t.right === null) break;\n }\n l.right = t; /* link left */\n l = t;\n t = t.right;\n } else break;\n }\n /* assemble */\n l.right = t.left;\n r.left = t.right;\n t.left = N.right;\n t.right = N.left;\n return t;\n }\n function insert(i, data, t, comparator) {\n var node = new Node(i, data);\n if (t === null) {\n node.left = node.right = null;\n return node;\n }\n t = splay(i, t, comparator);\n var cmp = comparator(i, t.key);\n if (cmp < 0) {\n node.left = t.left;\n node.right = t;\n t.left = null;\n } else if (cmp >= 0) {\n node.right = t.right;\n node.left = t;\n t.right = null;\n }\n return node;\n }\n function split(key, v, comparator) {\n var left = null;\n var right = null;\n if (v) {\n v = splay(key, v, comparator);\n var cmp = comparator(v.key, key);\n if (cmp === 0) {\n left = v.left;\n right = v.right;\n } else if (cmp < 0) {\n right = v.right;\n v.right = null;\n left = v;\n } else {\n left = v.left;\n v.left = null;\n right = v;\n }\n }\n return {\n left: left,\n right: right\n };\n }\n function merge(left, right, comparator) {\n if (right === null) return left;\n if (left === null) return right;\n right = splay(left.key, right, comparator);\n right.left = left;\n return right;\n }\n /**\r\n * Prints level of the tree\r\n */\n function printRow(root, prefix, isTail, out, printNode) {\n if (root) {\n out(\"\" + prefix + (isTail ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 ') + printNode(root) + \"\\n\");\n var indent = prefix + (isTail ? ' ' : '\u2502 ');\n if (root.left) printRow(root.left, indent, false, out, printNode);\n if (root.right) printRow(root.right, indent, true, out, printNode);\n }\n }\n var Tree = /** @class */function () {\n function Tree(comparator) {\n if (comparator === void 0) {\n comparator = DEFAULT_COMPARE;\n }\n this._root = null;\n this._size = 0;\n this._comparator = comparator;\n }\n /**\r\n * Inserts a key, allows duplicates\r\n */\n Tree.prototype.insert = function (key, data) {\n this._size++;\n return this._root = insert(key, data, this._root, this._comparator);\n };\n /**\r\n * Adds a key, if it is not present in the tree\r\n */\n Tree.prototype.add = function (key, data) {\n var node = new Node(key, data);\n if (this._root === null) {\n node.left = node.right = null;\n this._size++;\n this._root = node;\n }\n var comparator = this._comparator;\n var t = splay(key, this._root, comparator);\n var cmp = comparator(key, t.key);\n if (cmp === 0) this._root = t;else {\n if (cmp < 0) {\n node.left = t.left;\n node.right = t;\n t.left = null;\n } else if (cmp > 0) {\n node.right = t.right;\n node.left = t;\n t.right = null;\n }\n this._size++;\n this._root = node;\n }\n return this._root;\n };\n /**\r\n * @param {Key} key\r\n * @return {Node|null}\r\n */\n Tree.prototype.remove = function (key) {\n this._root = this._remove(key, this._root, this._comparator);\n };\n /**\r\n * Deletes i from the tree if it's there\r\n */\n Tree.prototype._remove = function (i, t, comparator) {\n var x;\n if (t === null) return null;\n t = splay(i, t, comparator);\n var cmp = comparator(i, t.key);\n if (cmp === 0) {\n /* found it */\n if (t.left === null) {\n x = t.right;\n } else {\n x = splay(i, t.left, comparator);\n x.right = t.right;\n }\n this._size--;\n return x;\n }\n return t; /* It wasn't there */\n };\n /**\r\n * Removes and returns the node with smallest key\r\n */\n Tree.prototype.pop = function () {\n var node = this._root;\n if (node) {\n while (node.left) node = node.left;\n this._root = splay(node.key, this._root, this._comparator);\n this._root = this._remove(node.key, this._root, this._comparator);\n return {\n key: node.key,\n data: node.data\n };\n }\n return null;\n };\n /**\r\n * Find without splaying\r\n */\n Tree.prototype.findStatic = function (key) {\n var current = this._root;\n var compare = this._comparator;\n while (current) {\n var cmp = compare(key, current.key);\n if (cmp === 0) return current;else if (cmp < 0) current = current.left;else current = current.right;\n }\n return null;\n };\n Tree.prototype.find = function (key) {\n if (this._root) {\n this._root = splay(key, this._root, this._comparator);\n if (this._comparator(key, this._root.key) !== 0) return null;\n }\n return this._root;\n };\n Tree.prototype.contains = function (key) {\n var current = this._root;\n var compare = this._comparator;\n while (current) {\n var cmp = compare(key, current.key);\n if (cmp === 0) return true;else if (cmp < 0) current = current.left;else current = current.right;\n }\n return false;\n };\n Tree.prototype.forEach = function (visitor, ctx) {\n var current = this._root;\n var Q = []; /* Initialize stack s */\n var done = false;\n while (!done) {\n if (current !== null) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length !== 0) {\n current = Q.pop();\n visitor.call(ctx, current);\n current = current.right;\n } else done = true;\n }\n }\n return this;\n };\n /**\r\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\r\n */\n Tree.prototype.range = function (low, high, fn, ctx) {\n var Q = [];\n var compare = this._comparator;\n var node = this._root;\n var cmp;\n while (Q.length !== 0 || node) {\n if (node) {\n Q.push(node);\n node = node.left;\n } else {\n node = Q.pop();\n cmp = compare(node.key, high);\n if (cmp > 0) {\n break;\n } else if (compare(node.key, low) >= 0) {\n if (fn.call(ctx, node)) return this; // stop if smth is returned\n }\n node = node.right;\n }\n }\n return this;\n };\n /**\r\n * Returns array of keys\r\n */\n Tree.prototype.keys = function () {\n var keys = [];\n this.forEach(function (_a) {\n var key = _a.key;\n return keys.push(key);\n });\n return keys;\n };\n /**\r\n * Returns array of all the data in the nodes\r\n */\n Tree.prototype.values = function () {\n var values = [];\n this.forEach(function (_a) {\n var data = _a.data;\n return values.push(data);\n });\n return values;\n };\n Tree.prototype.min = function () {\n if (this._root) return this.minNode(this._root).key;\n return null;\n };\n Tree.prototype.max = function () {\n if (this._root) return this.maxNode(this._root).key;\n return null;\n };\n Tree.prototype.minNode = function (t) {\n if (t === void 0) {\n t = this._root;\n }\n if (t) while (t.left) t = t.left;\n return t;\n };\n Tree.prototype.maxNode = function (t) {\n if (t === void 0) {\n t = this._root;\n }\n if (t) while (t.right) t = t.right;\n return t;\n };\n /**\r\n * Returns node at given index\r\n */\n Tree.prototype.at = function (index) {\n var current = this._root;\n var done = false;\n var i = 0;\n var Q = [];\n while (!done) {\n if (current) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length > 0) {\n current = Q.pop();\n if (i === index) return current;\n i++;\n current = current.right;\n } else done = true;\n }\n }\n return null;\n };\n Tree.prototype.next = function (d) {\n var root = this._root;\n var successor = null;\n if (d.right) {\n successor = d.right;\n while (successor.left) successor = successor.left;\n return successor;\n }\n var comparator = this._comparator;\n while (root) {\n var cmp = comparator(d.key, root.key);\n if (cmp === 0) break;else if (cmp < 0) {\n successor = root;\n root = root.left;\n } else root = root.right;\n }\n return successor;\n };\n Tree.prototype.prev = function (d) {\n var root = this._root;\n var predecessor = null;\n if (d.left !== null) {\n predecessor = d.left;\n while (predecessor.right) predecessor = predecessor.right;\n return predecessor;\n }\n var comparator = this._comparator;\n while (root) {\n var cmp = comparator(d.key, root.key);\n if (cmp === 0) break;else if (cmp < 0) root = root.left;else {\n predecessor = root;\n root = root.right;\n }\n }\n return predecessor;\n };\n Tree.prototype.clear = function () {\n this._root = null;\n this._size = 0;\n return this;\n };\n Tree.prototype.toList = function () {\n return toList(this._root);\n };\n /**\r\n * Bulk-load items. Both array have to be same size\r\n */\n Tree.prototype.load = function (keys, values, presort) {\n if (values === void 0) {\n values = [];\n }\n if (presort === void 0) {\n presort = false;\n }\n var size = keys.length;\n var comparator = this._comparator;\n // sort if needed\n if (presort) sort(keys, values, 0, size - 1, comparator);\n if (this._root === null) {\n // empty tree\n this._root = loadRecursive(keys, values, 0, size);\n this._size = size;\n } else {\n // that re-builds the whole tree from two in-order traversals\n var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\n size = this._size + size;\n this._root = sortedListToBST({\n head: mergedList\n }, 0, size);\n }\n return this;\n };\n Tree.prototype.isEmpty = function () {\n return this._root === null;\n };\n Object.defineProperty(Tree.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tree.prototype, \"root\", {\n get: function () {\n return this._root;\n },\n enumerable: true,\n configurable: true\n });\n Tree.prototype.toString = function (printNode) {\n if (printNode === void 0) {\n printNode = function (n) {\n return String(n.key);\n };\n }\n var out = [];\n printRow(this._root, '', true, function (v) {\n return out.push(v);\n }, printNode);\n return out.join('');\n };\n Tree.prototype.update = function (key, newKey, newData) {\n var comparator = this._comparator;\n var _a = split(key, this._root, comparator),\n left = _a.left,\n right = _a.right;\n if (comparator(key, newKey) < 0) {\n right = insert(newKey, newData, right, comparator);\n } else {\n left = insert(newKey, newData, left, comparator);\n }\n this._root = merge(left, right, comparator);\n };\n Tree.prototype.split = function (key) {\n return split(key, this._root, this._comparator);\n };\n Tree.prototype[Symbol.iterator] = function () {\n var current, Q, done;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n current = this._root;\n Q = [];\n done = false;\n _a.label = 1;\n case 1:\n if (!!done) return [3 /*break*/, 6];\n if (!(current !== null)) return [3 /*break*/, 2];\n Q.push(current);\n current = current.left;\n return [3 /*break*/, 5];\n case 2:\n if (!(Q.length !== 0)) return [3 /*break*/, 4];\n current = Q.pop();\n return [4 /*yield*/, current];\n case 3:\n _a.sent();\n current = current.right;\n return [3 /*break*/, 5];\n case 4:\n done = true;\n _a.label = 5;\n case 5:\n return [3 /*break*/, 1];\n case 6:\n return [2 /*return*/];\n }\n });\n };\n return Tree;\n }();\n function loadRecursive(keys, values, start, end) {\n var size = end - start;\n if (size > 0) {\n var middle = start + Math.floor(size / 2);\n var key = keys[middle];\n var data = values[middle];\n var node = new Node(key, data);\n node.left = loadRecursive(keys, values, start, middle);\n node.right = loadRecursive(keys, values, middle + 1, end);\n return node;\n }\n return null;\n }\n function createList(keys, values) {\n var head = new Node(null, null);\n var p = head;\n for (var i = 0; i < keys.length; i++) {\n p = p.next = new Node(keys[i], values[i]);\n }\n p.next = null;\n return head.next;\n }\n function toList(root) {\n var current = root;\n var Q = [];\n var done = false;\n var head = new Node(null, null);\n var p = head;\n while (!done) {\n if (current) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length > 0) {\n current = p = p.next = Q.pop();\n current = current.right;\n } else done = true;\n }\n }\n p.next = null; // that'll work even if the tree was empty\n return head.next;\n }\n function sortedListToBST(list, start, end) {\n var size = end - start;\n if (size > 0) {\n var middle = start + Math.floor(size / 2);\n var left = sortedListToBST(list, start, middle);\n var root = list.head;\n root.left = left;\n list.head = list.head.next;\n root.right = sortedListToBST(list, middle + 1, end);\n return root;\n }\n return null;\n }\n function mergeLists(l1, l2, compare) {\n var head = new Node(null, null); // dummy\n var p = head;\n var p1 = l1;\n var p2 = l2;\n while (p1 !== null && p2 !== null) {\n if (compare(p1.key, p2.key) < 0) {\n p.next = p1;\n p1 = p1.next;\n } else {\n p.next = p2;\n p2 = p2.next;\n }\n p = p.next;\n }\n if (p1 !== null) {\n p.next = p1;\n } else if (p2 !== null) {\n p.next = p2;\n }\n return head.next;\n }\n function sort(keys, values, left, right, compare) {\n if (left >= right) return;\n var pivot = keys[left + right >> 1];\n var i = left - 1;\n var j = right + 1;\n while (true) {\n do i++; while (compare(keys[i], pivot) < 0);\n do j--; while (compare(keys[j], pivot) > 0);\n if (i >= j) break;\n var tmp = keys[i];\n keys[i] = keys[j];\n keys[j] = tmp;\n tmp = values[i];\n values[i] = values[j];\n values[j] = tmp;\n }\n sort(keys, values, left, j, compare);\n sort(keys, values, j + 1, right, compare);\n }\n\n /**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\n\n const isInBbox = (bbox, point) => {\n return bbox.ll.x <= point.x && point.x <= bbox.ur.x && bbox.ll.y <= point.y && point.y <= bbox.ur.y;\n };\n\n /* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\n const getBboxOverlap = (b1, b2) => {\n // check if the bboxes overlap at all\n if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null;\n\n // find the middle two X values\n const lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;\n const upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x;\n\n // find the middle two Y values\n const lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;\n const upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y;\n\n // put those middle values together to get the overlap\n return {\n ll: {\n x: lowerX,\n y: lowerY\n },\n ur: {\n x: upperX,\n y: upperY\n }\n };\n };\n\n /* Javascript doesn't do integer math. Everything is\n * floating point with percision Number.EPSILON.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\n\n let epsilon$1 = Number.EPSILON;\n\n // IE Polyfill\n if (epsilon$1 === undefined) epsilon$1 = Math.pow(2, -52);\n const EPSILON_SQ = epsilon$1 * epsilon$1;\n\n /* FLP comparator */\n const cmp = (a, b) => {\n // check if they're both 0\n if (-epsilon$1 < a && a < epsilon$1) {\n if (-epsilon$1 < b && b < epsilon$1) {\n return 0;\n }\n }\n\n // check if they're flp equal\n const ab = a - b;\n if (ab * ab < EPSILON_SQ * a * b) {\n return 0;\n }\n\n // normal comparison\n return a < b ? -1 : 1;\n };\n\n /**\n * This class rounds incoming values sufficiently so that\n * floating points problems are, for the most part, avoided.\n *\n * Incoming points are have their x & y values tested against\n * all previously seen x & y values. If either is 'too close'\n * to a previously seen value, it's value is 'snapped' to the\n * previously seen value.\n *\n * All points should be rounded by this class before being\n * stored in any data structures in the rest of this algorithm.\n */\n\n class PtRounder {\n constructor() {\n this.reset();\n }\n reset() {\n this.xRounder = new CoordRounder();\n this.yRounder = new CoordRounder();\n }\n round(x, y) {\n return {\n x: this.xRounder.round(x),\n y: this.yRounder.round(y)\n };\n }\n }\n class CoordRounder {\n constructor() {\n this.tree = new Tree();\n // preseed with 0 so we don't end up with values < Number.EPSILON\n this.round(0);\n }\n\n // Note: this can rounds input values backwards or forwards.\n // You might ask, why not restrict this to just rounding\n // forwards? Wouldn't that allow left endpoints to always\n // remain left endpoints during splitting (never change to\n // right). No - it wouldn't, because we snap intersections\n // to endpoints (to establish independence from the segment\n // angle for t-intersections).\n round(coord) {\n const node = this.tree.add(coord);\n const prevNode = this.tree.prev(node);\n if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {\n this.tree.remove(coord);\n return prevNode.key;\n }\n const nextNode = this.tree.next(node);\n if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {\n this.tree.remove(coord);\n return nextNode.key;\n }\n return coord;\n }\n }\n\n // singleton available by import\n const rounder = new PtRounder();\n\n const epsilon = 1.1102230246251565e-16;\n const splitter = 134217729;\n const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n // fast_expansion_sum_zeroelim routine from oritinal code\n function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if (fnow > enow === fnow > -enow) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if (fnow > enow === fnow > -enow) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if (fnow > enow === fnow > -enow) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n }\n function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n }\n function vec(n) {\n return new Float64Array(n);\n }\n\n const ccwerrboundA = (3 + 16 * epsilon) * epsilon;\n const ccwerrboundB = (2 + 12 * epsilon) * epsilon;\n const ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n const B = vec(4);\n const C1 = vec(8);\n const C2 = vec(12);\n const D = vec(16);\n const u = vec(4);\n function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += acx * bcytail + bcy * acxtail - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n return D[Dlen - 1];\n }\n function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n }\n\n /* Cross Product of two vectors with first point at origin */\n const crossProduct = (a, b) => a.x * b.y - a.y * b.x;\n\n /* Dot Product of two vectors with first point at origin */\n const dotProduct = (a, b) => a.x * b.x + a.y * b.y;\n\n /* Comparator for two vectors with same starting point */\n const compareVectorAngles = (basePt, endPt1, endPt2) => {\n const res = orient2d(basePt.x, basePt.y, endPt1.x, endPt1.y, endPt2.x, endPt2.y);\n if (res > 0) return -1;\n if (res < 0) return 1;\n return 0;\n };\n const length = v => Math.sqrt(dotProduct(v, v));\n\n /* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\n const sineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return crossProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n };\n\n /* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\n const cosineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return dotProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n };\n\n /* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n const horizontalIntersection = (pt, v, y) => {\n if (v.y === 0) return null;\n return {\n x: pt.x + v.x / v.y * (y - pt.y),\n y: y\n };\n };\n\n /* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n const verticalIntersection = (pt, v, x) => {\n if (v.x === 0) return null;\n return {\n x: x,\n y: pt.y + v.y / v.x * (x - pt.x)\n };\n };\n\n /* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n const intersection$1 = (pt1, v1, pt2, v2) => {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x === 0) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x === 0) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y === 0) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y === 0) return horizontalIntersection(pt1, v1, pt2.y);\n\n // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n const kross = crossProduct(v1, v2);\n if (kross == 0) return null;\n const ve = {\n x: pt2.x - pt1.x,\n y: pt2.y - pt1.y\n };\n const d1 = crossProduct(ve, v1) / kross;\n const d2 = crossProduct(ve, v2) / kross;\n\n // take the average of the two calculations to minimize rounding error\n const x1 = pt1.x + d2 * v1.x,\n x2 = pt2.x + d1 * v2.x;\n const y1 = pt1.y + d2 * v1.y,\n y2 = pt2.y + d1 * v2.y;\n const x = (x1 + x2) / 2;\n const y = (y1 + y2) / 2;\n return {\n x: x,\n y: y\n };\n };\n\n class SweepEvent {\n // for ordering sweep events in the sweep event queue\n static compare(a, b) {\n // favor event with a point that the sweep line hits first\n const ptCmp = SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp;\n\n // the points are the same, so link them if needed\n if (a.point !== b.point) a.link(b);\n\n // favor right events over left\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1;\n\n // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n return Segment.compare(a.segment, b.segment);\n }\n\n // for ordering points in sweep line order\n static comparePoints(aPt, bPt) {\n if (aPt.x < bPt.x) return -1;\n if (aPt.x > bPt.x) return 1;\n if (aPt.y < bPt.y) return -1;\n if (aPt.y > bPt.y) return 1;\n return 0;\n }\n\n // Warning: 'point' input will be modified and re-used (for performance)\n constructor(point, isLeft) {\n if (point.events === undefined) point.events = [this];else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft;\n // this.segment, this.otherSE set by factory\n }\n link(other) {\n if (other.point === this.point) {\n throw new Error(\"Tried to link already linked events\");\n }\n const otherEvents = other.point.events;\n for (let i = 0, iMax = otherEvents.length; i < iMax; i++) {\n const evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n this.checkForConsuming();\n }\n\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n\n // Compare each pair of events to see if other events also match\n const numEvents = this.point.events.length;\n for (let i = 0; i < numEvents; i++) {\n const evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== undefined) continue;\n for (let j = i + 1; j < numEvents; j++) {\n const evt2 = this.point.events[j];\n if (evt2.consumedBy !== undefined) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n const events = [];\n for (let i = 0, iMax = this.point.events.length; i < iMax; i++) {\n const evt = this.point.events[i];\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n return events;\n }\n\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n getLeftmostComparator(baseEvent) {\n const cache = new Map();\n const fillCache = linkedEvent => {\n const nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)\n });\n };\n return (a, b) => {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n const {\n sine: asine,\n cosine: acosine\n } = cache.get(a);\n const {\n sine: bsine,\n cosine: bcosine\n } = cache.get(b);\n\n // both on or above x-axis\n if (asine >= 0 && bsine >= 0) {\n if (acosine < bcosine) return 1;\n if (acosine > bcosine) return -1;\n return 0;\n }\n\n // both below x-axis\n if (asine < 0 && bsine < 0) {\n if (acosine < bcosine) return -1;\n if (acosine > bcosine) return 1;\n return 0;\n }\n\n // one above x-axis, one below\n if (bsine < asine) return -1;\n if (bsine > asine) return 1;\n return 0;\n };\n }\n }\n\n // Give segments unique ID's to get consistent sorting of\n // segments and sweep events when all else is identical\n let segmentId = 0;\n class Segment {\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n static compare(a, b) {\n const alx = a.leftSE.point.x;\n const blx = b.leftSE.point.x;\n const arx = a.rightSE.point.x;\n const brx = b.rightSE.point.x;\n\n // check if they're even in the same vertical plane\n if (brx < alx) return 1;\n if (arx < blx) return -1;\n const aly = a.leftSE.point.y;\n const bly = b.leftSE.point.y;\n const ary = a.rightSE.point.y;\n const bry = b.rightSE.point.y;\n\n // is left endpoint of segment B the right-more?\n if (alx < blx) {\n // are the two segments in the same horizontal plane?\n if (bly < aly && bly < ary) return 1;\n if (bly > aly && bly > ary) return -1;\n\n // is the B left endpoint colinear to segment A?\n const aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1;\n\n // is the A right endpoint colinear to segment B ?\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return -1;\n }\n\n // is left endpoint of segment A the right-more?\n if (alx > blx) {\n if (aly < bly && aly < bry) return -1;\n if (aly > bly && aly > bry) return 1;\n\n // is the A left endpoint colinear to segment B?\n const bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft;\n\n // is the B right endpoint colinear to segment A?\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return 1;\n }\n\n // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n\n // consider the lower left-endpoint to come first\n if (aly < bly) return -1;\n if (aly > bly) return 1;\n\n // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n\n // is the A right endpoint more left-more?\n if (arx < brx) {\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n }\n\n // is the B right endpoint more left-more?\n if (arx > brx) {\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n }\n if (arx !== brx) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n const ay = ary - aly;\n const ax = arx - alx;\n const by = bry - bly;\n const bx = brx - blx;\n if (ay > ax && by < bx) return 1;\n if (ay < ax && by > bx) return -1;\n }\n\n // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n if (arx > brx) return 1;\n if (arx < brx) return -1;\n\n // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n\n // consider the lower right-endpoint to come first\n if (ary < bry) return -1;\n if (ary > bry) return 1;\n\n // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n\n // identical segment, ie a === b\n return 0;\n }\n\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n constructor(leftSE, rightSE, rings, windings) {\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings;\n // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n static fromRing(pt1, pt2, ring) {\n let leftPt, rightPt, winding;\n\n // ordering the two points according to sweep line ordering\n const cmpPts = SweepEvent.comparePoints(pt1, pt2);\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else throw new Error(`Tried to create degenerate segment at [${pt1.x}, ${pt1.y}]`);\n const leftSE = new SweepEvent(leftPt, true);\n const rightSE = new SweepEvent(rightPt, false);\n return new Segment(leftSE, rightSE, [ring], [winding]);\n }\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n bbox() {\n const y1 = this.leftSE.point.y;\n const y2 = this.rightSE.point.y;\n return {\n ll: {\n x: this.leftSE.point.x,\n y: y1 < y2 ? y1 : y2\n },\n ur: {\n x: this.rightSE.point.x,\n y: y1 > y2 ? y1 : y2\n }\n };\n }\n\n /* A vector from the left point to the right */\n vector() {\n return {\n x: this.rightSE.point.x - this.leftSE.point.x,\n y: this.rightSE.point.y - this.leftSE.point.y\n };\n }\n isAnEndpoint(pt) {\n return pt.x === this.leftSE.point.x && pt.y === this.leftSE.point.y || pt.x === this.rightSE.point.x && pt.y === this.rightSE.point.y;\n }\n\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n comparePoint(point) {\n if (this.isAnEndpoint(point)) return 0;\n const lPt = this.leftSE.point;\n const rPt = this.rightSE.point;\n const v = this.vector();\n\n // Exactly vertical segments.\n if (lPt.x === rPt.x) {\n if (point.x === lPt.x) return 0;\n return point.x < lPt.x ? 1 : -1;\n }\n\n // Nearly vertical segments with an intersection.\n // Check to see where a point on the line with matching Y coordinate is.\n const yDist = (point.y - lPt.y) / v.y;\n const xFromYDist = lPt.x + yDist * v.x;\n if (point.x === xFromYDist) return 0;\n\n // General case.\n // Check to see where a point on the line with matching X coordinate is.\n const xDist = (point.x - lPt.x) / v.x;\n const yFromXDist = lPt.y + xDist * v.y;\n if (point.y === yFromXDist) return 0;\n return point.y < yFromXDist ? -1 : 1;\n }\n\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n getIntersection(other) {\n // If bboxes don't overlap, there can't be any intersections\n const tBbox = this.bbox();\n const oBbox = other.bbox();\n const bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null;\n\n // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n const tlp = this.leftSE.point;\n const trp = this.rightSE.point;\n const olp = other.leftSE.point;\n const orp = other.rightSE.point;\n\n // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0;\n\n // do left endpoints match?\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp;\n // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n return null;\n }\n\n // does this left endpoint matches (other doesn't)\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x === orp.x && tlp.y === orp.y) return null;\n }\n // t-intersection on left endpoint\n return tlp;\n }\n\n // does other left endpoint matches (this doesn't)\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x === olp.x && trp.y === olp.y) return null;\n }\n // t-intersection on left endpoint\n return olp;\n }\n\n // trivial intersection on right endpoints\n if (touchesThisRSE && touchesOtherRSE) return null;\n\n // t-intersections on just one right endpoint\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp;\n\n // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n const pt = intersection$1(tlp, this.vector(), olp, other.vector());\n\n // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n if (pt === null) return null;\n\n // is the intersection found between the lines not on the segments?\n if (!isInBbox(bboxOverlap, pt)) return null;\n\n // round the the computed point if needed\n return rounder.round(pt.x, pt.y);\n }\n\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n split(point) {\n const newEvents = [];\n const alreadyLinked = point.events !== undefined;\n const newLeftSE = new SweepEvent(point, true);\n const newRightSE = new SweepEvent(point, false);\n const oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n const newSeg = new Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());\n\n // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n }\n\n // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n return newEvents;\n }\n\n /* Swap which event is left and right */\n swapEvents() {\n const tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n for (let i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n consume(other) {\n let consumer = this;\n let consumee = other;\n while (consumer.consumedBy) consumer = consumer.consumedBy;\n while (consumee.consumedBy) consumee = consumee.consumedBy;\n const cmp = Segment.compare(consumer, consumee);\n if (cmp === 0) return; // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n if (cmp > 0) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n\n // make sure a segment doesn't consume it's prev\n if (consumer.prev === consumee) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n for (let i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n const ring = consumee.rings[i];\n const winding = consumee.windings[i];\n const index = consumer.rings.indexOf(ring);\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer;\n\n // mark sweep events consumed as to maintain ordering in sweep event queue\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n\n /* The first segment previous segment chain that is in the result */\n prevInResult() {\n if (this._prevInResult !== undefined) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;else if (this.prev.isInResult()) this._prevInResult = this.prev;else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n beforeState() {\n if (this._beforeState !== undefined) return this._beforeState;\n if (!this.prev) this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };else {\n const seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n afterState() {\n if (this._afterState !== undefined) return this._afterState;\n const beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n const ringsAfter = this._afterState.rings;\n const windingsAfter = this._afterState.windings;\n const mpsAfter = this._afterState.multiPolys;\n\n // calculate ringsAfter, windingsAfter\n for (let i = 0, iMax = this.rings.length; i < iMax; i++) {\n const ring = this.rings[i];\n const winding = this.windings[i];\n const index = ringsAfter.indexOf(ring);\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n }\n\n // calcualte polysAfter\n const polysAfter = [];\n const polysExclude = [];\n for (let i = 0, iMax = ringsAfter.length; i < iMax; i++) {\n if (windingsAfter[i] === 0) continue; // non-zero rule\n const ring = ringsAfter[i];\n const poly = ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (ring.isExterior) polysAfter.push(poly);else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n const index = polysAfter.indexOf(ring.poly);\n if (index !== -1) polysAfter.splice(index, 1);\n }\n }\n\n // calculate multiPolysAfter\n for (let i = 0, iMax = polysAfter.length; i < iMax; i++) {\n const mp = polysAfter[i].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n return this._afterState;\n }\n\n /* Is this segment part of the final result? */\n isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false;\n if (this._isInResult !== undefined) return this._isInResult;\n const mpsBefore = this.beforeState().multiPolys;\n const mpsAfter = this.afterState().multiPolys;\n switch (operation.type) {\n case \"union\":\n {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n const noBefores = mpsBefore.length === 0;\n const noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n case \"intersection\":\n {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n let least;\n let most;\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n this._isInResult = most === operation.numMultiPolys && least < most;\n break;\n }\n case \"xor\":\n {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n const diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n case \"difference\":\n {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n const isJustSubject = mps => mps.length === 1 && mps[0].isSubject;\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n default:\n throw new Error(`Unrecognized operation type found ${operation.type}`);\n }\n return this._isInResult;\n }\n }\n\n class RingIn {\n constructor(geomRing, poly, isExterior) {\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n if (typeof geomRing[0][0] !== \"number\" || typeof geomRing[0][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n const firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);\n this.bbox = {\n ll: {\n x: firstPoint.x,\n y: firstPoint.y\n },\n ur: {\n x: firstPoint.x,\n y: firstPoint.y\n }\n };\n let prevPoint = firstPoint;\n for (let i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== \"number\" || typeof geomRing[i][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n let point = rounder.round(geomRing[i][0], geomRing[i][1]);\n // skip repeated points\n if (point.x === prevPoint.x && point.y === prevPoint.y) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;\n if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;\n if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;\n if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;\n prevPoint = point;\n }\n // add segment from last to first if last is not the same as first\n if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.segments.length; i < iMax; i++) {\n const segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n return sweepEvents;\n }\n }\n class PolyIn {\n constructor(geomPoly, multiPoly) {\n if (!Array.isArray(geomPoly)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.exteriorRing = new RingIn(geomPoly[0], this, true);\n // copy by value\n this.bbox = {\n ll: {\n x: this.exteriorRing.bbox.ll.x,\n y: this.exteriorRing.bbox.ll.y\n },\n ur: {\n x: this.exteriorRing.bbox.ur.x,\n y: this.exteriorRing.bbox.ur.y\n }\n };\n this.interiorRings = [];\n for (let i = 1, iMax = geomPoly.length; i < iMax; i++) {\n const ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n this.multiPoly = multiPoly;\n }\n getSweepEvents() {\n const sweepEvents = this.exteriorRing.getSweepEvents();\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringSweepEvents = this.interiorRings[i].getSweepEvents();\n for (let j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n }\n class MultiPolyIn {\n constructor(geom, isSubject) {\n if (!Array.isArray(geom)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === \"number\") geom = [geom];\n } catch (ex) {\n // The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n this.polys = [];\n this.bbox = {\n ll: {\n x: Number.POSITIVE_INFINITY,\n y: Number.POSITIVE_INFINITY\n },\n ur: {\n x: Number.NEGATIVE_INFINITY,\n y: Number.NEGATIVE_INFINITY\n }\n };\n for (let i = 0, iMax = geom.length; i < iMax; i++) {\n const poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n this.isSubject = isSubject;\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polySweepEvents = this.polys[i].getSweepEvents();\n for (let j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n }\n\n class RingOut {\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n static factory(allSegments) {\n const ringsOut = [];\n for (let i = 0, iMax = allSegments.length; i < iMax; i++) {\n const segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n let prevEvent = null;\n let event = segment.leftSE;\n let nextEvent = segment.rightSE;\n const events = [event];\n const startingPoint = event.point;\n const intersectionLEs = [];\n\n /* Walk the chain of linked events to form a closed ring */\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n\n /* Is the ring complete? */\n if (event.point === startingPoint) break;\n while (true) {\n const availableLEs = event.getAvailableLinkedEvents();\n\n /* Did we hit a dead end? This shouldn't happen.\n * Indicates some earlier part of the algorithm malfunctioned. */\n if (availableLEs.length === 0) {\n const firstPt = events[0].point;\n const lastPt = events[events.length - 1].point;\n throw new Error(`Unable to complete output ring starting at [${firstPt.x},` + ` ${firstPt.y}]. Last matching segment found ends at` + ` [${lastPt.x}, ${lastPt.y}].`);\n }\n\n /* Only one way to go, so cotinue on the path */\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n\n /* We must have an intersection. Check for a completed loop */\n let indexLE = null;\n for (let j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n if (indexLE !== null) {\n const intersectionLE = intersectionLEs.splice(indexLE)[0];\n const ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new RingOut(ringEvents.reverse()));\n continue;\n }\n /* register the intersection */\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n /* Choose the left-most option to continue the walk */\n const comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n ringsOut.push(new RingOut(events));\n }\n return ringsOut;\n }\n constructor(events) {\n this.events = events;\n for (let i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n this.poly = null;\n }\n getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n let prevPt = this.events[0].point;\n const points = [prevPt];\n for (let i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n const pt = this.events[i].point;\n const nextPt = this.events[i + 1].point;\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) continue;\n points.push(pt);\n prevPt = pt;\n }\n\n // ring was all (within rounding error of angle calc) colinear points\n if (points.length === 1) return null;\n\n // check if the starting point is necessary\n const pt = points[0];\n const nextPt = points[1];\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n const step = this.isExteriorRing() ? 1 : -1;\n const iStart = this.isExteriorRing() ? 0 : points.length - 1;\n const iEnd = this.isExteriorRing() ? points.length : -1;\n const orderedPoints = [];\n for (let i = iStart; i != iEnd; i += step) orderedPoints.push([points[i].x, points[i].y]);\n return orderedPoints;\n }\n isExteriorRing() {\n if (this._isExteriorRing === undefined) {\n const enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n return this._isExteriorRing;\n }\n enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n return this._enclosingRing;\n }\n\n /* Returns the ring that encloses this one, if any */\n _calcEnclosingRing() {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n let leftMostEvt = this.events[0];\n for (let i = 1, iMax = this.events.length; i < iMax; i++) {\n const evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n let prevSeg = leftMostEvt.segment.prevInResult();\n let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null;\n\n // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n if (!prevPrevSeg) return prevSeg.ringOut;\n\n // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut.enclosingRing();\n }\n\n // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n }\n class PolyOut {\n constructor(exteriorRing) {\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n getGeom() {\n const geom = [this.exteriorRing.getGeom()];\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (geom[0] === null) return null;\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringGeom = this.interiorRings[i].getGeom();\n // interior ring was all (within rounding error of angle calc) colinear points\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n return geom;\n }\n }\n class MultiPolyOut {\n constructor(rings) {\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n getGeom() {\n const geom = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polyGeom = this.polys[i].getGeom();\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n return geom;\n }\n _composePolys(rings) {\n const polys = [];\n for (let i = 0, iMax = rings.length; i < iMax; i++) {\n const ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));else {\n const enclosingRing = ring.enclosingRing();\n if (!enclosingRing.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing.poly.addInterior(ring);\n }\n }\n return polys;\n }\n }\n\n /**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\n class SweepLine {\n constructor(queue) {\n let comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Segment.compare;\n this.queue = queue;\n this.tree = new Tree(comparator);\n this.segments = [];\n }\n process(event) {\n const segment = event.segment;\n const newEvents = [];\n\n // if we've already been consumed by another segment,\n // clean up our body parts and get out\n if (event.consumedBy) {\n if (event.isLeft) this.queue.remove(event.otherSE);else this.tree.remove(segment);\n return newEvents;\n }\n const node = event.isLeft ? this.tree.add(segment) : this.tree.find(segment);\n if (!node) throw new Error(`Unable to find segment #${segment.id} ` + `[${segment.leftSE.point.x}, ${segment.leftSE.point.y}] -> ` + `[${segment.rightSE.point.x}, ${segment.rightSE.point.y}] ` + \"in SweepLine tree.\");\n let prevNode = node;\n let nextNode = node;\n let prevSeg = undefined;\n let nextSeg = undefined;\n\n // skip consumed segments still in tree\n while (prevSeg === undefined) {\n prevNode = this.tree.prev(prevNode);\n if (prevNode === null) prevSeg = null;else if (prevNode.key.consumedBy === undefined) prevSeg = prevNode.key;\n }\n\n // skip consumed segments still in tree\n while (nextSeg === undefined) {\n nextNode = this.tree.next(nextNode);\n if (nextNode === null) nextSeg = null;else if (nextNode.key.consumedBy === undefined) nextSeg = nextNode.key;\n }\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n let prevMySplitter = null;\n if (prevSeg) {\n const prevInter = prevSeg.getIntersection(segment);\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n if (!prevSeg.isAnEndpoint(prevInter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // Check for intersections against the next segment in the sweep line\n let nextMySplitter = null;\n if (nextSeg) {\n const nextInter = nextSeg.getIntersection(segment);\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n if (!nextSeg.isAnEndpoint(nextInter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n if (prevMySplitter !== null || nextMySplitter !== null) {\n let mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;else if (nextMySplitter === null) mySplitter = prevMySplitter;else {\n const cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n }\n\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n this.queue.remove(segment.rightSE);\n newEvents.push(segment.rightSE);\n const newEventsFromSplit = segment.split(mySplitter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.remove(segment);\n newEvents.push(event);\n } else {\n // done with left event\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n // event.isRight\n\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n const inter = prevSeg.getIntersection(nextSeg);\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (!nextSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n this.tree.remove(segment);\n }\n return newEvents;\n }\n\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n _splitSafely(seg, pt) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.remove(seg);\n const rightSE = seg.rightSE;\n this.queue.remove(rightSE);\n const newEvents = seg.split(pt);\n newEvents.push(rightSE);\n // splitting can trigger consumption\n if (seg.consumedBy === undefined) this.tree.add(seg);\n return newEvents;\n }\n }\n\n // Limits on iterative processes to prevent infinite loops - usually caused by floating-point math round-off errors.\n const POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1000000;\n const POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1000000;\n class Operation {\n run(type, geom, moreGeoms) {\n operation.type = type;\n rounder.reset();\n\n /* Convert inputs to MultiPoly objects */\n const multipolys = [new MultiPolyIn(geom, true)];\n for (let i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n operation.numMultiPolys = multipolys.length;\n\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n if (operation.type === \"difference\") {\n // in place removal\n const subject = multipolys[0];\n let i = 1;\n while (i < multipolys.length) {\n if (getBboxOverlap(multipolys[i].bbox, subject.bbox) !== null) i++;else multipolys.splice(i, 1);\n }\n }\n\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n if (operation.type === \"intersection\") {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const mpA = multipolys[i];\n for (let j = i + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n\n /* Put segment endpoints in a priority queue */\n const queue = new Tree(SweepEvent.compare);\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const sweepEvents = multipolys[i].getSweepEvents();\n for (let j = 0, jMax = sweepEvents.length; j < jMax; j++) {\n queue.insert(sweepEvents[j]);\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when putting segment endpoints in a priority queue \" + \"(queue size too big).\");\n }\n }\n }\n\n /* Pass the sweep line over those endpoints */\n const sweepLine = new SweepLine(queue);\n let prevQueueSize = queue.size;\n let node = queue.pop();\n while (node) {\n const evt = node.key;\n if (queue.size === prevQueueSize) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n const seg = evt.segment;\n throw new Error(`Unable to pop() ${evt.isLeft ? \"left\" : \"right\"} SweepEvent ` + `[${evt.point.x}, ${evt.point.y}] from segment #${seg.id} ` + `[${seg.leftSE.point.x}, ${seg.leftSE.point.y}] -> ` + `[${seg.rightSE.point.x}, ${seg.rightSE.point.y}] from queue.`);\n }\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(queue size too big).\");\n }\n if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(too many sweep line segments).\");\n }\n const newEvents = sweepLine.process(evt);\n for (let i = 0, iMax = newEvents.length; i < iMax; i++) {\n const evt = newEvents[i];\n if (evt.consumedBy === undefined) queue.insert(evt);\n }\n prevQueueSize = queue.size;\n node = queue.pop();\n }\n\n // free some memory we don't need anymore\n rounder.reset();\n\n /* Collect and compile segments we're keeping into a multipolygon */\n const ringsOut = RingOut.factory(sweepLine.segments);\n const result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n }\n\n // singleton available by import\n const operation = new Operation();\n\n const union = function (geom) {\n for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n moreGeoms[_key - 1] = arguments[_key];\n }\n return operation.run(\"union\", geom, moreGeoms);\n };\n const intersection = function (geom) {\n for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n moreGeoms[_key2 - 1] = arguments[_key2];\n }\n return operation.run(\"intersection\", geom, moreGeoms);\n };\n const xor = function (geom) {\n for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n moreGeoms[_key3 - 1] = arguments[_key3];\n }\n return operation.run(\"xor\", geom, moreGeoms);\n };\n const difference = function (subjectGeom) {\n for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n clippingGeoms[_key4 - 1] = arguments[_key4];\n }\n return operation.run(\"difference\", subjectGeom, clippingGeoms);\n };\n var index = {\n union: union,\n intersection: intersection,\n xor: xor,\n difference: difference\n };\n\n return index;\n\n}));\n", "import \"@frog/source/index.less\"\n\n////////////\n// Frame //\n//////////\n\nimport frem from \"@frog/source/utility/Resize.js\"\nimport sizes from \"@frog/source/data/sizes.js\"\n\n// frem({\n// \"width\": sizes.frame.width,\n// \"height\": sizes.frame.height,\n// })\n//\n// const dom = document.getElementById(\"mount\")\n// dom.style.width = sizes.frame.width + \"em\"\n// dom.style.height = sizes.frame.height + \"em\"\n\n////////////////\n// Game Loop //\n//////////////\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\n\nimport Loop from \"@frog/source/utility/Loop.js\"\nimport Render from \"@frog/source/utility/Render.js\"\n\nLoop.start(function(delta) {\n Dev.atStartOfLoop()\n\n App.update(delta)\n Render()\n\n Dev.atEndOfLoop()\n})\n\n////////////////\n// Analytics //\n//////////////\n\nimport \"@frog/source/analytics.js\"\n\n///////////////////\n// Key Defaults //\n/////////////////\n\nwindow.addEventListener(\"keydown\", (event) => {\n if(event.key == \"s\"\n && event.metaKey == true) {\n event.preventDefault()\n }\n})\n", "import * as Preact from \"preact\"\n\nconst dom = document.getElementById(\"mount\")\n\nimport View from \"@frog/source/views/Mount.jsx\"\n\nlet view = undefined\n\nexport default function() {\n view = Preact.render(Preact.h(View), dom, view)\n}\n", "import * as Preact from \"preact\"\nimport Pointer from \"poin\"\nimport Joyp from \"joyp\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nimport \"@frog/source/views/Mount.less\"\nimport Stage from \"@frog/source/views/Stage.jsx\"\nimport DevPanes from \"@frog/source/views/DevPanes.jsx\"\nimport ChapterUI from \"@frog/source/views/ChapterUI.jsx\"\nimport UnitSprite from \"@frog/source/views/components/UnitSprite.jsx\"\nimport Snow from \"@frog/source/views/components/Snow.jsx\"\n\nimport Resize from \"@frog/source/utility/Resize.js\"\nimport Audiomix from \"@frog/source/juice/Audiomix.js\"\n\nimport tests from \"@frog/source/tests/testlist.js\"\nimport audios from \"@frog/source/data/audiotriggers.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport preload from \"@frog/source/data/preload.js\"\nimport games from \"@frog/source/data/games\"\n\nconst DEFAULT_GAME_SLUG = \"hell\"\n\nexport default class Mount {\n render() {\n return (\n <div class=\"Mount\" isDev={Dev.areDevPanelsOpen || false}>\n <DevPanes>\n <div class=\"FrameSection\">\n <Frame>\n <PreloadedImages/>\n <Screen/>\n </Frame>\n </div>\n </DevPanes>\n </div>\n )\n }\n}\n\nclass Frame {\n render() {\n return (\n <div class=\"Frame\" id=\"frame\" onContextMenu={this.onContextMenu}>\n {this.props.children}\n </div>\n )\n }\n componentDidMount() {\n Resize({\n \"width\": 16,\n \"height\": 9,\n \"domId\": \"frame\"\n })\n\n const element = document.getElementById(\"frame\")\n Pointer.listen(element)\n }\n componentDidUpdate() {\n Resize()\n }\n onContextMenu(event) {\n event.preventDefault()\n }\n}\n\nclass PreloadedImages {\n render() {\n return (\n <div class=\"PreloadedImages\">\n {Object.keys(preload.images).map((image) => {\n return (\n <img src={image}/>\n )\n })}\n </div>\n )\n }\n}\n\nclass Screen {\n render() {\n if(preload.isLoading) {\n const Screen = SCREENS[\"LoadingScreen\"]\n return <Screen/>\n }\n\n const screenName = Navigation.state.screen\n const Screen = SCREENS[screenName]\n\n if(Screen != undefined) {\n return <Screen/>\n } else {\n const ErrorScreen = SCREENS[\"ErrorScreen\"]\n return <ErrorScreen message={\"Could not find screen: \" + screenName}/>\n }\n }\n}\n\nconst SCREENS = {\n \"LoadingScreen\": function() {\n return (\n <div class=\"LoadingScreen\">\n <div class=\"ProgressBar\" style={{\"width\": (preload.loadedImageCount / preload.totalImageCount) * 100 + \"%\"}}/>\n <div class=\"Header Text\">Loading...</div>\n <div class=\"Base Text\">Loading...</div>\n </div>\n )\n },\n \"TitleScreen\": function() {\n return (\n <div class=\"TitleScreen\">\n <title>{games[Navigation.state.gameSlug].title}</title>\n <div class=\"Splash\" isSplashing={Navigation.state.isSplashing + \"\"}\n onClick={() => Navigation.state.isSplashing = false}>\n <div class=\"Logo1\">goodberry games</div>\n <div class=\"Logo2\">made with frog</div>\n </div>\n <div class=\"Main\">\n {(TITLE_CONTENTS[Navigation.state.gameSlug] || TITLE_CONTENTS[\"default\"])()}\n <div class=\"DevHellButton\" onClick={() => Navigation.go(\"/dev\")}>Dev Hell</div>\n <div class=\"ProductionButton\" onClick={() => window.location.search = \"/production/\"}>Production</div>\n </div>\n </div>\n )\n },\n \"OverworldScreen\": function() {\n if(App.game == undefined) return\n if(App.game.overworld == undefined) return\n if(App.game.overworld.locations == undefined) return\n return (\n <div class=\"OverworldScreen\">\n {Object.values(App.game.overworld.locations).map((location) => {\n return (\n <div class=\"Location\" key={location.key}\n onClick={() => Navigation.go(\"/games/\" + App.game.slug + \"/chapters/\" + location.chapterKey)}\n style={{\"left\": location.position.x + \"em\", \"top\": location.position.y + \"em\"}}>\n <img class=\"Icon\" src={location.icon} style={{\n \"width\": location.spritesize == \"big\" ? \"2em\" : \"1em\",\n }}/>\n </div>\n )\n })}\n {Object.keys(App.game.overworld.routes).map((routeKey) => {\n const route = App.game.overworld.routes[routeKey]\n return (\n <div class=\"Route\" key={routeKey}\n style={{\"left\": route.x + \"em\", \"top\": route.y + \"em\"}}/>\n )\n })}\n </div>\n )\n },\n \"ChapterScreen\": function() {\n if(App.game == undefined) return\n let stage = App.getActiveStage()\n let tabTitle = games[App.game.slug].title\n if(Dev.inProtoMode == true) {\n stage = games[App.game.slug].chapters[App.game.chapter.slug].stage\n tabTitle = \"Editor: \" + App.game.chapter.slug.toUpperCase()\n }\n if(Dev.isEnabled == true) {\n tabTitle += (Dev.editsSinceLastSave > 0 ? \"*\" : \"\")\n }\n return (\n <div class=\"ChapterScreen\"\n onMouseDown={(event) => App.game.chapter.selection.start()}\n onMouseUp={(event) => App.game.chapter.selection.finish()}\n onContextMenu={(event) => App.game.chapter.selection.cancel()}>\n <title>{tabTitle}</title>\n <Stage stage={stage}/>\n <ChapterUI stage={stage}/>\n <Snow stage={stage}/>\n </div>\n )\n },\n \"CreditsScreen\": function() {\n return (\n <div class=\"CreditsScreen\">\n <div class=\"Content\">\n <div class=\"Title\">\n <span>Grimrawr</span>\n </div>\n <div class=\"Credits\">\n <div>A goodberry game by</div>\n <div>Andrew Goodenough</div>\n <div>Doc McPherson</div>\n </div>\n <div class=\"Thanks\" onMouseDown={() => Navigation.go(\"/games/dungeon\")}>\n Thanks for playing!!\n </div>\n </div>\n </div>\n )\n },\n \"ErrorScreen\": function({message}) {\n return (\n <div class=\"ErrorScreen\">\n <title>Frog</title>\n {Navigation.state.message || message || \"Something went wrong.\"}\n </div>\n )\n },\n \"DevHellScreen\": function() {\n return (\n <div class=\"DevHellScreen\">\n <title>Frog</title>\n <div class=\"Header\">Welcome to Dev Hell</div>\n <div class=\"Links\">\n <div class=\"Link\" onClick={() => Navigation.go(\"/dev/tests\")} result=\"\">Tests</div>\n <div class=\"Link\" onClick={() => Navigation.go(\"/dev/audio\")}>Audio</div>\n <div class=\"Link\" onClick={() => Navigation.go(\"/dev/units\")}>Units</div>\n <div class=\"Link\" onClick={() => Navigation.go(\"/dev/chapters\")}>Chapters</div>\n <div class=\"Link\" onClick={() => Navigation.go(\"/dev/encounterEditor\")}>Encounters</div>\n </div>\n </div>\n )\n },\n \"DevTestListScreen\": function() {\n return (\n <div class=\"DevTestListScreen\">\n <title>Frog</title>\n <div class=\"Header\">Tests</div>\n <div class=\"Tests\">\n {tests.map((test) => {\n return (\n <div class=\"Test\" status={test.status || \"loading\"}\n onClick={() => Navigation.go(\"/dev/tests/\" + test.slug)}/>\n )\n })}\n </div>\n </div>\n )\n },\n \"DevTestScreen\": function() {\n return (\n <div class=\"DevTestScreen\" status={Navigation.state.test.status}>\n <title>Frog</title>\n <div class=\"TestSlug\">{Navigation.state.test.slug}</div>\n <div class=\"Message\">{Navigation.state.test?.error?.message}</div>\n </div>\n )\n },\n \"DevAudioListScreen\": function() {\n return (\n <div class=\"DevAudioListScreen\">\n <title>Frog</title>\n <div class=\"Header\">Audio</div>\n <div class=\"Audios\">\n {Object.keys(audios).map((audiokey) => {\n return (\n <div class=\"Audio\" onClick={() => Audiomix.killall() + Audiomix.trigger(audiokey)}>\n {audiokey}\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n \"DevEncounterEditorScreen\": function() {\n if(App.game == undefined) {\n return (\n <div class=\"DevEncounterDesignScreen\">\n <div class=\"Header\">Encounters</div>\n Please load a game\n </div>\n )\n }\n return (\n <div class=\"DevEncounterDesignScreen\">\n <title>Frog Encounter Editor</title>\n <div class=\"Header\">Encounters</div>\n <div class=\"Encounters\">\n {Object.values(Dev.loadedProtostage.world.zones).map((encounter) => {\n return (\n <div class=\"Encounter\" onClick={() => Navigation.go(\"/games/\" + App.game.slug + \"/chapters/\"+App.game.chapter.slug + \"/encounters/\" + encounter.slug)}>\n {encounter.slug}: {encounter.zoomout}, {encounter.z}\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n \"DevChapterListScreen\": function() {\n return (\n <div class=\"DevChapterListScreen\">\n <title>Frog</title>\n <div class=\"Header\">Chapters</div>\n <div class=\"Chapters\">\n {Object.values(games[App.game.slug].chapters).map((chapter) => {\n return (\n <div class=\"Chapter\" onClick={() => Navigation.go(\"/games/\"+App.game.slug+\"/chapters/\"+chapter.slug)}>\n {chapter.slug}\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n \"DevUnitListScreen\": function() {\n return (\n <div class=\"DevUnitListScreen\">\n <title>Frog</title>\n <div class=\"Header\">Units</div>\n <div class=\"Unit\">\n <div class=\"Image Column\"/>\n <div class=\"Name Column\">Name</div>\n <div class=\"Number Column\">HP</div>\n <div class=\"Number Column\">PW</div>\n <div class=\"Number Column\">MR</div>\n <div class=\"Number Column\">AR</div>\n <div class=\"String Column\">Type</div>\n <div class=\"String Column\">Element</div>\n </div>\n <div class=\"Units\">\n {Object.values(unitJobs).map((unit) => {\n return (\n <div class=\"Unit\">\n <div class=\"Image Column\">\n <UnitSprite unit={unit}/>\n </div>\n <div class=\"Name Column\">{unit.jobName}</div>\n <div class=\"Number Column\">{unit.maxhealth}</div>\n <div class=\"Number Column\">{unit.power}</div>\n <div class=\"Number Column\">{unit.moverange}</div>\n <div class=\"Number Column\">{unit.attackrange}</div>\n <div class=\"String Column\">{unit.attacktype}</div>\n <div class=\"String Column\">{unit.element}</div>\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n}\n\nconst TITLE_CONTENTS = {\n \"default\": function() {\n const game = games[Navigation.state.gameSlug]\n if(game == undefined) return\n if(Joyp.wasJustPressed(0, \"start-button\")) {\n if(Navigation.state.isSplashing !== false) {\n Navigation.state.isSplashing = false\n } else {\n Navigation.go(\"/games/\" + game.slug + \"/chapters/\" + (game.firstChapterKey || \"1\"))\n }\n }\n return (\n <div class=\"Default TitleContents\">\n <div class=\"Title\">{game.title || game.slug}</div>\n <div class=\"Button\" onClick={() => Navigation.go(\"/games/\" + game.slug + \"/chapters/\" + (game.firstChapterKey || \"1\"))}>Play!!</div>\n </div>\n )\n }\n}\n", "import * as Preact from \"preact\"\nimport PolygonClipping from \"polygon-clipping\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nimport Dev from \"@frog/source/models/admin/Dev.js\"\n\nimport unitTemplates from \"@frog/source/data/unitTemplates.js\"\nimport elements from \"@frog/source/data/elements.js\"\n\nimport Director from \"@frog/source/juice/Director.js\"\nimport Geometry from \"@frog/source/utility/Geometry.js\"\nimport Loop from \"@frog/source/utility/Loop.js\"\nimport Random from \"@frog/source/utility/Random.js\"\nMath.clamp = function(min = 0, max = 1, value) {\n return Math.max(min, Math.min(max, value))\n}\n\nimport UnitSprite from \"@frog/source/views/components/UnitSprite.jsx\"\nimport UnitTemplateSprite from \"@frog/source/views/components/UnitTemplateSprite.jsx\"\nimport UnitHealthBar from \"@frog/source/views/components/UnitHealthBar.jsx\"\nimport UnitExperienceBar from \"@frog/source/views/components/UnitExperienceBar.jsx\"\nimport \"@frog/source/views/Stage.less\"\n\nexport default class Stage {\n render() {\n return (\n <div class=\"Stage\"\n onMouseDown={this.onMouseDown}\n onMouseUp={this.onMouseUp}\n onContextMenu={this.onContextMenu}>\n <Camera stage={this.props.stage}>\n <WorldImage stage={this.props.stage}/>\n <Darkness stage={this.props.stage}/>\n <Water stage={this.props.stage}/>\n <Units stage={this.props.stage}/>\n <Edges stage={this.props.stage}/>\n <ActionRange stage={this.props.stage}/>\n <ActionArrow stage={this.props.stage}/>\n <Cursor stage={this.props.stage}/>\n <Blocks stage={this.props.stage}/>\n <Squiggles/>\n </Camera>\n </div>\n )\n }\n}\n\nconst wave = {\n \"type\": \"rolling\",\n \"amplitude\": 0.15, // peak size, both negative and positive\n \"speed\": 1.5, // in seconds\n \"origin\": {\"x\": 0, \"y\": 0},\n \"length\": 0.5, // not a true mathemical wavelength. it's a ratio? of distance to origin.\n \"func\": function() {\n const MAGIC_NUMBER = 15\n this.origin.x = (MAGIC_NUMBER) + (Math.sin(Loop.time.s * 0.1) * (MAGIC_NUMBER / 2))\n this.origin.y = (MAGIC_NUMBER / 2) + (Math.sin(Loop.time.s * 0.4) * (MAGIC_NUMBER / 2))\n },\n}\nfunction getWaveOffset(position, timediff = 0) {\n if(wave == undefined) {\n return 0\n }\n\n if(wave.func instanceof Function) {\n wave.func()\n }\n\n const distance = Geometry.distance(position, wave.origin) * wave.length\n const time = ((Loop.time.s - timediff) * wave.speed) + distance\n\n if(wave.type == \"sharp\") {\n return Math.pow((Math.sin(time) + 1) / 2, wave.slope) * (wave.amplitude * 2)\n } else {\n return Math.sin(time) * wave.amplitude\n }\n}\n\nfunction Water() {\n if(this.props.stage.world.blocks == undefined) return\n return (\n <div class=\"Waters\">\n {Object.values(this.props.stage.world.blocks).map((block) => {\n if(block.tilegid != 5) return\n if(App.game.chapter.selection.isOnCamera(block.position) == false) return\n return (\n <div class=\"Water\" style={{\"top\": block.position.y + \"em\", \"left\": block.position.x + \"em\"}}>\n <div class=\"Wave\" style={{\"height\": 0.75 - getWaveOffset(block.position) + \"em\"}}>\n <div class=\"Foam\" style={{\"height\": 0.1 - (getWaveOffset(block.position) / 5) + \"em\"}}/>\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction Edges() {\n if(this.props.stage.world.edges == undefined) return\n return Object.values(this.props.stage.world.edges).map((edge) => {\n if(edge.tilegid == 8) {\n return (\n <div class=\"Wall\" style={{\n \"top\": edge.position.y + \"em\",\n \"left\": edge.position.x + \"em\",\n \"z-index\": 100 + (edge.position.y * 10) + 1,\n }}/>\n )\n }\n })\n}\n\nfunction Blocks() {\n if(this.props.stage.world.blocks == undefined) return\n return (\n <div class=\"Blocks\">\n {Object.values(this.props.stage.world.blocks).map((block) => {\n if(block.image != undefined) {\n return (\n <div class=\"Block\" style={{\n \"top\": block.position.y + \"em\",\n \"left\": block.position.x + \"em\",\n \"backgroundImage\": \"url(\" + block.image + \")\",\n \"width\": (block?.size?.x ?? 1) + \"em\",\n \"height\": (block?.size?.y ?? 1) + \"em\",\n \"margin-top\": -1 * ((block?.size?.y ?? 1) - 1) + \"em\",\n \"margin-left\": -1 * ((block?.size?.x ?? 1) - 1) + \"em\",\n }}/>\n )\n }\n })}\n </div>\n )\n}\n\nfunction Squiggles() {\n return (\n <svg display=\"none\">\n <defs>\n <filter id=\"squiggly-0\">\n <feTurbulence id=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" result=\"noise\" seed=\"0\"/>\n <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"2\" />\n </filter>\n <filter id=\"squiggly-1\">\n <feTurbulence id=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" result=\"noise\" seed=\"1\"/>\n <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"3\" />\n </filter>\n <filter id=\"squiggly-2\">\n <feTurbulence id=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" result=\"noise\" seed=\"2\"/>\n <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"2\" />\n </filter>\n <filter id=\"squiggly-3\">\n <feTurbulence id=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" result=\"noise\" seed=\"3\"/>\n <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"3\" />\n </filter>\n <filter id=\"squiggly-4\">\n <feTurbulence id=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" result=\"noise\" seed=\"4\"/>\n <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"1\" />\n </filter>\n </defs>\n </svg>\n )\n}\n\nlet flickering = 0.5\nfunction Darkness({stage}) {\n if(stage.world == undefined) return\n if(stage.currentEncounterKey == undefined) return\n\n let points = [\n \"0em 0em\",\n \"0em \" + stage.world.height + \"em\",\n stage.world.width + \"em\" + \" \" + stage.world.height + \"em\",\n stage.world.width + \"em\" + \" \" + \"0em\",\n ]\n\n // const zone = stage.world.zones[stage.currentEncounterKey || \"1\"]\n\n if(stage.configuration?.darkness == \"none\"\n || App.game.configuration.darkness == \"none\") {\n return\n }\n\n let polygons = []\n if(App.game.configuration.darkness == false) {\n const zone = stage.world.zones[stage.currentEncounterKey]\n if(zone.points != undefined) {\n polygons.push([\n ...zone.points,\n zone.points[0]\n ])\n } else {\n const x1 = zone.x\n const y1 = zone.y\n const x2 = zone.x + zone.width\n const y2 = zone.y + zone.height\n polygons.push([\n {\"x\": x1, \"y\": y1},\n {\"x\": x2, \"y\": y1},\n {\"x\": x2, \"y\": y2},\n {\"x\": x1, \"y\": y2},\n {\"x\": x1, \"y\": y1},\n ])\n }\n }\n\n if(App.game.configuration.darkness == true\n || App.game.configuration.darkness == \"night\") {\n flickering = Math.clamp(-0.25, 0.25, flickering + Random.range(-0.05, 0.05))\n const flux = 1 + flickering\n\n Object.values(stage.encounters).map((encounter) => {\n const zone = encounter.zone\n // if(parseInt(zone.slug) > parseInt(stage.currentEncounterKey)) return\n if(encounter.slug != stage.currentEncounterKey\n && encounter.hasBeenSeen != true) {\n return\n }\n if(zone.points != undefined) {\n polygons.push([\n ...zone.points,\n zone.points[0]\n ].map((point, index) => {\n const vector = Geometry.multiply(point.internalAngle, flux)\n return Geometry.add(point, vector)\n }))\n } else {\n const x1 = zone.x - flux\n const y1 = zone.y - flux\n const x2 = zone.x + zone.width + flux\n const y2 = zone.y + zone.height + flux\n polygons.push([\n {\"x\": x1, \"y\": y1},\n {\"x\": x2, \"y\": y1},\n {\"x\": x2, \"y\": y2},\n {\"x\": x1, \"y\": y2},\n {\"x\": x1, \"y\": y1},\n ])\n }\n })\n\n if(polygons.length == 0) return\n\n polygons = PolygonClipping.union(\n ...polygons.map((polygon) => {\n const array = polygon.map((point) => {\n return [point.x, point.y]\n })\n return [array]\n })\n ).map((polygon) => {\n polygon = polygon[0]\n return polygon.map((point) => {\n return {\"x\": point[0], \"y\": point[1]}\n })\n })\n }\n\n polygons.forEach((polygon) => {\n polygon.unshift({\"x\": 0, \"y\": 0})\n })\n polygons = polygons.map((polygon) => {\n return polygon.map((point) => emify(point))\n })\n polygons.forEach((polygon) => {\n points = points.concat(polygon)\n })\n\n return (\n <div class=\"Darkness\" style={{\n \"width\": stage.world.width + \"em\",\n \"height\": stage.world.height + \"em\",\n \"clip-path\": \"polygon(\" + points.join(\", \") + \")\",\n \"opacity\": App.game.configuration.darkness ? (App.game.configuration.darkness == \"night\" ? 0.5 : 1) : 0.5,\n }}/>\n )\n}\nfunction emify(point) {\n return point.x + \"em\" + \" \" + point.y + \"em\"\n}\n\nclass Camera {\n render() {\n return (\n <div class=\"Camera\" style={this.style}>\n {this.props.children}\n </div>\n )\n }\n get style() {\n return {\n \"left\": -1 * App.game.chapter.selection.camera.position.x + \"em\",\n \"top\": -1 * App.game.chapter.selection.camera.position.y + \"em\",\n \"font-size\": (1 / (App.game.chapter.selection.camera.position.z ?? 1)) + \"em\",\n }\n }\n}\n\nconst ARROW_IMAGES = {\n \"north-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-end.png\"),\n \"north-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-start.png\"),\n \"south-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-end.png\"),\n \"south-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-start.png\"),\n \"east-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-end.png\"),\n \"east-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-start.png\"),\n \"west-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/west-end.png\"),\n \"west-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/west-start.png\"),\n \"north-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-west.png\"),\n \"north-east\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-east.png\"),\n \"south-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-west.png\"),\n \"south-east\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-east.png\"),\n \"east-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-west.png\"),\n \"north-south\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-south.png\"),\n}\n\nclass ActionArrow {\n render() {\n if(Dev.inProtoMode) return\n\n return [this.move, this.attack]\n }\n get attack() {\n const action = App.game.chapter.selection.hoveredAction\n if(action == undefined) return\n\n if(action.type == \"invoke skill\") {\n const previousPosition = action.positions[1]\n const direction = Geometry.direction(action.positions[0], action.positions[1])\n const position = Geometry.add(action.positions[1], Geometry.multiply(direction, 0.5))\n\n return (\n <div class=\"AttackArrow\" role={action.role} style={{\n \"top\": position.y + \"em\",\n \"left\": position.x + \"em\",\n }}/>\n )\n }\n }\n get move() {\n const action = App.game.chapter.selection.hoveredAction\n if(action == undefined) return\n\n const positions = action.positions.filter((position) => {\n return position.type == \"wait\"\n || position.type == \"move\"\n || position.type == \"move through\"\n })\n\n positions.forEach((position, index) => {\n const previousPosition = positions[index - 1]\n const nextPosition = positions[index + 1]\n const currentPosition = positions[index]\n\n let previousDirection = Geometry.name(Geometry.difference(previousPosition, currentPosition))\n let nextDirection = Geometry.name(Geometry.difference(nextPosition, currentPosition))\n\n if(previousPosition == undefined) previousDirection = \"end\"\n if(nextPosition == undefined) nextDirection = \"start\"\n\n position.image = ARROW_IMAGES[previousDirection + \"-\" + nextDirection] || ARROW_IMAGES[nextDirection + \"-\" + previousDirection]\n })\n\n return (\n <div class=\"MoveArrow\">\n {positions.map((position) => (\n <div class=\"Move\" style={{\n \"left\": position.x + \"em\",\n \"top\": position.y + \"em\",\n \"background-image\": position.image && \"url(\" + position.image + \")\"\n }}/>\n ))}\n </div>\n )\n }\n}\nfunction getAngleBetweenPoints(p1, p2) {\n return Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI\n}\n\nclass Cursor {\n render() {\n const stage = this.props.stage\n if(stage == undefined) return\n if(stage.dialogue != undefined) return\n // if(App.game.chapter.selection.position.z == 0) {\n // return\n // }\n if(World.isOutOfBounds(stage.world, App.game.chapter.selection.position)) {\n return\n }\n\n if(Dev.inProtoMode == false\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey].zone, App.game.chapter.selection.position) == false) {\n return\n }\n\n if(World.isEmptyPosition(stage.world, App.game.chapter.selection.position)) {\n return\n }\n\n if(Dev.selectedTemplate != undefined) {\n return (\n <div class=\"Cursor\" style={this.style}>\n <div class=\"Sprite\" isHovered={this.isHovered}/>\n <UnitTemplateSprite unitTemplate={Dev.selectedTemplate}/>\n </div>\n )\n }\n\n\n return (\n <div class=\"Cursor\" style={this.style}>\n <div class=\"Sprite\" isHovered={this.isHovered}/>\n </div>\n )\n }\n get isHovered() {\n return App.game.chapter.selection.hoveredUnitKey != undefined\n }\n get style() {\n const selection = App.game.chapter.selection\n\n return {\n \"left\": selection.position.x + \"em\",\n \"top\": selection.position.y + \"em\",\n }\n }\n}\n\nclass WorldImage {\n render() {\n if(this.props.stage.images != undefined) {\n return this.props.stage.images.map((image, index) => {\n return (\n <div class=\"WorldImage\" style={{\n \"background-image\": \"url(\" + image + \")\",\n \"width\": this.props.stage.world.width + \"em\",\n \"height\": this.props.stage.world.height + \"em\",\n \"z-index\": 1 + (index * 10),\n }}/>\n )\n })\n }\n return (\n <div class=\"WorldImage\" style={{\n \"background-image\": \"url(\" + this.props.stage.image + \")\",\n \"width\": this.props.stage.world.width + \"em\",\n \"height\": this.props.stage.world.height + \"em\",\n }}>\n {this.encounters}\n </div>\n )\n }\n get encounters() {\n if(this.props.stage.encounters == undefined) return\n return Object.values(this.props.stage.encounters).map((encounter) => {\n if(this.props.stage.currentEncounterKey < encounter.slug) return\n if(encounter.color == undefined) return\n return (\n <div class=\"EncounterImage\" style={{\n \"width\": encounter.width + \"em\",\n \"height\": encounter.height + \"em\",\n \"left\": encounter.x + \"em\",\n \"top\": encounter.y + \"em\",\n \"backgroundColor\": encounter.color,\n }}/>\n )\n })\n }\n}\n\nclass WorldBlocks {\n render() {\n const blocks = Object.values(this.props.stage.world.blocks || []).map((block) => {\n if(block.image == undefined) return\n if(Zone.isInBounds(App.game.chapter.selection.camera.renderzone, block.position) == false) {\n return\n }\n return (\n <WorldBlock block={block}/>\n )\n })\n return blocks\n }\n}\n\nclass WorldBlock {\n render() {\n return (\n <div class=\"WorldBlock\" style={this.style}/>\n )\n }\n get style() {\n return {\n \"left\": this.props.block.position.x + \"em\",\n \"top\": this.props.block.position.y + \"em\",\n \"background-image\": \"url(\" + this.props.block.image + \")\",\n }\n }\n}\n\nclass Units {\n render() {\n const stage = this.props.stage\n return Object.values(stage.units).map((unit, index) => {\n if(unit == undefined) return\n if(unit.isDead == true) return\n if(unit.hasBeenRemoved == true) return\n if(unit.isNotRendered) return\n\n const roundedPosition = {\n \"x\": Math.round(unit.position.x),\n \"y\": Math.round(unit.position.y),\n \"z\": Math.round(unit.position.z)\n }\n\n if(stage.configuration?.darkness != \"none\"\n || App.game.configuration.encounterViewOnly == true) {\n if(stage.currentEncounterKey != undefined\n && Zone.isInBounds(stage.encounters[stage.currentEncounterKey].zone, roundedPosition) == false) {\n return\n }\n }\n\n let omegaunit = undefined\n if(Director.isPerforming != true\n && App.game.chapter?.selection?.hoveredAction?.omegastage?.units[unit.key] != undefined) {\n omegaunit = App.game.chapter.selection.hoveredAction.omegastage.units[unit.key]\n }\n\n return <Unit stage={stage} unit={unit} omegaunit={omegaunit}/>\n })\n }\n}\n\nclass Unit {\n render() {\n if((this.props.unit.type == \"zone\" || this.props.unit.type == \"spot\")\n && Dev.inProtoMode == false) return\n return (\n <div class=\"Unit\" style={this.style} key={this.props.unit.key} isInBounds={this.isInBounds}>\n <UnitSprite unit={this.props.unit} isGrayscaled={this.isGrayscaled}/>\n <UnitHealthBar stage={this.props.stage} unit={this.props.unit} omegaunit={this.props.omegaunit}/>\n <UnitExperienceBar stage={this.props.stage} unit={this.props.unit}/>\n <div class=\"Selection\" isHovered={this.isHovered} isSelected={this.isSelected}/>\n </div>\n )\n // <div class=\"UnitElement\" element={this.props.unit.element} style={{\n // \"background-color\": elements[this.props.unit.element]?.color\n // }}/>\n }\n get style() {\n return {\n \"left\": this.position.x + \"em\",\n \"top\": this.position.y + \"em\",\n \"z-index\": 100 + (this.position.y * 10),\n \"opacity\": this.props.unit.opacity, // for death\n }\n }\n get position() {\n // if(App.game.chapter.selection.position.x == this.props.unit.position.x\n // && App.game.chapter.selection.position.y == this.props.unit.position.y) {\n // return this.props.unit.position\n // }\n // if(App.game.chapter.selection?.selectedUnitKey == this.props.unit.key\n // && App.game.chapter.selection?.hoveredAction?.omegastage != undefined) {\n // return App.game.chapter.selection.hoveredAction.omegastage.units[this.props.unit.key].position\n // }\n return this.props.unit.position\n }\n get isGrayscaled() {\n if(Dev.inProtoMode == true) return false\n return this.isDone || this.isInBounds == false\n }\n get isDone() {\n if(this.props.unit.affiliation == \"bad\") return false\n if(this.props.unit.energy == undefined) return false\n return this.props.unit.energy[\"move\"] === false\n && this.props.unit.energy[\"invoke skill\"] === false\n }\n get isInBounds() {\n if(Dev.inProtoMode == true) return true\n if(this.props.stage.currentEncounterKey == undefined) return false\n if(this.props.stage.encounters[this.props.stage.currentEncounterKey] == undefined) return false\n return Zone.isInBounds(this.props.stage.encounters[this.props.stage.currentEncounterKey].zone, {\n \"x\": Math.round(this.position.x),\n \"y\": Math.round(this.position.y),\n \"z\": Math.round(this.position.z)\n })\n }\n get isHovered() {\n if(Dev.inProtoMode == false) return false\n return this.props.unit.key == App.game.chapter?.selection?.hoveredUnitKey\n }\n get isSelected() {\n if(Dev.inProtoMode == false) return false\n if(this.props.unit.key == App.game.chapter?.selection?.selectedUnitKey) return true\n if(App.game.chapter?.selection?.multiselectedUnitKeys.has(this.props.unit.key)) return true\n return false\n }\n}\n\nclass ActionRange {\n render() {\n if(App.game.chapter.phase != \"play\") return\n // if(App.game.chapter.sequence != undefined\n // || App.game.chapter.sequence?.steps?.length > 0) {\n // return\n // }\n\n if(App.game.chapter.selection.selectedUnitKey != undefined) {\n return (\n <UnitActionRange stage={this.props.stage}\n unit={this.props.stage.units[App.game.chapter.selection.selectedUnitKey]}/>\n )\n }\n\n if(App.game.chapter.selection.hoveredUnitKey != undefined) {\n return (\n <UnitActionRange stage={this.props.stage}\n unit={this.props.stage.units[App.game.chapter.selection.hoveredUnitKey]}/>\n )\n }\n }\n}\n\nclass UnitActionRange {\n render() {\n const unit = this.props.unit\n const stage = this.props.stage\n\n if(unit == undefined) return\n if(unit.isDead == true) return\n\n let actionmap = unit.actionmap\n if(stage.nextTurn != undefined\n && stage.nextTurn.aiActions != undefined\n && stage.nextTurn.aiActions[unit.key] != undefined\n && stage.nextTurn.aiActions[unit.key].actionmap != undefined) {\n actionmap = stage.nextTurn.aiActions[unit.key].actionmap\n }\n if(actionmap == undefined) return\n\n return Object.values(actionmap).map((actionlist, positionKey) => {\n const action = App.game.chapter.selection.findActionInActionlist({unit, actionlist})\n if(action == undefined) return\n return <UnitActionRangeTile stage={this.props.stage} unit={this.props.unit} action={action}/>\n })\n }\n}\n\nimport World from \"@frog/source/models/World.js\"\nclass UnitActionRangeTile {\n render() {\n return (\n <div class=\"UnitActionRangeTile\" style={this.style}>\n <div class=\"Sprite\" type={this.type}/>\n </div>\n )\n }\n get style() {\n const terrain = World.getTerrain(this.props.stage.world, this.props.action.position)\n if(terrain == undefined) return\n\n return {\n \"left\": terrain.position.x + \"em\",\n \"top\": terrain.position.y + \"em\",\n \"opacity\": App.game.chapter.selection.selectedUnitKey == this.props.unit.key ? 0.75 : 0.5,\n }\n }\n get type() {\n if(this.props.stage.units[this.props.action.performerKey].affiliation == \"bad\") {\n return \"enemy action\"\n }\n if(this.props.action.type == \"invoke skill\"\n && this.props.action.role == \"support\") {\n return \"support action\"\n }\n return this.props.action.type\n }\n}\n", "import * as Preact from \"preact\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\n\nimport SpriteAnimation from \"@frog/source/juice/utility/SpriteAnimation.js\"\nimport \"@frog/source/views/components/UnitSprite.less\"\n\nimport unitsprites from \"@frog/source/data/unitsprites.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport games from \"@frog/source/data/games/index.js\"\n\nconst DEFAULT_AFFILIATION = \"bad\"\nconst DEFAULT_FACE_KEY = \"human\"\n\nexport default class UnitSprite {\n render() {\n if(this.props.unit == undefined) return\n if(this.props.unit.type == \"zone\"\n || this.props.unit.type == \"spot\") {\n return(\n <div class=\"PlaceholderSpot\"/>\n )\n }\n\n return (\n <div class=\"UnitSprite\" isGrayscaled={this.props.isGrayscaled}\n isHighlighted={this.props.isHighlighted}\n imageSize={this.props.unit.imageSize}\n style={{\"background-image\": this.imageUrl && \"url(\" + this.imageUrl + \")\"}}>\n <div class=\"Body\" style={{\n \"background-image\": this.bodyUrl() && \"url(\" + this.bodyUrl() + \")\",\n \"animation-name\": this.animationName,\n \"animation-delay\": this.animationDelay,\n }}/>\n <div class=\"Face\" style={{\n \"background-image\": this.faceUrl() && \"url(\" + this.faceUrl() + \")\",\n \"animation-name\": this.animationName,\n \"animation-delay\": this.animationDelay,\n }}/>\n <div class=\"Decal\" style={{\n \"background-image\": this.decalUrl() && \"url(\" + this.decalUrl() + \")\",\n \"animation-name\": this.animationName,\n \"animation-delay\": this.animationDelay,\n }}/>\n <div class=\"Weapon\" isHidden={this.props.unit.affiliation == \"none\"} style={{\n \"background-image\": this.weaponUrl() && \"url(\" + this.weaponUrl() + \")\",\n \"animation-name\": this.animationName,\n \"animation-delay\": this.animationDelay,\n }}/>\n </div>\n )\n }\n get animationName() {\n if(App.game.configuration.squigglevision == true\n && Dev.inProtoMode != true\n && this.props.abortSquigglevision != true) {\n return \"squigglevision\"\n }\n }\n get animationDelay() {\n if(this.props.unit.affiliation == \"bad\") {\n return \"0s\"\n } else {\n return \"0.5s\"\n }\n }\n getUnitProperty(property) {\n const partyUnit = games[App.game.slug].player.party.units[this.props.unit.key]\n if(partyUnit != undefined) {\n if(partyUnit[property] != undefined) {\n return partyUnit[property]\n }\n if(partyUnit.jobKey != undefined\n && unitJobs[partyUnit.jobKey] != undefined\n && unitJobs[partyUnit.jobKey][property] != undefined) {\n return unitJobs[partyUnit.jobKey][property]\n }\n }\n if(this.props.unit.jobKey != undefined\n && unitJobs[this.props.unit.jobKey] != undefined\n && unitJobs[this.props.unit.jobKey][property] != undefined) {\n return unitJobs[this.props.unit.jobKey][property]\n }\n if(this.props.unit.randomJobKey != undefined) {\n const possibleJobKeys = this.props.unit.randomJobKey.split(\",\").map((jobKey) => jobKey.trim())\n const randomizedJobKey = possibleJobKeys[Math.floor(Date.now()/1000) % possibleJobKeys.length]\n if(unitJobs[randomizedJobKey] != undefined\n && unitJobs[randomizedJobKey][property] != undefined) {\n return unitJobs[randomizedJobKey][property]\n }\n }\n }\n bodyUrl() {\n if(this.imageUrl != undefined) return\n let protoBodyKey = undefined\n if(Dev.inProtoMode == true) {\n protoBodyKey = this.getUnitProperty(\"bodyKey\")\n }\n return this.props.unit.body || unitsprites.bodies[protoBodyKey || this.props.unit.bodyKey || this.props.unit.affiliation || DEFAULT_AFFILIATION]\n }\n faceUrl() {\n if(this.imageUrl != undefined) return\n let protoFace = undefined\n let protoFaceKey = undefined\n if(Dev.inProtoMode == true) {\n protoFace = this.getUnitProperty(\"face\")\n protoFaceKey = this.getUnitProperty(\"faceKey\")\n }\n return this.props.unit.face || protoFace || unitsprites.faces[this.props.unit.faceKey || protoFaceKey || DEFAULT_FACE_KEY]\n }\n decalUrl() {\n if(this.props.unit.affiliation == \"none\") {\n return unitsprites.decals[\"jail\"]\n }\n if(this.getUnitProperty(\"decalImageKey\") != undefined) {\n return unitsprites.decals[this.getUnitProperty(\"decalImageKey\")]\n }\n }\n weaponUrl() {\n let protoWeaponImageKey = undefined\n if(Dev.inProtoMode == true) {\n protoWeaponImageKey = this.getUnitProperty(\"weaponImageKey\")\n }\n return unitsprites.weapons[protoWeaponImageKey || this.props.unit.weaponImageKey]\n }\n get imageUrl() {\n const unit = this.props.unit\n\n if(unit.imageKey != undefined\n && unitsprites.images[unit.imageKey] != undefined) {\n return unitsprites.images[unit.imageKey]\n }\n\n if(unit.spriteKey != undefined\n && unit.sprites != undefined\n && unit.sprites[unit.spriteKey] != undefined) {\n return unit.sprites[unit.spriteKey]\n }\n\n if(unit.imageUrl != undefined) return unit.imageUrl\n\n if(unit.sprites == undefined) return\n\n if(unit.affiliation == \"good\"\n && unit.energy[\"invoke skill\"] != false) {\n if(unit.sprites?.moving != undefined\n && App.game.chapter.selection.selectedUnitKey == unit.key) {\n return SpriteAnimation.getImage({\n \"animation\": unit.sprites.moving\n })\n }\n\n if(unit.sprites?.ready != undefined\n && (App.game.chapter.selection.hoveredUnitKey == unit.key\n || App.game.chapter.selection.selectedUnitKey == unit.key)) {\n return SpriteAnimation.getImage({\n \"animation\": unit.sprites.ready,\n \"startTimestamp\": App.game?.chapter?.selection?.hoveredTimestamp\n })\n }\n }\n\n if(unit.sprites?.idle != undefined) {\n return SpriteAnimation.getImage({\n \"animation\": unit.sprites.idle\n })\n }\n if(unit.sprites.static != undefined) {\n return unit.sprites.static\n }\n }\n get paletteKey() {\n if(this.props.unit.affiliation == \"bad\") {\n return \"red\"\n } else {\n return \"blue\"\n }\n }\n}\n", "const bootupTimestamp = Date.now()\n\nexport default class SpriteAnimation {\n static getImage({animation, startTimestamp} = {}) {\n if(startTimestamp == undefined) {\n startTimestamp = bootupTimestamp\n }\n\n let time = Date.now() - startTimestamp\n\n const duration = animation.frames[animation.frames.length - 1].time\n time %= duration\n\n const frame = animation.frames.find((frame, index) => {\n if(animation.frames[index + 1] == undefined\n || animation.frames[index + 1].time > time) {\n return true\n }\n })\n\n if(frame != undefined) {\n return frame.image\n }\n }\n}\n", "const UnitSprites = {\n \"bodies\":{\n \"good\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.good.png\"),\n \"bad\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.bad.png\"),\n \"imp\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.imp.png\"),\n \"none\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.none.png\"),\n \"neutral\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.none.png\"),\n \"devil\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.devil.png\"),\n \"harpy\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/body.harpy.png\"),\n },\n \"weapons\": {\n \"sword\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.sword.png\"),\n \"daggers\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.daggers.png\"),\n \"spear\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.spear.png\"),\n \"bow\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.bow.png\"),\n \"yellow-bow\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.bow.yellow.png\"),\n \"hammer\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.hammer.png\"),\n \"gun\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.gun.png\"),\n \"staff\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.blue.png\"),\n \"red-staff\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.red.png\"),\n \"blue-staff\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.blue.png\"),\n \"green-staff\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.green.png\"),\n \"yellow-staff\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.staff.yellow.png\"),\n \"scythe\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.scythe.png\"),\n \"trident\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/weapon.trident.png\"),\n },\n \"decals\": {\n \"red-shield\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.shield.red.png\"),\n \"blue-shield\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.shield.blue.png\"),\n \"green-shield\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.shield.green.png\"),\n \"red-helmet\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.helmet.red.png\"),\n \"blue-helmet\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.helmet.blue.png\"),\n \"green-helmet\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/decal.helmet.green.png\"),\n \"jail\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/grave.png\"),\n \"grimrawr\": require(\"@frog/source/assets/images/dungeon-tactics/grimrawr.png\"),\n },\n \"faces\": {\n \"human\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.human.png\"),\n \"wolf\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.wolf.png\"),\n \"fox\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.fox.orange.png\"),\n \"white-fox\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.fox.png\"),\n \"bunny\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.bunny.png\"),\n \"boar\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.boar.png\"),\n \"imp\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.imp.png\"),\n \"devil\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.devil.png\"),\n \"devilscream\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.devil.scream.png\"),\n \"knight\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.knight.png\"),\n \"fish\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.fish.png\"),\n \"siren\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.siren.png\"),\n \"goblin\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.goblin.png\"),\n \"goblinzombie\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.goblinzombie.png\"),\n \"hobgoblin\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.hobgoblin.png\"),\n \"skull\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.skull.png\"),\n \"kobold\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.kobold.png\"),\n \"koboldzombie\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.koboldzombie.png\"),\n \"dwarf\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.dwarf.png\"),\n \"archdwarf\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.archdwarf.png\"),\n \"dwarfzombie\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.dwarfzombie.png\"),\n \"orc\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.orc.png\"),\n \"orczombie\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.orczombie.png\"),\n \"lich\": require(\"@frog/source/assets/images/frog-tactics/stage/units/parts/head.lich.png\"),\n },\n \"images\": {\n \"mafioso\": require(\"@frog/source/assets/images/frog-tactics/stage/units/mafioso.png\"),\n \"viking\": require(\"@frog/source/assets/images/frog-tactics/stage/units/viking.png\"),\n \"skeleton\": require(\"@frog/source/assets/images/frog-tactics/stage/units/skeleton.png\"),\n \"treasure\": require(\"@frog/source/assets/images/frog-tactics/stage/units/treasure.png\"),\n \"wall\": require(\"@frog/source/data/levels/vmenezio/Layer 1.png\"),\n \"grimrawr\": require(\"@frog/source/assets/images/dungeon-tactics/grimrawr.png\"),\n },\n \"arrow\": {\n \"north-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-end.png\"),\n \"north-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-start.png\"),\n \"south-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-end.png\"),\n \"south-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-start.png\"),\n \"east-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-end.png\"),\n \"east-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-start.png\"),\n \"west-end\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/west-end.png\"),\n \"west-start\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/west-start.png\"),\n \"north-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-west.png\"),\n \"north-east\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-east.png\"),\n \"south-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/south-west.png\"),\n \"south-east\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-east.png\"),\n \"east-west\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/east-west.png\"),\n \"north-south\": require(\"@frog/source/assets/images/hero-tactics-ii/arrow/north-south.png\"),\n }\n}\n\n\nexport default UnitSprites\n", "import * as Preact from \"preact\"\n\nimport UnitSprite from \"@frog/source/views/components/UnitSprite.jsx\"\nimport unitTemplates from \"@frog/source/data/unitTemplates.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport Random from \"@frog/source/utility/Random.js\"\n\nimport \"@frog/source/views/components/UnitTemplateSprite.less\"\n\nexport default class UnitTemplateSprite {\n render() {\n if(this.props.unitTemplate.type != undefined) {\n return(\n <div class=\"PlaceholderSpot\"/>\n )\n }\n if(this.props.unitTemplate.randomJobKey != undefined) {\n const jobKeys = []\n this.props.unitTemplate.randomJobKey.split(\",\").forEach((jobKey) => {\n jobKey = jobKey.trim()\n jobKeys.push(jobKey)\n })\n return(\n <UnitSprite unit={unitJobs[jobKeys[Math.floor(Date.now()/1000) % jobKeys.length]]} abortSquigglevision={true}/>\n )\n } else {\n return(\n <UnitSprite unit={unitJobs[this.props.unitTemplate.jobKey]} abortSquigglevision={true}/>\n )\n }\n }\n}\n", "import * as Preact from \"preact\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport games from \"@frog/source/data/games/index.js\"\n\nimport \"@frog/source/views/components/UnitHealthBar.less\"\n\nconst MAXIMUM_HP = 30\nconst HP_PER_SEGMENT = 10\n\nexport default class UnitHealthBar {\n render() {\n return (\n <div class=\"UnitHealthBar\" style={this.style}>\n {this.fill}\n {this.omegafill}\n {this.borders}\n </div>\n )\n }\n get style() {\n return {\n \"width\": (this.props.unit.maxhealth / 20) + \"em\"\n }\n }\n get fill() {\n return (\n <div class=\"Fill\" style={{\n \"width\": Math.max(0, this.props.unit.health / this.props.unit.maxhealth) * 100 + \"%\",\n }}/>\n )\n }\n get omegafill() {\n if(this.props.omegaunit != undefined) {\n return (\n <div class=\"OmegaFill\" style={{\n \"width\": (Math.abs(this.props.unit.health - this.props.omegaunit.health) / this.props.unit.maxhealth) * 100 + \"%\",\n \"left\": (Math.min(this.props.unit.health, this.props.omegaunit.health) / this.props.unit.maxhealth) * 100 + \"%\",\n }}/>\n )\n }\n }\n get borders() {\n const borders = []\n for(let i = 0; i < this.props.unit.maxhealth / HP_PER_SEGMENT; i += 1) {\n borders.push(\n <div class=\"Border\"/>\n )\n }\n return (\n <div class=\"Borders\">\n {borders}\n </div>\n )\n }\n}\n", "import * as Preact from \"preact\"\n\nimport \"@frog/source/views/components/UnitExperienceBar.less\"\n\nexport default class UnitExperienceBar {\n render() {\n if(this.props.unit == undefined) return\n if(this.props.unit.maxexperience == undefined) return\n return (\n <div class=\"UnitExperienceBar\" isVisible={this.props.isVisible ?? true}>\n <div class=\"Fill\" style={{\n \"width\": Math.max(0, this.props.unit.experience / this.props.unit.maxexperience) * 100 + \"%\",\n }}/>\n </div>\n )\n }\n}\n", "import * as Preact from \"preact\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Random from \"@frog/source/utility/Random.js\"\n\nimport {DevUnitInspectorUI, DevScriptInspectorUI} from \"@frog/source/views/DevInspectorUI.jsx\"\nimport {DevPaletteUI, DevNavigatorUI, DevSavestatesNavigatorUI} from \"@frog/source/views/DevNavigatorUI.jsx\"\n\nimport \"@frog/source/views/DevPanes.less\"\n\nexport default class DevPanes {\n render() {\n if(Dev.isInspectorShowing() != true) {\n return this.props.children\n }\n let navigatorPane = (<DevPaletteUI/>)\n if(Dev.navigatorTab == \"assets\") {\n navigatorPane = (<DevPaletteUI/>)\n }\n if(Dev.navigatorTab == \"chapters\") {\n navigatorPane = (<DevNavigatorUI/>)\n }\n if(Dev.navigatorTab == \"savestates\") {\n navigatorPane = (<DevSavestatesNavigatorUI/>)\n }\n let inspectorPane = (<DevUnitInspectorUI/>)\n if(Dev.inspectorTab == \"units\") {\n inspectorPane = (<DevUnitInspectorUI/>)\n }\n if(Dev.inspectorTab == \"scripts\") {\n inspectorPane = (<DevScriptInspectorUI/>)\n }\n const NOTIFICATION_DURATION = 2000\n let devNotification = \"\"\n if(Dev.notification?.message != undefined\n && Date.now() - Dev.notification.startTime < NOTIFICATION_DURATION) {\n devNotification = Dev.notification.message\n }\n return (\n <div class=\"DevPanes\" key=\"dev\">\n <DevHeader/>\n <div class=\"DevBody\">\n <div class=\"TabbedPane\">\n <div class=\"DevPaneTabs\">\n <div class=\"Tab\" onClick = {() => {Dev.navigatorTab = \"chapters\"}}>Chapters</div>\n <div class=\"Tab\" onClick = {() => {Dev.navigatorTab = \"assets\"}}>Assets</div>\n <div class=\"Tab\" onClick = {() => {Dev.navigatorTab = \"savestates\"}}>Savestates</div>\n </div>\n {navigatorPane}\n </div>\n <div class=\"DevPlaySection\">\n <div class=\"DevPlayHeader\" inProtoMode={Dev.inProtoMode}>\n <div class=\"PausePlayButton\"\n title={Dev.inProtoMode ? \"Play\" : \"Pause\"}\n onClick={this.onClickPausePlayButton}>\n <span class=\"material-symbols-rounded\">\n {Dev.inProtoMode ? \"play_arrow\" : \"pause\"}\n </span>\n </div>\n <div class=\"StopButton\" title=\"Stop\" onClick={this.onClickStopButton}>\n <span class=\"material-symbols-rounded\">stop</span>\n </div>\n </div>\n <div class=\"DevPreview\">\n {this.props.children}\n </div>\n <div class=\"DevPlayFooter\" inProtoMode={Dev.inProtoMode}>\n <span class=\"PointerPosition\">\n {App.game?.chapter?.selection?.position?.x || 0}\n <span>x</span>\n {App.game?.chapter?.selection?.position?.y || 0}\n </span>\n <span class=\"RandomSeed\">\n <div onClick={() => navigator.clipboard.writeText(window.location.origin + (window.location.path || \"\") + \"?seed=\" + Random.seed)}>\n , Seed: {Random.seed || \"unseeded\"}\n </div>\n </span>\n <div class=\"Spacer\"/>\n <span>\n {devNotification}\n </span>\n <div class=\"Spacer\"/>\n <span class=\"Mode\">\n {Dev.inProtoMode ? \"EDIT\" : \"PLAY\"}\n </span>\n </div>\n </div>\n <div class=\"TabbedPane\">\n <div class=\"DevPaneTabs\">\n <div class=\"Tab\" onClick = {this.onClickUnitsTab()}>Units</div>\n <div class=\"Tab\" onClick = {() => {Dev.inspectorTab = \"scripts\"}}>Scripts</div>\n </div>\n {inspectorPane}\n </div>\n </div>\n </div>\n )\n }\n onClickUnitsTab() {\n return () => {\n if(Dev.inspectorTab == \"units\") {\n App.game.chapter.selection.unselect()\n }\n Dev.inspectorTab = \"units\"\n }\n }\n onClickPausePlayButton() {\n Dev.inProtoMode = !Dev.inProtoMode\n if(Dev.inProtoMode == false) {\n Dev.reloadSavestate(\"livePlaytest\", {\"rejectStaleSavestates\": true})\n }\n }\n onClickStopButton() {\n if(App.game.chapter == undefined) return\n if(Dev.inProtoMode == true) return\n localStorage.removeItem(\"savestate_\" + App.game.slug + \"_\" + App.game.chapter.slug + \"_livePlaytest\")\n App.game.chapter.restart()\n Dev.inProtoMode = true\n }\n}\n\nclass DevHeader {\n render() {\n return (\n <div class=\"DevHeader\">\n <div class=\"Dropdown\">\n <div class=\"Dropbutton\">\n File\n </div>\n <div class=\"DropdownContent\">\n <div class=\"Option\" onClick={() => {Dev.saveUnitsToFile()}}>\n Save <span class=\"Legend\">\u2318S</span>\n </div>\n <div class=\"Option\" onClick={() => {Dev.saveUnitsToFile({\"isManuallySelectingSavefile\": true})}}>\n Save As... <span class=\"Legend\">\u2318\u21E7S</span>\n </div>\n </div>\n </div>\n <div class=\"Dropdown\">\n <div class=\"Dropbutton\">\n Edit\n </div>\n <div class=\"DropdownContent\">\n <div class=\"Option\" onClick={this.onClickingUndo()}>\n Undo <span class=\"Legend\">\u2318Z</span>\n </div>\n <div class=\"Option\" onClick={this.onClickingRedo()}>\n Redo <span class=\"Legend\">\u2318\u21E7Z</span>\n </div>\n <div class=\"Option\" onClick={async () => {Dev.clipUnit(); Dev.deleteSelectedUnit()}}>\n Cut <span class=\"Legend\">\u2318X</span>\n </div>\n <div class=\"Option\" onClick={async () => {Dev.clipUnit()}}>\n Copy <span class=\"Legend\">\u2318C</span>\n </div>\n <div class=\"Option\" onClick={async () => {Dev.pasteUnit()}}>\n Paste <span class=\"Legend\">\u2318V</span>\n </div>\n </div>\n </div>\n <div class=\"Dropdown\">\n <div class=\"Dropbutton\">\n View\n </div>\n <div class=\"DropdownContent\">\n <div class=\"Option\" onClick={() => {Dev.areDevPanelsOpen = !Dev.areDevPanelsOpen}}>\n Toggle Panels <span class=\"Legend\"> - </span>\n </div>\n <div class=\"Option\" onClick={() => {Dev.inProtoMode = !Dev.inProtoMode}}>\n Toggle Protomode <span class=\"Legend\"> = </span>\n </div>\n <div class=\"Option\" onClick={() => {window.location.search = \"?production/\"}}>\n Go to Production\n </div>\n </div>\n </div>\n </div>\n )\n }\n onClickingUndo() {\n return () => {\n if(Dev.inProtoMode == true) {\n Dev.loadProtoUnitsToUndo()\n } else {\n Dev.actionTrace.push({\"type\": \"undoAction\"})\n Dev.recordSavestate(\"livePlaytest\")\n App.game.chapter.undoAction()\n }\n }\n }\n onClickingRedo() {\n return () => {\n if(Dev.inProtoMode == true) {\n Dev.loadProtoUnitsToRedo()\n }\n }\n }\n}\n", "import * as Preact from \"preact\"\n\nimport \"@frog/source/views/DevInspectorUI.less\"\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nimport unitsprites from \"@frog/source/data/unitsprites.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\n\nconst PROPERTY_HINTS = {\n \"health\": \"The unit's remaining health in points.\",\n \"maxhealth\": \"The maximum number of health points for the unit\",\n \"key\": \"The unique id of the unit. It must be unique!!\",\n \"affiliation\": \"Which side the unit is on, be it good or bad or none.\",\n \"moverange\": \"How many tiles of movement the unit can take each turn.\",\n \"faceKey\": \"The face (or head) sprite, keyed from the spritesheet.\",\n \"bodyKey\": \"The body (or torso) sprite, keyed from the spritesheet.\",\n \"jobKey\": \"The job (or class) of the unit, keyed from a defined job list. Examples include sword or bow.\",\n \"randomJobKey\": \"A comma separated list of job keys to randomized between with each playthrough.\",\n}\n\nconst WHITELIST_FOR_NESTED_PROPERTIES = [\"position\"]\nconst PROPERTIES_LISTED_EVEN_WHEN_MISSING = [\"health\",\"maxhealth\"]\nconst SUGGESTED_VALUES = {\n \"jobKey\": Object.keys(unitJobs),\n \"bodyKey\": Object.keys(unitsprites.bodies),\n \"faceKey\": Object.keys(unitsprites.faces),\n \"weaponImageKey\": Object.keys(unitsprites.weapons),\n \"affiliation\": [\"good\", \"bad\", \"none\", \"neutral\"],\n}\n\nexport class DevScriptInspectorUI {\n render() {\n return (\n <div class=\"DevScriptInspector\">\n <div>Select a Script Event:</div>\n {Object.keys(localStorage).map((key) => {\n if(key.startsWith(\"savestate_\") == false) return\n const jsonObject = JSON.parse(localStorage.getItem(key))\n if(jsonObject == undefined) return\n if(jsonObject.actionTrace == undefined) return\n if(jsonObject.data?.knotname == undefined) return\n if(Navigation.state.chapterSlug == jsonObject.chapterSlug\n || Navigation.state.chapterSlug == undefined) {\n return (\n <div class=\"ScriptLink\" onClick={() => {\n Dev.inProtoMode = false\n Dev.replaySavestate(jsonObject)\n }}>\n {jsonObject.data.knotname || key}\n </div>\n )\n }\n })}\n </div>\n )\n }\n}\n\nexport class DevUnitInspectorUI {\n render() {\n if(App.game == undefined) return\n if(Dev.isInspectorShowing() != true) return\n const selection = App.game.chapter?.selection\n const key = selection.selectedUnitKey || selection.hoveredUnitKey\n if(key == undefined) {\n const modedUnitsList = Dev.isEditingProto() ? Dev.loadedProtostage.units : App.game.chapter.stage.units\n return (\n <div class=\"DevUnitInspector\">\n <div>Select a Unit:</div>\n {Object.values(modedUnitsList).map((unit) => {\n return <UnitLink unit={unit}/>\n })}\n </div>\n )\n }\n var modedInspectedUnit\n if(Dev.isEditingProto() == true) {\n modedInspectedUnit = Dev.loadedProtostage.units[key]\n } else {\n modedInspectedUnit = App.game.chapter.stage.units[key]\n }\n if(modedInspectedUnit == undefined) {\n return (\n <div class=\"DevUnitInspector\">\n Selected unit is not defined in this mode.\n Select anew\n </div>\n )\n }\n const isSelected = (modedInspectedUnit.key == App.game.chapter.selection.selectedUnitKey)\n // Assemble a compound stand-in unit from the multiply selected units\n if(Dev.isEditingProto() == true\n && selection.multiselectedUnitKeys.size > 1) {\n let overlappingPropertiesKeys = Object.keys(Dev.loadedProtostage.units[key])\n selection.multiselectedUnitKeys.forEach((unitKey) => {\n let overlap = overlappingPropertiesKeys.filter(\n (propertyKey) => {\n return Object.keys(Dev.loadedProtostage.units[unitKey]).includes(propertyKey)\n }\n )\n overlappingPropertiesKeys = overlap\n })\n const compoundUnit = structuredClone(Dev.loadedProtostage.units[key])\n overlappingPropertiesKeys.forEach((propertyKey) => {\n selection.multiselectedUnitKeys.forEach((unitKey) => {\n if(Dev.loadedProtostage.units[unitKey][propertyKey] != compoundUnit[propertyKey]) {\n delete compoundUnit[propertyKey]\n }\n })\n })\n modedInspectedUnit = new Proxy(compoundUnit, {\n set(target, propertyKey, value) {\n selection.multiselectedUnitKeys.forEach((unitKey) => {\n Dev.loadedProtostage.units[unitKey][propertyKey] = value\n })\n return true\n },\n deleteProperty(target, propertyKey) {\n selection.multiselectedUnitKeys.forEach((unitKey) => {\n delete Dev.loadedProtostage.units[unitKey][propertyKey]\n })\n return true\n }\n })\n }\n return (\n <div class=\"DevUnitInspector\" key={key} isSelected={isSelected}>\n <div class=\"Header\">\n <div class=\"Name\">{modedInspectedUnit.name || \"Unit\"}</div>\n <div class=\"Key\">(#{(modedInspectedUnit.key + \"\").split(\"-\")[0]})</div>\n </div>\n <form>\n {Object.keys(modedInspectedUnit).map((key) => {\n let propertyType = undefined\n if(isNaN(modedInspectedUnit[key]) == false) propertyType = \"number\"\n if(modedInspectedUnit[key] == null) propertyType = \"text\"\n if(modedInspectedUnit[key] == \"\") propertyType = \"text\"\n\n if(typeof modedInspectedUnit[key] == \"string\"\n || isNaN(modedInspectedUnit[key]) == false) {\n return (\n <EditableProperty key={key} propertyKey={key} type={propertyType}\n label={key} tooltip={PROPERTY_HINTS[key]}\n modedUnit={modedInspectedUnit}/>\n )\n }\n if(WHITELIST_FOR_NESTED_PROPERTIES.includes(key)) {\n return (\n <div>\n {\n Object.keys(modedInspectedUnit[key]).map((subkey) => {\n let propertyType = undefined\n if(isNaN(modedInspectedUnit[key][subkey]) == false) propertyType = \"number\"\n return (\n <EditableSubproperty propertyKey={key}\n subpropertyKey={subkey} type={propertyType}\n label={key+\".\"+subkey} tooltip={PROPERTY_HINTS[key]}\n modedUnit={modedInspectedUnit}/>\n )\n })\n }\n </div>\n )\n }\n })}\n {PROPERTIES_LISTED_EVEN_WHEN_MISSING.map((key) => {\n if(Object.keys(modedInspectedUnit).includes(key) == false) {\n let propertyType = undefined\n if(isNaN(modedInspectedUnit[key]) == false) propertyType = \"number\"\n return (\n <EditableProperty propertyKey={key} type={propertyType}\n label={key} tooltip={PROPERTY_HINTS[key]}\n modedUnit={modedInspectedUnit}/>\n )\n }\n })}\n <NovelProperty\n modedUnit={modedInspectedUnit}/>\n </form>\n </div>\n )\n }\n}\n\nclass UnitLink {\n render() {\n return (\n <div class=\"UnitLink\" onClick={this.onClick()}>\n <div class=\"Name\">{this.getName()}</div>\n <div class=\"Key\">(#{(this.props.unit.key + \"\").split(\"-\")[0]})</div>\n </div>\n )\n }\n getName() {\n return (this.props.unit.name\n || unitJobs[this.props.unit.jobKey]?.jobName\n || (this.props.unit.randomJobKey ? \"Random\" : undefined)\n || ((this.props.unit.type == \"zone\" || this.props.unit.type == \"spot\") ? \"Spawnspot\" : undefined)\n || \"Unit\")\n }\n onClick() {\n return () => {\n const selection = App.game.chapter.selection\n const camPosition = selection.camera.position\n const unitPosition = this.props.unit.position\n if(selection.isOnCamera(unitPosition) == false) {\n selection.centerPositionInCamera(unitPosition)\n }\n App.game.chapter.selection.select(this.props.unit.key)\n }\n }\n}\n\n\nclass EditableProperty {\n render() {\n if(this.list != undefined) {\n return (\n <label class=\"EditableProperty\" key={this.props.label}>\n <datalist id={this.props.label+\"SuggestedValues\"}>\n {this.list.map((suggestion, suggestionkey) =>\n <option key={suggestionkey} value={suggestion}>\n {suggestion}\n </option>\n )}\n </datalist>\n <div class=\"Label\" title={this.props.tooltip}>\n <span class=\"Text\">{this.props.label}</span>\n </div>\n <input class=\"Value\" key={this.props.label} type={this.type}\n defaultValue={this.defaultValue} list={this.props.label+\"SuggestedValues\"}\n onChange={this.onChange} onKeyDown={this.onKeyDown}/>\n </label>\n )\n }\n return (\n <label class=\"EditableProperty\" key={this.props.label}>\n <div class=\"Label\" title={this.props.tooltip}>\n <span class=\"Text\">{this.props.label}</span>\n </div>\n <input class=\"Value\" key={this.props.label} type={this.type}\n defaultValue={this.defaultValue} list={this.list}\n onChange={this.onChange} onKeyDown={this.onKeyDown}/>\n </label>\n )\n }\n get list() {\n if(SUGGESTED_VALUES[this.props.propertyKey] != undefined) {\n return SUGGESTED_VALUES[this.props.propertyKey]\n }\n return undefined\n }\n get type() {\n if(this.props.type == \"number\") {\n return \"number\"\n }\n return \"text\"\n }\n get defaultValue() {\n return this.props.modedUnit[this.props.propertyKey]\n }\n get onKeyDown() {\n return (event) => {\n event.stopPropagation()\n }\n }\n get onChange() {\n return (event) => {\n event.preventDefault()\n let changedInput = event.target.value\n if(Dev.isEditingProto() == true) {\n Dev.saveToUndo()\n }\n\n if(this.props.type == \"number\") {\n changedInput = parseInt(changedInput || 0)\n if(isNaN(changedInput)) {\n console.warn(event.target.value, \"was expected to be a number, but is not a number.\")\n }\n }\n\n if(changedInput == \"\") {\n delete this.props.modedUnit[this.props.propertyKey]\n } else {\n this.props.modedUnit[this.props.propertyKey] = changedInput\n }\n\n App.game.chapter.recalculateStage()\n App.game.chapter.saveStage()\n Dev.autosaveUnitsToFile()\n }\n }\n}\n\nclass EditableSubproperty extends EditableProperty {\n get defaultValue() {\n return this.props.modedUnit[this.props.propertyKey][this.props.subpropertyKey]\n }\n get onChange() {\n return (event) => {\n event.preventDefault()\n let changedInput = event.target.value\n if(Dev.isEditingProto() == true) {\n Dev.saveToUndo()\n }\n\n if(this.props.type == \"number\") {\n changedInput = parseInt(changedInput || 0)\n if(isNaN(changedInput)) {\n console.warn(event.target.value, \"was expected to be a number, but is not a number.\")\n }\n }\n\n if(this.props.modedUnit[this.props.propertyKey] != undefined) {\n if(changedInput == \"\") {\n delete this.props.modedUnit[this.props.propertyKey]\n } else {\n this.props.modedUnit[this.props.propertyKey][this.props.subpropertyKey] = changedInput\n }\n\n App.game.chapter.recalculateStage()\n App.game.chapter.saveStage()\n Dev.autosaveUnitsToFile()\n } else {\n console.log(\"Cannot write subproperty of a unit property that does not exist\")\n }\n }\n }\n}\n\nclass NovelProperty extends EditableProperty {\n render() {\n return (\n <label class=\"EditableProperty\">\n <input class=\"Label\" type=\"text\"\n onChange={this.onLabelChange} onKeyDown={this.onKeyDown}/>\n <input class=\"Value\"\n onChange={this.onChange} onKeyDown={this.onKeyDown}/>\n </label>\n )\n }\n get onChange() {\n return (event) => {\n event.preventDefault()\n\n this.newValue = event.target.value\n }\n }\n get onLabelChange() {\n return (event) => {\n event.preventDefault()\n let changedLabel = event.target.value\n\n if(changedLabel === \"\") return\n if(Dev.isEditingProto() == true) {\n Dev.saveToUndo()\n }\n\n this.props.modedUnit[changedLabel] = this.newValue || null\n\n App.game.chapter.recalculateStage()\n App.game.chapter.saveStage()\n Dev.autosaveUnitsToFile()\n }\n }\n}\n", "import * as Preact from \"preact\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\n\nimport UnitTemplateSprite from \"@frog/source/views/components/UnitTemplateSprite.jsx\"\n\nimport unitTemplates from \"@frog/source/data/unitTemplates.js\"\nimport games from \"@frog/source/data/games/index.js\"\n\nimport \"@frog/source/views/DevNavigatorUI.less\"\n\nexport class DevSavestatesNavigatorUI {\n render() {\n return (\n <div class=\"DevSavestateNavigator\">\n {Object.keys(localStorage).map((key) => {\n if(key.startsWith(\"savestate_\") == false) return\n const jsonObject = JSON.parse(localStorage.getItem(key))\n if(jsonObject == undefined) return\n if(jsonObject.actionTrace == undefined) return\n const slugWords = key.split(\"_\")\n if(jsonObject.gameSlug == Navigation.state.gameSlug\n && jsonObject.chapterSlug == Navigation.state.chapterSlug)\n return (\n <div class=\"SavestateLink\" onClick={() => {\n Dev.inProtoMode = false\n Navigation.go(\"/games/\"+jsonObject.gameSlug+\"/chapters/\"+jsonObject.chapterSlug)\n Dev.replaySavestate(jsonObject)\n }}>\n <div class=\"Gamename\">{slugWords[1]}</div>\n <div class=\"Chaptername\">{slugWords[2]}</div>\n <div class=\"Name\">{slugWords.slice(3,slugWords.length).join(\" \")}</div>\n </div>\n )\n })}\n </div>\n )\n }\n}\n\nexport class DevPaletteUI {\n render() {\n if(App.game == undefined) return\n if(Dev.isPaletteShowing() != true) return\n return (\n <div class=\"DevNavigatorPane\">\n <input class=\"Search\" id=\"search-palette\" type=\"text\"\n onKeyDown={this.onKey} onKeyUp={this.onKey}\n placeholder=\"Search for a unit\"/>\n <div class=\"UnitTemplates\">\n {Object.values(unitTemplates).map((template) => {\n const keyPath = template.templateKey.split(\"/\")\n if(keyPath.length == 3\n && (keyPath[0] == \"jobs\" || keyPath[0] == \"player\")\n && Object.keys(games).includes(keyPath[1])) {\n if(Navigation.state.gameSlug == undefined\n || keyPath[1] != Navigation.state.gameSlug) return\n }\n return <UnitTemplate template={template}/>\n })}\n </div>\n </div>\n )\n }\n get onKey() {\n return (event) => {\n Dev.navigatorSearchQuery = event.target.value.trim()\n event.stopPropagation()\n }\n }\n}\n\nclass UnitTemplate {\n render() {\n return (\n <div class=\"NavItem\" onClick={this.onClick}\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Image Column\">\n <UnitTemplateSprite unitTemplate={this.props.template}/>\n </div>\n <div class=\"Name Column\">{this.props.template.templateKey}</div>\n </div>\n )\n }\n get onClick() {\n return () => {\n if(Dev.selectedTemplate == this.props.template) {\n Dev.selectedTemplate = undefined\n } else {\n Dev.selectedTemplate = this.props.template\n }\n }\n }\n get isSelected() {\n return Dev.selectedTemplate == this.props.template\n }\n get isShown() {\n // If there is no search query, then\n // we don't filter anything at all.\n if(isNavigatorSearchEmpty()) {\n return true\n }\n\n if(this.props.template.templateKey != undefined\n && this.props.template.templateKey.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n if(this.props.template.jobKey != undefined\n && this.props.template.jobKey.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n if(this.props.template.randomJobKey != undefined\n && this.props.template.randomJobKey.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n // If it didn't pass any of the above\n // checks, then it should be filtered out!!\n return false\n }\n}\n\nexport class DevNavigatorUI {\n render() {\n return (\n <div class=\"DevNavigatorPane\">\n <input class=\"Search\" id=\"search-palette\" type=\"text\"\n onKeyDown={this.onKey} onKeyUp={this.onKey}\n placeholder=\"Search for a chapter\"/>\n <div class=\"Games\">\n {Object.values(games).map((game) => {\n return <GameLink game={game}/>\n })}\n </div>\n </div>\n )\n }\n get onKey() {\n return (event) => {\n Dev.navigatorSearchQuery = event.target.value.trim().toLowerCase()\n event.stopPropagation()\n }\n }\n}\n\n\nfunction isNavigatorSearchEmpty() {\n return Dev.navigatorSearchQuery == \"\"\n || Dev.navigatorSearchQuery == undefined\n}\n\nclass GameLink {\n render() {\n if(this.isSelected == true\n || isNavigatorSearchEmpty() == false) {\n return (\n <div class=\"GameHierarchy\">\n <div class=\"NavItem\" onClick={this.onClick}\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Name Column\">{this.props.game.slug}</div>\n </div>\n {Object.values(this.props.game.chapters).map((chapter) => {\n return <ChapterLink game={this.props.game} chapter={chapter}/>\n })}\n </div>\n )\n } else {\n return (\n <div class=\"GameHierarchy\">\n <div class=\"NavItem\" onClick={this.onClick}\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Name Column\">{this.props.game.slug}</div>\n </div>\n </div>\n )\n }\n }\n get onClick() {\n return () => {\n Navigation.go(\"/games/\"+this.props.game.slug)\n }\n }\n get isSelected() {\n return Navigation.state.gameSlug == this.props.game.slug\n || Navigation.state.gameSlug == undefined\n }\n get isShown() {\n // If there is no search query, then\n // we don't filter anything at all.\n if(isNavigatorSearchEmpty()) {\n return true\n }\n\n if(this.props.game.slug != undefined\n && this.props.game.slug.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n\n if(this.props.game.chapters != undefined) {\n return Object.values(this.props.game.chapters).some((chapter) => {\n return isChapterInSearch(chapter)\n })\n }\n\n // If it didn't pass any of the above\n // checks, then it should be filtered out!!\n return false\n }\n}\n\nclass ChapterLink {\n render() {\n if(this.isSelected == true\n || isNavigatorSearchEmpty() == false) {\n return (\n <div class=\"ChapterHierarchy\">\n <div class=\"NavItem\" onClick={this.onClick} style=\"padding-left: 1em\"\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Name Column\">{this.props.chapter.slug}</div>\n </div>\n {Object.values(this.props.chapter.stage.world.zones).map((encounter) => {\n return <EncounterLink game={this.props.game} chapter={this.props.chapter} encounter={encounter}/>\n })}\n </div>\n )\n } else {\n return (\n <div class=\"ChapterHierarchy\">\n <div class=\"NavItem\" onClick={this.onClick} style=\"padding-left: 1em\"\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Name Column\">{this.props.chapter.slug}</div>\n </div>\n </div>\n )\n }\n }\n get onClick() {\n return () => {\n Navigation.go(\"/games/\"+this.props.game.slug+\"/chapters/\"+this.props.chapter.slug)\n }\n }\n get isSelected() {\n return Navigation.state.chapterSlug == this.props.chapter.slug\n || Navigation.state.chapterSlug == undefined\n }\n get isShown() {\n // If there is no search query, then\n // we don't filter anything at all.\n if(isNavigatorSearchEmpty() != true) {\n return isChapterInSearch(this.props.chapter)\n // return true // shown by default?\n }\n\n return true\n }\n}\n\nfunction isChapterInSearch(chapter) {\n if(chapter.slug != undefined\n && chapter.slug.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n\n if(chapter.stage.world.zones != undefined) {\n return Object.values(chapter.stage.world.zones).some((encounter) => {\n return isEncounterInSearch(encounter)\n })\n }\n}\n\nclass EncounterLink {\n render() {\n return (\n <div class=\"NavItem\" onClick={this.onClick} style=\"padding-left: 2em\"\n isSelected={this.isSelected} isShown={this.isShown + \"\"}>\n <div class=\"Column\">{this.props.encounter.slug}</div>\n <div class=\"Column\">{this.props.encounter.name}</div>\n </div>\n )\n }\n get onClick() {\n return () => {\n Navigation.go(\"/games/\"+this.props.game.slug+\"/chapters/\"+this.props.chapter.slug+\"/encounters/\"+this.props.encounter.slug)\n }\n }\n get isSelected() {\n return (\n Navigation.state.screen == \"ChapterScreen\"\n && Navigation.state.chapterSlug == this.props.chapter.slug\n && App.game.chapter.stage.currentEncounterKey == this.props.encounter.slug\n )\n }\n get isShown() {\n // If there is no search query, then\n // we don't filter anything at all.\n if(isNavigatorSearchEmpty() != true) {\n return isEncounterInSearch(this.props.encounter)\n }\n\n return Navigation.state.chapterSlug == this.props.chapter.slug\n }\n}\n\nfunction isEncounterInSearch(encounter) {\n if(encounter.slug != undefined\n && (encounter.slug+\"\").toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n\n if(encounter.name != undefined\n && encounter.name.toLowerCase().includes(Dev.navigatorSearchQuery)) {\n return true\n }\n // If it didn't pass any of the above\n // checks, then it should be filtered out!!\n return false\n}\n", "import Pointer from \"poin\"\nimport * as Preact from \"preact\"\nimport {nanoid} from \"nanoid\"\nimport Objdict from \"objdict\"\nimport isString from \"@frog/source/utility/isString.js\"\n\nimport App from \"@frog/source/models/App.js\"\nimport Dev from \"@frog/source/models/admin/Dev.js\"\nimport Navigation from \"@frog/source/models/Navigation.js\"\nimport Director from \"@frog/source/juice/Director.js\"\nimport Stage from \"@frog/source/models/Stage.js\"\nimport unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport skills from \"@frog/source/data/skills.js\"\nimport elements from \"@frog/source/data/elements.js\"\nimport games from \"@frog/source/data/games/index.js\"\nimport procedurallyGenerateChapters from \"@frog/source/data/games/dungeon/chapters.js\"\nimport Zone from \"@frog/source/models/Zone.js\"\n\nimport UnitSprite from \"@frog/source/views/components/UnitSprite.jsx\"\nimport UnitHealthBar from \"@frog/source/views/components/UnitHealthBar.jsx\"\nimport UnitExperienceBar from \"@frog/source/views/components/UnitExperienceBar.jsx\"\nimport \"@frog/source/views/ChapterUI.less\"\n\nexport default class ChapterUI {\n render() {\n const stage = this.props.stage\n if(Dev.inProtoMode == true) return\n return (\n <div class=\"ChapterUI\">\n <EscapeModal/>\n <Buttons stage={stage}/>\n <UnitSummary stage={stage}/>\n <PopupBox stage={stage}/>\n <ChapterStartBanner stage={stage}/>\n <MessageBanner stage={stage}/>\n <ChapterSuccessBanner stage={stage}/>\n <ChapterFailureBanner stage={stage}/>\n <TutorialMessages stage={stage}/>\n <EncounterName stage={stage}/>\n <ChapterPrompt stage={stage}/>\n </div>\n )\n // <Inventory stage={stage}/>\n // <Tutorial stage={stage}/>\n // <EncounterDetails stage={stage}/>\n // <EncounterText stage={stage}/>\n // <PrepareModal/>\n }\n}\n\nclass ChapterPrompt {\n render() {\n const stage = this.props.stage\n if(stage.text == undefined) return\n const text = stage.text instanceof Function ? stage.text(stage) : stage.text\n if(text == undefined) return\n if(isString(text) == true) {\n return (\n <div class=\"ChapterPrompt\">\n <div class=\"Text\">\n {text}\n </div>\n </div>\n )\n } else {\n return text\n }\n }\n}\n\nclass EncounterName {\n render() {\n const stage = this.props.stage\n if(stage == undefined) return\n if(stage.currentEncounterKey == undefined) return\n if(stage.encounters[stage.currentEncounterKey] == undefined) return\n if(stage.encounters[stage.currentEncounterKey].name == undefined) return\n\n return (\n <div class=\"EncounterName\">\n {stage.encounters[stage.currentEncounterKey].name}\n </div>\n )\n }\n}\n\nclass TutorialMessages {\n render() {\n if(this.props.stage?.dialogue != undefined\n || this.props.stage?.tags[\"hud\"]?.value == \"hidden\") {\n return (\n <div class=\"TutorialPrompt\" isHidden={true}/>\n )\n }\n\n if(App.game?.slug == \"pirates\"\n && App.game?.chapter?.slug == \"ship\"\n && this.props.stage.currentEncounterKey == \"2.3\") {\n if(this.props.stage.tags[\"tutorial:hasMovedWithoutAttacking\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"upright\">\n <div class=\"Text\">If need be, you can always undo.</div>\n </div>\n )\n }\n if(this.props.stage.tags[\"tutorial:hasAttacked\"]?.value != true) {\n return (\n <div class=\"TutorialPrompt\" position=\"upright\">\n <div class=\"Text\">You've been given a sword. Let's put it to use.</div>\n </div>\n )\n }\n if(this.props.stage.tags[\"tutorial:hasKilled\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"upright\">\n <div class=\"Text\">Excellent. Now end your turn. Let them come to you.</div>\n </div>\n )\n }\n }\n\n if(App.game?.slug == \"pirates\"\n && App.game?.chapter?.slug == \"ship\"\n && this.props.stage.currentEncounterKey == \"2.2\") {\n if(this.props.stage.tags[\"tutorial:hasAttackedEffectivelyWithEarth\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">\n The <span class=\"green\">axe</span> cleaves\n through <span class=\"blue\">spears</span>!\n </div>\n </div>\n )\n }\n if(this.props.stage.tags[\"tutorial:hasAttackedIneffectively\"]?.value == true) {\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">\n Our <span class=\"red\">swords</span> are\n weak to their <span class=\"blue\">spears</span>.\n <br/><br/>\n If need be, we can always undo.\n </div>\n </div>\n )\n }\n return (\n <div class=\"TutorialPrompt\" position=\"right\">\n <div class=\"Text\">\n These pirates wield <span class=\"blue\">spears</span>.\n <br/><br/>\n Their <span class=\"blue\">spears</span> are strong\n against our <span class=\"red\">swords</span>, and will do +10 damage.\n </div>\n </div>\n )\n }\n }\n}\n\nclass EscapeModal {\n render() {\n if(Navigation.state.escape == undefined) return\n return (\n <div class=\"EscapeModal\">\n <div class=\"Grayout\" onClick={() => Navigation.state.escape = undefined}/>\n <div class=\"PlayerOptions\" onClick={(event) => event.stopPropagation()}>\n <div class=\"Header\">PAUSED</div>\n <div class=\"Option\" onClick={() => Navigation.go(\"/title\")}>Main Menu</div>\n <div class=\"Option\">Settings</div>\n <hr/>\n <div class=\"Option\" onClick={this.restart}>Restart</div>\n <div class=\"Option\" onClick={() => Navigation.state.escape = undefined}>Resume</div>\n </div>\n {this.dev}\n </div>\n )\n }\n get dev() {\n if(Dev.isEnabled != true) return\n return (\n <div class=\"Dev\" onClick={(event) => event.stopPropagation()}>\n <div class=\"Options\">\n <div class=\"Option\" onClick={this.killAllEnemies}>\uD83D\uDC80</div>\n </div>\n </div>\n )\n }\n restart() {\n Navigation.state.escape = undefined\n App.game.chapter.restart()\n }\n toggleDeath() {\n Dev.isAllyDeathEnabled = !Dev.isAllyDeathEnabled\n App.game.chapter.recalculateStage()\n }\n toggleCollision() {\n Dev.isAllyCollisionEnabled = !Dev.isAllyCollisionEnabled\n App.game.chapter.recalculateStage()\n }\n killAllEnemies() {\n Dev.actionTrace.push({\"type\": \"killAllEnemies\"})\n App.game.chapter.killAllEnemies()\n }\n}\n\nclass Buttons {\n render() {\n if(App.game.chapter.phase != \"play\") return\n if(App.game.chapter.hasUndoEndTurnButtons === false) return\n if(this.props.stage?.dialogue != undefined) return\n if(this.props.stage?.tags[\"hud\"]?.value == \"hidden\") return\n\n return [\n <div class=\"EndTurnGlow\" isReady={this.isReady}/>,\n <div class=\"EndTurnButton\" onClick={this.onEndTurn} isReady={this.isReady} gameKey={App.game.slug}>\n <div class=\"Text\"><span class=\"Big\">End</span>Turn</div>\n <div class=\"Shortcut\">{App.mode == \"gamepad\" ? \"(y)\" : \"enter\"}</div>\n <div class=\"Charge\" style={{\"width\": Math.min(100, App.game.chapter.selection.endTurnCharge / App.game.chapter.selection.maxendTurnCharge * 100).toFixed(2) + \"%\"}}/>\n <div class=\"Handle\"/>\n </div>,\n <div class=\"UndoButton\" onClick={this.onUndo} gameKey={App.game.slug}>\n <div class=\"Text\">Undo</div>\n <div class=\"Shortcut\">{App.mode == \"gamepad\" ? \"(bumper)\" : \"z\"}</div>\n <div class=\"Handle\"/>\n </div>\n ]\n }\n get isReady() {\n // Has the player won?\n const hasWon = this.props.stage.conditions.find((condition) => {\n return condition.isWinCondition == true\n && condition.condition instanceof Function == true\n && condition.condition(this.props.stage) == true\n })\n if(hasWon != undefined) return true\n\n // Have all player units taken actions?\n return Object.values(this.props.stage.units).filter((unit) => {\n return unit.isDead != true\n && unit.hasBeenRemoved != true\n && Zone.isInBounds(this.props.stage.encounters[this.props.stage.currentEncounterKey].zone, unit.position)\n && (unit.energy[\"move\"] == true\n || unit.energy[\"invoke skill\"] == true)\n && unit.affiliation == \"good\"\n }).length == 0\n }\n get onUndo() {\n return (event) => {\n event.stopPropagation()\n Dev.actionTrace.push({\"type\": \"undoAction\"})\n Dev.recordSavestate(\"livePlaytest\")\n App.game.chapter.undoAction()\n }\n }\n get onEndTurn() {\n return (event) => {\n if(Director.isPerforming != true) {\n event.stopPropagation()\n App.game.chapter.endPlayerTurn()\n }\n }\n }\n}\n\nclass UnitSummary {\n render() {\n if(this.props.stage?.dialogue != undefined) return\n\n const selection = App.game.chapter.selection\n const selectedUnitKey = selection.selectedUnitKey || selection.hoveredUnitKey\n const selectedUnit = this.props.stage.units[selectedUnitKey]\n\n if(selection.hoveredAction?.type == \"invoke skill\") {\n const targetUnit = Stage.findUnitByPosition(this.props.stage, selection.hoveredAction.position)\n return (\n <div class=\"UnitSummary\">\n <UnitDetails unit={selectedUnit} position={\"left\"}/>\n <UnitDetails unit={targetUnit} position={\"right\"}/>\n </div>\n )\n }\n\n return (\n <div class=\"UnitSummary\">\n <UnitDetails unit={selectedUnit} position={selectedUnit?.affiliation == \"good\" ? \"left\" : \"right\"}/>\n </div>\n )\n }\n}\n\nclass UnitDetails {\n render() {\n if(this.props.unit == undefined) return\n if(this.props.unit.type == \"zone\" || this.props.unit.type == \"spot\") return\n\n const unit = this.props.unit\n const omegaunit = App.game.chapter.selection?.hoveredAction?.omegastage?.units[unit.key]\n\n const element = elements[unit.element]\n\n const isSelected = this.props.unit.key == App.game.chapter.selection.selectedUnitKey\n\n return (\n <div class=\"UnitDetails\" key={unit?.key} position={this.props.position} isSelected={isSelected}>\n <div class=\"Profile\">\n <div class=\"Summary\">\n <div class=\"Portrait\">\n <img src={unit?.portraits?.neutral}/>\n </div>\n <div class=\"Properties\">\n <div class=\"Name\">\n <span class=\"Text\">\n {unit.title || unit.name}\n </span>\n </div>\n <div class=\"Class\">\n <span class=\"Text\">\n {unit.subtitle || unit.jobName} {unit.level && \"Lv\" + unit.level}\n </span>\n </div>\n <UnitHealthBar unit={unit} omegaunit={omegaunit}/>\n </div>\n </div>\n <div class=\"Stats\">\n <div class=\"Health\">\n <div class=\"Value\">{unit.health}/{unit.maxhealth}</div>\n <div class=\"Label\">HP</div>\n </div>\n <div class=\"Element\">\n <div class=\"Line\">\n <span class=\"Icon\" style={{\"background-color\": element.color}}/>\n <span class=\"Label\" style={{\"color\": element.color}}>{element.name}</span>\n </div>\n </div>\n <div class=\"Description\">\n Deals {unit.power} <span style={{\"color\": element.color}}>{element.name.toLowerCase()}</span> damage at {unit.attackrange == 1 ? \"close-range\" : \"long-range\"}.\n </div>\n <div class=\"Element\">\n <div class=\"Effectiveness\">\n {element.strengths.map((strengthElementKey) => {\n const strengthElement = elements[strengthElementKey]\n if(strengthElement == undefined) return\n return (\n <div class=\"Line\">\n +10 <span class=\"Versus\">dmg vs</span>\n <span class=\"Icon\" style={{\"background-color\": strengthElement.color}}/>\n <span class=\"Name\" style={{\"color\": strengthElement.color}}>{strengthElement.name}s</span>\n </div>\n )\n })}\n {element.weaknesses.map((weakElementKey) => {\n const weakElement = elements[weakElementKey]\n if(weakElement == undefined) return\n return (\n <div class=\"Line\">\n -5 <span class=\"Versus\">dmg vs</span>\n <span class=\"Icon\" style={{\"background-color\": weakElement.color}}/>\n <span class=\"Name\" style={{\"color\": weakElement.color}}>{weakElement.name}s</span>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n <div class=\"Skills\" side=\"bottom-left\">\n {Object.values(unit.skills).map((skillKey, index) => {\n const skill = skills.get(skillKey)\n if(skill == undefined) return\n if(skill.isHidden == true) return\n if(unit.affiliation != \"good\") return\n if(App.game?.chapter?.slug == \"wrath\") return\n return (\n <div class=\"Skill\"\n canSelect={App.game.chapter.selection.activeUnit.energy[\"invoke skill\"] != false}\n onMouseUp={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onClick={(event) => App.game.chapter.selection.selectedSkillKey = skillKey}\n onMouseOver={(event) => App.game.chapter.selection.hoveredSkillKey = skillKey}\n onMouseOut={(event) => App.game.chapter.selection.hoveredSkillKey = undefined}\n isSelected={App.game.chapter.selection.isSelectedSkill(skillKey, unit)}>\n <div class=\"Label\">\n {skill.name || skillKey}\n </div>\n <div class=\"Number\">\n {index + 1}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n}\n\nclass PopupBox {\n render() {\n if(this.props.stage.dialogue == undefined) return\n\n if(this.props.stage.dialogue.type == \"CharacterSplashBox\") {\n return <CharacterSplashBox stage={this.props.stage}/>\n } else if(this.props.stage.dialogue.type == \"ChapterSuccessModal\") {\n return <ChapterSuccessModal stage={this.props.stage}/>\n } else if(this.props.stage.dialogue.type == \"DungeonDeathModal\") {\n return <DungeonDeathModal stage={this.props.stage}/>\n } else if(this.props.stage.dialogue.type == \"UnitLevelUpModal\") {\n return <UnitLevelUpModal stage={this.props.stage}/>\n } else if(this.props.stage.dialogue.type == \"CharacterDraftBox\") {\n return <CharacterDraftBox stage={this.props.stage}/>\n } else if(this.props.stage.dialogue.type == \"banner\") {\n return <BannerPopupBox stage={this.props.stage}/>\n } else {\n return <DialogueBox stage={this.props.stage}/>\n }\n }\n}\n\nclass UnitLevelUpModal {\n render() {\n const unitKey = this.props.stage.dialogue?.data?.unitKey\n if(unitKey == undefined) return\n const unit = this.props.stage.units[unitKey]\n if(unit == undefined) return\n return (\n <div class=\"UnitLevelUpModal\">\n {unit?.portraits && unit?.portraits[\"happy\"] && <img class=\"Portrait\" src={unit.portraits[\"happy\"]}/>}\n <div class=\"Box\">\n <section class=\"HeaderSection\">\n <div class=\"Thumbnail\">\n <UnitSprite unit={unit}/>\n </div>\n <div class=\"Declaration\">Level Up!!</div>\n <div class=\"Level\">\n Level {unit.level}\n <span class=\"arrow\"/>\n {unit.level + 1}\n </div>\n </section>\n <section class=\"PerksSection\">\n {(unit.levelups[unit.level + 1] || []).map((levelupPerk) => {\n if(levelupPerk.key == \"maxhealth\") {\n return (\n <div class=\"Perk\">\n <div class=\"Label\">Health Increased</div>\n <div class=\"Value\">\n {unit.maxhealth}hp\n <span class=\"arrow\"/>\n {unit.maxhealth + levelupPerk.value}hp\n </div>\n </div>\n )\n } else if(levelupPerk.key == \"jobKey\") {\n return (\n <div class=\"Perk\">\n <div class=\"Label\">Promoted to new Job</div>\n <div class=\"Value\">{levelupPerk.value}</div>\n </div>\n )\n } else if(levelupPerk.key == \"skill\") {\n return (\n <div class=\"Perk\">\n <div class=\"Label\">Skill Unlocked</div>\n <div class=\"Value\">{levelupPerk.value}</div>\n </div>\n )\n }\n })}\n </section>\n </div>\n </div>\n )\n }\n}\n\nclass ChapterSuccessModal {\n render() {\n const phase = this.props.stage.dialogue?.data?.phase\n const enemyUnits = Object.values(this.props.stage.units).filter((unit) => {\n return unit.affiliation == \"bad\" //&& unit.isDead == true\n })\n const allyUnits = Object.values(this.props.stage.units).filter((unit) => {\n return unit.affiliation == \"good\"\n && (unit.type != \"spot\" && unit.type != \"zone\")\n })\n return (\n <div class=\"ChapterSuccessModal\" isShown={phase >= 1}>\n <div class=\"Box\">\n <section class=\"HeaderSection\">\n <div class=\"Declaration\" isShown={phase >= 1.5}>Victory!!</div>\n <div class=\"Objectives\" isShown={phase >= 2}>\u2606\u2606\u2606</div>\n </section>\n <section class=\"EnemySection\" isShown={phase >= 3}>\n <div class=\"Label\">Enemies:</div>\n <div class=\"Units\">\n {enemyUnits.map((unit, index) => {\n if(index > 10) return\n return (\n <div class=\"Unit\" isTight={true} isAnimated={phase == 3} style={{\n \"animation-delay\": phase > 3 ? 0 : 0.5 + (index * 0.2) + \"s\"\n }}>\n <UnitSprite unit={unit}/>\n </div>\n )\n })}\n </div>\n </section>\n <section class=\"AllySection\" isShown={phase >= 4}>\n <div class=\"Label\">Allies:</div>\n <div class=\"Units\">\n {allyUnits.map((unit) => (\n <div class=\"Unit\" isAnimated={phase == 4}>\n <UnitSprite unit={unit} isGrayscaled={phase >= 5 && unit.isDead == true}/>\n <UnitExperienceBar unit={App.game.player.party.units[unit.key]} isVisible={phase >= 6 && unit.isDead != true}/>\n </div>\n ))}\n </div>\n </section>\n </div>\n </div>\n )\n }\n}\n\nclass DungeonDeathModal {\n render() {\n return (\n <div class=\"DungeonDeathModal\">\n <div class=\"Box\">\n <section class=\"HeaderSection\">\n <div class=\"Declaration\">Death</div>\n <div class=\"Objectives\">\u2606\u2606\u2606</div>\n </section>\n <section class=\"Options\">\n <div class=\"Label\">\"I bestow on ye new acuwsed power!\"</div>\n <div class=\"Label\">New RALLY spell unlocked</div>\n <div class=\"ResurrectOption\" onClick={this.onClickCall()}>\n Restart\n </div>\n </section>\n </div>\n </div>\n )\n }\n onClickCall() {\n return (event) => {\n console.log(\"RESTARTING GAME\")\n this.isRestarting = true\n App.game.player.party.units[\"swordlich\"].skills = [\n \"inflict-damage\",\n \"rally\",\n \"recruit\",\n ]\n games[\"dungeon\"].chapters = procedurallyGenerateChapters()\n const game = games[\"dungeon\"]\n const chapter = game.chapters[\"1\"]\n App.load({\"game\": {...game, chapter}})\n Navigation.state = {\"screen\": \"ChapterScreen\", \"gameSlug\": \"dungeon\", \"chapterSlug\": \"1\"}\n }\n }\n}\n\nclass CharacterDraftBox {\n render() {\n const stage = this.props.stage\n const dialogue = this.props.stage.dialogue\n\n if(dialogue == undefined) return\n if(dialogue?.data?.unitJobKeys == undefined) return\n\n return (\n <div class=\"CharacterDraftBox\">\n <div class=\"Box\">\n <div class=\"Prompt\">Pick a Thrall</div>\n <div class=\"Cards\">\n {dialogue.data.unitJobKeys.map((unitJobKey) => {\n const unit = Objdict.merge(unitJobs[unitJobKey], dialogue.data.maskUnit || {})\n if(unit == undefined) return\n return (\n <div class=\"Card\" onClick={this.onClickCard(unit)}>\n <div class=\"Thumbnail\">\n <UnitSprite unit={unit}/>\n </div>\n <div class=\"Name\">\n {unitJobKey}\n </div>\n {unit.facts && unit.facts.map((fact) => {\n return (\n <div class=\"Fact\">\n {fact}\n </div>\n )\n })}\n {unit.skills.map((skillKey) => {\n const skill = skills.get(skillKey)\n if(skill == undefined) return\n if(skill.description == undefined) return\n return (\n <div class=\"Fact\">\n {skill.description}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n }\n onClickCard(unit) {\n return (event) => {\n const baseUnit = {\n \"key\": nanoid(),\n \"affiliation\": \"good\",\n \"isRecruited\": true,\n \"maxhealth\": 40,\n\n \"level\": 1,\n \"maxexperience\": 100,\n \"levelups\": {\n 2: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Ghoul\"},\n ],\n 3: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Wight\"},\n ],\n 4: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Shade\"},\n ],\n 5: [\n {\"key\": \"maxhealth\", \"value\": 10},\n {\"key\": \"maxexperience\", \"value\": 100},\n {\"key\": \"jobName\", \"value\": \"Revenant\"},\n ],\n },\n }\n const newUnit = Objdict.merge(unit, baseUnit)\n App.game.player.party.units[newUnit.key] = newUnit\n Navigation.go(this.props.stage.dialogue.data.nextURL)\n }\n }\n}\n\nclass CharacterSplashBox {\n render() {\n const stage = this.props.stage\n const dialogue = this.props.stage.dialogue\n const unit = stage.units[dialogue?.data?.unitKey]\n if(dialogue == undefined) return\n if(unit == undefined) return\n return (\n <div class=\"CharacterSplashBox\">\n <div class=\"Box\">\n <section class=\"HeaderSection\">\n <div class=\"Name\">{unit.name}</div>\n <div class=\"Declaration\">has joined your party!</div>\n </section>\n <section class=\"MainSection\">\n <div class=\"Thumbnail\">\n <UnitSprite unit={unit}/>\n </div>\n <div class=\"Stats\">\n <div class=\"Health\">\n <div class=\"Label\">{unit.health}HP</div>\n <UnitHealthBar unit={unit}/>\n </div>\n {unit.facts && unit.facts.map((fact) => {\n return (\n <div class=\"Fact\">\n {fact}\n </div>\n )\n })}\n <div class=\"Stat\">\n <div class=\"Label\">Attack:</div>\n <div class=\"Value\">{unit.power}</div>\n </div>\n <div class=\"Stat\">\n <div class=\"Label\">Defense:</div>\n <div class=\"Value\">{unit.defense}</div>\n </div>\n <div class=\"Stat\">\n <div class=\"Label\">Resistance:</div>\n <div class=\"Value\">{unit.resistance}</div>\n </div>\n </div>\n </section>\n <section class=\"FlavorTextSection\">\n flavor text flavor text flavor text flavor text\n flavor text flavor text flavor text flavor text\n flavor text flavor text flavor text flavor text\n flavor text flavor text flavor text flavor text\n flavor text flavor text flavor text flavor text\n flavor text flavor text flavor text flavor text\n </section>\n </div>\n </div>\n )\n }\n}\nclass BannerPopupBox {\n render() {\n return (\n <div class=\"BannerPopupBox\" style={this.style}>\n <div class=\"Text\">{this.props.stage.dialogue.text}</div>\n </div>\n )\n }\n get style() {\n return {\n \"background-color\": this.props.stage.dialogue.data?.color\n }\n }\n}\n\nclass DialogueBox {\n render() {\n return (\n <div class=\"Dialogue\">\n {this.scene}\n {this.box}\n </div>\n )\n }\n get box() {\n const dialogue = this.props.stage.dialogue\n if(dialogue == undefined) return\n\n return (\n <div class=\"Box\">\n {this.name}\n {this.words}\n </div>\n )\n }\n get words() {\n const dialogue = this.props.stage.dialogue\n if(dialogue.text == undefined) return\n let words = dialogue.text\n // words = words.replace(\"<i>\", \"\").replace(\"</i>\", \"\")\n // if(dialogue.index != undefined) {\n // words = words.substring(0, dialogue.index)\n // }\n // {words.split(\"<br>\").filter((text) => text != \"\").map((subwords) => {\n // return (\n // <div class=\"TextLine\">{subwords}</div>\n // )\n // })}\n const letters = words.split(\"\")\n let isItalicized = false\n let isBolded = false\n return (\n <div class=\"Words\">\n {letters.map((character, index) => {\n if(character == \"*\") {\n if(letters[index+1] == \"*\") {\n isBolded = !isBolded\n } else {\n if(letters[index-1] != \"*\") {\n isItalicized = !isItalicized\n }\n }\n return\n }\n if(character == \"_\") {\n if(letters[index+1] == \"_\") {\n isBolded = !isBolded\n } else {\n if(letters[index-1] != \"_\") {\n isItalicized = !isItalicized\n }\n }\n return\n }\n if(character == '\\n') {\n return <br/>\n }\n if(isBolded == true) {\n character = character.toUpperCase()\n }\n return (\n <div class=\"Character\" style={{\n \"opacity\": index <= dialogue.index ? 1 : 0,\n \"font-weight\": isBolded ? \"bold\" : \"normal\",\n \"font-style\": isItalicized ? \"italic\" : \"initial\",\n }}>\n {character}\n </div>\n )\n })}\n </div>\n )\n }\n get name() {\n const dialogue = this.props.stage.dialogue\n\n const unit = this.props.stage.units[dialogue.data?.speakerKey]\n\n if(dialogue.data?.speakerKey != undefined\n && unit != undefined) {\n return (\n <div class=\"Name\">\n <div class=\"Bolder Text\">{unit.title || unit.name}</div>\n </div>\n )\n }\n\n if(dialogue.data?.speakerName != undefined) {\n return (\n <div class=\"Name\">\n <div class=\"Bolder Text\">{dialogue.data.speakerName}</div>\n </div>\n )\n }\n }\n get scene() {\n const dialogue = this.props.stage.dialogue\n\n const scene = dialogue?.data?.scene\n if(scene == undefined) return\n if(scene.units == undefined) return\n\n return (\n <div class=\"Scene\">\n {Object.values(scene.units).map((unit) => {\n if(this.props.stage.units[unit.key] == undefined) return\n\n const isSpeaking = unit.key == dialogue.data.speakerKey\n const direction = unit.direction || \"right\"\n const position = unit.position || \"1\"\n const expression = unit.expression || \"neutral\"\n const flourish = unit.flourish || \"shift\"\n\n if(this.props.stage.units[unit.key].portraits == undefined) {\n return\n }\n const image = this.props.stage.units[unit.key].portraits[expression]\n if(image == undefined) {\n console.error(\"a dialogue portrait was specified but the image is not found\")\n // defaulting to showing nothing\n return\n }\n\n return (\n <img class=\"Portrait\" key={unit.key} src={image} direction={direction} position={position} expression={expression} flourish={flourish} isSpeaking={isSpeaking}/>\n )\n })}\n </div>\n )\n }\n}\n\nclass ChapterStartBanner {\n render() {\n const step = App.game?.chapter?.sequence?.steps[0]\n if(step == undefined) return\n if(step.type != \"chapter start\") return\n step.data = step.data || []\n return (\n <div class=\"ChapterStartBanner\">\n <div class=\"Chapter\">{step.data[0] || \"Chapter 1\"}</div>\n <div class=\"Title\">{step.data[1] || \"The Beginning\"}</div>\n\n <div class=\"InWhich\">{step.data[2]}</div>\n <div class=\"First Subtitle\">{step.data[3]}</div>\n <div class=\"Second Subtitle\">{step.data[4]}</div>\n </div>\n )\n }\n}\n\nclass MessageBanner {\n render() {\n const step = App.game?.chapter?.sequence?.steps[0]\n if(step == undefined) return\n if(step.type != \"turn start\") return\n\n return (\n <div class=\"MessageBanner\">\n <div class=\"Message\">\n {step.message}\n </div>\n </div>\n )\n }\n}\n\nclass ChapterSuccessBanner {\n render() {\n const step = App.game?.chapter?.sequence?.steps[0]\n if(step == undefined) return\n if(step.type != \"chapter success\") return\n\n return (\n <div class=\"ChapterSuccessBanner\">\n <div class=\"Declaration\">Victory!!</div>\n </div>\n )\n }\n}\n\nclass ChapterFailureBanner {\n render() {\n const step = App.game?.chapter?.sequence?.steps[0]\n if(step == undefined) return\n if(step.type != \"chapter failure\") return\n\n return (\n <div class=\"ChapterFailureBanner\">\n <div class=\"Predeclaration\">We have been</div>\n <div class=\"Declaration\">Defeated</div>\n </div>\n )\n }\n}\n", "import * as Preact from \"preact\"\nimport Random from \"@frog/source/utility/Random.js\"\nimport Loop from \"@frog/source/utility/Loop.js\"\nimport App from \"@frog/source/models/App.js\"\n\nimport \"@frog/source/views/components/Snow.less\"\n\nconst AMOUNT = 128\nconst FRAME_WIDTH = 16\nconst FRAME_HEIGHT = 9\n\nconst particles = []\nfor(let i = 0; i < AMOUNT; i += 1) {\n particles.push({\n \"scale\": (i % 3) + 1,\n \"position\": {\n \"x\": Random.range(-FRAME_WIDTH, FRAME_WIDTH * 2),\n \"y\": Random.range(-FRAME_HEIGHT, FRAME_HEIGHT),\n },\n \"velocity\": {\n \"y\": 0.05,\n \"x\": Random.range(-0.05, 0.05)\n }\n })\n}\n\nexport default class Snow {\n render() {\n if(App.game.chapter.decorations?.hasSnow != true) return\n return (\n <div class=\"Snow\">\n {particles.map((particle) => {\n\n let speed = 1\n const dyingUnit = Object.values(this.props.stage.units).find((unit) => {\n return unit.isDead != true && unit.deathTimer != undefined\n })\n if(dyingUnit != undefined) {\n speed = 0.8\n }\n\n particle.position.x += particle.velocity.x * Loop.delta.f * speed\n particle.position.x += Math.sin(Loop.time.s / 2) * 0.1 * speed\n particle.position.y += particle.velocity.y * Loop.delta.f * speed\n\n if(particle.position.y > FRAME_HEIGHT + 1) {\n particle.position.x = Random.range(0, FRAME_WIDTH)\n particle.position.y = Random.range(0, FRAME_HEIGHT) * -1\n }\n return (\n <div class=\"SnowParticle\" style={{\n \"left\": particle.position.x + \"em\",\n \"top\": particle.position.y + \"em\",\n \"width\": (0.05 * particle.scale) + \"em\",\n \"height\": (0.05 * particle.scale) + \"em\",\n }}/>\n )\n })}\n </div>\n )\n }\n}\n", "import unitJobs from \"@frog/source/data/unit-jobs.js\"\nimport games from \"@frog/source/data/games/index.js\"\nimport unitsprites from \"@frog/source/data/unitsprites.js\"\nimport audiotriggers from \"@frog/source/data/audiotriggers.js\"\nimport Preload from \"@frog/source/utility/Preload.js\"\n\nconst preload = {\"images\": {}}\n\nObject.values(unitsprites).map((unitspritesSection) => {\n Object.values(unitspritesSection).forEach((imageURL) => {\n preload.images[imageURL] = {\"url\": imageURL}\n })\n})\n\nObject.values(unitJobs).forEach((unit) => {\n if(unit.portraits != undefined) {\n Object.values(unit.portraits).forEach((portrait) => {\n const imageURL = portrait\n preload.images[imageURL] = {\"url\": imageURL}\n })\n }\n if(unit.sprites != undefined) {\n Object.values(unit.sprites).forEach((sprite) => {\n if(sprite.frames instanceof Array) {\n sprite.frames.forEach((frame) => {\n const imageURL = frame.image\n preload.images[imageURL] = {\n \"url\": imageURL,\n }\n })\n }\n })\n }\n})\nObject.values(games).forEach((game) => {\n Object.values(game.chapters).forEach((chapter) => {\n let imageURLs = chapter.stage.images || [chapter.stage.image]\n imageURLs.forEach((imageURL) => {\n if(imageURL == undefined) return\n preload.images[imageURL] = {\"url\": imageURL}\n })\n })\n Object.values(game.player.party.units).forEach((unit) => {\n if(unit.portraits != undefined) {\n Object.values(unit.portraits).forEach((portrait) => {\n const imageURL = portrait\n if(imageURL == undefined) return\n preload.images[imageURL] = {\"url\": imageURL}\n })\n }\n if(unit.sprites != undefined) {\n Object.values(unit.sprites).forEach((sprite) => {\n if(sprite.frames instanceof Array) {\n sprite.frames.forEach((frame) => {\n const imageURL = frame.image\n preload.images[imageURL] = {\n \"url\": imageURL,\n }\n })\n }\n })\n }\n })\n})\n\nexport default new Preload(preload)\n"], "mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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CR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,OAAM;AAAA,UACN,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,SAAQ;AAAA,UACR,QA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AI;AAAA,cAAI;AAAA,cACjP;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpO;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5N;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACnN;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACjN;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAClN;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACvN;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACxN;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC9N;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC5O;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,YAAE;AAAA,YACjP,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACtL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACrL,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACtL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjL;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACrL,QAAS;AAAA,YACT,IAAK;AAAA,YA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G;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAA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A,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,YAAE;AAAA,YACrI,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACxG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACzG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC3G;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACzH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cACzH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC1H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC1H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC1H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC1H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC3H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC7H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC5H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC3H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC3H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC3H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC5H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC9H;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC/H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC9H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAC7H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAC5H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAC1H;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cACtH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cACzH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cACzH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjH;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACpG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACpG,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACpG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACtG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACpG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACtG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACpG,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACtG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACpG,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACpG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACjG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACpG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAClG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACpG,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAChG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;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AG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACxG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAY;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5G;AAAA,cAAY;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5G;AAAA,cAAY;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5G;AAAA,cAAY;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5G;AAAA,cAAY;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5G;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACnG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,c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AG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YACzE,QAAS;AAAA,YACT,IAAK;AAAA,YACL,QAAS;AAAA,YACT,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,IAAK;AAAA,YACL,OAAQ;AAAA,YACR,QAAS;AAAA,YACT,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC1E;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACrE;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA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AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACzH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,YAAE;AAAA,YACzH,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,WAAY;AAAA,YACZ,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,cACH;AAAA,gBACC,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,YAAC;AAAA,YACR,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5F;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cA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AAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YACpH;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,YAAI;AAAA,UAAE;AAAA,UACzH,QAA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A,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACnH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACjH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAChH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACjH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAG;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACnH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,YAAE;AAAA,YACzH,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAC5F;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,YAAC;AAAA,YAC3F,QAAS;AAAA,YACT,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,OAAQ;AAAA,YACR,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,WAAY;AAAA,YACZ,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,cACH;AAAA,gBACC,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,SAAU;AAAA,kBACH;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,kBACA;AAAA,oBACC,GAAI;AAAA,oBACJ,GAAI;AAAA,kBACL;AAAA,gBAAC;AAAA,gBACR,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,YAAC;AAAA,YACR,SAAU;AAAA,YACV,YAAa;AAAA,cACN;AAAA,gBACC,MAAO;AAAA,gBACP,MAAO;AAAA,gBACP,OAAQ;AAAA,cACT;AAAA,YAAC;AAAA,YACR,MAAO;AAAA,YACP,SAAU;AAAA,YACV,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,UACA;AAAA,YACC,WAAY;AAAA,YACZ,IAAK;AAAA,YACL,MAAO;AAAA,YACP,SAAU;AAAA,cACH;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,cACA;AAAA,gBACC,SAAU;AAAA,gBACV,QAAS;AAAA,gBACT,IAAK;AAAA,gBACL,MAAO;AAAA,gBACP,YAAa;AAAA,kBACN;AAAA,oBACC,MAAO;AAAA,oBACP,MAAO;AAAA,oBACP,OAAQ;AAAA,kBACT;AAAA,gBAAC;AAAA,gBACR,UAAW;AAAA,gBACX,MAAO;AAAA,gBACP,SAAU;AAAA,gBACV,OAAQ;AAAA,gBACR,GAAI;AAAA,gBACJ,GAAI;AAAA,cACL;AAAA,YAAC;AAAA,YACR,SAAU;AAAA,YACV,MAAO;AAAA,YACP,SAAU;AAAA,YACV,GAAI;AAAA,YACJ,GAAI;AAAA,UACL;AAAA,QAAC;AAAA,QACR,aAAc;AAAA,QACd,cAAe;AAAA,QACf,aAAc;AAAA,QACd,aAAc;AAAA,QACd,cAAe;AAAA,QACf,YAAa;AAAA,QACb,UAAW;AAAA,UACJ;AAAA,YACC,UAAW;AAAA,YACX,QAAS;AAAA,UACV;AAAA,UACA;AAAA,YACC,UAAW;AAAA,YACX,QAAS;AAAA,UACV;AAAA,QAAC;AAAA,QACR,WAAY;AAAA,QACZ,MAAO;AAAA,QACP,SAAU;AAAA,QACV,OAAQ;AAAA,MACT;AAAA;AAAA;;;ACvUA;AAAA;AAAA;AAAA;AAAA,MAQMC,YAKC;AAbP;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,aAAY;AAAA,QACd,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACnB;AAEA,MAAO,aAAQ;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS,MAAM,MAAM;AAAA,YACjB,WAAW;AAAA,YACX,WAAW;AAAA,UACf,CAAC;AAAA,UACD,QAAQ;AAAA,UACR,cAAc;AAAA,YACV;AAAA,cACI,QAAQ;AAAA,cACR,UAAU;AAAA,gBACN,EAAC,QAAQ,MAAM,iBAAS,QAAQ,cAAc,EAAC;AAAA,gBACnC,uBAAuB,EAAC,WAAW,aAAY,CAAC;AAAA,cAChE;AAAA,YACJ;AAAA,YACA;AAAA,cACI,QAAQ;AAAA,cACR,UAAU;AAAA,gBACM,gBAAgB,EAAC,WAAW,aAAa,aAAaA,WAAS,CAAC;AAAA,gBAChE,gBAAgB,EAAC,WAAW,aAAa,aAAaA,WAAS,CAAC;AAAA,cAChF;AAAA,YACJ;AAAA,YACA;AAAA,cACI,QAAQ;AAAA,cACR,aAAa,CAAC,UAAU;AACpB,uBAAO,MAAM,uBAAuB,KAC7B,MAAM,MAAM,SAAS,EAAE,UAAU,QACjC,MAAM,MAAM,SAAS,EAAE,UAAU;AAAA,cAC5C;AAAA,cACA,UAAU;AAAA,gBACN,EAAC,QAAQ,kBAAiB;AAAA,gBAC1B,EAAC,QAAQ,MAAM,mBAAW,GAAG,wBAAwB,EAAC;AAAA,cAC1D;AAAA,YACJ;AAAA,YACY,eAAe;AAAA,UAC/B;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;;;;;;;;;;ACrDA,MAAAC,iBAAA;AAAA;AAAA;AAAA,QACI,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,UACP,WAAa;AAAA,QACjB;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,yBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,QACA,uBAAyB;AAAA,UACrB,UAAY;AAAA,YACR,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,UACT;AAAA,UACA,cAAgB;AAAA,UAChB,aAAe;AAAA,UACf,aAAe;AAAA,UACf,KAAO;AAAA,QACX;AAAA,MACJ;AAAA;AAAA;;;ACr6BA,MAAAC,kBAAA;AAAA;AAAA;AAAA,QAAE,kBAAmB;AAAA,QACpB,QAAS;AAAA,QACT,UAAW;AAAA,QACX,QAAS;AAAA,UACF;AAAA,YACC,MAAO;AAAA,cAAC;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACzH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAA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AI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA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cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACzF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAI;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACzF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cACvF;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;AAAA,cAAG;A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zH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cACpH;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;AAAA,cAAI;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", "names": ["dom", "x", "y", "i", "Keyb", "Afloop", "Joyp", "Poin", "r", "crypto", "i", "step", "i", "version", "shortid", "a", "b", "x", "y", "p", "i", "j", "vector", "a", "b", "c", "world", "encounter", "property", "global", "module", "define", "t", "f", "n", "i", "h", "global", "module", "define", "t", "k", "f", "global", "module", "define", "t", "k", "f", "global", "module", "define", "X", "i", "t", "v", "w", "me", "seed", "j", "f", "global", "module", "define", "w", "X", "i", "t", "v", "me", "seed", "j", "f", "global", "module", "define", "b", "c", "d", "a", "k", "f", "t", "global", "width", "seedrandom", "n", "d", "x", "prng", "seed", "t", "i", "j", "s", "r", "f", "e", "a", "require_seedrandom", "x", "i", "i", "a", "b", "k", "x", "a", "b", "i", "j", "seedrandom", "isString", "LocalStorage", "e", "n", "Buffer", "Symbol", "Uint8Array", "Map", "proto", "merge", "startTime", "require_lodash", "n", "e", "Buffer", "Symbol", "Uint8Array", "DataView", "Map", "Promise", "Set", "WeakMap", "key", "proto", "deltaunit", "step", "x", "y", "i", "j", "x", "y", "i", "j", "isPointInPolygon", "world", "asOrNull", "obj", "type", "unsafeTypeAssertion", "asOrThrows", "Error", "concat", "asINamedContentOrNull", "hasValidName", "name", "nullIfUndefined", "isEquatable", "Equals", "throwNullException", "NullException", "tryGetValueFromMap", "map", "key", "value", "result", "exists", "val", "get", "Path", "Debug", "ValueType", "PushPopType", "ErrorType", "InkObject", "StringBuilder", "InkListItem", "InkList", "StoryException", "AbstractValue", "Value", "BoolValue", "IntValue", "FloatValue", "StringValue", "DivertTargetValue", "VariablePointerValue", "ListValue", "SearchResult", "Container", "Glue", "ControlCommand", "Pointer", "Divert", "ChoicePoint", "VariableReference", "VariableAssignment", "Void", "NativeFunctionCall", "Tag", "Choice", "ListDefinition", "ListDefinitionsOrigin", "JsonSerialisation", "CallStack", "VariablesState", "PRNG", "StatePatch", "SimpleJson", "Flow", "StoryState", "Stopwatch", "Story", "constructor", "this", "_components", "_componentsString", "_isRelative", "arguments", "componentsString", "Component", "head", "tail", "push", "Array", "relative", "isRelative", "componentCount", "length", "tailComps", "slice", "self", "lastComponent", "lastComponentIdx", "containsNamedComponent", "i", "l", "isIndex", "path", "GetComponent", "index", "PathByAppendingPath", "pathToAppend", "p", "upwardMoves", "isParent", "join", "substring", "componentStrings", "split", "str", "test", "parseInt", "toString", "otherPath", "PathByAppendingComponent", "c", "parentId", "indexOrName", "static", "otherComp", "Assert", "condition", "message", "console", "warn", "trace", "AssertType", "variable", "parent", "_debugMetadata", "_path", "debugMetadata", "ownDebugMetadata", "DebugLineNumberOfPath", "root", "rootContentContainer", "targetContent", "ContentAtPath", "dm", "startLineNumber", "comps", "child", "container", "namedChild", "unshift", "content", "indexOf", "ResolvePath", "nearestContainer", "contentContainer", "ConvertPathToRelative", "globalPath", "ownPath", "minPathLength", "Math", "min", "lastSharedPathCompIndex", "ownComp", "numUpwardsMoves", "newPathComps", "up", "ToParent", "down", "CompactPathString", "globalPathStr", "relativePathStr", "ancestor", "Copy", "SetChild", "prop", "string", "Length", "Append", "AppendLine", "AppendFormat", "format", "_len", "args", "_key", "replace", "match", "num", "Clear", "originName", "itemName", "nameParts", "Null", "isNull", "fullName", "otherItem", "copy", "serialized", "JSON", "stringify", "parse", "isLikeInkListItem", "inkListItem", "item", "hasOwnProperty", "Map", "super", "origins", "_originNames", "otherList", "otherOriginNames", "originNames", "singleOriginListName", "originStory", "SetInitialOriginName", "listDefinitions", "def", "TryListGetDefinition", "singleElement", "Add", "Key", "myListItem", "listValue", "_a", "FindSingleItemListWithName", "AddItem", "itemOrItemName", "origin", "intVal", "TryGetValueForItem", "foundListDef", "ContainsItemWithName", "itemVal", "ValueForItem", "ContainsItemNamed", "fromSerializedKey", "ContainsKey", "has", "serializedKey", "set", "Remove", "delete", "Count", "size", "originOfMaxItem", "maxOriginName", "maxItem", "every", "initialOriginName", "SetInitialOriginNames", "initialOriginNames", "max", "minItem", "inverse", "list", "items", "all", "Union", "union", "Intersect", "intersection", "HasIntersection", "Without", "listToRemove", "Contains", "what", "GreaterThan", "GreaterThanOrEquals", "LessThan", "LessThanOrEquals", "MaxAsList", "MinAsList", "ListWithSubRange", "minBound", "maxBound", "ordered", "orderedItems", "minValue", "maxValue", "Number", "MAX_SAFE_INTEGER", "isInteger", "subList", "otherInkList", "sort", "x", "y", "localeCompare", "sb", "valueOf", "NaN", "useEndLineNumber", "preferredNumberType", "Int", "Float", "isNaN", "Boolean", "String", "Create", "valueObject", "BadCastException", "targetType", "valueType", "isTruthy", "Bool", "Cast", "newType", "_isNewline", "_isInlineWhitespace", "isNewline", "isInlineWhitespace", "isNonWhitespace", "parsedInt", "defaultValue", "parsedFloat", "parseFloat", "DivertTarget", "targetPath", "variableName", "contextIndex", "_contextIndex", "VariablePointer", "List", "listOrSingleItem", "singleValue", "oldValue", "newValue", "oldList", "newList", "approximate", "correctObj", "searchResult", "_content", "namedContent", "visitsShouldBeCounted", "turnIndexShouldBeCounted", "countingAtStartOnly", "_pathToFirstLeafContent", "AddContent", "namedOnlyContent", "namedOnlyContentDict", "inkObject", "named", "existingNamedOnly", "AddToNamedContentOnly", "countFlags", "flags", "CountFlags", "Visits", "Turns", "CountStartOnly", "flag", "pathToFirstLeafContent", "internalPathToFirstLeafContent", "components", "contentObjOrList", "contentList", "contentObj", "TryAddNamedContent", "namedContentObj", "partialPathStart", "partialPathLength", "currentContainer", "currentObj", "comp", "foundObj", "ContentWithPathComponent", "InsertContent", "splice", "AddContentsOfContainer", "otherContainer", "component", "foundContent", "BuildStringOfHierarchy", "indentation", "pointedObj", "appendIndentation", "onlyNamed", "commandType", "_commandType", "CommandType", "NotSet", "EvalStart", "EvalOutput", "EvalEnd", "Duplicate", "PopEvaluatedValue", "PopFunction", "PopTunnel", "BeginString", "EndString", "NoOp", "ChoiceCount", "TurnsSince", "ReadCount", "Random", "SeedRandom", "VisitIndex", "SequenceShuffleIndex", "StartThread", "Done", "End", "ListFromInt", "ListRange", "ListRandom", "BeginTag", "EndTag", "Resolve", "_targetPath", "targetObj", "targetPointer", "_targetPointer", "StartOf", "targetPathString", "hasVariableTarget", "variableDivertName", "stackPushType", "pushesToStack", "isExternal", "externalArgs", "isConditional", "otherDivert", "targetStr", "Function", "onceOnly", "_pathOnChoice", "hasCondition", "hasStartContent", "hasChoiceOnlyContent", "isInvisibleDefault", "pathOnChoice", "choiceTargetObj", "choiceTarget", "pathStringOnChoice", "containerForCount", "pathForCount", "pathStringForCount", "isNewDeclaration", "isGlobal", "functionName", "GenerateNativeFunctionsIfNecessary", "_nativeFunctions", "_name", "_isPrototype", "_prototype", "numberOfParameters", "_numberOfParameters", "Call", "parameters", "hasList", "CallBinaryListOperation", "coercedParams", "CoerceValuesToSingleType", "coercedType", "CallType", "parametersOfSingleType", "param1", "valType", "val1", "paramCount", "_operationFuncs", "opForTypeObj", "val2", "opForType", "resultVal", "CallListIncrementOperation", "v1", "v2", "op", "listIntParams", "listVal", "resultInkList", "listItemKey", "listItemValue", "listItem", "intOp", "targetInt", "itemOrigin", "incrementedItem", "TryGetItemWithValue", "parametersIn", "specialCaseList", "parametersOut", "inkObjectVal", "castedValue", "t", "AddIntBinaryOp", "Subtract", "Multiply", "Divide", "floor", "Mod", "AddIntUnaryOp", "Negate", "Equal", "Greater", "Less", "NotEquals", "Not", "And", "Or", "Max", "Min", "Pow", "pow", "Floor", "Identity", "Ceiling", "AddFloatBinaryOp", "AddFloatUnaryOp", "ceil", "AddStringBinaryOp", "Has", "includes", "Hasnt", "AddListBinaryOp", "AddListUnaryOp", "Invert", "All", "ListMin", "ListMax", "ValueOfList", "divertTargetsEqual", "d1", "d2", "divertTargetsNotEqual", "AddOpToNativeFunc", "AddOpFuncForType", "nativeFunc", "tagText", "text", "threadAtGeneration", "sourcePath", "tags", "originalThreadIndex", "_items", "_itemNameToValues", "ContainsItem", "lists", "_lists", "_allUnambiguousListValueCache", "listOfLists", "definition", "jArray", "skipLast", "count", "jTok", "runtimeObj", "JTokenToRuntimeObject", "writer", "dictionary", "WriteObjectStart", "WritePropertyStart", "WriteRuntimeObject", "WritePropertyEnd", "WriteObjectEnd", "WriteArrayStart", "WriteArrayEnd", "dict", "WriteIntProperty", "WriteRuntimeContainer", "divert", "divTypeKey", "Tunnel", "WriteProperty", "choicePoint", "boolVal", "WriteBool", "WriteInt", "floatVal", "WriteFloat", "strVal", "Write", "WriteStringStart", "WriteStringInner", "WriteStringEnd", "WriteInkList", "divTargetVal", "varPtrVal", "controlCmd", "_controlCommandNames", "varRef", "readCountPath", "varAss", "tag", "choice", "WriteChoice", "jObject", "token", "firstChar", "CallExistsWithName", "CallWithName", "isArray", "propValue", "varPtr", "isDivert", "divPushType", "external", "target", "readCountVarRef", "isVarAss", "isGlobalVar", "varName", "isNewDecl", "listContent", "rawList", "namesAsObjs", "nameToVal", "JObjectToChoice", "JArrayToContainer", "toJson", "me", "removes", "space", "k", "v", "some", "r", "withoutName", "hasNameProperty", "hasTerminator", "namedContainer", "WriteNull", "JArrayToRuntimeObjList", "terminatingObj", "namedContentItem", "namedSubContainer", "jObj", "w", "WritePropertyNameStart", "WritePropertyNameInner", "WritePropertyNameEnd", "listDefJson", "defsObj", "allDefs", "nameValueKey", "nameValue", "TOTAL_VALUES", "elements", "callStack", "depth", "currentElement", "cs", "_threads", "callstack", "currentElementIndex", "currentThread", "canPop", "_threadCounter", "_startOfRoot", "storyContext", "Reset", "toCopy", "otherThread", "Thread", "Element", "SetJsonToken", "jThreads", "jThreadTok", "jThreadObj", "thread", "WriteJson", "WriteObject", "PushThread", "newThread", "threadIndex", "ForkThread", "forkedThread", "PopThread", "canPopThread", "elementIsEvaluateFromGame", "FunctionEvaluationFromGame", "Push", "externalEvaluationStackHeight", "outputStreamLengthWithPushed", "element", "currentPointer", "evaluationStackHeightWhenPushed", "functionStartInOutputStream", "CanPop", "Pop", "pop", "GetTemporaryVariableWithName", "varValue", "temporaryVariables", "SetTemporaryVariable", "declareNew", "contextElement", "RetainListOriginsForAssignment", "ContextForVariableNamed", "ThreadWithIndex", "filtered", "filter", "callStackTrace", "isCurrent", "pointer", "inExpressionEvaluation", "previousPointer", "jThreadCallstack", "jElTok", "currentContainerPathStr", "jElementObj", "pushPopType", "currentContainerPathStrToken", "threadPointerResult", "Warning", "el", "temps", "JObjectToDictionaryRuntimeObjs", "clear", "prevContentObjPath", "prevPath", "PointerAtPath", "e", "WriteDictionaryRuntimeObjs", "resolvedPointer", "variableChangedEvent", "callback", "variableChangedEventCallbacks", "batchObservingVariableChanges", "_batchObservingVariableChanges", "_changedVariablesForBatchObs", "Set", "currentValue", "_globalVariables", "_callStack", "$", "varContents", "patch", "TryGetGlobal", "_defaultGlobalVariables", "SetGlobal", "listDefsOrigin", "_listDefsOrigin", "Proxy", "ApplyPatch", "namedVarKey", "namedVarValue", "globals", "changedVariables", "add", "jToken", "varValKey", "varValValue", "loadedToken", "tokenInkObject", "keyValKey", "keyValValue", "dontSaveDefaultValues", "defaultVal", "RuntimeObjectsEqual", "obj1", "obj2", "GetVariableWithName", "GetRawVariableWithName", "varPointer", "ValueAtVariablePointer", "TryGetDefaultVariableValue", "GlobalVariableExistsWithName", "variableValue", "Assign", "setGlobal", "ResolveVariablePointer", "existingPointer", "SnapshotDefaultGlobals", "AddChangedVariable", "GetContextIndexOfVariableNamed", "doubleRedirectionPointer", "ObserveVariableChange", "seed", "next", "nextFloat", "_globals", "_changedVariables", "visitCounts", "_visitCounts", "turnIndices", "_turnIndices", "TryGetVisitCount", "SetVisitCount", "SetTurnIndex", "TryGetTurnIndex", "Reader", "ToDictionary", "ToArray", "_rootObject", "Writer", "_currentPropertyName", "_currentString", "_stateStack", "_collectionStack", "_propertyNameStack", "_jsonObject", "inner", "StartNewObject", "newObject", "state", "State", "Property", "currentCollection", "currentPropertyName", "propertyName", "None", "StateElement", "Object", "innerOrContent", "WriteFloatProperty", "IncrementChildCount", "childCount", "PropertyName", "_addToCurrentObject", "error", "POSITIVE_INFINITY", "NEGATIVE_INFINITY", "currEl", "story", "outputStream", "currentChoices", "jChoiceThreadsObj", "LoadFlowChoiceThreads", "WriteListRuntimeObjs", "hasChoiceThreads", "jChoiceThreads", "foundActiveThread", "jSavedChoiceThread", "ToJson", "indented", "LoadJson", "json", "TextToDictionary", "LoadJsonObj", "onDidLoadState", "VisitCountAtPathString", "pathString", "visitCountOut", "_patch", "VisitCountForContainer", "containerPathStr", "count2", "IncrementVisitCountForContainer", "currCount", "RecordTurnIndexVisitToContainer", "currentTurnIndex", "TurnsSinceForContainer", "index2", "callstackDepth", "_currentFlow", "canContinue", "generatedChoices", "currentErrors", "_currentErrors", "currentWarnings", "_currentWarnings", "variablesState", "_variablesState", "evaluationStack", "_evaluationStack", "_currentTurnIndex", "currentPathString", "hasError", "hasWarning", "currentText", "_outputStreamTextDirty", "inTag", "outputObj", "textContent", "controlCommand", "_currentText", "CleanOutputWhitespace", "currentWhitespaceStart", "startOfLine", "charAt", "currentTags", "_outputStreamTagsDirty", "_currentTags", "txt", "currentFlowName", "currentFlowIsDefaultFlow", "kDefaultFlowName", "aliveFlowNames", "_aliveFlowNamesDirty", "_aliveFlowNames", "_namedFlows", "flowName", "keys", "kInkSaveStateVersion", "kMinCompatibleLoadVersion", "divertedPointer", "storySeed", "previousRandom", "didSafeExit", "OutputStreamDirty", "timeSeed", "Date", "getTime", "GoToStart", "mainContentContainer", "SwitchFlow_Internal", "flow", "SwitchToDefaultFlow_Internal", "RemoveFlow_Internal", "CopyAndStartPatching", "namedFlowKey", "namedFlowValue", "RestoreAfterPatch", "ApplyAnyPatch", "ApplyCountChanges", "newCount", "isVisit", "WriteIntDictionary", "inkVersionCurrent", "jSaveVersion", "flowsObj", "flowsObjDict", "flowsObjDictEntries", "entries", "namedFlowObjKey", "namedFlowObjValue", "flowObj", "currFlowName", "currentDivertTargetPath", "divertPath", "JObjectToIntDictionary", "ResetErrors", "ResetOutput", "objs", "PushToOutputStream", "listText", "TrySplittingHeadTailWhitespace", "textObj", "PushToOutputStreamIndividual", "PopFromOutputStream", "single", "headFirstNewlineIdx", "headLastNewlineIdx", "tailLastNewlineIdx", "tailFirstNewlineIdx", "listTexts", "innerStrStart", "innerStrEnd", "leadingSpaces", "innerStrText", "numSpaces", "trailingSpaces", "glue", "includeInOutput", "TrimNewlinesFromOutputStream", "functionTrimIndex", "glueTrimIndex", "o", "trimIndex", "RemoveExistingGlue", "callStackElements", "outputStreamEndsInNewline", "outputStreamContainsContent", "removeWhitespaceFrom", "cmd", "inStringEvaluation", "PushEvaluationStack", "n", "PopEvaluationStack", "numberOfObjects", "PeekEvaluationStack", "ForceEnd", "TrimWhitespaceFromFunctionEnd", "functionStartPoint", "PopCallStack", "popType", "SetChosenPath", "incrementingTurnIndex", "newPointer", "StartFunctionEvaluationFromGame", "funcContainer", "PassArgumentsToEvaluationStack", "TryExitFunctionEvaluationFromGame", "CompleteFunctionEvaluationFromGame", "originalEvaluationStackHeight", "returnedObj", "poppedObj", "returnVal", "AddError", "isWarning", "startTime", "ElapsedMilliseconds", "Start", "Stop", "nVal", "isFinite", "choices", "_state", "IfAsyncWeCant", "_listDefinitions", "StartProfiling", "EndProfiling", "inkVersionMinimumCompatible", "onError", "onDidContinue", "onMakeChoice", "onEvaluateFunction", "onCompleteEvaluateFunction", "onChoosePathString", "_prevContainers", "allowExternalFunctionFallbacks", "_variableObservers", "_hasValidatedExternals", "_temporaryEvaluationContainer", "_asyncContinueActive", "_stateSnapshotAtLastNewline", "_sawLookaheadUnsafeFunctionAfterNewline", "_recursiveContinueCount", "_asyncSaving", "_profiler", "_mainContentContainer", "jsonString", "_externals", "rootObject", "versionObj", "formatFromFile", "listDefsObj", "rootToken", "JTokenToListDefinitions", "ResetState", "shouldReturn", "VariableStateDidChangeEvent", "bind", "ResetGlobals", "ResetCallstack", "originalPointer", "ChoosePath", "ContinueInternal", "SwitchFlow", "RemoveFlow", "SwitchToDefaultFlow", "Continue", "ContinueAsync", "asyncContinueComplete", "millisecsLimitAsync", "ValidateExternalBindings", "PreContinue", "isAsyncTimeLimited", "durationStopwatch", "ContinueSingleStep", "RestoreStateSnapshot", "PostContinue", "err", "PreStep", "Step", "PostStep", "TryFollowDefaultInvisibleChoice", "PreSnapshot", "change", "CalculateNewlineOutputStateChange", "OutputStateChange", "ExtendedBeyondNewline", "NewlineRemoved", "DiscardSnapshot", "StateSnapshot", "PostSnapshot", "prevText", "currText", "prevTagCount", "currTagCount", "newlineStillExists", "NoChange", "ContinueMaximally", "KnotContainerWithName", "pathLengthToUse", "CopyStateForBackgroundThreadSave", "stateToSave", "BackgroundSaveComplete", "shouldAddToStream", "containerToEnter", "VisitContainer", "currentContentObj", "isLogicOrFlowControl", "PerformLogicAndFlowControl", "ProcessChoice", "contextIdx", "NextContent", "atStart", "VisitChangedContainersDueToDivert", "prevAncestor", "currentChildOfContainer", "currentContainerAncestor", "allChildrenEnteredAtStart", "enteringAtStart", "PopChoiceStringAndTags", "choiceOnlyStrVal", "showChoice", "conditionValue", "IsTruthy", "startText", "choiceOnlyText", "reverse", "divTarget", "currentDivert", "intContent", "errorMessage", "CallExternalFunction", "sourceName", "evalCommand", "output", "overrideTunnelReturnTarget", "popped", "names", "expected", "errorMsg", "contentStackForTag", "outputCountConsumed", "command", "choiceTag", "contentStackForString", "contentToRetain", "rescuedTag", "choiceCount", "extraNote", "eitherCount", "divertTarget", "maxInt", "minInt", "randomRange", "resultSeed", "nextRandom", "chosenValue", "shuffleIndex", "NextSequenceShuffleIndex", "listNameVal", "generatedListValue", "foundItem", "targetList", "listItemIndex", "listEnumerator", "randomItem", "assignedVal", "foundValue", "func", "funcParams", "ChoosePathString", "resetCallstack", "funcDetail", "activityStr", "ChooseChoiceIndex", "choiceIdx", "choiceToChoose", "HasFunction", "EvaluateFunction", "returnTextOutput", "trim", "outputStreamBefore", "stringOutput", "textOutput", "returned", "EvaluateExpression", "exprContainer", "startCallStackHeight", "evalStackHeight", "funcName", "numberOfArguments", "funcDef", "fallbackFunctionContainer", "foundExternal", "lookAheadSafe", "valueObj", "funcResult", "function", "returnObj", "BindExternalFunctionGeneral", "lookaheadSafe", "TryCoerce", "BindExternalFunction", "coercedArgs", "apply", "UnbindExternalFunction", "missingExternals", "from", "innerContent", "ObserveVariable", "observer", "ObserveVariables", "variableNames", "observers", "RemoveVariableObserver", "specificVariableName", "variableObservers", "newValueObj", "globalTags", "TagsAtStartOfFlowContainerWithPathString", "TagsForContentAtPath", "flowContainer", "firstContent", "BuildStringOfContainer", "IncrementContentPointer", "didPop", "successfulIncrement", "nextAncestor", "indexInAncestor", "allChoices", "invisibleChoices", "numElementsIntVal", "seqContainer", "numElements", "seqCount", "loopIndex", "iterationIndex", "seqPathStr", "sequenceHash", "charCodeAt", "randomSeed", "random", "unpickedIndices", "chosen", "chosenIndex", "currentDebugMetadata", "errorTypeStr", "lineNum", "endLineNumber", "fileName", "f", "e", "a", "c", "u", "d", "l", "k", "g", "r", "h", "t", "v", "m", "n", "p", "q", "b", "w", "Afloop", "Keyb", "import_keyb", "Stats", "Keyb", "Poin", "player", "chapterSlug", "clipboard", "import_local_storage_json", "LocalStorage", "event", "step", "line", "step", "units", "unit_jobs_default", "init_unit_jobs", "units", "unit_jobs_default", "init_unit_jobs", "init_unit_jobs", "player", "chapterSlug", "unit_jobs_default", "i", "x", "y", "z", "position", "step", "skill", "previousPosition", "i", "e", "format", "err", "r", "g", "b", "h", "s", "v", "h", "s", "v", "c", "x", "m", "p", "colornames", "a", "b", "rgb2hsv", "hsv2rgb", "c", "height", "a", "b", "A", "B", "C", "i", "x", "bezier", "bezier", "t", "unit_jobs_default", "Audio", "init_unit_jobs", "step", "a", "b", "init_Step", "step", "Step", "x", "y", "dom", "z", "import_poin", "import_keyb", "Action", "Joyp", "Keyb", "Pointer", "clipboard", "step", "a", "b", "import_lodash", "MAX_INFLUENCE", "player", "chapterSlug", "deepclone", "units", "a", "b", "step", "condition", "items", "oldItem", "step", "Dialogue", "direction", "vector", "damage", "line", "step", "units", "line", "stage", "spot", "unit", "require_tiles", "require_units", "require_tiles", "require_units", "require_tiles", "step", "PLAYER_CHARACTER", "require_units", "require_tiles", "init_unit_jobs", "unit_jobs_default", "a", "b", "preload", "step", "width", "height", "x2", "y2", "a", "b", "c", "y", "x", "units", "level", "e", "world", "chapterSlug", "chapter", "mobs", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "constructor", "__v", "vnodeId", "__i", "__u", "options", "Fragment", "BaseComponent", "context", "this", "getDomSibling", "childIndex", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "defer", "renderQueueLength", "component", "newVNode", "oldVNode", "oldDom", "commitQueue", "refQueue", "sort", "depthSort", "shift", "diff", "__P", "namespaceURI", "commitRoot", "diffChildren", "parentDom", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "namespace", "excessDomChildren", "isHydrating", "childVNode", "newDom", "firstChildDom", "oldChildren", "EMPTY_ARR", "newChildrenLength", "constructNewChildrenArray", "EMPTY_OBJ", "applyRef", "contains", "insert", "nextSibling", "skewedIndex", "matchingIndex", "oldChildrenLength", "remainingOldChildren", "skew", "String", "isArray", "findMatchingIndex", "unmount", "parentVNode", "insertBefore", "nodeType", "x", "y", "setStyle", "style", "value", "setProperty", "IS_NON_DIMENSIONAL", "test", "dom", "name", "oldValue", "useCapture", "o", "cssText", "replace", "toLowerCase", "l", "_attached", "eventClock", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "createEventProxy", "eventHandler", "_dispatched", "event", "tmp", "isNew", "oldProps", "oldState", "snapshot", "clearProcessingException", "newProps", "isClassComponent", "provider", "componentContext", "renderHook", "count", "newType", "outer", "prototype", "render", "contextType", "__E", "doRender", "sub", "state", "__n", "__h", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "__r", "getChildContext", "getSnapshotBeforeUpdate", "MODE_HYDRATE", "indexOf", "diffElementNodes", "diffed", "root", "some", "cb", "newHtml", "oldHtml", "newChildren", "inputValue", "checked", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "attributes", "__html", "innerHTML", "current", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "isValidElement", "Array", "error", "errorInfo", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "undefined", "update", "callback", "s", "forceUpdate", "Promise", "then", "bind", "resolve", "setTimeout", "a", "b", "require_tiles", "require_units", "y", "x", "tilesize", "_", "chapters", "init_dungeon", "lord_exports", "lord_default", "init_lord", "bladesinger_exports", "bladesinger_default", "init_bladesinger", "ranger_exports", "ranger_default", "init_ranger", "knight_exports", "knight_default", "init_knight", "general_exports", "general_default", "init_general", "player_exports", "player_default", "init_player", "chapters", "chapter", "x", "y", "player_default", "init_chapters", "init_unit_jobs", "init_player", "player_exports", "player_default", "init_player", "require_units", "require_tiles", "require_units", "require_tiles", "require_units", "require_tiles", "PROTOUNIT", "require_units", "require_tiles", "require_units", "require_tiles", "require_units", "require_tiles", "i", "AssertionError", "e", "i", "global", "AssertionError", "t", "global", "exports", "obj", "i", "o", "n", "styles", "truncate", "getArrayName", "isNaN", "getPromiseValue", "Boolean", "WeakSet", "WeakMap", "DataView", "ArrayBuffer", "inspectCustom", "proto", "config", "config", "i", "config", "chai", "proto", "config", "i", "j", "chai", "chai", "chai", "chai", "chai", "a", "b", "isNaN", "config", "util", "AssertionError", "Assertion", "chai", "_", "Assertion", "AssertionError", "a", "b", "n", "matchIdx", "chai", "util", "chai", "util", "Assertion", "should", "chai", "util", "Assertion", "assert", "util", "config", "core", "expect", "should", "assert", "require_chai", "chai", "brand", "styles", "chalk", "level", "self", "styles", "i", "j", "k", "a", "b", "u", "present", "tests", "startTime", "diff", "path", "a", "b", "Navigation", "chapter", "test", "Step", "init_Step", "step", "a", "b", "Sequence", "init_Step", "step", "Step", "import_keyb", "import_poin", "import_joyp", "import_seedrandom", "import_query_string", "Chapter", "proto", "chapter", "querystring", "Keyb", "Joyp", "Pointer", "Sequence", "step", "Chapter", "import_keyb", "import_joyp", "init_Step", "App", "Keyb", "global", "_", "t", "f", "y", "g", "n", "v", "step", "e", "Node", "a", "b", "i", "N", "l", "r", "cmp", "merge", "Tree", "x", "Q", "index", "d", "p", "l2", "p2", "j", "b2", "h", "B", "C2", "D", "u", "c", "u3", "v2", "d2", "x2", "y2", "diff", "pt", "nextPt", "evt", "import_poin", "import_joyp", "frame", "init_unit_jobs", "_", "unit_jobs_default", "init_unit_jobs", "_", "unit_jobs_default", "init_unit_jobs", "_", "i", "_", "Stage", "_", "x2", "y2", "vector", "PolygonClipping", "_", "_", "Unit", "init_unit_jobs", "unit_jobs_default", "_", "key", "propertyType", "_", "chapter", "_", "import_poin", "init_unit_jobs", "_", "ChapterSuccessModal", "DungeonDeathModal", "chapter", "unit_jobs_default", "step", "i", "_", "init_unit_jobs", "init_unit_jobs", "preload", "unit_jobs_default", "chapter", "preload_default", "_", "Pointer", "preload_default", "Screen", "Stage", "chapter", "unit_jobs_default", "Joyp", "B", "_"] }