!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).inkjs={})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){o=!0,a=t},f:function(){try{s||null==n.return||n.return()}finally{if(o)throw a}}}}var g,S=function(){function t(){if(n(this,t),this._components=[],this._componentsString=null,this._isRelative=!1,"string"==typeof arguments[0]){var e=arguments[0];this.componentsString=e}else if(arguments[0]instanceof t.Component&&arguments[1]instanceof t){var i=arguments[0],r=arguments[1];this._components.push(i),this._components=this._components.concat(r._components)}else if(arguments[0]instanceof Array){var a=arguments[0],s=!!arguments[1];this._components=this._components.concat(a),this._isRelative=s}}return r(t,[{key:"isRelative",get:function(){return this._isRelative}},{key:"componentCount",get:function(){return this._components.length}},{key:"head",get:function(){return this._components.length>0?this._components[0]:null}},{key:"tail",get:function(){return this._components.length>=2?new t(this._components.slice(1,this._components.length)):t.self}},{key:"length",get:function(){return this._components.length}},{key:"lastComponent",get:function(){var t=this._components.length-1;return t>=0?this._components[t]:null}},{key:"containsNamedComponent",get:function(){for(var t=0,e=this._components.length;t=0}},{key:"isParent",get:function(){return this.name==t.parentId}},{key:"toString",value:function(){return this.isIndex?this.index.toString():this.name}},{key:"Equals",value:function(t){return null!=t&&t.isIndex==this.isIndex&&(this.isIndex?this.index==t.index:this.name==t.name)}}],[{key:"ToParent",value:function(){return new e(t.parentId)}}]),e}();t.Component=e}(S||(S={})),function(t){function e(t,e){if(!t)throw void 0!==e&&console.warn(e),console.trace&&console.trace(),new Error("")}t.AssertType=function(t,n,i){e(t instanceof n,i)},t.Assert=e}(g||(g={}));var E=function(t){a(i,t);var e=f(i);function i(){return n(this,i),e.apply(this,arguments)}return i}(h(Error));function P(t){throw new E("".concat(t," is null or undefined"))}var O=function(){function t(){n(this,t),this.parent=null,this._debugMetadata=null,this._path=null}return r(t,[{key:"debugMetadata",get:function(){return null===this._debugMetadata&&this.parent?this.parent.debugMetadata:this._debugMetadata},set:function(t){this._debugMetadata=t}},{key:"ownDebugMetadata",get:function(){return this._debugMetadata}},{key:"DebugLineNumberOfPath",value:function(t){if(null===t)return null;var e=this.rootContentContainer;if(e){var n=e.ContentAtPath(t).obj;if(n){var i=n.debugMetadata;if(null!==i)return i.startLineNumber}}return null}},{key:"path",get:function(){if(null==this._path)if(null==this.parent)this._path=new S;else{for(var t=[],e=this,n=k(e.parent,U);null!==n;){var i=b(e);null!=i&&i.hasValidName?t.unshift(new S.Component(i.name)):t.unshift(new S.Component(n.content.indexOf(e))),e=n,n=k(n.parent,U)}this._path=new S(t)}return this._path}},{key:"ResolvePath",value:function(t){if(null===t)return P("path");if(t.isRelative){var e=k(this,U);return null===e&&(g.Assert(null!==this.parent,"Can't resolve relative path because we don't have a parent"),e=k(this.parent,U),g.Assert(null!==e,"Expected parent to be a container"),g.Assert(t.GetComponent(0).isParent),t=t.tail),null===e?P("nearestContainer"):e.ContentAtPath(t)}var n=this.rootContentContainer;return null===n?P("contentContainer"):n.ContentAtPath(t)}},{key:"ConvertPathToRelative",value:function(t){for(var e=this.path,n=Math.min(t.length,e.length),i=-1,r=0;r1?e-1:0),i=1;i0){null==this._originNames&&this.Count>0?this._originNames=[]:(this._originNames||(this._originNames=[]),this._originNames.length=0);var t,e=m(this);try{for(e.s();!(t=e.n()).done;){var n=v(t.value,1)[0],i=A.fromSerializedKey(n);if(null===i.originName)return P("item.originName");this._originNames.push(i.originName)}}catch(t){e.e(t)}finally{e.f()}}return this._originNames}},{key:"SetInitialOriginName",value:function(t){this._originNames=[t]}},{key:"SetInitialOriginNames",value:function(t){this._originNames=null==t?null:t.slice()}},{key:"maxItem",get:function(){var t,e={Key:A.Null,Value:0},n=m(this);try{for(n.s();!(t=n.n()).done;){var i=v(t.value,2),r=i[0],a=i[1],s=A.fromSerializedKey(r);(e.Key.isNull||a>e.Value)&&(e={Key:s,Value:a})}}catch(t){n.e(t)}finally{n.f()}return e}},{key:"minItem",get:function(){var t,e={Key:A.Null,Value:0},n=m(this);try{for(n.s();!(t=n.n()).done;){var i=v(t.value,2),r=i[0],a=i[1],s=A.fromSerializedKey(r);(e.Key.isNull||at.maxItem.Value)}},{key:"GreaterThanOrEquals",value:function(t){return 0!=this.Count&&(0==t.Count||this.minItem.Value>=t.minItem.Value&&this.maxItem.Value>=t.maxItem.Value)}},{key:"LessThan",value:function(t){return 0!=t.Count&&(0==this.Count||this.maxItem.Value0?new s(this.maxItem):new s}},{key:"MinAsList",value:function(){return this.Count>0?new s(this.minItem):new s}},{key:"ListWithSubRange",value:function(t,e){if(0==this.Count)return new s;var n=this.orderedItems,i=0,r=Number.MAX_SAFE_INTEGER;Number.isInteger(t)?i=t:t instanceof s&&t.Count>0&&(i=t.minItem.Value),Number.isInteger(e)?r=e:t instanceof s&&t.Count>0&&(r=e.maxItem.Value);var a=new s;a.SetInitialOriginNames(this.originNames);var o,u=m(n);try{for(u.s();!(o=u.n()).done;){var l=o.value;l.Value>=i&&l.Value<=r&&a.Add(l.Key,l.Value)}}catch(t){u.e(t)}finally{u.f()}return a}},{key:"Equals",value:function(t){if(t instanceof s==!1)return!1;if(t.Count!=this.Count)return!1;var e,n=m(this);try{for(n.s();!(e=n.n()).done;){var i=v(e.value,1)[0];if(!t.has(i))return!1}}catch(t){n.e(t)}finally{n.f()}return!0}},{key:"orderedItems",get:function(){var t,e=new Array,n=m(this);try{for(n.s();!(t=n.n()).done;){var i=v(t.value,2),r=i[0],a=i[1],s=A.fromSerializedKey(r);e.push({Key:s,Value:a})}}catch(t){n.e(t)}finally{n.f()}return e.sort((function(t,e){return null===t.Key.originName?P("x.Key.originName"):null===e.Key.originName?P("y.Key.originName"):t.Value==e.Value?t.Key.originName.localeCompare(e.Key.originName):t.Valuee.Value?1:0})),e}},{key:"toString",value:function(){for(var t=this.orderedItems,e=new N,n=0;n0&&e.Append(", ");var i=t[n].Key;if(null===i.itemName)return P("item.itemName");e.Append(i.itemName)}return e.toString()}},{key:"valueOf",value:function(){return NaN}}],[{key:"FromString",value:function(t,e){var n,i=null===(n=e.listDefinitions)||void 0===n?void 0:n.FindSingleItemListWithName(t);if(i)return null===i.value?P("listValue.value"):new s(i.value);throw new Error("Could not find the InkListItem from the string '"+t+"' to create an InkList because it doesn't exist in the original list definition in ink.")}}]),s}(h(Map)),x=function(t){a(i,t);var e=f(i);function i(t){var r;return n(this,i),(r=e.call(this,t)).useEndLineNumber=!1,r.message=t,r.name="StoryException",r}return i}(h(Error));function F(t,e,n){if(null===t)return{result:n,exists:!1};var i=t.get(e);return void 0===i?{result:n,exists:!1}:{result:i,exists:!0}}var W,V=function(t){a(i,t);var e=f(i);function i(t){var r;return n(this,i),(r=e.call(this)).value=t,r}return r(i,[{key:"valueObject",get:function(){return this.value}},{key:"toString",value:function(){return null===this.value?P("Value.value"):this.value.toString()}}]),i}(function(t){a(i,t);var e=f(i);function i(){return n(this,i),e.apply(this,arguments)}return r(i,[{key:"Copy",value:function(){return C(i.Create(this),O)}},{key:"BadCastException",value:function(t){return new x("Can't cast "+this.valueObject+" from "+this.valueType+" to "+t)}}],[{key:"Create",value:function(t,e){if(e){if(e===W.Int&&Number.isInteger(Number(t)))return new R(Number(t));if(e===W.Float&&!isNaN(t))return new j(Number(t))}return"boolean"==typeof t?new L(Boolean(t)):"string"==typeof t?new D(String(t)):Number.isInteger(Number(t))?new R(Number(t)):isNaN(t)?t instanceof S?new B(C(t,S)):t instanceof I?new M(C(t,I)):null:new j(Number(t))}}]),i}(O)),L=function(t){a(i,t);var e=f(i);function i(t){return n(this,i),e.call(this,t||!1)}return r(i,[{key:"isTruthy",get:function(){return Boolean(this.value)}},{key:"valueType",get:function(){return W.Bool}},{key:"Cast",value:function(t){if(null===this.value)return P("Value.value");if(t==this.valueType)return this;if(t==W.Int)return new R(this.value?1:0);if(t==W.Float)return new j(this.value?1:0);if(t==W.String)return new D(this.value?"true":"false");throw this.BadCastException(t)}},{key:"toString",value:function(){return this.value?"true":"false"}}]),i}(V),R=function(t){a(i,t);var e=f(i);function i(t){return n(this,i),e.call(this,t||0)}return r(i,[{key:"isTruthy",get:function(){return 0!=this.value}},{key:"valueType",get:function(){return W.Int}},{key:"Cast",value:function(t){if(null===this.value)return P("Value.value");if(t==this.valueType)return this;if(t==W.Bool)return new L(0!==this.value);if(t==W.Float)return new j(this.value);if(t==W.String)return new D(""+this.value);throw this.BadCastException(t)}}]),i}(V),j=function(t){a(i,t);var e=f(i);function i(t){return n(this,i),e.call(this,t||0)}return r(i,[{key:"isTruthy",get:function(){return 0!=this.value}},{key:"valueType",get:function(){return W.Float}},{key:"Cast",value:function(t){if(null===this.value)return P("Value.value");if(t==this.valueType)return this;if(t==W.Bool)return new L(0!==this.value);if(t==W.Int)return new R(this.value);if(t==W.String)return new D(""+this.value);throw this.BadCastException(t)}}]),i}(V),D=function(t){a(i,t);var e=f(i);function i(t){var r;return n(this,i),(r=e.call(this,t||""))._isNewline="\n"==r.value,r._isInlineWhitespace=!0,null===r.value?c(r,P("Value.value")):(r.value.length>0&&r.value.split("").every((function(t){return" "==t||"\t"==t||(r._isInlineWhitespace=!1,!1)})),r)}return r(i,[{key:"valueType",get:function(){return W.String}},{key:"isTruthy",get:function(){return null===this.value?P("Value.value"):this.value.length>0}},{key:"isNewline",get:function(){return this._isNewline}},{key:"isInlineWhitespace",get:function(){return this._isInlineWhitespace}},{key:"isNonWhitespace",get:function(){return!this.isNewline&&!this.isInlineWhitespace}},{key:"Cast",value:function(t){if(t==this.valueType)return this;if(t==W.Int){var e=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseInt(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new R(e.result);throw this.BadCastException(t)}if(t==W.Float){var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseFloat(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(n.exists)return new j(n.result);throw this.BadCastException(t)}throw this.BadCastException(t)}}]),i}(V),B=function(t){a(i,t);var e=f(i);function i(t){return n(this,i),e.call(this,t)}return r(i,[{key:"valueType",get:function(){return W.DivertTarget}},{key:"targetPath",get:function(){return null===this.value?P("Value.value"):this.value},set:function(t){this.value=t}},{key:"isTruthy",get:function(){throw new Error("Shouldn't be checking the truthiness of a divert target")}},{key:"Cast",value:function(t){if(t==this.valueType)return this;throw this.BadCastException(t)}},{key:"toString",value:function(){return"DivertTargetValue("+this.targetPath+")"}}]),i}(V),G=function(t){a(i,t);var e=f(i);function i(t){var r,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return n(this,i),(r=e.call(this,t))._contextIndex=a,r}return r(i,[{key:"contextIndex",get:function(){return this._contextIndex},set:function(t){this._contextIndex=t}},{key:"variableName",get:function(){return null===this.value?P("Value.value"):this.value},set:function(t){this.value=t}},{key:"valueType",get:function(){return W.VariablePointer}},{key:"isTruthy",get:function(){throw new Error("Shouldn't be checking the truthiness of a variable pointer")}},{key:"Cast",value:function(t){if(t==this.valueType)return this;throw this.BadCastException(t)}},{key:"toString",value:function(){return"VariablePointerValue("+this.variableName+")"}},{key:"Copy",value:function(){return new i(this.variableName,this.contextIndex)}}]),i}(V),M=function(t){a(i,t);var e=f(i);function i(t,r){var a;return n(this,i),a=e.call(this,null),t||r?t instanceof I?a.value=new I(t):t instanceof A&&"number"==typeof r&&(a.value=new I({Key:t,Value:r})):a.value=new I,a}return r(i,[{key:"isTruthy",get:function(){return null===this.value?P("this.value"):this.value.Count>0}},{key:"valueType",get:function(){return W.List}},{key:"Cast",value:function(t){if(null===this.value)return P("Value.value");if(t==W.Int){var e=this.value.maxItem;return e.Key.isNull?new R(0):new R(e.Value)}if(t==W.Float){var n=this.value.maxItem;return n.Key.isNull?new j(0):new j(n.Value)}if(t==W.String){var i=this.value.maxItem;return i.Key.isNull?new D(""):new D(i.Key.toString())}if(t==this.valueType)return this;throw this.BadCastException(t)}}],[{key:"RetainListOriginsForAssignment",value:function(t,e){var n=k(t,i),r=k(e,i);return r&&null===r.value?P("newList.value"):n&&null===n.value?P("oldList.value"):void(n&&r&&0==r.value.Count&&r.value.SetInitialOriginNames(n.value.originNames))}}]),i}(V);!function(t){t[t.Bool=-1]="Bool",t[t.Int=0]="Int",t[t.Float=1]="Float",t[t.List=2]="List",t[t.String=3]="String",t[t.DivertTarget=4]="DivertTarget",t[t.VariablePointer=5]="VariablePointer"}(W||(W={}));var J=function(){function t(){n(this,t),this.obj=null,this.approximate=!1}return r(t,[{key:"correctObj",get:function(){return this.approximate?null:this.obj}},{key:"container",get:function(){return this.obj instanceof U?this.obj:null}},{key:"copy",value:function(){var e=new t;return e.obj=this.obj,e.approximate=this.approximate,e}}]),t}(),U=function(t){a(i,t);var e=f(i);function i(){var t;return n(this,i),(t=e.apply(this,arguments)).name="",t._content=[],t.namedContent=new Map,t.visitsShouldBeCounted=!1,t.turnIndexShouldBeCounted=!1,t.countingAtStartOnly=!1,t._pathToFirstLeafContent=null,t}return r(i,[{key:"hasValidName",get:function(){return null!=this.name&&this.name.length>0}},{key:"content",get:function(){return this._content},set:function(t){this.AddContent(t)}},{key:"namedOnlyContent",get:function(){var t,e=new Map,n=m(this.namedContent);try{for(n.s();!(t=n.n()).done;){var i=v(t.value,2),r=i[0],a=C(i[1],O);e.set(r,a)}}catch(t){n.e(t)}finally{n.f()}var s,o=m(this.content);try{for(o.s();!(s=o.n()).done;){var u=b(s.value);null!=u&&u.hasValidName&&e.delete(u.name)}}catch(t){o.e(t)}finally{o.f()}return 0==e.size&&(e=null),e},set:function(t){var e=this.namedOnlyContent;if(null!=e){var n,i=m(e);try{for(i.s();!(n=i.n()).done;){var r=v(n.value,1)[0];this.namedContent.delete(r)}}catch(t){i.e(t)}finally{i.f()}}if(null!=t){var a,s=m(t);try{for(s.s();!(a=s.n()).done;){var o=b(v(a.value,2)[1]);null!=o&&this.AddToNamedContentOnly(o)}}catch(t){s.e(t)}finally{s.f()}}}},{key:"countFlags",get:function(){var t=0;return this.visitsShouldBeCounted&&(t|=i.CountFlags.Visits),this.turnIndexShouldBeCounted&&(t|=i.CountFlags.Turns),this.countingAtStartOnly&&(t|=i.CountFlags.CountStartOnly),t==i.CountFlags.CountStartOnly&&(t=0),t},set:function(t){var e=t;(e&i.CountFlags.Visits)>0&&(this.visitsShouldBeCounted=!0),(e&i.CountFlags.Turns)>0&&(this.turnIndexShouldBeCounted=!0),(e&i.CountFlags.CountStartOnly)>0&&(this.countingAtStartOnly=!0)}},{key:"pathToFirstLeafContent",get:function(){return null==this._pathToFirstLeafContent&&(this._pathToFirstLeafContent=this.path.PathByAppendingPath(this.internalPathToFirstLeafContent)),this._pathToFirstLeafContent}},{key:"internalPathToFirstLeafContent",get:function(){for(var t=[],e=this;e instanceof i;)e.content.length>0&&(t.push(new S.Component(0)),e=e.content[0]);return new S(t)}},{key:"AddContent",value:function(t){if(t instanceof Array){var e,n=m(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.AddContent(i)}}catch(t){n.e(t)}finally{n.f()}}else{var r=t;if(this._content.push(r),r.parent)throw new Error("content is already in "+r.parent);r.parent=this,this.TryAddNamedContent(r)}}},{key:"TryAddNamedContent",value:function(t){var e=b(t);null!=e&&e.hasValidName&&this.AddToNamedContentOnly(e)}},{key:"AddToNamedContentOnly",value:function(t){g.AssertType(t,O,"Can only add Runtime.Objects to a Runtime.Container"),C(t,O).parent=this,this.namedContent.set(t.name,t)}},{key:"ContentAtPath",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;-1==n&&(n=t.length);var r=new J;r.approximate=!1;for(var a=this,s=this,o=e;o=0&&t.index=0||l.set(f,d)}}catch(t){h.e(t)}finally{h.f()}if(l.size>0){r(),t.AppendLine("-- named: --");var p,y=m(l);try{for(y.s();!(p=y.n()).done;){var S=v(p.value,2),k=S[1];g.AssertType(k,i,"Can only print out named Containers");var b=k;b.BuildStringOfHierarchy(t,e,n),t.AppendLine()}}catch(t){y.e(t)}finally{y.f()}}e--,r(),t.Append("]")}}]),i}(O);!function(t){var e;(e=t.CountFlags||(t.CountFlags={}))[e.Visits=1]="Visits",e[e.Turns=2]="Turns",e[e.CountStartOnly=4]="CountStartOnly"}(U||(U={}));var q,K=function(t){a(i,t);var e=f(i);function i(){return n(this,i),e.apply(this,arguments)}return r(i,[{key:"toString",value:function(){return"Glue"}}]),i}(O),z=function(t){a(i,t);var e=f(i);function i(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.CommandType.NotSet;return n(this,i),(t=e.call(this))._commandType=r,t}return r(i,[{key:"commandType",get:function(){return this._commandType}},{key:"Copy",value:function(){return new i(this.commandType)}},{key:"toString",value:function(){return this.commandType.toString()}}],[{key:"EvalStart",value:function(){return new i(i.CommandType.EvalStart)}},{key:"EvalOutput",value:function(){return new i(i.CommandType.EvalOutput)}},{key:"EvalEnd",value:function(){return new i(i.CommandType.EvalEnd)}},{key:"Duplicate",value:function(){return new i(i.CommandType.Duplicate)}},{key:"PopEvaluatedValue",value:function(){return new i(i.CommandType.PopEvaluatedValue)}},{key:"PopFunction",value:function(){return new i(i.CommandType.PopFunction)}},{key:"PopTunnel",value:function(){return new i(i.CommandType.PopTunnel)}},{key:"BeginString",value:function(){return new i(i.CommandType.BeginString)}},{key:"EndString",value:function(){return new i(i.CommandType.EndString)}},{key:"NoOp",value:function(){return new i(i.CommandType.NoOp)}},{key:"ChoiceCount",value:function(){return new i(i.CommandType.ChoiceCount)}},{key:"Turns",value:function(){return new i(i.CommandType.Turns)}},{key:"TurnsSince",value:function(){return new i(i.CommandType.TurnsSince)}},{key:"ReadCount",value:function(){return new i(i.CommandType.ReadCount)}},{key:"Random",value:function(){return new i(i.CommandType.Random)}},{key:"SeedRandom",value:function(){return new i(i.CommandType.SeedRandom)}},{key:"VisitIndex",value:function(){return new i(i.CommandType.VisitIndex)}},{key:"SequenceShuffleIndex",value:function(){return new i(i.CommandType.SequenceShuffleIndex)}},{key:"StartThread",value:function(){return new i(i.CommandType.StartThread)}},{key:"Done",value:function(){return new i(i.CommandType.Done)}},{key:"End",value:function(){return new i(i.CommandType.End)}},{key:"ListFromInt",value:function(){return new i(i.CommandType.ListFromInt)}},{key:"ListRange",value:function(){return new i(i.CommandType.ListRange)}},{key:"ListRandom",value:function(){return new i(i.CommandType.ListRandom)}}]),i}(O);!function(t){var e;(e=t.CommandType||(t.CommandType={}))[e.NotSet=-1]="NotSet",e[e.EvalStart=0]="EvalStart",e[e.EvalOutput=1]="EvalOutput",e[e.EvalEnd=2]="EvalEnd",e[e.Duplicate=3]="Duplicate",e[e.PopEvaluatedValue=4]="PopEvaluatedValue",e[e.PopFunction=5]="PopFunction",e[e.PopTunnel=6]="PopTunnel",e[e.BeginString=7]="BeginString",e[e.EndString=8]="EndString",e[e.NoOp=9]="NoOp",e[e.ChoiceCount=10]="ChoiceCount",e[e.Turns=11]="Turns",e[e.TurnsSince=12]="TurnsSince",e[e.Random=13]="Random",e[e.SeedRandom=14]="SeedRandom",e[e.VisitIndex=15]="VisitIndex",e[e.SequenceShuffleIndex=16]="SequenceShuffleIndex",e[e.StartThread=17]="StartThread",e[e.Done=18]="Done",e[e.End=19]="End",e[e.ListFromInt=20]="ListFromInt",e[e.ListRange=21]="ListRange",e[e.ListRandom=22]="ListRandom",e[e.ReadCount=23]="ReadCount",e[e.TOTAL_VALUES=24]="TOTAL_VALUES"}(z||(z={})),function(t){t[t.Tunnel=0]="Tunnel",t[t.Function=1]="Function",t[t.FunctionEvaluationFromGame=2]="FunctionEvaluationFromGame"}(q||(q={}));var H=function(){function t(){n(this,t),this.container=null,this.index=-1,2===arguments.length&&(this.container=arguments[0],this.index=arguments[1])}return r(t,[{key:"Resolve",value:function(){return this.index<0?this.container:null==this.container?null:0==this.container.content.length?this.container:this.index>=this.container.content.length?null:this.container.content[this.index]}},{key:"isNull",get:function(){return null==this.container}},{key:"path",get:function(){return this.isNull?null:this.index>=0?this.container.path.PathByAppendingComponent(new S.Component(this.index)):this.container.path}},{key:"toString",value:function(){return this.container?"Ink Pointer -> "+this.container.path.toString()+" -- index "+this.index:"Ink Pointer (null)"}},{key:"copy",value:function(){return new t(this.container,this.index)}}],[{key:"StartOf",value:function(e){return new t(e,0)}},{key:"Null",get:function(){return new t(null,-1)}}]),t}(),X=function(t){a(i,t);var e=f(i);function i(t){var r;return n(this,i),(r=e.call(this))._targetPath=null,r._targetPointer=H.Null,r.variableDivertName=null,r.pushesToStack=!1,r.stackPushType=0,r.isExternal=!1,r.externalArgs=0,r.isConditional=!1,r.pushesToStack=!1,void 0!==t&&(r.pushesToStack=!0,r.stackPushType=t),r}return r(i,[{key:"targetPath",get:function(){if(null!=this._targetPath&&this._targetPath.isRelative){var t=this.targetPointer.Resolve();t&&(this._targetPath=t.path)}return this._targetPath},set:function(t){this._targetPath=t,this._targetPointer=H.Null}},{key:"targetPointer",get:function(){if(this._targetPointer.isNull){var t=this.ResolvePath(this._targetPath).obj;if(null===this._targetPath)return P("this._targetPath");if(null===this._targetPath.lastComponent)return P("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(null===t)return P("targetObj");this._targetPointer.container=t.parent instanceof U?t.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index}else this._targetPointer=H.StartOf(t instanceof U?t:null)}return this._targetPointer.copy()}},{key:"targetPathString",get:function(){return null==this.targetPath?null:this.CompactPathString(this.targetPath)},set:function(t){this.targetPath=null==t?null:new S(t)}},{key:"hasVariableTarget",get:function(){return null!=this.variableDivertName}},{key:"Equals",value:function(t){var e=t;return e instanceof i&&this.hasVariableTarget==e.hasVariableTarget&&(this.hasVariableTarget?this.variableDivertName==e.variableDivertName:null===this.targetPath?P("this.targetPath"):this.targetPath.Equals(e.targetPath))}},{key:"toString",value:function(){if(this.hasVariableTarget)return"Divert(variable: "+this.variableDivertName+")";if(null==this.targetPath)return"Divert(null)";var t=new N,e=this.targetPath.toString();return t.Append("Divert"),this.isConditional&&t.Append("?"),this.pushesToStack&&(this.stackPushType==q.Function?t.Append(" function"):t.Append(" tunnel")),t.Append(" -> "),t.Append(this.targetPathString),t.Append(" ("),t.Append(e),t.Append(")"),t.toString()}}]),i}(O),$=function(t){a(i,t);var e=f(i);function i(){var t,r=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return n(this,i),(t=e.call(this))._pathOnChoice=null,t.hasCondition=!1,t.hasStartContent=!1,t.hasChoiceOnlyContent=!1,t.isInvisibleDefault=!1,t.onceOnly=!0,t.onceOnly=r,t}return r(i,[{key:"pathOnChoice",get:function(){if(null!=this._pathOnChoice&&this._pathOnChoice.isRelative){var t=this.choiceTarget;t&&(this._pathOnChoice=t.path)}return this._pathOnChoice},set:function(t){this._pathOnChoice=t}},{key:"choiceTarget",get:function(){return null===this._pathOnChoice?P("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}},{key:"pathStringOnChoice",get:function(){return null===this.pathOnChoice?P("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)},set:function(t){this.pathOnChoice=new S(t)}},{key:"flags",get:function(){var t=0;return this.hasCondition&&(t|=1),this.hasStartContent&&(t|=2),this.hasChoiceOnlyContent&&(t|=4),this.isInvisibleDefault&&(t|=8),this.onceOnly&&(t|=16),t},set:function(t){this.hasCondition=(1&t)>0,this.hasStartContent=(2&t)>0,this.hasChoiceOnlyContent=(4&t)>0,this.isInvisibleDefault=(8&t)>0,this.onceOnly=(16&t)>0}},{key:"toString",value:function(){return null===this.pathOnChoice?P("ChoicePoint.pathOnChoice"):"Choice: -> "+this.pathOnChoice.toString()}}]),i}(O),Y=function(t){a(i,t);var e=f(i);function i(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return n(this,i),(t=e.call(this)).pathForCount=null,t.name=r,t}return r(i,[{key:"containerForCount",get:function(){return null===this.pathForCount?null:this.ResolvePath(this.pathForCount).container}},{key:"pathStringForCount",get:function(){return null===this.pathForCount?null:this.CompactPathString(this.pathForCount)},set:function(t){this.pathForCount=null===t?null:new S(t)}},{key:"toString",value:function(){return null!=this.name?"var("+this.name+")":"read_count("+this.pathStringForCount+")"}}]),i}(O),Q=function(t){a(i,t);var e=f(i);function i(t,r){var a;return n(this,i),(a=e.call(this)).variableName=t||null,a.isNewDeclaration=!!r,a.isGlobal=!1,a}return r(i,[{key:"toString",value:function(){return"VarAssign to "+this.variableName}}]),i}(O),Z=function(t){a(i,t);var e=f(i);function i(){return n(this,i),e.apply(this,arguments)}return i}(O),tt=function(t){a(i,t);var e=f(i);function i(){var t;if(n(this,i),(t=e.call(this))._name=null,t._numberOfParameters=0,t._prototype=null,t._isPrototype=!1,t._operationFuncs=null,0===arguments.length)i.GenerateNativeFunctionsIfNecessary();else if(1===arguments.length){var r=arguments[0];i.GenerateNativeFunctionsIfNecessary(),t.name=r}else if(2===arguments.length){var a=arguments[0],s=arguments[1];t._isPrototype=!0,t.name=a,t.numberOfParameters=s}return t}return r(i,[{key:"name",get:function(){return null===this._name?P("NativeFunctionCall._name"):this._name},set:function(t){this._name=t,this._isPrototype||(null===i._nativeFunctions?P("NativeFunctionCall._nativeFunctions"):this._prototype=i._nativeFunctions.get(this._name)||null)}},{key:"numberOfParameters",get:function(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters},set:function(t){this._numberOfParameters=t}},{key:"Call",value:function(t){if(this._prototype)return this._prototype.Call(t);if(this.numberOfParameters!=t.length)throw new Error("Unexpected number of parameters");var e,n=!1,i=m(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;if(r instanceof Z)throw new x('Attempting to perform operation on a void value. Did you forget to "return" a value from a function you called here?');r instanceof M&&(n=!0)}}catch(t){i.e(t)}finally{i.f()}if(2==t.length&&n)return this.CallBinaryListOperation(t);var a=this.CoerceValuesToSingleType(t),s=a[0].valueType;return s==W.Int||s==W.Float||s==W.String||s==W.DivertTarget||s==W.List?this.CallType(a):null}},{key:"CallType",value:function(t){var e=C(t[0],V),n=e.valueType,r=e,a=t.length;if(2==a||1==a){if(null===this._operationFuncs)return P("NativeFunctionCall._operationFuncs");var s=this._operationFuncs.get(n);if(!s){var o=W[n];throw new x("Cannot perform operation "+this.name+" on "+o)}if(2==a){var u=C(t[1],V),l=s;if(null===r.value||null===u.value)return P("NativeFunctionCall.Call BinaryOp values");var h=l(r.value,u.value);return V.Create(h)}var c=s;if(null===r.value)return P("NativeFunctionCall.Call UnaryOp value");var f=c(r.value);return this.name===i.Int?V.Create(f,W.Int):this.name===i.Float?V.Create(f,W.Float):V.Create(f,e.valueType)}throw new Error("Unexpected number of parameters to NativeFunctionCall: "+t.length)}},{key:"CallBinaryListOperation",value:function(t){if(("+"==this.name||"-"==this.name)&&t[0]instanceof M&&t[1]instanceof R)return this.CallListIncrementOperation(t);var e=C(t[0],V),n=C(t[1],V);if(!("&&"!=this.name&&"||"!=this.name||e.valueType==W.List&&n.valueType==W.List)){if(null===this._operationFuncs)return P("NativeFunctionCall._operationFuncs");var i=this._operationFuncs.get(W.Int);if(null===i)return P("NativeFunctionCall.CallBinaryListOperation op");var r=function(t){if("boolean"==typeof t)return t;throw new Error("".concat(t," is not a boolean"))}(i(e.isTruthy?1:0,n.isTruthy?1:0));return new L(r)}if(e.valueType==W.List&&n.valueType==W.List)return this.CallType([e,n]);throw new x("Can not call use "+this.name+" operation on "+W[e.valueType]+" and "+W[n.valueType])}},{key:"CallListIncrementOperation",value:function(t){var e=C(t[0],M),n=C(t[1],R),i=new I;if(null===e.value)return P("NativeFunctionCall.CallListIncrementOperation listVal.value");var r,a=m(e.value);try{for(a.s();!(r=a.n()).done;){var s=v(r.value,2),o=s[0],u=s[1],l=A.fromSerializedKey(o);if(null===this._operationFuncs)return P("NativeFunctionCall._operationFuncs");var h=this._operationFuncs.get(W.Int);if(null===n.value)return P("NativeFunctionCall.CallListIncrementOperation intVal.value");var c=h(u,n.value),f=null;if(null===e.value.origins)return P("NativeFunctionCall.CallListIncrementOperation listVal.value.origins");var d,p=m(e.value.origins);try{for(p.s();!(d=p.n()).done;){var y=d.value;if(y.name==l.originName){f=y;break}}}catch(t){p.e(t)}finally{p.f()}if(null!=f){var g=f.TryGetItemWithValue(c,A.Null);g.exists&&i.Add(g.result,c)}}}catch(t){a.e(t)}finally{a.f()}return new M(i)}},{key:"CoerceValuesToSingleType",value:function(t){var e,n=W.Int,i=null,r=m(t);try{for(r.s();!(e=r.n()).done;){var a=C(e.value,V);a.valueType>n&&(n=a.valueType),a.valueType==W.List&&(i=k(a,M))}}catch(t){r.e(t)}finally{r.f()}var s=[];if(W[n]==W[W.List]){var o,u=m(t);try{for(u.s();!(o=u.n()).done;){var l=C(o.value,V);if(l.valueType==W.List)s.push(l);else{if(l.valueType!=W.Int){var h=W[l.valueType];throw new x("Cannot mix Lists and "+h+" values in this operation")}var c=parseInt(l.valueObject);if(null===(i=C(i,M)).value)return P("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");var f=i.value.originOfMaxItem;if(null===f)return P("NativeFunctionCall.CoerceValuesToSingleType list");var v=f.TryGetItemWithValue(c,A.Null);if(!v.exists)throw new x("Could not find List item with the value "+c+" in "+f.name);var d=new M(v.result,c);s.push(d)}}}catch(t){u.e(t)}finally{u.f()}}else{var p,y=m(t);try{for(y.s();!(p=y.n()).done;){var g=C(p.value,V).Cast(n);s.push(g)}}catch(t){y.e(t)}finally{y.f()}}return s}},{key:"AddOpFuncForType",value:function(t,e){null==this._operationFuncs&&(this._operationFuncs=new Map),this._operationFuncs.set(t,e)}},{key:"toString",value:function(){return'Native "'+this.name+'"'}}],[{key:"CallWithName",value:function(t){return new i(t)}},{key:"CallExistsWithName",value:function(t){return this.GenerateNativeFunctionsIfNecessary(),this._nativeFunctions.get(t)}},{key:"Identity",value:function(t){return t}},{key:"GenerateNativeFunctionsIfNecessary",value:function(){if(null==this._nativeFunctions){this._nativeFunctions=new Map,this.AddIntBinaryOp(this.Add,(function(t,e){return t+e})),this.AddIntBinaryOp(this.Subtract,(function(t,e){return t-e})),this.AddIntBinaryOp(this.Multiply,(function(t,e){return t*e})),this.AddIntBinaryOp(this.Divide,(function(t,e){return Math.floor(t/e)})),this.AddIntBinaryOp(this.Mod,(function(t,e){return t%e})),this.AddIntUnaryOp(this.Negate,(function(t){return-t})),this.AddIntBinaryOp(this.Equal,(function(t,e){return t==e})),this.AddIntBinaryOp(this.Greater,(function(t,e){return t>e})),this.AddIntBinaryOp(this.Less,(function(t,e){return t=e})),this.AddIntBinaryOp(this.LessThanOrEquals,(function(t,e){return t<=e})),this.AddIntBinaryOp(this.NotEquals,(function(t,e){return t!=e})),this.AddIntUnaryOp(this.Not,(function(t){return 0==t})),this.AddIntBinaryOp(this.And,(function(t,e){return 0!=t&&0!=e})),this.AddIntBinaryOp(this.Or,(function(t,e){return 0!=t||0!=e})),this.AddIntBinaryOp(this.Max,(function(t,e){return Math.max(t,e)})),this.AddIntBinaryOp(this.Min,(function(t,e){return Math.min(t,e)})),this.AddIntBinaryOp(this.Pow,(function(t,e){return Math.pow(t,e)})),this.AddIntUnaryOp(this.Floor,i.Identity),this.AddIntUnaryOp(this.Ceiling,i.Identity),this.AddIntUnaryOp(this.Int,i.Identity),this.AddIntUnaryOp(this.Float,(function(t){return t})),this.AddFloatBinaryOp(this.Add,(function(t,e){return t+e})),this.AddFloatBinaryOp(this.Subtract,(function(t,e){return t-e})),this.AddFloatBinaryOp(this.Multiply,(function(t,e){return t*e})),this.AddFloatBinaryOp(this.Divide,(function(t,e){return t/e})),this.AddFloatBinaryOp(this.Mod,(function(t,e){return t%e})),this.AddFloatUnaryOp(this.Negate,(function(t){return-t})),this.AddFloatBinaryOp(this.Equal,(function(t,e){return t==e})),this.AddFloatBinaryOp(this.Greater,(function(t,e){return t>e})),this.AddFloatBinaryOp(this.Less,(function(t,e){return t=e})),this.AddFloatBinaryOp(this.LessThanOrEquals,(function(t,e){return t<=e})),this.AddFloatBinaryOp(this.NotEquals,(function(t,e){return t!=e})),this.AddFloatUnaryOp(this.Not,(function(t){return 0==t})),this.AddFloatBinaryOp(this.And,(function(t,e){return 0!=t&&0!=e})),this.AddFloatBinaryOp(this.Or,(function(t,e){return 0!=t||0!=e})),this.AddFloatBinaryOp(this.Max,(function(t,e){return Math.max(t,e)})),this.AddFloatBinaryOp(this.Min,(function(t,e){return Math.min(t,e)})),this.AddFloatBinaryOp(this.Pow,(function(t,e){return Math.pow(t,e)})),this.AddFloatUnaryOp(this.Floor,(function(t){return Math.floor(t)})),this.AddFloatUnaryOp(this.Ceiling,(function(t){return Math.ceil(t)})),this.AddFloatUnaryOp(this.Int,(function(t){return Math.floor(t)})),this.AddFloatUnaryOp(this.Float,i.Identity),this.AddStringBinaryOp(this.Add,(function(t,e){return t+e})),this.AddStringBinaryOp(this.Equal,(function(t,e){return t===e})),this.AddStringBinaryOp(this.NotEquals,(function(t,e){return!(t===e)})),this.AddStringBinaryOp(this.Has,(function(t,e){return t.includes(e)})),this.AddStringBinaryOp(this.Hasnt,(function(t,e){return!t.includes(e)})),this.AddListBinaryOp(this.Add,(function(t,e){return t.Union(e)})),this.AddListBinaryOp(this.Subtract,(function(t,e){return t.Without(e)})),this.AddListBinaryOp(this.Has,(function(t,e){return t.Contains(e)})),this.AddListBinaryOp(this.Hasnt,(function(t,e){return!t.Contains(e)})),this.AddListBinaryOp(this.Intersect,(function(t,e){return t.Intersect(e)})),this.AddListBinaryOp(this.Equal,(function(t,e){return t.Equals(e)})),this.AddListBinaryOp(this.Greater,(function(t,e){return t.GreaterThan(e)})),this.AddListBinaryOp(this.Less,(function(t,e){return t.LessThan(e)})),this.AddListBinaryOp(this.GreaterThanOrEquals,(function(t,e){return t.GreaterThanOrEquals(e)})),this.AddListBinaryOp(this.LessThanOrEquals,(function(t,e){return t.LessThanOrEquals(e)})),this.AddListBinaryOp(this.NotEquals,(function(t,e){return!t.Equals(e)})),this.AddListBinaryOp(this.And,(function(t,e){return t.Count>0&&e.Count>0})),this.AddListBinaryOp(this.Or,(function(t,e){return t.Count>0||e.Count>0})),this.AddListUnaryOp(this.Not,(function(t){return 0==t.Count?1:0})),this.AddListUnaryOp(this.Invert,(function(t){return t.inverse})),this.AddListUnaryOp(this.All,(function(t){return t.all})),this.AddListUnaryOp(this.ListMin,(function(t){return t.MinAsList()})),this.AddListUnaryOp(this.ListMax,(function(t){return t.MaxAsList()})),this.AddListUnaryOp(this.Count,(function(t){return t.Count})),this.AddListUnaryOp(this.ValueOfList,(function(t){return t.maxItem.Value}));this.AddOpToNativeFunc(this.Equal,2,W.DivertTarget,(function(t,e){return t.Equals(e)})),this.AddOpToNativeFunc(this.NotEquals,2,W.DivertTarget,(function(t,e){return!t.Equals(e)}))}}},{key:"AddOpToNativeFunc",value:function(t,e,n,r){if(null===this._nativeFunctions)return P("NativeFunctionCall._nativeFunctions");var a=this._nativeFunctions.get(t);a||(a=new i(t,e),this._nativeFunctions.set(t,a)),a.AddOpFuncForType(n,r)}},{key:"AddIntBinaryOp",value:function(t,e){this.AddOpToNativeFunc(t,2,W.Int,e)}},{key:"AddIntUnaryOp",value:function(t,e){this.AddOpToNativeFunc(t,1,W.Int,e)}},{key:"AddFloatBinaryOp",value:function(t,e){this.AddOpToNativeFunc(t,2,W.Float,e)}},{key:"AddFloatUnaryOp",value:function(t,e){this.AddOpToNativeFunc(t,1,W.Float,e)}},{key:"AddStringBinaryOp",value:function(t,e){this.AddOpToNativeFunc(t,2,W.String,e)}},{key:"AddListBinaryOp",value:function(t,e){this.AddOpToNativeFunc(t,2,W.List,e)}},{key:"AddListUnaryOp",value:function(t,e){this.AddOpToNativeFunc(t,1,W.List,e)}}]),i}(O);tt.Add="+",tt.Subtract="-",tt.Divide="/",tt.Multiply="*",tt.Mod="%",tt.Negate="_",tt.Equal="==",tt.Greater=">",tt.Less="<",tt.GreaterThanOrEquals=">=",tt.LessThanOrEquals="<=",tt.NotEquals="!=",tt.Not="!",tt.And="&&",tt.Or="||",tt.Min="MIN",tt.Max="MAX",tt.Pow="POW",tt.Floor="FLOOR",tt.Ceiling="CEILING",tt.Int="INT",tt.Float="FLOAT",tt.Has="?",tt.Hasnt="!?",tt.Intersect="^",tt.ListMin="LIST_MIN",tt.ListMax="LIST_MAX",tt.All="LIST_ALL",tt.Count="LIST_COUNT",tt.ValueOfList="LIST_VALUE",tt.Invert="LIST_INVERT",tt._nativeFunctions=null;var et=function(t){a(i,t);var e=f(i);function i(t){var r;return n(this,i),(r=e.call(this)).text=t.toString()||"",r}return r(i,[{key:"toString",value:function(){return"# "+this.text}}]),i}(O),nt=function(t){a(i,t);var e=f(i);function i(){var t;return n(this,i),(t=e.apply(this,arguments)).text="",t.index=0,t.threadAtGeneration=null,t.sourcePath="",t.targetPath=null,t.isInvisibleDefault=!1,t.originalThreadIndex=0,t}return r(i,[{key:"pathStringOnChoice",get:function(){return null===this.targetPath?P("Choice.targetPath"):this.targetPath.toString()},set:function(t){this.targetPath=new S(t)}}]),i}(O),it=function(){function t(e,i){n(this,t),this._name=e||"",this._items=null,this._itemNameToValues=i||new Map}return r(t,[{key:"name",get:function(){return this._name}},{key:"items",get:function(){if(null==this._items){this._items=new Map;var t,e=m(this._itemNameToValues);try{for(e.s();!(t=e.n()).done;){var n=v(t.value,2),i=n[0],r=n[1],a=new A(this.name,i);this._items.set(a.serialized(),r)}}catch(t){e.e(t)}finally{e.f()}}return this._items}},{key:"ValueForItem",value:function(t){if(!t.itemName)return 0;var e=this._itemNameToValues.get(t.itemName);return void 0!==e?e:0}},{key:"ContainsItem",value:function(t){return!!t.itemName&&(t.originName==this.name&&this._itemNameToValues.has(t.itemName))}},{key:"ContainsItemWithName",value:function(t){return this._itemNameToValues.has(t)}},{key:"TryGetItemWithValue",value:function(t,e){var n,i=m(this._itemNameToValues);try{for(i.s();!(n=i.n()).done;){var r=v(n.value,2),a=r[0];if(r[1]==t)return{result:new A(this.name,a),exists:!0}}}catch(t){i.e(t)}finally{i.f()}return{result:A.Null,exists:!1}}},{key:"TryGetValueForItem",value:function(t,e){if(!t.itemName)return{result:0,exists:!1};var n=this._itemNameToValues.get(t.itemName);return n?{result:n,exists:!0}:{result:0,exists:!1}}}]),t}(),rt=function(){function t(e){n(this,t),this._lists=new Map,this._allUnambiguousListValueCache=new Map;var i,r=m(e);try{for(r.s();!(i=r.n()).done;){var a=i.value;this._lists.set(a.name,a);var s,o=m(a.items);try{for(o.s();!(s=o.n()).done;){var u=v(s.value,2),l=u[0],h=u[1],c=A.fromSerializedKey(l),f=new M(c,h);if(!c.itemName)throw new Error("item.itemName is null or undefined.");this._allUnambiguousListValueCache.set(c.itemName,f),this._allUnambiguousListValueCache.set(c.fullName,f)}}catch(t){o.e(t)}finally{o.f()}}}catch(t){r.e(t)}finally{r.f()}}return r(t,[{key:"lists",get:function(){var t,e=[],n=m(this._lists);try{for(n.s();!(t=n.n()).done;){var i=v(t.value,2)[1];e.push(i)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:"TryListGetDefinition",value:function(t,e){if(null===t)return{result:e,exists:!1};var n=this._lists.get(t);return n?{result:n,exists:!0}:{result:e,exists:!1}}},{key:"FindSingleItemListWithName",value:function(t){if(null===t)return P("name");var e=this._allUnambiguousListValueCache.get(t);return void 0!==e?e:null}}]),t}(),at=function(){function t(){n(this,t)}return r(t,null,[{key:"JArrayToRuntimeObjList",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.length;e&&n--;for(var i=[],r=0;rt->")),a=r.hasVariableTarget?r.variableDivertName:r.targetPathString,e.WriteObjectStart(),e.WriteProperty(s,a),r.hasVariableTarget&&e.WriteProperty("var",!0),r.isConditional&&e.WriteProperty("c",!0),r.externalArgs>0&&e.WriteIntProperty("exArgs",r.externalArgs),void e.WriteObjectEnd()}var o=k(n,$);if(o)return e.WriteObjectStart(),e.WriteProperty("*",o.pathStringOnChoice),e.WriteIntProperty("flg",o.flags),void e.WriteObjectEnd();var u=k(n,L);if(u)e.WriteBool(u.value);else{var l=k(n,R);if(l)e.WriteInt(l.value);else{var h=k(n,j);if(h)e.WriteFloat(h.value);else{var c=k(n,D);if(c)c.isNewline?e.Write("\n",!1):(e.WriteStringStart(),e.WriteStringInner("^"),e.WriteStringInner(c.value),e.WriteStringEnd());else{var f=k(n,M);if(f)this.WriteInkList(e,f);else{var v=k(n,B);if(v)return e.WriteObjectStart(),null===v.value?P("divTargetVal.value"):(e.WriteProperty("^->",v.value.componentsString),void e.WriteObjectEnd());var d=k(n,G);if(d)return e.WriteObjectStart(),e.WriteProperty("^var",d.value),e.WriteIntProperty("ci",d.contextIndex),void e.WriteObjectEnd();if(k(n,K))e.Write("<>");else{var p=k(n,z);if(p)e.Write(t._controlCommandNames[p.commandType]);else{var y=k(n,tt);if(y){var m=y.name;return"^"==m&&(m="L^"),void e.Write(m)}var g=k(n,Y);if(g){e.WriteObjectStart();var S=g.pathStringForCount;return null!=S?e.WriteProperty("CNT?",S):e.WriteProperty("VAR?",g.name),void e.WriteObjectEnd()}var C=k(n,Q);if(C){e.WriteObjectStart();var b=C.isGlobal?"VAR=":"temp=";return e.WriteProperty(b,C.variableName),C.isNewDeclaration||e.WriteProperty("re",!0),void e.WriteObjectEnd()}if(k(n,Z))e.Write("void");else{var _=k(n,et);if(_)return e.WriteObjectStart(),e.WriteProperty("#",_.text),void e.WriteObjectEnd();var w=k(n,nt);if(!w)throw new Error("Failed to convert runtime object to Json token: "+n);this.WriteChoice(e,w)}}}}}}}}}}},{key:"JObjectToDictionaryRuntimeObjs",value:function(t){var e=new Map;for(var n in t)if(t.hasOwnProperty(n)){var i=this.JTokenToRuntimeObject(t[n]);if(null===i)return P("inkObject");e.set(n,i)}return e}},{key:"JObjectToIntDictionary",value:function(t){var e=new Map;for(var n in t)t.hasOwnProperty(n)&&e.set(n,parseInt(t[n]));return e}},{key:"JTokenToRuntimeObject",value:function(n){if("number"==typeof n&&!isNaN(n)||"boolean"==typeof n)return V.Create(n);if("string"==typeof n){var i=n.toString(),r=i[0];if("^"==r)return new D(i.substring(1));if("\n"==r&&1==i.length)return new D("\n");if("<>"==i)return new K;for(var a=0;a->"==i)return z.PopTunnel();if("~ret"==i)return z.PopFunction();if("void"==i)return new Z}if("object"===e(n)&&!Array.isArray(n)){var s,o=n;if(o["^->"])return s=o["^->"],new B(new S(s.toString()));if(o["^var"]){s=o["^var"];var u=new G(s.toString());return"ci"in o&&(s=o.ci,u.contextIndex=parseInt(s)),u}var l=!1,h=!1,c=q.Function,f=!1;if((s=o["->"])?l=!0:(s=o["f()"])?(l=!0,h=!0,c=q.Function):(s=o["->t->"])?(l=!0,h=!0,c=q.Tunnel):(s=o["x()"])&&(l=!0,f=!0,h=!1,c=q.Function),l){var v=new X;v.pushesToStack=h,v.stackPushType=c,v.isExternal=f;var d=s.toString();return(s=o.var)?v.variableDivertName=d:v.targetPathString=d,v.isConditional=!!o.c,f&&(s=o.exArgs)&&(v.externalArgs=parseInt(s)),v}if(s=o["*"]){var p=new $;return p.pathStringOnChoice=s.toString(),(s=o.flg)&&(p.flags=parseInt(s)),p}if(s=o["VAR?"])return new Y(s.toString());if(s=o["CNT?"]){var y=new Y;return y.pathStringForCount=s.toString(),y}var m=!1,g=!1;if((s=o["VAR="])?(m=!0,g=!0):(s=o["temp="])&&(m=!0,g=!1),m){var k=s.toString(),C=!o.re,b=new Q(k,C);return b.isGlobal=g,b}if(void 0!==o["#"])return s=o["#"],new et(s.toString());if(s=o.list){var _=s,w=new I;if(s=o.origins){var T=s;w.SetInitialOriginNames(T)}for(var E in _)if(_.hasOwnProperty(E)){var P=_[E],O=new A(E),N=parseInt(P);w.Add(O,N)}return new M(w)}if(null!=o.originalChoicePath)return this.JObjectToChoice(o)}if(Array.isArray(n))return this.JArrayToContainer(n);if(null==n)return null;throw new Error("Failed to convert token to runtime object: "+JSON.stringify(n))}},{key:"WriteRuntimeContainer",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.WriteArrayStart(),null===e)return P("container");var i,r=m(e.content);try{for(r.s();!(i=r.n()).done;){var a=i.value;this.WriteRuntimeObject(t,a)}}catch(t){r.e(t)}finally{r.f()}var s=e.namedOnlyContent,o=e.countFlags,u=null!=e.name&&!n,l=null!=s||o>0||u;if(l&&t.WriteObjectStart(),null!=s){var h,c=m(s);try{for(c.s();!(h=c.n()).done;){var f=v(h.value,2),d=f[0],p=f[1],y=d,g=k(p,U);t.WritePropertyStart(y),this.WriteRuntimeContainer(t,g,!0),t.WritePropertyEnd()}}catch(t){c.e(t)}finally{c.f()}}u&&t.WriteProperty("#n",e.name),l?t.WriteObjectEnd():t.WriteNull(),t.WriteArrayEnd()}},{key:"JArrayToContainer",value:function(t){var e=new U;e.content=this.JArrayToRuntimeObjList(t,!0);var n=t[t.length-1];if(null!=n){var i=new Map;for(var r in n)if("#f"==r)e.countFlags=parseInt(n[r]);else if("#n"==r)e.name=n[r].toString();else{var a=this.JTokenToRuntimeObject(n[r]),s=k(a,U);s&&(s.name=r),i.set(r,a)}e.namedOnlyContent=i}return e}},{key:"JObjectToChoice",value:function(t){var e=new nt;return e.text=t.text.toString(),e.index=parseInt(t.index),e.sourcePath=t.originalChoicePath.toString(),e.originalThreadIndex=parseInt(t.originalThreadIndex),e.pathStringOnChoice=t.targetPath.toString(),e}},{key:"WriteChoice",value:function(t,e){t.WriteObjectStart(),t.WriteProperty("text",e.text),t.WriteIntProperty("index",e.index),t.WriteProperty("originalChoicePath",e.sourcePath),t.WriteIntProperty("originalThreadIndex",e.originalThreadIndex),t.WriteProperty("targetPath",e.pathStringOnChoice),t.WriteObjectEnd()}},{key:"WriteInkList",value:function(t,e){var n=e.value;if(null===n)return P("rawList");t.WriteObjectStart(),t.WritePropertyStart("list"),t.WriteObjectStart();var i,r=m(n);try{for(r.s();!(i=r.n()).done;){var a=v(i.value,2),s=a[0],o=a[1],u=A.fromSerializedKey(s),l=o;if(null===u.itemName)return P("item.itemName");t.WritePropertyNameStart(),t.WritePropertyNameInner(u.originName?u.originName:"?"),t.WritePropertyNameInner("."),t.WritePropertyNameInner(u.itemName),t.WritePropertyNameEnd(),t.Write(l),t.WritePropertyEnd()}}catch(t){r.e(t)}finally{r.f()}if(t.WriteObjectEnd(),t.WritePropertyEnd(),0==n.Count&&null!=n.originNames&&n.originNames.length>0){t.WritePropertyStart("origins"),t.WriteArrayStart();var h,c=m(n.originNames);try{for(c.s();!(h=c.n()).done;){var f=h.value;t.Write(f)}}catch(t){c.e(t)}finally{c.f()}t.WriteArrayEnd(),t.WritePropertyEnd()}t.WriteObjectEnd()}},{key:"ListDefinitionsToJToken",value:function(t){var e,n={},i=m(t.lists);try{for(i.s();!(e=i.n()).done;){var r,a=e.value,s={},o=m(a.items);try{for(o.s();!(r=o.n()).done;){var u=v(r.value,2),l=u[0],h=u[1],c=A.fromSerializedKey(l);if(null===c.itemName)return P("item.itemName");s[c.itemName]=h}}catch(t){o.e(t)}finally{o.f()}n[a.name]=s}}catch(t){i.e(t)}finally{i.f()}return n}},{key:"JTokenToListDefinitions",value:function(t){var e=t,n=[];for(var i in e)if(e.hasOwnProperty(i)){var r=i.toString(),a=e[i],s=new Map;for(var o in a)if(e.hasOwnProperty(i)){var u=a[o];s.set(o,parseInt(u))}var l=new it(r,s);n.push(l)}return new rt(n)}}]),t}();at._controlCommandNames=function(){var t=[];t[z.CommandType.EvalStart]="ev",t[z.CommandType.EvalOutput]="out",t[z.CommandType.EvalEnd]="/ev",t[z.CommandType.Duplicate]="du",t[z.CommandType.PopEvaluatedValue]="pop",t[z.CommandType.PopFunction]="~ret",t[z.CommandType.PopTunnel]="->->",t[z.CommandType.BeginString]="str",t[z.CommandType.EndString]="/str",t[z.CommandType.NoOp]="nop",t[z.CommandType.ChoiceCount]="choiceCnt",t[z.CommandType.Turns]="turn",t[z.CommandType.TurnsSince]="turns",t[z.CommandType.ReadCount]="readc",t[z.CommandType.Random]="rnd",t[z.CommandType.SeedRandom]="srnd",t[z.CommandType.VisitIndex]="visit",t[z.CommandType.SequenceShuffleIndex]="seq",t[z.CommandType.StartThread]="thread",t[z.CommandType.Done]="done",t[z.CommandType.End]="end",t[z.CommandType.ListFromInt]="listInt",t[z.CommandType.ListRange]="range",t[z.CommandType.ListRandom]="lrnd";for(var e=0;e1}},{key:"Reset",value:function(){this._threads=[],this._threads.push(new e.Thread),this._threads[0].callstack.push(new e.Element(q.Tunnel,this._startOfRoot))}},{key:"SetJsonToken",value:function(t,n){this._threads.length=0;var i,r=m(t.threads);try{for(r.s();!(i=r.n()).done;){var a=i.value,s=new e.Thread(a,n);this._threads.push(s)}}catch(t){r.e(t)}finally{r.f()}this._threadCounter=parseInt(t.threadCounter),this._startOfRoot=H.StartOf(n.rootContentContainer)}},{key:"WriteJson",value:function(t){var e=this;t.WriteObject((function(t){t.WritePropertyStart("threads"),t.WriteArrayStart();var n,i=m(e._threads);try{for(i.s();!(n=i.n()).done;){n.value.WriteJson(t)}}catch(t){i.e(t)}finally{i.f()}t.WriteArrayEnd(),t.WritePropertyEnd(),t.WritePropertyStart("threadCounter"),t.WriteInt(e._threadCounter),t.WritePropertyEnd()}))}},{key:"PushThread",value:function(){var t=this.currentThread.Copy();this._threadCounter++,t.threadIndex=this._threadCounter,this._threads.push(t)}},{key:"ForkThread",value:function(){var t=this.currentThread.Copy();return this._threadCounter++,t.threadIndex=this._threadCounter,t}},{key:"PopThread",value:function(){if(!this.canPopThread)throw new Error("Can't pop thread");this._threads.splice(this._threads.indexOf(this.currentThread),1)}},{key:"canPopThread",get:function(){return this._threads.length>1&&!this.elementIsEvaluateFromGame}},{key:"elementIsEvaluateFromGame",get:function(){return this.currentElement.type==q.FunctionEvaluationFromGame}},{key:"Push",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=new e.Element(t,this.currentElement.currentPointer,!1);r.evaluationStackHeightWhenPushed=n,r.functionStartInOutputStream=i,this.callStack.push(r)}},{key:"CanPop",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return!!this.canPop&&(null==t||this.currentElement.type==t)}},{key:"Pop",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.CanPop(t))throw new Error("Mismatched push/pop in Callstack");this.callStack.pop()}},{key:"GetTemporaryVariableWithName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;-1==e&&(e=this.currentElementIndex+1);var n=this.callStack[e-1],i=F(n.temporaryVariables,t,null);return i.exists?i.result:null}},{key:"SetTemporaryVariable",value:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1;-1==i&&(i=this.currentElementIndex+1);var r=this.callStack[i-1];if(!n&&!r.temporaryVariables.get(t))throw new Error("Could not find temporary variable to set: "+t);var a=F(r.temporaryVariables,t,null);a.exists&&M.RetainListOriginsForAssignment(a.result,e),r.temporaryVariables.set(t,e)}},{key:"ContextForVariableNamed",value:function(t){return this.currentElement.temporaryVariables.get(t)?this.currentElementIndex+1:0}},{key:"ThreadWithIndex",value:function(t){var e=this._threads.filter((function(e){if(e.threadIndex==t)return e}));return e.length>0?e[0]:null}},{key:"callStack",get:function(){return this.currentThread.callstack}},{key:"callStackTrace",get:function(){for(var t=new N,e=0;e")}}}return t.toString()}}]),e}();!function(t){var e=function(){function t(e,i){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n(this,t),this.evaluationStackHeightWhenPushed=0,this.functionStartInOutputStream=0,this.currentPointer=i.copy(),this.inExpressionEvaluation=r,this.temporaryVariables=new Map,this.type=e}return r(t,[{key:"Copy",value:function(){var e=new t(this.type,this.currentPointer,this.inExpressionEvaluation);return e.temporaryVariables=new Map(this.temporaryVariables),e.evaluationStackHeightWhenPushed=this.evaluationStackHeightWhenPushed,e.functionStartInOutputStream=this.functionStartInOutputStream,e}}]),t}();t.Element=e;var i=function(){function t(){if(n(this,t),this.threadIndex=0,this.previousPointer=H.Null,this.callstack=[],arguments[0]&&arguments[1]){var i=arguments[0],r=arguments[1];this.threadIndex=parseInt(i.threadIndex);var a,s=i.callstack,o=m(s);try{for(o.s();!(a=o.n()).done;){var u=a.value,l=u,h=parseInt(l.type),c=H.Null,f=void 0,v=l.cPath;if(void 0!==v){f=v.toString();var d=r.ContentAtPath(new S(f));if(c.container=d.container,c.index=parseInt(l.idx),null==d.obj)throw new Error("When loading state, internal story location couldn't be found: "+f+". Has the story changed since this save data was created?");if(d.approximate){if(null===c.container)return P("pointer.container");r.Warning("When loading state, exact internal story location couldn't be found: '"+f+"', so it was approximated to '"+c.container.path.toString()+"' to recover. Has the story changed since this save data was created?")}}var p=!!l.exp,y=new e(h,c,p),g=l.temp;void 0!==g?y.temporaryVariables=at.JObjectToDictionaryRuntimeObjs(g):y.temporaryVariables.clear(),this.callstack.push(y)}}catch(t){o.e(t)}finally{o.f()}var k=i.previousContentObject;if(void 0!==k){var C=new S(k.toString());this.previousPointer=r.PointerAtPath(C)}}}return r(t,[{key:"Copy",value:function(){var e=new t;e.threadIndex=this.threadIndex;var n,i=m(this.callstack);try{for(i.s();!(n=i.n()).done;){var r=n.value;e.callstack.push(r.Copy())}}catch(t){i.e(t)}finally{i.f()}return e.previousPointer=this.previousPointer.copy(),e}},{key:"WriteJson",value:function(t){t.WriteObjectStart(),t.WritePropertyStart("callstack"),t.WriteArrayStart();var e,n=m(this.callstack);try{for(n.s();!(e=n.n()).done;){var i=e.value;if(t.WriteObjectStart(),!i.currentPointer.isNull){if(null===i.currentPointer.container)return P("el.currentPointer.container");t.WriteProperty("cPath",i.currentPointer.container.path.componentsString),t.WriteIntProperty("idx",i.currentPointer.index)}t.WriteProperty("exp",i.inExpressionEvaluation),t.WriteIntProperty("type",i.type),i.temporaryVariables.size>0&&(t.WritePropertyStart("temp"),at.WriteDictionaryRuntimeObjs(t,i.temporaryVariables),t.WritePropertyEnd()),t.WriteObjectEnd()}}catch(t){n.e(t)}finally{n.f()}if(t.WriteArrayEnd(),t.WritePropertyEnd(),t.WriteIntProperty("threadIndex",this.threadIndex),!this.previousPointer.isNull){var r=this.previousPointer.Resolve();if(null===r)return P("this.previousPointer.Resolve()");t.WriteProperty("previousContentObject",r.path.toString())}t.WriteObjectEnd()}}]),t}();t.Thread=i}(st||(st={}));var ot=function(){function t(e,i){n(this,t),this.variableChangedEventCallbacks=[],this.patch=null,this._batchObservingVariableChanges=!1,this._defaultGlobalVariables=new Map,this._changedVariablesForBatchObs=new Set,this._globalVariables=new Map,this._callStack=e,this._listDefsOrigin=i;try{return new Proxy(this,{get:function(t,e){return e in t?t[e]:t.$(e)},set:function(t,e,n){return e in t?t[e]=n:t.$(e,n),!0}})}catch(t){}}return r(t,[{key:"variableChangedEvent",value:function(t,e){var n,i=m(this.variableChangedEventCallbacks);try{for(i.s();!(n=i.n()).done;){(0,n.value)(t,e)}}catch(t){i.e(t)}finally{i.f()}}},{key:"batchObservingVariableChanges",get:function(){return this._batchObservingVariableChanges},set:function(t){if(this._batchObservingVariableChanges=t,t)this._changedVariablesForBatchObs=new Set;else if(null!=this._changedVariablesForBatchObs){var e,n=m(this._changedVariablesForBatchObs);try{for(n.s();!(e=n.n()).done;){var i=e.value,r=this._globalVariables.get(i);r?this.variableChangedEvent(i,r):P("currentValue")}}catch(t){n.e(t)}finally{n.f()}this._changedVariablesForBatchObs=null}}},{key:"callStack",get:function(){return this._callStack},set:function(t){this._callStack=t}},{key:"$",value:function(t,e){if(void 0===e){var n=null;return null!==this.patch&&(n=this.patch.TryGetGlobal(t,null)).exists?n.result.valueObject:(void 0===(n=this._globalVariables.get(t))&&(n=this._defaultGlobalVariables.get(t)),void 0!==n?n.valueObject:null)}if(void 0===this._defaultGlobalVariables.get(t))throw new x("Cannot assign to a variable ("+t+") that hasn't been declared in the story");var i=V.Create(e);if(null==i)throw null==e?new Error("Cannot pass null to VariableState"):new Error("Invalid value passed to VariableState: "+e.toString());this.SetGlobal(t,i)}},{key:"ApplyPatch",value:function(){if(null===this.patch)return P("this.patch");var t,e=m(this.patch.globals);try{for(e.s();!(t=e.n()).done;){var n=v(t.value,2),i=n[0],r=n[1];this._globalVariables.set(i,r)}}catch(t){e.e(t)}finally{e.f()}if(null!==this._changedVariablesForBatchObs){var a,s=m(this.patch.changedVariables);try{for(s.s();!(a=s.n()).done;){var o=a.value;this._changedVariablesForBatchObs.add(o)}}catch(t){s.e(t)}finally{s.f()}}this.patch=null}},{key:"SetJsonToken",value:function(t){this._globalVariables.clear();var e,n=m(this._defaultGlobalVariables);try{for(n.s();!(e=n.n()).done;){var i=v(e.value,2),r=i[0],a=i[1],s=t[r];if(void 0!==s){var o=at.JTokenToRuntimeObject(s);if(null===o)return P("tokenInkObject");this._globalVariables.set(r,o)}else this._globalVariables.set(r,a)}}catch(t){n.e(t)}finally{n.f()}}},{key:"WriteJson",value:function(e){e.WriteObjectStart();var n,i=m(this._globalVariables);try{for(i.s();!(n=i.n()).done;){var r=v(n.value,2),a=r[0],s=r[1],o=a,u=s;if(t.dontSaveDefaultValues&&this._defaultGlobalVariables.has(o)){var l=this._defaultGlobalVariables.get(o);if(this.RuntimeObjectsEqual(u,l))continue}e.WritePropertyStart(o),at.WriteRuntimeObject(e,u),e.WritePropertyEnd()}}catch(t){i.e(t)}finally{i.f()}e.WriteObjectEnd()}},{key:"RuntimeObjectsEqual",value:function(t,e){if(null===t)return P("obj1");if(null===e)return P("obj2");if(t.constructor!==e.constructor)return!1;var n=k(t,L);if(null!==n)return n.value===C(e,L).value;var i=k(t,R);if(null!==i)return i.value===C(e,R).value;var r=k(t,j);if(null!==r)return r.value===C(e,j).value;var a=k(t,V),s=k(e,V);if(null!==a&&null!==s)return w(a.valueObject)&&w(s.valueObject)?a.valueObject.Equals(s.valueObject):a.valueObject===s.valueObject;throw new Error("FastRoughDefinitelyEquals: Unsupported runtime object type: "+t.constructor.name)}},{key:"GetVariableWithName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=this.GetRawVariableWithName(t,e),i=k(n,G);return null!==i&&(n=this.ValueAtVariablePointer(i)),n}},{key:"TryGetDefaultVariableValue",value:function(t){var e=F(this._defaultGlobalVariables,t,null);return e.exists?e.result:null}},{key:"GlobalVariableExistsWithName",value:function(t){return this._globalVariables.has(t)||null!==this._defaultGlobalVariables&&this._defaultGlobalVariables.has(t)}},{key:"GetRawVariableWithName",value:function(t,e){if(0==e||-1==e){var n=null;if(null!==this.patch&&(n=this.patch.TryGetGlobal(t,null)).exists)return n.result;if((n=F(this._globalVariables,t,null)).exists)return n.result;if(null!==this._defaultGlobalVariables&&(n=F(this._defaultGlobalVariables,t,null)).exists)return n.result;if(null===this._listDefsOrigin)return P("VariablesState._listDefsOrigin");var i=this._listDefsOrigin.FindSingleItemListWithName(t);if(i)return i}return this._callStack.GetTemporaryVariableWithName(t,e)}},{key:"ValueAtVariablePointer",value:function(t){return this.GetVariableWithName(t.variableName,t.contextIndex)}},{key:"Assign",value:function(t,e){var n=t.variableName;if(null===n)return P("name");var i=-1,r=!1;if(r=t.isNewDeclaration?t.isGlobal:this.GlobalVariableExistsWithName(n),t.isNewDeclaration){var a=k(e,G);if(null!==a)e=this.ResolveVariablePointer(a)}else{var s=null;do{null!=(s=k(this.GetRawVariableWithName(n,i),G))&&(n=s.variableName,r=0==(i=s.contextIndex))}while(null!=s)}r?this.SetGlobal(n,e):this._callStack.SetTemporaryVariable(n,e,t.isNewDeclaration,i)}},{key:"SnapshotDefaultGlobals",value:function(){this._defaultGlobalVariables=new Map(this._globalVariables)}},{key:"RetainListOriginsForAssignment",value:function(t,e){var n=C(t,M),i=C(e,M);n.value&&i.value&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames)}},{key:"SetGlobal",value:function(t,e){var n=null;if(null===this.patch&&(n=F(this._globalVariables,t,null)),null!==this.patch&&((n=this.patch.TryGetGlobal(t,null)).exists||(n=F(this._globalVariables,t,null))),M.RetainListOriginsForAssignment(n.result,e),null===t)return P("variableName");if(null!==this.patch?this.patch.SetGlobal(t,e):this._globalVariables.set(t,e),null!==this.variableChangedEvent&&null!==n&&e!==n.result)if(this.batchObservingVariableChanges){if(null===this._changedVariablesForBatchObs)return P("this._changedVariablesForBatchObs");null!==this.patch?this.patch.AddChangedVariable(t):null!==this._changedVariablesForBatchObs&&this._changedVariablesForBatchObs.add(t)}else this.variableChangedEvent(t,e)}},{key:"ResolveVariablePointer",value:function(t){var e=t.contextIndex;-1==e&&(e=this.GetContextIndexOfVariableNamed(t.variableName));var n=k(this.GetRawVariableWithName(t.variableName,e),G);return null!=n?n:new G(t.variableName,e)}},{key:"GetContextIndexOfVariableNamed",value:function(t){return this.GlobalVariableExistsWithName(t)?0:this._callStack.currentElementIndex}},{key:"ObserveVariableChange",value:function(t){this.variableChangedEventCallbacks.push(t)}}]),t}();ot.dontSaveDefaultValues=!0;var ut=function(){function t(e){n(this,t),this.seed=e%2147483647,this.seed<=0&&(this.seed+=2147483646)}return r(t,[{key:"next",value:function(){return this.seed=16807*this.seed%2147483647}},{key:"nextFloat",value:function(){return(this.next()-1)/2147483646}}]),t}(),lt=function(){function t(){if(n(this,t),this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map,1===arguments.length&&null!==arguments[0]){var e=arguments[0];this._globals=new Map(e._globals),this._changedVariables=new Set(e._changedVariables),this._visitCounts=new Map(e._visitCounts),this._turnIndices=new Map(e._turnIndices)}else this._globals=new Map,this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map}return r(t,[{key:"globals",get:function(){return this._globals}},{key:"changedVariables",get:function(){return this._changedVariables}},{key:"visitCounts",get:function(){return this._visitCounts}},{key:"turnIndices",get:function(){return this._turnIndices}},{key:"TryGetGlobal",value:function(t,e){return null!==t&&this._globals.has(t)?{result:this._globals.get(t),exists:!0}:{result:e,exists:!1}}},{key:"SetGlobal",value:function(t,e){this._globals.set(t,e)}},{key:"AddChangedVariable",value:function(t){return this._changedVariables.add(t)}},{key:"TryGetVisitCount",value:function(t,e){return this._visitCounts.has(t)?{result:this._visitCounts.get(t),exists:!0}:{result:e,exists:!1}}},{key:"SetVisitCount",value:function(t,e){this._visitCounts.set(t,e)}},{key:"SetTurnIndex",value:function(t,e){this._turnIndices.set(t,e)}},{key:"TryGetTurnIndex",value:function(t,e){return this._turnIndices.has(t)?{result:this._turnIndices.get(t),exists:!0}:{result:e,exists:!1}}}]),t}(),ht=function(){function t(){n(this,t)}return r(t,null,[{key:"TextToDictionary",value:function(e){return new t.Reader(e).ToDictionary()}},{key:"TextToArray",value:function(e){return new t.Reader(e).ToArray()}}]),t}();!function(t){var e=function(){function t(e){n(this,t),this._rootObject=JSON.parse(e)}return r(t,[{key:"ToDictionary",value:function(){return this._rootObject}},{key:"ToArray",value:function(){return this._rootObject}}]),t}();t.Reader=e;var i=function(){function e(){n(this,e),this._currentPropertyName=null,this._currentString=null,this._stateStack=[],this._collectionStack=[],this._propertyNameStack=[],this._jsonObject=null}return r(e,[{key:"WriteObject",value:function(t){this.WriteObjectStart(),t(this),this.WriteObjectEnd()}},{key:"WriteObjectStart",value:function(){this.StartNewObject(!0);var e={};if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);var n=this._propertyNameStack.pop();this.currentCollection[n]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Object))}},{key:"WriteObjectEnd",value:function(){this.Assert(this.state===t.Writer.State.Object),this._collectionStack.pop(),this._stateStack.pop()}},{key:"WriteProperty",value:function(t,e){if(this.WritePropertyStart(t),arguments[1]instanceof Function){var n=arguments[1];n(this)}else{var i=arguments[1];this.Write(i)}this.WritePropertyEnd()}},{key:"WriteIntProperty",value:function(t,e){this.WritePropertyStart(t),this.WriteInt(e),this.WritePropertyEnd()}},{key:"WriteFloatProperty",value:function(t,e){this.WritePropertyStart(t),this.WriteFloat(e),this.WritePropertyEnd()}},{key:"WritePropertyStart",value:function(e){this.Assert(this.state===t.Writer.State.Object),this._propertyNameStack.push(e),this.IncrementChildCount(),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property))}},{key:"WritePropertyEnd",value:function(){this.Assert(this.state===t.Writer.State.Property),this.Assert(1===this.childCount),this._stateStack.pop()}},{key:"WritePropertyNameStart",value:function(){this.Assert(this.state===t.Writer.State.Object),this.IncrementChildCount(),this._currentPropertyName="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property)),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.PropertyName))}},{key:"WritePropertyNameEnd",value:function(){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._propertyNameStack.push(this._currentPropertyName),this._currentPropertyName=null,this._stateStack.pop()}},{key:"WritePropertyNameInner",value:function(e){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._currentPropertyName+=e}},{key:"WriteArrayStart",value:function(){this.StartNewObject(!0);var e=[];if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);var n=this._propertyNameStack.pop();this.currentCollection[n]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Array))}},{key:"WriteArrayEnd",value:function(){this.Assert(this.state===t.Writer.State.Array),this._collectionStack.pop(),this._stateStack.pop()}},{key:"Write",value:function(t){null!==t?(this.StartNewObject(!1),this._addToCurrentObject(t)):console.error("Warning: trying to write a null string")}},{key:"WriteBool",value:function(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(t))}},{key:"WriteInt",value:function(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(Math.floor(t)))}},{key:"WriteFloat",value:function(t){null!==t&&(this.StartNewObject(!1),t==Number.POSITIVE_INFINITY?this._addToCurrentObject(34e37):t==Number.NEGATIVE_INFINITY?this._addToCurrentObject(-34e37):isNaN(t)?this._addToCurrentObject(0):this._addToCurrentObject(t))}},{key:"WriteNull",value:function(){this.StartNewObject(!1),this._addToCurrentObject(null)}},{key:"WriteStringStart",value:function(){this.StartNewObject(!1),this._currentString="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.String))}},{key:"WriteStringEnd",value:function(){this.Assert(this.state==t.Writer.State.String),this._stateStack.pop(),this._addToCurrentObject(this._currentString),this._currentString=null}},{key:"WriteStringInner",value:function(e){this.Assert(this.state===t.Writer.State.String),null!==e?this._currentString+=e:console.error("Warning: trying to write a null string")}},{key:"ToString",value:function(){return null===this._jsonObject?"":JSON.stringify(this._jsonObject)}},{key:"StartNewObject",value:function(e){e?this.Assert(this.state===t.Writer.State.None||this.state===t.Writer.State.Property||this.state===t.Writer.State.Array):this.Assert(this.state===t.Writer.State.Property||this.state===t.Writer.State.Array),this.state===t.Writer.State.Property&&this.Assert(0===this.childCount),this.state!==t.Writer.State.Array&&this.state!==t.Writer.State.Property||this.IncrementChildCount()}},{key:"state",get:function(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].type:t.Writer.State.None}},{key:"childCount",get:function(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].childCount:0}},{key:"currentCollection",get:function(){return this._collectionStack.length>0?this._collectionStack[this._collectionStack.length-1]:null}},{key:"currentPropertyName",get:function(){return this._propertyNameStack.length>0?this._propertyNameStack[this._propertyNameStack.length-1]:null}},{key:"IncrementChildCount",value:function(){this.Assert(this._stateStack.length>0);var t=this._stateStack.pop();t.childCount++,this._stateStack.push(t)}},{key:"Assert",value:function(t){if(!t)throw Error("Assert failed while writing JSON")}},{key:"_addToCurrentObject",value:function(e){this.Assert(null!==this.currentCollection),this.state===t.Writer.State.Array?(this.Assert(Array.isArray(this.currentCollection)),this.currentCollection.push(e)):this.state===t.Writer.State.Property&&(this.Assert(!Array.isArray(this.currentCollection)),this.Assert(null!==this.currentPropertyName),this.currentCollection[this.currentPropertyName]=e,this._propertyNameStack.pop())}}]),e}();t.Writer=i,function(e){var i;(i=e.State||(e.State={}))[i.None=0]="None",i[i.Object=1]="Object",i[i.Array=2]="Array",i[i.Property=3]="Property",i[i.PropertyName=4]="PropertyName",i[i.String=5]="String";e.StateElement=function e(i){n(this,e),this.type=t.Writer.State.None,this.childCount=0,this.type=i}}(i=t.Writer||(t.Writer={}))}(ht||(ht={}));var ct,ft,vt,dt=function(){function t(){n(this,t);var e=arguments[0],i=arguments[1];if(this.name=e,this.callStack=new st(i),arguments[2]){var r=arguments[2];this.callStack.SetJsonToken(r.callstack,i),this.outputStream=at.JArrayToRuntimeObjList(r.outputStream),this.currentChoices=at.JArrayToRuntimeObjList(r.currentChoices);var a=r.choiceThreads;void 0!==a&&this.LoadFlowChoiceThreads(a,i)}else this.outputStream=[],this.currentChoices=[]}return r(t,[{key:"WriteJson",value:function(t){var e=this;t.WriteObjectStart(),t.WriteProperty("callstack",(function(t){return e.callStack.WriteJson(t)})),t.WriteProperty("outputStream",(function(t){return at.WriteListRuntimeObjs(t,e.outputStream)}));var n,i=!1,r=m(this.currentChoices);try{for(r.s();!(n=r.n()).done;){var a=n.value;if(null===a.threadAtGeneration)return P("c.threadAtGeneration");a.originalThreadIndex=a.threadAtGeneration.threadIndex,null===this.callStack.ThreadWithIndex(a.originalThreadIndex)&&(i||(i=!0,t.WritePropertyStart("choiceThreads"),t.WriteObjectStart()),t.WritePropertyStart(a.originalThreadIndex),a.threadAtGeneration.WriteJson(t),t.WritePropertyEnd())}}catch(t){r.e(t)}finally{r.f()}i&&(t.WriteObjectEnd(),t.WritePropertyEnd()),t.WriteProperty("currentChoices",(function(t){t.WriteArrayStart();var n,i=m(e.currentChoices);try{for(i.s();!(n=i.n()).done;){var r=n.value;at.WriteChoice(t,r)}}catch(t){i.e(t)}finally{i.f()}t.WriteArrayEnd()})),t.WriteObjectEnd()}},{key:"LoadFlowChoiceThreads",value:function(t,e){var n,i=m(this.currentChoices);try{for(i.s();!(n=i.n()).done;){var r=n.value,a=this.callStack.ThreadWithIndex(r.originalThreadIndex);if(null!==a)r.threadAtGeneration=a.Copy();else{var s=t["".concat(r.originalThreadIndex)];r.threadAtGeneration=new st.Thread(s,e)}}}catch(t){i.e(t)}finally{i.f()}}}]),t}(),pt=function(){function e(t){n(this,e),this.kInkSaveStateVersion=9,this.kMinCompatibleLoadVersion=8,this.onDidLoadState=null,this._currentErrors=null,this._currentWarnings=null,this.divertedPointer=H.Null,this._currentTurnIndex=0,this.storySeed=0,this.previousRandom=0,this.didSafeExit=!1,this._currentText=null,this._currentTags=null,this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0,this._patch=null,this._namedFlows=null,this.kDefaultFlowName="DEFAULT_FLOW",this.story=t,this._currentFlow=new dt(this.kDefaultFlowName,t),this.OutputStreamDirty(),this._evaluationStack=[],this._variablesState=new ot(this.callStack,t.listDefinitions),this._visitCounts=new Map,this._turnIndices=new Map,this.currentTurnIndex=-1;var i=(new Date).getTime();this.storySeed=new ut(i).next()%100,this.previousRandom=0,this.GoToStart()}return r(e,[{key:"ToJson",value:function(){var t=new ht.Writer;return this.WriteJson(t),t.ToString()}},{key:"toJson",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.ToJson(t)}},{key:"LoadJson",value:function(t){var e=ht.TextToDictionary(t);this.LoadJsonObj(e),null!==this.onDidLoadState&&this.onDidLoadState()}},{key:"VisitCountAtPathString",value:function(t){var e;if(null!==this._patch){var n=this.story.ContentAtPath(new S(t)).container;if(null===n)throw new Error("Content at path not found: "+t);if((e=this._patch.TryGetVisitCount(n,0)).exists)return e.result}return(e=F(this._visitCounts,t,null)).exists?e.result:0}},{key:"VisitCountForContainer",value:function(t){if(null===t)return P("container");if(!t.visitsShouldBeCounted)return this.story.Error("Read count for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;if(null!==this._patch){var e=this._patch.TryGetVisitCount(t,0);if(e.exists)return e.result}var n=t.path.toString(),i=F(this._visitCounts,n,null);return i.exists?i.result:0}},{key:"IncrementVisitCountForContainer",value:function(t){if(null!==this._patch){var e=this.VisitCountForContainer(t);return e++,void this._patch.SetVisitCount(t,e)}var n=t.path.toString(),i=F(this._visitCounts,n,null);i.exists?this._visitCounts.set(n,i.result+1):this._visitCounts.set(n,1)}},{key:"RecordTurnIndexVisitToContainer",value:function(t){if(null===this._patch){var e=t.path.toString();this._turnIndices.set(e,this.currentTurnIndex)}else this._patch.SetTurnIndex(t,this.currentTurnIndex)}},{key:"TurnsSinceForContainer",value:function(t){if(t.turnIndexShouldBeCounted||this.story.Error("TURNS_SINCE() for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),null!==this._patch){var e=this._patch.TryGetTurnIndex(t,0);if(e.exists)return this.currentTurnIndex-e.result}var n=t.path.toString(),i=F(this._turnIndices,n,0);return i.exists?this.currentTurnIndex-i.result:-1}},{key:"callstackDepth",get:function(){return this.callStack.depth}},{key:"outputStream",get:function(){return this._currentFlow.outputStream}},{key:"currentChoices",get:function(){return this.canContinue?[]:this._currentFlow.currentChoices}},{key:"generatedChoices",get:function(){return this._currentFlow.currentChoices}},{key:"currentErrors",get:function(){return this._currentErrors}},{key:"currentWarnings",get:function(){return this._currentWarnings}},{key:"variablesState",get:function(){return this._variablesState},set:function(t){this._variablesState=t}},{key:"callStack",get:function(){return this._currentFlow.callStack}},{key:"evaluationStack",get:function(){return this._evaluationStack}},{key:"currentTurnIndex",get:function(){return this._currentTurnIndex},set:function(t){this._currentTurnIndex=t}},{key:"currentPathString",get:function(){var t=this.currentPointer;return t.isNull?null:null===t.path?P("pointer.path"):t.path.toString()}},{key:"currentPointer",get:function(){return this.callStack.currentElement.currentPointer.copy()},set:function(t){this.callStack.currentElement.currentPointer=t.copy()}},{key:"previousPointer",get:function(){return this.callStack.currentThread.previousPointer.copy()},set:function(t){this.callStack.currentThread.previousPointer=t.copy()}},{key:"canContinue",get:function(){return!this.currentPointer.isNull&&!this.hasError}},{key:"hasError",get:function(){return null!=this.currentErrors&&this.currentErrors.length>0}},{key:"hasWarning",get:function(){return null!=this.currentWarnings&&this.currentWarnings.length>0}},{key:"currentText",get:function(){if(this._outputStreamTextDirty){var t,e=new N,n=m(this.outputStream);try{for(n.s();!(t=n.n()).done;){var i=k(t.value,D);null!==i&&e.Append(i.value)}}catch(t){n.e(t)}finally{n.f()}this._currentText=this.CleanOutputWhitespace(e.toString()),this._outputStreamTextDirty=!1}return this._currentText}},{key:"CleanOutputWhitespace",value:function(t){for(var e=new N,n=-1,i=0,r=0;r0&&n!=i&&e.Append(" "),n=-1),"\n"==a&&(i=r+1),s||e.Append(a)}return e.toString()}},{key:"currentTags",get:function(){if(this._outputStreamTagsDirty){this._currentTags=[];var t,e=m(this.outputStream);try{for(e.s();!(t=e.n()).done;){var n=k(t.value,et);null!==n&&this._currentTags.push(n.text)}}catch(t){e.e(t)}finally{e.f()}this._outputStreamTagsDirty=!1}return this._currentTags}},{key:"currentFlowName",get:function(){return this._currentFlow.name}},{key:"inExpressionEvaluation",get:function(){return this.callStack.currentElement.inExpressionEvaluation},set:function(t){this.callStack.currentElement.inExpressionEvaluation=t}},{key:"GoToStart",value:function(){this.callStack.currentElement.currentPointer=H.StartOf(this.story.mainContentContainer)}},{key:"SwitchFlow_Internal",value:function(t){if(null===t)throw new Error("Must pass a non-null string to Story.SwitchFlow");if(null===this._namedFlows&&(this._namedFlows=new Map,this._namedFlows.set(this.kDefaultFlowName,this._currentFlow)),t!==this._currentFlow.name){var e,n=F(this._namedFlows,t,null);n.exists?e=n.result:(e=new dt(t,this.story),this._namedFlows.set(t,e)),this._currentFlow=e,this.variablesState.callStack=this._currentFlow.callStack,this.OutputStreamDirty()}}},{key:"SwitchToDefaultFlow_Internal",value:function(){null!==this._namedFlows&&this.SwitchFlow_Internal(this.kDefaultFlowName)}},{key:"RemoveFlow_Internal",value:function(t){if(null===t)throw new Error("Must pass a non-null string to Story.DestroyFlow");if(t===this.kDefaultFlowName)throw new Error("Cannot destroy default flow");if(this._currentFlow.name===t&&this.SwitchToDefaultFlow_Internal(),null===this._namedFlows)return P("this._namedFlows");this._namedFlows.delete(t)}},{key:"CopyAndStartPatching",value:function(){var t,n,i,r,a,s=new e(this.story);if(s._patch=new lt(this._patch),s._currentFlow.name=this._currentFlow.name,s._currentFlow.callStack=new st(this._currentFlow.callStack),(t=s._currentFlow.currentChoices).push.apply(t,d(this._currentFlow.currentChoices)),(n=s._currentFlow.outputStream).push.apply(n,d(this._currentFlow.outputStream)),s.OutputStreamDirty(),null!==this._namedFlows){s._namedFlows=new Map;var o,u=m(this._namedFlows);try{for(u.s();!(o=u.n()).done;){var l=v(o.value,2),h=l[0],c=l[1];s._namedFlows.set(h,c)}}catch(t){u.e(t)}finally{u.f()}s._namedFlows.set(this._currentFlow.name,s._currentFlow)}this.hasError&&(s._currentErrors=[],(r=s._currentErrors).push.apply(r,d(this.currentErrors||[])));this.hasWarning&&(s._currentWarnings=[],(a=s._currentWarnings).push.apply(a,d(this.currentWarnings||[])));return s.variablesState=this.variablesState,s.variablesState.callStack=s.callStack,s.variablesState.patch=s._patch,(i=s.evaluationStack).push.apply(i,d(this.evaluationStack)),this.divertedPointer.isNull||(s.divertedPointer=this.divertedPointer.copy()),s.previousPointer=this.previousPointer.copy(),s._visitCounts=this._visitCounts,s._turnIndices=this._turnIndices,s.currentTurnIndex=this.currentTurnIndex,s.storySeed=this.storySeed,s.previousRandom=this.previousRandom,s.didSafeExit=this.didSafeExit,s}},{key:"RestoreAfterPatch",value:function(){this.variablesState.callStack=this.callStack,this.variablesState.patch=this._patch}},{key:"ApplyAnyPatch",value:function(){if(null!==this._patch){this.variablesState.ApplyPatch();var t,e=m(this._patch.visitCounts);try{for(e.s();!(t=e.n()).done;){var n=v(t.value,2),i=n[0],r=n[1];this.ApplyCountChanges(i,r,!0)}}catch(t){e.e(t)}finally{e.f()}var a,s=m(this._patch.turnIndices);try{for(s.s();!(a=s.n()).done;){var o=v(a.value,2),u=o[0],l=o[1];this.ApplyCountChanges(u,l,!1)}}catch(t){s.e(t)}finally{s.f()}this._patch=null}}},{key:"ApplyCountChanges",value:function(t,e,n){(n?this._visitCounts:this._turnIndices).set(t.path.toString(),e)}},{key:"WriteJson",value:function(e){var n=this;if(e.WriteObjectStart(),e.WritePropertyStart("flows"),e.WriteObjectStart(),null!==this._namedFlows){var i,r=m(this._namedFlows);try{var a=function(){var t=v(i.value,2),n=t[0],r=t[1];e.WriteProperty(n,(function(t){return r.WriteJson(t)}))};for(r.s();!(i=r.n()).done;)a()}catch(t){r.e(t)}finally{r.f()}}else e.WriteProperty(this._currentFlow.name,(function(t){return n._currentFlow.WriteJson(t)}));if(e.WriteObjectEnd(),e.WritePropertyEnd(),e.WriteProperty("currentFlowName",this._currentFlow.name),e.WriteProperty("variablesState",(function(t){return n.variablesState.WriteJson(t)})),e.WriteProperty("evalStack",(function(t){return at.WriteListRuntimeObjs(t,n.evaluationStack)})),!this.divertedPointer.isNull){if(null===this.divertedPointer.path)return P("divertedPointer");e.WriteProperty("currentDivertTarget",this.divertedPointer.path.componentsString)}e.WriteProperty("visitCounts",(function(t){return at.WriteIntDictionary(t,n._visitCounts)})),e.WriteProperty("turnIndices",(function(t){return at.WriteIntDictionary(t,n._turnIndices)})),e.WriteIntProperty("turnIdx",this.currentTurnIndex),e.WriteIntProperty("storySeed",this.storySeed),e.WriteIntProperty("previousRandom",this.previousRandom),e.WriteIntProperty("inkSaveVersion",this.kInkSaveStateVersion),e.WriteIntProperty("inkFormatVersion",t.Story.inkVersionCurrent),e.WriteObjectEnd()}},{key:"LoadJsonObj",value:function(t){var e=t,n=e.inkSaveVersion;if(null==n)throw new Error("ink save format incorrect, can't load.");if(parseInt(n)1){var c=e.currentFlowName;this._currentFlow=this._namedFlows.get(c)}}else{this._namedFlows=null,this._currentFlow.name=this.kDefaultFlowName,this._currentFlow.callStack.SetJsonToken(e.callstackThreads,this.story),this._currentFlow.outputStream=at.JArrayToRuntimeObjList(e.outputStream),this._currentFlow.currentChoices=at.JArrayToRuntimeObjList(e.currentChoices);var f=e.choiceThreads;this._currentFlow.LoadFlowChoiceThreads(f,this.story)}this.OutputStreamDirty(),this.variablesState.SetJsonToken(e.variablesState),this.variablesState.callStack=this._currentFlow.callStack,this._evaluationStack=at.JArrayToRuntimeObjList(e.evalStack);var d=e.currentDivertTarget;if(null!=d){var p=new S(d.toString());this.divertedPointer=this.story.PointerAtPath(p)}this._visitCounts=at.JObjectToIntDictionary(e.visitCounts),this._turnIndices=at.JObjectToIntDictionary(e.turnIndices),this.currentTurnIndex=parseInt(e.turnIdx),this.storySeed=parseInt(e.storySeed),this.previousRandom=parseInt(e.previousRandom)}},{key:"ResetErrors",value:function(){this._currentErrors=null,this._currentWarnings=null}},{key:"ResetOutput",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.outputStream.length=0,null!==e&&(t=this.outputStream).push.apply(t,d(e)),this.OutputStreamDirty()}},{key:"PushToOutputStream",value:function(t){var e=k(t,D);if(null!==e){var n=this.TrySplittingHeadTailWhitespace(e);if(null!==n){var i,r=m(n);try{for(r.s();!(i=r.n()).done;){var a=i.value;this.PushToOutputStreamIndividual(a)}}catch(t){r.e(t)}finally{r.f()}return void this.OutputStreamDirty()}}this.PushToOutputStreamIndividual(t),this.OutputStreamDirty()}},{key:"PopFromOutputStream",value:function(t){this.outputStream.splice(this.outputStream.length-t,t),this.OutputStreamDirty()}},{key:"TrySplittingHeadTailWhitespace",value:function(t){var e=t.value;if(null===e)return P("single.value");for(var n=-1,i=-1,r=0;r=0;u--){var l=e[u];if("\n"!=l){if(" "==l||"\t"==l)continue;break}-1==s&&(s=u),o=u}if(-1==n&&-1==s)return null;var h=[],c=0,f=e.length;if(-1!=n){if(n>0){var v=new D(e.substring(0,n));h.push(v)}h.push(new D("\n")),c=i+1}if(-1!=s&&(f=o),f>c){var d=e.substring(c,f-c);h.push(new D(d))}if(-1!=s&&o>i&&(h.push(new D("\n")),s=0;o--){var u=this.outputStream[o],l=u instanceof z?u:null;if(null!=(u instanceof K?u:null)){s=o;break}if(null!=l&&l.commandType==z.CommandType.BeginString){o>=r&&(r=-1);break}}if(-1!=(-1!=s&&-1!=r?Math.min(r,s):-1!=s?s:r)){if(n.isNewline)i=!1;else if(n.isNonWhitespace&&(s>-1&&this.RemoveExistingGlue(),r>-1))for(var h=this.callStack.elements,c=h.length-1;c>=0;c--){var f=h[c];if(f.type!=q.Function)break;f.functionStartInOutputStream=-1}}else n.isNewline&&(!this.outputStreamEndsInNewline&&this.outputStreamContainsContent||(i=!1))}if(i){if(null===t)return P("obj");this.outputStream.push(t),this.OutputStreamDirty()}}},{key:"TrimNewlinesFromOutputStream",value:function(){for(var t=-1,e=this.outputStream.length-1;e>=0;){var n=this.outputStream[e],i=k(n,z),r=k(n,D);if(null!=i||null!=r&&r.isNonWhitespace)break;null!=r&&r.isNewline&&(t=e),e--}if(t>=0)for(e=t;e=0;t--){var e=this.outputStream[t];if(e instanceof K)this.outputStream.splice(t,1);else if(e instanceof z)break}this.OutputStreamDirty()}},{key:"outputStreamEndsInNewline",get:function(){if(this.outputStream.length>0)for(var t=this.outputStream.length-1;t>=0;t--){if(this.outputStream[t]instanceof z)break;var e=this.outputStream[t];if(e instanceof D){if(e.isNewline)return!0;if(e.isNonWhitespace)break}}return!1}},{key:"outputStreamContainsContent",get:function(){var t,e=m(this.outputStream);try{for(e.s();!(t=e.n()).done;){if(t.value instanceof D)return!0}}catch(t){e.e(t)}finally{e.f()}return!1}},{key:"inStringEvaluation",get:function(){for(var t=this.outputStream.length-1;t>=0;t--){var e=k(this.outputStream[t],z);if(e instanceof z&&e.commandType==z.CommandType.BeginString)return!0}return!1}},{key:"PushEvaluationStack",value:function(t){var e=k(t,M);if(e){var n=e.value;if(null===n)return P("rawList");if(null!=n.originNames){n.origins||(n.origins=[]),n.origins.length=0;var i,r=m(n.originNames);try{for(r.s();!(i=r.n()).done;){var a=i.value;if(null===this.story.listDefinitions)return P("StoryState.story.listDefinitions");var s=this.story.listDefinitions.TryListGetDefinition(a,null);if(null===s.result)return P("StoryState def.result");n.origins.indexOf(s.result)<0&&n.origins.push(s.result)}}catch(t){r.e(t)}finally{r.f()}}}if(null===t)return P("obj");this.evaluationStack.push(t)}},{key:"PopEvaluationStack",value:function(t){if(void 0===t)return _(this.evaluationStack.pop());if(t>this.evaluationStack.length)throw new Error("trying to pop too many objects");return _(this.evaluationStack.splice(this.evaluationStack.length-t,t))}},{key:"PeekEvaluationStack",value:function(){return this.evaluationStack[this.evaluationStack.length-1]}},{key:"ForceEnd",value:function(){this.callStack.Reset(),this._currentFlow.currentChoices.length=0,this.currentPointer=H.Null,this.previousPointer=H.Null,this.didSafeExit=!0}},{key:"TrimWhitespaceFromFunctionEnd",value:function(){g.Assert(this.callStack.currentElement.type==q.Function);var t=this.callStack.currentElement.functionStartInOutputStream;-1==t&&(t=0);for(var e=this.outputStream.length-1;e>=t;e--){var n=this.outputStream[e],i=k(n,D),r=k(n,z);if(null!=i){if(r)break;if(!i.isNewline&&!i.isInlineWhitespace)break;this.outputStream.splice(e,1),this.OutputStreamDirty()}}}},{key:"PopCallStack",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.callStack.currentElement.type==q.Function&&this.TrimWhitespaceFromFunctionEnd(),this.callStack.Pop(t)}},{key:"SetChosenPath",value:function(t,e){this._currentFlow.currentChoices.length=0;var n=this.story.PointerAtPath(t);n.isNull||-1!=n.index||(n.index=0),this.currentPointer=n,e&&this.currentTurnIndex++}},{key:"StartFunctionEvaluationFromGame",value:function(t,e){this.callStack.Push(q.FunctionEvaluationFromGame,this.evaluationStack.length),this.callStack.currentElement.currentPointer=H.StartOf(t),this.PassArgumentsToEvaluationStack(e)}},{key:"PassArgumentsToEvaluationStack",value:function(t){if(null!==t)for(var e=0;et;){var n=this.PopEvaluationStack();null===e&&(e=n)}if(this.PopCallStack(q.FunctionEvaluationFromGame),e){if(e instanceof Z)return null;var i=C(e,V);return i.valueType==W.DivertTarget?i.valueObject.toString():i.valueObject}return null}},{key:"AddError",value:function(t,e){e?(null==this._currentWarnings&&(this._currentWarnings=[]),this._currentWarnings.push(t)):(null==this._currentErrors&&(this._currentErrors=[]),this._currentErrors.push(t))}},{key:"OutputStreamDirty",value:function(){this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0}}]),e}(),yt=function(){function t(){n(this,t),this.startTime=void 0}return r(t,[{key:"ElapsedMilliseconds",get:function(){return void 0===this.startTime?0:(new Date).getTime()-this.startTime}},{key:"Start",value:function(){this.startTime=(new Date).getTime()}},{key:"Stop",value:function(){this.startTime=void 0}}]),t}();!function(t){t[t.Author=0]="Author",t[t.Warning=1]="Warning",t[t.Error=2]="Error"}(ct||(ct={})),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&t>-9007199254740992&&t<9007199254740992&&Math.floor(t)===t}),t.Story=function(t){a(s,t);var i=f(s);function s(){var t,e;n(this,s),(t=i.call(this)).inkVersionMinimumCompatible=18,t.onError=null,t.onDidContinue=null,t.onMakeChoice=null,t.onEvaluateFunction=null,t.onCompleteEvaluateFunction=null,t.onChoosePathString=null,t._prevContainers=[],t.allowExternalFunctionFallbacks=!1,t._listDefinitions=null,t._variableObservers=null,t._hasValidatedExternals=!1,t._temporaryEvaluationContainer=null,t._asyncContinueActive=!1,t._stateSnapshotAtLastNewline=null,t._sawLookaheadUnsafeFunctionAfterNewline=!1,t._recursiveContinueCount=0,t._asyncSaving=!1,t._profiler=null;var r=null,a=null;if(arguments[0]instanceof U)e=arguments[0],void 0!==arguments[1]&&(r=arguments[1]),t._mainContentContainer=e;else if("string"==typeof arguments[0]){var o=arguments[0];a=ht.TextToDictionary(o)}else a=arguments[0];if(null!=r&&(t._listDefinitions=new rt(r)),t._externals=new Map,null!==a){var u=a,l=u.inkVersion;if(null==l)throw new Error("ink version number not found. Are you sure it's a valid .ink.json file?");var h=parseInt(l);if(h>s.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(h0&&void 0!==arguments[0]?arguments[0]:0;null!=this._profiler&&this._profiler.PreContinue();var e=t>0;if(this._recursiveContinueCount++,!this._asyncContinueActive){if(this._asyncContinueActive=e,!this.canContinue)throw new Error("Can't continue - should check canContinue before calling Continue");this._state.didSafeExit=!1,this._state.ResetOutput(),1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!0)}var n=new yt;n.Start();var i=!1;this._sawLookaheadUnsafeFunctionAfterNewline=!1;do{try{i=this.ContinueSingleStep()}catch(t){if(!(t instanceof x))throw t;this.AddError(t.message,void 0,t.useEndLineNumber);break}if(i)break;if(this._asyncContinueActive&&n.ElapsedMilliseconds>t)break}while(this.canContinue);if(n.Stop(),!i&&this.canContinue||(null!==this._stateSnapshotAtLastNewline&&this.RestoreStateSnapshot(),this.canContinue||(this.state.callStack.canPopThread&&this.AddError("Thread available to pop, threads should always be flat by the end of evaluation?"),0!=this.state.generatedChoices.length||this.state.didSafeExit||null!=this._temporaryEvaluationContainer||(this.state.callStack.CanPop(q.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop(q.Function)?this.AddError("unexpectedly reached end of content. Do you need a '~ return'?"):this.state.callStack.canPop?this.AddError("unexpectedly reached end of content for unknown reason. Please debug compiler!"):this.AddError("ran out of content. Do you need a '-> DONE' or '-> END'?"))),this.state.didSafeExit=!1,this._sawLookaheadUnsafeFunctionAfterNewline=!1,1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!1),this._asyncContinueActive=!1,null!==this.onDidContinue&&this.onDidContinue()),this._recursiveContinueCount--,null!=this._profiler&&this._profiler.PostContinue(),this.state.hasError||this.state.hasWarning){if(null===this.onError){var r=new N;throw r.Append("Ink had "),this.state.hasError&&(r.Append("".concat(this.state.currentErrors.length)),r.Append(1==this.state.currentErrors.length?" error":"errors"),this.state.hasWarning&&r.Append(" and ")),this.state.hasWarning&&(r.Append("".concat(this.state.currentWarnings.length)),r.Append(1==this.state.currentWarnings.length?" warning":"warnings"),this.state.hasWarning&&r.Append(" and ")),r.Append(". It is strongly suggested that you assign an error handler to story.onError. The first issue was: "),r.Append(this.state.hasError?this.state.currentErrors[0]:this.state.currentWarnings[0]),new x(r.toString())}if(this.state.hasError){var a,s=m(this.state.currentErrors);try{for(s.s();!(a=s.n()).done;){var o=a.value;this.onError(o,ct.Error)}}catch(o){s.e(o)}finally{s.f()}}if(this.state.hasWarning){var u,l=m(this.state.currentWarnings);try{for(l.s();!(u=l.n()).done;){var h=u.value;this.onError(h,ct.Warning)}}catch(o){l.e(o)}finally{l.f()}}this.ResetErrors()}}},{key:"ContinueSingleStep",value:function(){if(null!=this._profiler&&this._profiler.PreStep(),this.Step(),null!=this._profiler&&this._profiler.PostStep(),this.canContinue||this.state.callStack.elementIsEvaluateFromGame||this.TryFollowDefaultInvisibleChoice(),null!=this._profiler&&this._profiler.PreSnapshot(),!this.state.inStringEvaluation){if(null!==this._stateSnapshotAtLastNewline){if(null===this._stateSnapshotAtLastNewline.currentTags)return P("this._stateAtLastNewline.currentTags");if(null===this.state.currentTags)return P("this.state.currentTags");var t=this.CalculateNewlineOutputStateChange(this._stateSnapshotAtLastNewline.currentText,this.state.currentText,this._stateSnapshotAtLastNewline.currentTags.length,this.state.currentTags.length);if(t==s.OutputStateChange.ExtendedBeyondNewline||this._sawLookaheadUnsafeFunctionAfterNewline)return this.RestoreStateSnapshot(),!0;t==s.OutputStateChange.NewlineRemoved&&this.DiscardSnapshot()}this.state.outputStreamEndsInNewline&&(this.canContinue?null==this._stateSnapshotAtLastNewline&&this.StateSnapshot():this.DiscardSnapshot())}return null!=this._profiler&&this._profiler.PostSnapshot(),!1}},{key:"CalculateNewlineOutputStateChange",value:function(t,e,n,i){if(null===t)return P("prevText");if(null===e)return P("currText");var r=e.length>=t.length&&"\n"==e.charAt(t.length-1);if(n==i&&t.length==e.length&&r)return s.OutputStateChange.NoChange;if(!r)return s.OutputStateChange.NewlineRemoved;if(i>n)return s.OutputStateChange.ExtendedBeyondNewline;for(var a=t.length;a0?this.Error("Failed to find content at path '"+t+"', and no approximation of it was possible."):i.approximate&&this.Warning("Failed to find content at path '"+t+"', so it was approximated to: '"+i.obj.path+"'."),e)}},{key:"StateSnapshot",value:function(){this._stateSnapshotAtLastNewline=this._state,this._state=this._state.CopyAndStartPatching()}},{key:"RestoreStateSnapshot",value:function(){null===this._stateSnapshotAtLastNewline&&P("_stateSnapshotAtLastNewline"),this._stateSnapshotAtLastNewline.RestoreAfterPatch(),this._state=this._stateSnapshotAtLastNewline,this._stateSnapshotAtLastNewline=null,this._asyncSaving||this._state.ApplyAnyPatch()}},{key:"DiscardSnapshot",value:function(){this._asyncSaving||this._state.ApplyAnyPatch(),this._stateSnapshotAtLastNewline=null}},{key:"CopyStateForBackgroundThreadSave",value:function(){if(this.IfAsyncWeCant("start saving on a background thread"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!");var t=this._state;return this._state=this._state.CopyAndStartPatching(),this._asyncSaving=!0,t}},{key:"BackgroundSaveComplete",value:function(){null===this._stateSnapshotAtLastNewline&&this._state.ApplyAnyPatch(),this._asyncSaving=!1}},{key:"Step",value:function(){var t=!0,e=this.state.currentPointer.copy();if(!e.isNull){for(var n=k(e.Resolve(),U);n&&(this.VisitContainer(n,!0),0!=n.content.length);)n=k((e=H.StartOf(n)).Resolve(),U);this.state.currentPointer=e.copy(),null!=this._profiler&&this._profiler.Step(this.state.callStack);var i=e.Resolve(),r=this.PerformLogicAndFlowControl(i);if(!this.state.currentPointer.isNull){r&&(t=!1);var a=k(i,$);if(a){var s=this.ProcessChoice(a);s&&this.state.generatedChoices.push(s),i=null,t=!1}if(i instanceof U&&(t=!1),t){var o=k(i,G);if(o&&-1==o.contextIndex){var u=this.state.callStack.ContextForVariableNamed(o.variableName);i=new G(o.variableName,u)}this.state.inExpressionEvaluation?this.state.PushEvaluationStack(i):this.state.PushToOutputStream(i)}this.NextContent();var l=k(i,z);l&&l.commandType==z.CommandType.StartThread&&this.state.callStack.PushThread()}}}},{key:"VisitContainer",value:function(t,e){t.countingAtStartOnly&&!e||(t.visitsShouldBeCounted&&this.state.IncrementVisitCountForContainer(t),t.turnIndexShouldBeCounted&&this.state.RecordTurnIndexVisitToContainer(t))}},{key:"VisitChangedContainersDueToDivert",value:function(){var t=this.state.previousPointer.copy(),e=this.state.currentPointer.copy();if(!e.isNull&&-1!=e.index){if(this._prevContainers.length=0,!t.isNull)for(var n=k(t.Resolve(),U)||k(t.container,U);n;)this._prevContainers.push(n),n=k(n.parent,U);var i=e.Resolve();if(null!=i)for(var r=k(i.parent,U),a=!0;r&&(this._prevContainers.indexOf(r)<0||r.countingAtStartOnly);){var s=r.content.length>0&&i==r.content[0]&&a;s||(a=!1),this.VisitContainer(r,s),i=r,r=k(r.parent,U)}}}},{key:"ProcessChoice",value:function(t){var e=!0;if(t.hasCondition){var n=this.state.PopEvaluationStack();this.IsTruthy(n)||(e=!1)}var i="",r="";t.hasChoiceOnlyContent&&(r=C(this.state.PopEvaluationStack(),D).value||"");t.hasStartContent&&(i=C(this.state.PopEvaluationStack(),D).value||"");t.onceOnly&&(this.state.VisitCountForContainer(t.choiceTarget)>0&&(e=!1));if(!e)return null;var a=new nt;return a.targetPath=t.pathOnChoice,a.sourcePath=t.path.toString(),a.isInvisibleDefault=t.isInvisibleDefault,a.threadAtGeneration=this.state.callStack.ForkThread(),a.text=(i+r).replace(/^[ \t]+|[ \t]+$/g,""),a}},{key:"IsTruthy",value:function(t){if(t instanceof V){var e=t;if(e instanceof B){var n=e;return this.Error("Shouldn't use a divert target (to "+n.targetPath+") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)"),!1}return e.isTruthy}return!1}},{key:"PerformLogicAndFlowControl",value:function(t){if(null==t)return!1;if(t instanceof X){var e=t;if(e.isConditional){var n=this.state.PopEvaluationStack();if(!this.IsTruthy(n))return!0}if(e.hasVariableTarget){var i=e.variableDivertName,r=this.state.variablesState.GetVariableWithName(i);if(null==r)this.Error("Tried to divert using a target from a variable that could not be found ("+i+")");else if(!(r instanceof B)){var a=k(r,R),s="Tried to divert to a target from a variable, but the variable ("+i+") didn't contain a divert target, it ";a instanceof R&&0==a.value?s+="was empty/null (the value 0).":s+="contained '"+r+"'.",this.Error(s)}var o=C(r,B);this.state.divertedPointer=this.PointerAtPath(o.targetPath)}else{if(e.isExternal)return this.CallExternalFunction(e.targetPathString,e.externalArgs),!0;this.state.divertedPointer=e.targetPointer.copy()}return e.pushesToStack&&this.state.callStack.Push(e.stackPushType,void 0,this.state.outputStream.length),this.state.divertedPointer.isNull&&!e.isExternal&&(e&&e.debugMetadata&&null!=e.debugMetadata.sourceName?this.Error("Divert target doesn't exist: "+e.debugMetadata.sourceName):this.Error("Divert resolution failed: "+e)),!0}if(t instanceof z){var u=t;switch(u.commandType){case z.CommandType.EvalStart:this.Assert(!1===this.state.inExpressionEvaluation,"Already in expression evaluation?"),this.state.inExpressionEvaluation=!0;break;case z.CommandType.EvalEnd:this.Assert(!0===this.state.inExpressionEvaluation,"Not in expression evaluation mode"),this.state.inExpressionEvaluation=!1;break;case z.CommandType.EvalOutput:if(this.state.evaluationStack.length>0){var l=this.state.PopEvaluationStack();if(!(l instanceof Z)){var h=new D(l.toString());this.state.PushToOutputStream(h)}}break;case z.CommandType.NoOp:break;case z.CommandType.Duplicate:this.state.PushEvaluationStack(this.state.PeekEvaluationStack());break;case z.CommandType.PopEvaluatedValue:this.state.PopEvaluationStack();break;case z.CommandType.PopFunction:case z.CommandType.PopTunnel:var c=u.commandType==z.CommandType.PopFunction?q.Function:q.Tunnel,f=null;if(c==q.Tunnel){var v=this.state.PopEvaluationStack();null===(f=k(v,B))&&this.Assert(v instanceof Z,"Expected void if ->-> doesn't override target")}if(this.state.TryExitFunctionEvaluationFromGame())break;if(this.state.callStack.currentElement.type==c&&this.state.callStack.canPop)this.state.PopCallStack(),f&&(this.state.divertedPointer=this.PointerAtPath(f.targetPath));else{var d=new Map;d.set(q.Function,"function return statement (~ return)"),d.set(q.Tunnel,"tunnel onwards statement (->->)");var p=d.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(p="end of flow (-> END or choice)");var y="Found "+d.get(c)+", when expected "+p;this.Error(y)}break;case z.CommandType.BeginString:this.state.PushToOutputStream(u),this.Assert(!0===this.state.inExpressionEvaluation,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=!1;break;case z.CommandType.EndString:for(var g=[],S=0,b=this.state.outputStream.length-1;b>=0;--b){var _=this.state.outputStream[b];S++;var w=k(_,z);if(w&&w.commandType==z.CommandType.BeginString)break;_ instanceof D&&g.push(_)}this.state.PopFromOutputStream(S),g=g.reverse();var T,E=new N,O=m(g);try{for(O.s();!(T=O.n()).done;){var F=T.value;E.Append(F.toString())}}catch(t){O.e(t)}finally{O.f()}this.state.inExpressionEvaluation=!0,this.state.PushEvaluationStack(new D(E.toString()));break;case z.CommandType.ChoiceCount:var W=this.state.generatedChoices.length;this.state.PushEvaluationStack(new R(W));break;case z.CommandType.Turns:this.state.PushEvaluationStack(new R(this.state.currentTurnIndex+1));break;case z.CommandType.TurnsSince:case z.CommandType.ReadCount:var L=this.state.PopEvaluationStack();if(!(L instanceof B)){var j="";L instanceof R&&(j=". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?"),this.Error("TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw "+L+j);break}var G,J=C(L,B),K=k(this.ContentAtPath(J.targetPath).correctObj,U);null!=K?G=u.commandType==z.CommandType.TurnsSince?this.state.TurnsSinceForContainer(K):this.state.VisitCountForContainer(K):(G=u.commandType==z.CommandType.TurnsSince?-1:0,this.Warning("Failed to find container for "+u.toString()+" lookup at "+J.targetPath.toString())),this.state.PushEvaluationStack(new R(G));break;case z.CommandType.Random:var $=k(this.state.PopEvaluationStack(),R),et=k(this.state.PopEvaluationStack(),R);if(null==et||et instanceof R==!1)return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(null==$||et instanceof R==!1)return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(null===$.value)return P("maxInt.value");if(null===et.value)return P("minInt.value");var nt=$.value-et.value+1;(!isFinite(nt)||nt>Number.MAX_SAFE_INTEGER)&&(nt=Number.MAX_SAFE_INTEGER,this.Error("RANDOM was called with a range that exceeds the size that ink numbers can use.")),nt<=0&&this.Error("RANDOM was called with minimum as "+et.value+" and maximum as "+$.value+". The maximum must be larger");var it=this.state.storySeed+this.state.previousRandom,rt=new ut(it).next(),at=rt%nt+et.value;this.state.PushEvaluationStack(new R(at)),this.state.previousRandom=rt;break;case z.CommandType.SeedRandom:var st=k(this.state.PopEvaluationStack(),R);if(null==st||st instanceof R==!1)return this.Error("Invalid value passed to SEED_RANDOM");if(null===st.value)return P("minInt.value");this.state.storySeed=st.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new Z);break;case z.CommandType.VisitIndex:var ot=this.state.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new R(ot));break;case z.CommandType.SequenceShuffleIndex:var lt=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new R(lt));break;case z.CommandType.StartThread:break;case z.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=!0,this.state.currentPointer=H.Null);break;case z.CommandType.End:this.state.ForceEnd();break;case z.CommandType.ListFromInt:var ht=k(this.state.PopEvaluationStack(),R),ct=C(this.state.PopEvaluationStack(),D);if(null===ht)throw new x("Passed non-integer when creating a list element from a numerical value.");var ft=null;if(null===this.listDefinitions)return P("this.listDefinitions");var vt=this.listDefinitions.TryListGetDefinition(ct.value,null);if(!vt.exists)throw new x("Failed to find LIST called "+ct.value);if(null===ht.value)return P("minInt.value");var dt=vt.result.TryGetItemWithValue(ht.value,A.Null);dt.exists&&(ft=new M(dt.result,ht.value)),null==ft&&(ft=new M),this.state.PushEvaluationStack(ft);break;case z.CommandType.ListRange:var pt=k(this.state.PopEvaluationStack(),V),yt=k(this.state.PopEvaluationStack(),V),mt=k(this.state.PopEvaluationStack(),M);if(null===mt||null===yt||null===pt)throw new x("Expected list, minimum and maximum for LIST_RANGE");if(null===mt.value)return P("targetList.value");var gt=mt.value.ListWithSubRange(yt.valueObject,pt.valueObject);this.state.PushEvaluationStack(new M(gt));break;case z.CommandType.ListRandom:var St=this.state.PopEvaluationStack();if(null===St)throw new x("Expected list for LIST_RANDOM");var kt=St.value,Ct=null;if(null===kt)throw P("list");if(0==kt.Count)Ct=new I;else{for(var bt=this.state.storySeed+this.state.previousRandom,_t=new ut(bt).next(),wt=_t%kt.Count,Tt=kt.entries(),Et=0;Et<=wt-1;Et++)Tt.next();var Pt=Tt.next().value,Ot={Key:A.fromSerializedKey(Pt[0]),Value:Pt[1]};if(null===Ot.Key.originName)return P("randomItem.Key.originName");(Ct=new I(Ot.Key.originName,this)).Add(Ot.Key,Ot.Value),this.state.previousRandom=_t}this.state.PushEvaluationStack(new M(Ct));break;default:this.Error("unhandled ControlCommand: "+u)}return!0}if(t instanceof Q){var Nt=t,At=this.state.PopEvaluationStack();return this.state.variablesState.Assign(Nt,At),!0}if(t instanceof Y){var It=t,xt=null;if(null!=It.pathForCount){var Ft=It.containerForCount,Wt=this.state.VisitCountForContainer(Ft);xt=new R(Wt)}else null==(xt=this.state.variablesState.GetVariableWithName(It.name))&&(this.Warning("Variable not found: '"+It.name+"'. 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."),xt=new R(0));return this.state.PushEvaluationStack(xt),!0}if(t instanceof tt){var Vt=t,Lt=this.state.PopEvaluationStack(Vt.numberOfParameters),Rt=Vt.Call(Lt);return this.state.PushEvaluationStack(Rt),!0}return!1}},{key:"ChoosePathString",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(this.IfAsyncWeCant("call ChoosePathString right now"),null!==this.onChoosePathString&&this.onChoosePathString(t,n),e)this.ResetCallstack();else if(this.state.callStack.currentElement.type==q.Function){var i="",r=this.state.callStack.currentElement.currentPointer.container;throw null!=r&&(i="("+r.path.toString()+") "),new Error("Story was running a function "+i+"when you called ChoosePathString("+t+") - this is almost certainly not not what you want! Full stack trace: \n"+this.state.callStack.callStackTrace)}this.state.PassArgumentsToEvaluationStack(n),this.ChoosePath(new S(t))}},{key:"IfAsyncWeCant",value:function(t){if(this._asyncContinueActive)throw new Error("Can't "+t+". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.")}},{key:"ChoosePath",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.state.SetChosenPath(t,e),this.VisitChangedContainersDueToDivert()}},{key:"ChooseChoiceIndex",value:function(t){t=t;var e=this.currentChoices;this.Assert(t>=0&&t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!==this.onEvaluateFunction&&this.onEvaluateFunction(t,e),this.IfAsyncWeCant("evaluate a function"),null==t)throw new Error("Function is null");if(""==t||""==t.trim())throw new Error("Function is empty or white space.");var i=this.KnotContainerWithName(t);if(null==i)throw new Error("Function doesn't exist: '"+t+"'");var r=[];r.push.apply(r,d(this.state.outputStream)),this._state.ResetOutput(),this.state.StartFunctionEvaluationFromGame(i,e);for(var a=new N;this.canContinue;)a.Append(this.Continue());var s=a.toString();this._state.ResetOutput(r);var o=this.state.CompleteFunctionEvaluationFromGame();return null!=this.onCompleteEvaluateFunction&&this.onCompleteEvaluateFunction(t,e,s,o),n?{returned:o,output:s}:o}},{key:"EvaluateExpression",value:function(t){var e=this.state.callStack.elements.length;this.state.callStack.Push(q.Tunnel),this._temporaryEvaluationContainer=t,this.state.GoToStart();var n=this.state.evaluationStack.length;return this.Continue(),this._temporaryEvaluationContainer=null,this.state.callStack.elements.length>e&&this.state.PopCallStack(),this.state.evaluationStack.length>n?this.state.PopEvaluationStack():null}},{key:"CallExternalFunction",value:function(t,n){if(null===t)return P("funcName");var i=this._externals.get(t),r=null,a=void 0!==i;if(!a||i.lookAheadSafe||null===this._stateSnapshotAtLastNewline){if(!a){if(this.allowExternalFunctionFallbacks)return r=this.KnotContainerWithName(t),this.Assert(null!==r,"Trying to call EXTERNAL function '"+t+"' which has not been bound, and fallback ink function could not be found."),this.state.callStack.Push(q.Function,void 0,this.state.outputStream.length),void(this.state.divertedPointer=H.StartOf(r));this.Assert(!1,"Trying to call EXTERNAL function '"+t+"' which has not been bound (and ink fallbacks disabled).")}for(var s=[],o=0;o=e.length,"External function expected "+e.length+" arguments");for(var n=[],r=0,a=t.length;r1?"s":"",i+=": '",i+=Array.from(n).join("', '"),i+="' ",i+=this.allowExternalFunctionFallbacks?", and no fallback ink function found.":" (ink fallbacks disabled)",this.Error(i)}else if(null!=t){var r,a=m(t.content);try{for(a.s();!(r=a.n()).done;){var s=r.value,o=s;null!=o&&o.hasValidName||this.ValidateExternalBindings(s,n)}}catch(t){a.e(t)}finally{a.f()}var u,l=m(t.namedContent);try{for(l.s();!(u=l.n()).done;){var h=v(u.value,2),c=h[1];this.ValidateExternalBindings(k(c,O),n)}}catch(t){l.e(t)}finally{l.f()}}else if(null!=e){var f=k(e,X);if(f&&f.isExternal){var d=f.targetPathString;if(null===d)return P("name");if(!this._externals.has(d))if(this.allowExternalFunctionFallbacks){var p=this.mainContentContainer.namedContent.has(d);p||n.add(d)}else n.add(d)}}}},{key:"ObserveVariable",value:function(t,e){if(this.IfAsyncWeCant("observe a new variable"),null===this._variableObservers&&(this._variableObservers=new Map),!this.state.variablesState.GlobalVariableExistsWithName(t))throw new Error("Cannot observe variable '"+t+"' because it wasn't declared in the ink story.");this._variableObservers.has(t)?this._variableObservers.get(t).push(e):this._variableObservers.set(t,[e])}},{key:"ObserveVariables",value:function(t,e){for(var n=0,i=t.length;n=e.container.content.length;){t=!1;var n=k(e.container.parent,U);if(n instanceof U==!1)break;var i=n.content.indexOf(e.container);if(-1==i)break;if((e=new H(n,i)).index++,t=!0,null===e.container)return P("pointer.container")}return t||(e=H.Null),this.state.callStack.currentElement.currentPointer=e.copy(),t}},{key:"TryFollowDefaultInvisibleChoice",value:function(){var t=this._state.currentChoices,e=t.filter((function(t){return t.isInvisibleDefault}));if(0==e.length||t.length>e.length)return!1;var n=e[0];return null===n.targetPath?P("choice.targetPath"):null===n.threadAtGeneration?P("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,null!==this._stateSnapshotAtLastNewline&&(this.state.callStack.currentThread=this.state.callStack.ForkThread()),this.ChoosePath(n.targetPath,!1),!0)}},{key:"NextSequenceShuffleIndex",value:function(){var t=k(this.state.PopEvaluationStack(),R);if(!(t instanceof R))return this.Error("expected number of elements in sequence for shuffle index"),0;var e=this.state.currentPointer.container;if(null===e)return P("seqContainer");if(null===t.value)return P("numElementsIntVal.value");var n=t.value,i=C(this.state.PopEvaluationStack(),R).value;if(null===i)return P("seqCount");for(var r=i/n,a=i%n,s=e.path.toString(),o=0,u=0,l=s.length;u1&&void 0!==arguments[1]&&arguments[1],n=new x(t);throw n.useEndLineNumber=e,n}},{key:"Warning",value:function(t){this.AddError(t,!0)}},{key:"AddError",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.currentDebugMetadata,r=e?"WARNING":"ERROR";if(null!=i){var a=n?i.endLineNumber:i.startLineNumber;t="RUNTIME "+r+": '"+i.fileName+"' line "+a+": "+t}else t=this.state.currentPointer.isNull?"RUNTIME "+r+": "+t:"RUNTIME "+r+": ("+this.state.currentPointer+"): "+t;this.state.AddError(t,e),e||this.state.ForceEnd()}},{key:"Assert",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==t)throw null==e&&(e="Story assert"),new Error(e+" "+this.currentDebugMetadata)}},{key:"currentDebugMetadata",get:function(){var t,e=this.state.currentPointer;if(!e.isNull&&null!==e.Resolve()&&null!==(t=e.Resolve().debugMetadata))return t;for(var n=this.state.callStack.elements.length-1;n>=0;--n)if(!(e=this.state.callStack.elements[n].currentPointer).isNull&&null!==e.Resolve()&&null!==(t=e.Resolve().debugMetadata))return t;for(var i=this.state.outputStream.length-1;i>=0;--i){if(null!==(t=this.state.outputStream[i].debugMetadata))return t}return null}},{key:"mainContentContainer",get:function(){return this._temporaryEvaluationContainer?this._temporaryEvaluationContainer:this._mainContentContainer}}]),s}(O),t.Story.inkVersionCurrent=20,ft=t.Story||(t.Story={}),(vt=ft.OutputStateChange||(ft.OutputStateChange={}))[vt.NoChange=0]="NoChange",vt[vt.ExtendedBeyondNewline=1]="ExtendedBeyondNewline",vt[vt.NewlineRemoved=2]="NewlineRemoved",t.InkList=I,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=ink.js.map