!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).inkjs={})}(this,function(s){"use strict";function O(t){return(O="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 k(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.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.Value=i&&c.Value<=r&&a.Add(c.Key,c.Value)}}catch(t){u=!0,s=t}finally{try{o||null==h.return||h.return()}finally{if(u)throw s}}return a}},{key:"Equals",value:function(t){if(t instanceof p==!1)return!1;if(t.Count!=this.Count)return!1;var e=!0,n=!1,i=void 0;try{for(var r,a=this[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var o=_(r.value,2),u=o[0];o[1];if(!t.has(u))return!1}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return!0}},{key:"toString",value:function(){for(var t=this.orderedItems,e=new bt,n=0;nt.Value)&&(t={Key:l,Value:s})}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return t}},{key:"minItem",get:function(){var t={Key:Tt.Null,Value:0},e=!0,n=!1,i=void 0;try{for(var r,a=this[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var o=_(r.value,2),u=o[0],s=o[1],l=Tt.fromSerializedKey(u);(t.Key.isNull||se.Value?1:0}),t}}]),p}(),_t=function(){function n(t){var e;return k(this,n),(e=f(this,c(n).call(this,t))).useEndLineNumber=!1,e.message=t,e.name="StoryException",e}return u(n,e(Error)),n}();function g(t,e,n){if(null===t)return{result:n,exists:!1};var i=t.get(e);return i?{result:i,exists:!0}:{result:n,exists:!1}}var E,S,C=function(){function t(){return k(this,t),f(this,c(t).apply(this,arguments))}return u(t,P),o(t,[{key:"Copy",value:function(){return Ct(t.Create(this),P)}},{key:"BadCastException",value:function(t){return new _t("Can't cast "+this.valueObject+" from "+this.valueType+" to "+t)}}],[{key:"Create",value:function(t){"boolean"==typeof t&&(t=!!t?1:0);return Number.isInteger(Number(t))?new Et(Number(t)):isNaN(t)?"string"==typeof t?new Ot(String(t)):t instanceof N?new Nt(Ct(t,N)):t instanceof wt?new Pt(Ct(t,wt)):null:new A(Number(t))}}]),t}(),xt=function(){function n(t){var e;return k(this,n),(e=f(this,c(n).call(this))).value=t,e}return u(n,C),o(n,[{key:"toString",value:function(){return null===this.value?kt("Value.value"):this.value.toString()}},{key:"valueObject",get:function(){return this.value}}]),n}(),Et=function(){function e(t){return k(this,e),f(this,c(e).call(this,t||0))}return u(e,xt),o(e,[{key:"Cast",value:function(t){if(null===this.value)return kt("Value.value");if(t==this.valueType)return this;if(t==E.Float)return new A(this.value);if(t==E.String)return new Ot(""+this.value);throw this.BadCastException(t)}},{key:"isTruthy",get:function(){return 0!=this.value}},{key:"valueType",get:function(){return E.Int}}]),e}(),A=function(){function e(t){return k(this,e),f(this,c(e).call(this,t||0))}return u(e,xt),o(e,[{key:"Cast",value:function(t){if(null===this.value)return kt("Value.value");if(t==this.valueType)return this;if(t==E.Int)return new Et(this.value);if(t==E.String)return new Ot(""+this.value);throw this.BadCastException(t)}},{key:"isTruthy",get:function(){return 0!=this.value}},{key:"valueType",get:function(){return E.Float}}]),e}(),Ot=function(){function n(t){var e;return k(this,n),(e=f(this,c(n).call(this,t||"")))._isNewline="\n"==e.value,e._isInlineWhitespace=!0,null===e.value?f(e,kt("Value.value")):(0=this.container.content.length?null:this.container.content[this.index]}},{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 e(this.container,this.index)}},{key:"isNull",get:function(){return null==this.container}},{key:"path",get:function(){return this.isNull?null:0<=this.index?this.container.path.PathByAppendingComponent(new N.Component(this.index)):this.container.path}}],[{key:"StartOf",value:function(t){return new e(t,0)}},{key:"Null",get:function(){return new e(null,-1)}}]),e}(),Lt=function(){function n(t){var e;return k(this,n),(e=f(this,c(n).call(this)))._targetPath=null,e._targetPointer=Vt.Null,e.variableDivertName=null,e.pushesToStack=!1,e.stackPushType=0,e.isExternal=!1,e.externalArgs=0,e.isConditional=!1,e.pushesToStack=!1,void 0!==t&&(e.pushesToStack=!0,e.stackPushType=t),e}return u(n,P),o(n,[{key:"Equals",value:function(t){var e=t;return e instanceof n&&this.hasVariableTarget==e.hasVariableTarget&&(this.hasVariableTarget?this.variableDivertName==e.variableDivertName:null===this.targetPath?kt("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 bt,e=this.targetPath.toString();return t.Append("Divert"),this.isConditional&&t.Append("?"),this.pushesToStack&&(this.stackPushType==It.Function?t.Append(" function"):t.Append(" tunnel")),t.Append(" -> "),t.Append(this.targetPathString),t.Append(" ("),t.Append(e),t.Append(")"),t.toString()}},{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=Vt.Null}},{key:"targetPointer",get:function(){if(this._targetPointer.isNull){var t=this.ResolvePath(this._targetPath).obj;if(null===this._targetPath)return kt("this._targetPath");if(null===this._targetPath.lastComponent)return kt("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(null===t)return kt("targetObj");this._targetPointer.container=t.parent instanceof At?t.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index}else this._targetPointer=Vt.StartOf(t instanceof At?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 N(t)}},{key:"hasVariableTarget",get:function(){return null!=this.variableDivertName}}]),n}(),D=function(){function n(){var t,e=!(0 "+this.pathOnChoice.toString()}},{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?kt("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}},{key:"pathStringOnChoice",get:function(){return null===this.pathOnChoice?kt("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)},set:function(t){this.pathOnChoice=new N(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=0<(1&t),this.hasStartContent=0<(2&t),this.hasChoiceOnlyContent=0<(4&t),this.isInvisibleDefault=0<(8&t),this.onceOnly=0<(16&t)}}]),n}(),Rt=function(){function n(){var t,e=0e&&(e=s.valueType),s.valueType==E.List&&(n=St(s,Pt))}}catch(t){r=!0,a=t}finally{try{i||null==u.return||u.return()}finally{if(r)throw a}}var l=[];if(E[e]==E[E.List]){var h=!0,c=!1,f=void 0;try{for(var v,d=t[Symbol.iterator]();!(h=(v=d.next()).done);h=!0){var y=Ct(v.value,xt);if(y.valueType==E.List)l.push(y);else{if(y.valueType!=E.Int)throw new _t("Cannot mix Lists and "+y.valueType+" values in this operation");var p=parseInt(y.valueObject);if(null===(n=Ct(n,Pt)).value)return kt("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");var m=n.value.originOfMaxItem;if(null===m)return kt("NativeFunctionCall.CoerceValuesToSingleType list");var g=m.TryGetItemWithValue(p,Tt.Null);if(!g.exists)throw new _t("Could not find List item with the value "+p+" in "+m.name);var S=new Pt(g.result,p);l.push(S)}}}catch(t){c=!0,f=t}finally{try{h||null==d.return||d.return()}finally{if(c)throw f}}}else{var C=!0,k=!1,b=void 0;try{for(var T,w=t[Symbol.iterator]();!(C=(T=w.next()).done);C=!0){var _=Ct(T.value,xt).Cast(e);l.push(_)}}catch(t){k=!0,b=t}finally{try{C||null==w.return||w.return()}finally{if(k)throw b}}}return l}},{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:"name",get:function(){return null===this._name?kt("NativeFunctionCall._name"):this._name},set:function(t){this._name=t,this._isPrototype||(null===a._nativeFunctions?kt("NativeFunctionCall._nativeFunctions"):this._prototype=a._nativeFunctions.get(this._name)||null)}},{key:"numberOfParameters",get:function(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters},set:function(t){this._numberOfParameters=t}}],[{key:"CallWithName",value:function(t){return new a(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.round(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?1:0}),this.AddIntBinaryOp(this.Greater,function(t,e){return e"==e)return new R;for(var i=0;i->"==e)return Ft.PopTunnel();if("~ret"==e)return Ft.PopFunction();if("void"==e)return new Mt}if("object"===O(t)&&!Array.isArray(t)){var r,a=t;if(a["^->"])return r=a["^->"],new Nt(new N(r.toString()));if(a["^var"]){r=a["^var"];var o=new I(r.toString());return"ci"in a&&(r=a.ci,o.contextIndex=parseInt(r)),o}var u=!1,s=!1,l=It.Function,h=!1;if((r=a["->"])?u=!0:(r=a["f()"])?(s=u=!0,l=It.Function):(r=a["->t->"])?(s=u=!0,l=It.Tunnel):(r=a["x()"])&&(s=!(h=u=!0),l=It.Function),u){var c=new Lt;c.pushesToStack=s,c.stackPushType=l,c.isExternal=h;var f=r.toString();return(r=a.var)?c.variableDivertName=f:c.targetPathString=f,c.isConditional=!!a.c,h&&(r=a.exArgs)&&(c.externalArgs=parseInt(r)),c}if(r=a["*"]){var v=new D;return v.pathStringOnChoice=r.toString(),(r=a.flg)&&(v.flags=parseInt(r)),v}if(r=a["VAR?"])return new Rt(r.toString());if(r=a["CNT?"]){var d=new Rt;return d.pathStringForCount=r.toString(),d}var y=!1,p=!1;if((r=a["VAR="])?p=y=!0:(r=a["temp="])&&(p=!(y=!0)),y){var m=r.toString(),g=!a.re,S=new Dt(m,g);return S.isGlobal=p,S}if(void 0!==a["#"])return r=a["#"],new M(r.toString());if(r=a.list){var C=r,k=new wt;if(r=a.origins){var b=r;k.SetInitialOriginNames(b)}for(var T in C)if(C.hasOwnProperty(T)){var w=C[T],_=new Tt(T),x=parseInt(w);k.Add(_,x)}return new Pt(k)}if(null!=a.originalChoicePath)return this.JObjectToChoice(a)}if(Array.isArray(t))return this.JArrayToContainer(t);if(null==t)return null;throw new Error("Failed to convert token to runtime object: "+JSON.stringify(t))}},{key:"RuntimeObjectToJToken",value:function(t){var e=St(t,At);if(e)return this.ContainerToJArray(e);var n=St(t,Lt);if(n){var i,r="->";n.isExternal?r="x()":n.pushesToStack&&(n.stackPushType==It.Function?r="f()":n.stackPushType==It.Tunnel&&(r="->t->")),i=n.hasVariableTarget?n.variableDivertName:n.targetPathString;var a={};return a[r]=i,n.hasVariableTarget&&(a.var=!0),n.isConditional&&(a.c=!0),0"]=f.value.componentsString,v)}var d=St(t,I);if(d){var y={};return y["^var"]=d.value,y.ci=d.contextIndex,y}if(St(t,R))return"<>";var p=St(t,Ft);if(p)return E._controlCommandNames[p.commandType];var m=St(t,Gt);if(m){var g=m.name;return"^"==g&&(g="L^"),g}var S=St(t,Rt);if(S){var C={},k=S.pathStringForCount;return null!=k?C["CNT?"]=k:C["VAR?"]=S.name,C}var b=St(t,Dt);if(b){var T={};return T[b.isGlobal?"VAR=":"temp="]=b.variableName,b.isNewDeclaration||(T.re=!0),T}if(St(t,Mt))return"void";var w=St(t,M);if(w){var _={};return _["#"]=w.text,_}var x=St(t,G);if(x)return this.ChoiceToJObject(x);throw new Error("Failed to convert runtime object to Json token: "+t)}},{key:"ContainerToJArray",value:function(t){var e=this.ListToJArray(t.content),n=t.namedOnlyContent,i=t.countFlags;if(null!=n&&0->",t[Ft.CommandType.BeginString]="str",t[Ft.CommandType.EndString]="/str",t[Ft.CommandType.NoOp]="nop",t[Ft.CommandType.ChoiceCount]="choiceCnt",t[Ft.CommandType.Turns]="turn",t[Ft.CommandType.TurnsSince]="turns",t[Ft.CommandType.ReadCount]="readc",t[Ft.CommandType.Random]="rnd",t[Ft.CommandType.SeedRandom]="srnd",t[Ft.CommandType.VisitIndex]="visit",t[Ft.CommandType.SequenceShuffleIndex]="seq",t[Ft.CommandType.StartThread]="thread",t[Ft.CommandType.Done]="done",t[Ft.CommandType.End]="end",t[Ft.CommandType.ListFromInt]="listInt",t[Ft.CommandType.ListRange]="range",t[Ft.CommandType.ListRandom]="lrnd";for(var e=0;e")}}}return t.toString()}}]),h}();!function(t){var C=function(){function i(t,e){var n=2this.evaluationStack.length)throw new Error("trying to pop too many objects");return d(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._currentChoices.length=0,this.currentPointer=Vt.Null,this.previousPointer=Vt.Null,this.didSafeExit=!0}},{key:"TrimWhitespaceFromFunctionEnd",value:function(){x.Assert(this.callStack.currentElement.type==It.Function);var t=this.callStack.currentElement.functionStartInOutputStream;-1==t&&(t=0);for(var e=this._outputStream.length-1;t<=e;e--){var n=this._outputStream[e],i=St(n,Ot),r=St(n,Ft);if(null!=i){if(r)break;if(!i.isNewline&&!i.isInlineWhitespace)break;this._outputStream.splice(e,1),this.OutputStreamDirty()}}}},{key:"PopCallStack",value:function(t){var e=0t;){var n=this.PopEvaluationStack();null===e&&(e=n)}if(this.PopCallStack(It.FunctionEvaluationFromGame),e){if(e instanceof Mt)return null;var i=Ct(e,xt);return i.valueType==E.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}},{key:"callstackDepth",get:function(){return this.callStack.depth}},{key:"outputStream",get:function(){return this._outputStream}},{key:"currentChoices",get:function(){return this.canContinue?[]:this._currentChoices}},{key:"generatedChoices",get:function(){return this._currentChoices}},{key:"currentErrors",get:function(){return this._currentErrors}},{key:"currentWarnings",get:function(){return this._currentWarnings}},{key:"variablesState",get:function(){return this._variablesState}},{key:"evaluationStack",get:function(){return this._evaluationStack}},{key:"visitCounts",get:function(){return this._visitCounts}},{key:"turnIndices",get:function(){return this._turnIndices}},{key:"currentTurnIndex",get:function(){return this._currentTurnIndex}},{key:"currentPathString",get:function(){var t=this.currentPointer;return t.isNull?null:null===t.path?kt("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&&0t.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(ue)break}while(this.canContinue);i.Stop(),!r&&this.canContinue||(null!=this._stateAtLastNewline&&(this.RestoreStateSnapshot(this._stateAtLastNewline),this._stateAtLastNewline=null),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(It.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop(It.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,1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!1),this._asyncContinueActive=!1),this._recursiveContinueCount--,null!=this._profiler&&this._profiler.PostContinue()}},{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._stateAtLastNewline){if(null===this._stateAtLastNewline.currentTags)return kt("this._stateAtLastNewline.currentTags");if(null===this.state.currentTags)return kt("this.state.currentTags");var t=this.CalculateNewlineOutputStateChange(this._stateAtLastNewline.currentText,this.state.currentText,this._stateAtLastNewline.currentTags.length,this.state.currentTags.length);if(t==h.OutputStateChange.ExtendedBeyondNewline)return this.RestoreStateSnapshot(this._stateAtLastNewline),!0;t==h.OutputStateChange.NewlineRemoved&&(this._stateAtLastNewline=null)}this.state.outputStreamEndsInNewline&&(this.canContinue?null==this._stateAtLastNewline&&(this._stateAtLastNewline=this.StateSnapshot()):this._stateAtLastNewline=null)}return null!=this._profiler&&this._profiler.PostSnapshot(),!1}},{key:"CalculateNewlineOutputStateChange",value:function(t,e,n,i){if(null===t)return kt("prevText");if(null===e)return kt("currText");var r=e.length>=t.length&&"\n"==e.charAt(t.length-1);if(n==i&&t.length==e.length&&r)return h.OutputStateChange.NoChange;if(!r)return h.OutputStateChange.NewlineRemoved;if(n-> 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(It.Function,"function return statement (~ return)"),d.set(It.Tunnel,"tunnel onwards statement (->->)");var y=d.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(y="end of flow (-> END or choice)");var p="Found "+d.get(c)+", when expected "+y;this.Error(p)}break;case Ft.CommandType.BeginString:this.state.PushToOutputStream(s),this.Assert(!0===this.state.inExpressionEvaluation,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=!1;break;case Ft.CommandType.EndString:for(var m=[],g=0,S=this.state.outputStream.length-1;0<=S;--S){var C=this.state.outputStream[S];g++;var k=St(C,Ft);if(k&&k.commandType==Ft.CommandType.BeginString)break;C instanceof Ot&&m.push(C)}this.state.PopFromOutputStream(g),m=m.reverse();var b=new bt,T=!0,w=!1,_=void 0;try{for(var x,E=m[Symbol.iterator]();!(T=(x=E.next()).done);T=!0){var O=x.value;b.Append(O.toString())}}catch(t){w=!0,_=t}finally{try{T||null==E.return||E.return()}finally{if(w)throw _}}this.state.inExpressionEvaluation=!0,this.state.PushEvaluationStack(new Ot(b.toString()));break;case Ft.CommandType.ChoiceCount:var N=this.state.generatedChoices.length;this.state.PushEvaluationStack(new Et(N));break;case Ft.CommandType.Turns:this.state.PushEvaluationStack(new Et(this.state.currentTurnIndex+1));break;case Ft.CommandType.TurnsSince:case Ft.CommandType.ReadCount:var P=this.state.PopEvaluationStack();if(!(P instanceof Nt)){var A="";P instanceof Et&&(A=". 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 "+P+A);break}var I,F=Ct(P,Nt),V=St(this.ContentAtPath(F.targetPath).correctObj,At);null!=V?I=s.commandType==Ft.CommandType.TurnsSince?this.TurnsSinceForContainer(V):this.VisitCountForContainer(V):(I=s.commandType==Ft.CommandType.TurnsSince?-1:0,this.Warning("Failed to find container for "+s.toString()+" lookup at "+F.targetPath.toString())),this.state.PushEvaluationStack(new Et(I));break;case Ft.CommandType.Random:var L=St(this.state.PopEvaluationStack(),Et),R=St(this.state.PopEvaluationStack(),Et);if(null==R||R instanceof Et==!1)return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(null==L||R instanceof Et==!1)return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(null===L.value)return kt("maxInt.value");if(null===R.value)return kt("minInt.value");var D=L.value-R.value+1;D<=0&&this.Error("RANDOM was called with minimum as "+R.value+" and maximum as "+L.value+". The maximum must be larger");var M=this.state.storySeed+this.state.previousRandom,G=new Bt(M).next(),B=G%D+R.value;this.state.PushEvaluationStack(new Et(B)),this.state.previousRandom=G;break;case Ft.CommandType.SeedRandom:var j=St(this.state.PopEvaluationStack(),Et);if(null==j||j instanceof Et==!1)return this.Error("Invalid value passed to SEED_RANDOM");if(null===j.value)return kt("minInt.value");this.state.storySeed=j.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new Mt);break;case Ft.CommandType.VisitIndex:var W=this.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new Et(W));break;case Ft.CommandType.SequenceShuffleIndex:var J=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new Et(J));break;case Ft.CommandType.StartThread:break;case Ft.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=!0,this.state.currentPointer=Vt.Null);break;case Ft.CommandType.End:this.state.ForceEnd();break;case Ft.CommandType.ListFromInt:var q=St(this.state.PopEvaluationStack(),Et),K=Ct(this.state.PopEvaluationStack(),Ot);if(null===q)throw new _t("Passed non-integer when creating a list element from a numerical value.");var U=null;if(null===this.listDefinitions)return kt("this.listDefinitions");var z=this.listDefinitions.TryListGetDefinition(K.value,null);if(!z.exists)throw new _t("Failed to find LIST called "+K.value);if(null===q.value)return kt("minInt.value");var H=z.result.TryGetItemWithValue(q.value,Tt.Null);H.exists&&(U=new Pt(H.result,q.value)),null==U&&(U=new Pt),this.state.PushEvaluationStack(U);break;case Ft.CommandType.ListRange:var X=St(this.state.PopEvaluationStack(),xt),$=St(this.state.PopEvaluationStack(),xt),Q=St(this.state.PopEvaluationStack(),Pt);if(null===Q||null===$||null===X)throw new _t("Expected list, minimum and maximum for LIST_RANGE");if(null===Q.value)return kt("targetList.value");var Y=Q.value.ListWithSubRange($.valueObject,X.valueObject);this.state.PushEvaluationStack(new Pt(Y));break;case Ft.CommandType.ListRandom:var Z=this.state.PopEvaluationStack();if(null===Z)throw new _t("Expected list for LIST_RANDOM");var tt=Z.value,et=null;if(null===tt)throw kt("list");if(0==tt.Count)et=new wt;else{for(var nt=this.state.storySeed+this.state.previousRandom,it=new Bt(nt).next(),rt=it%tt.Count,at=tt.entries(),ot=0;ot<=rt-1;ot++)at.next();var ut=at.next().value,st={Key:Tt.fromSerializedKey(ut[0]),Value:ut[1]};if(null===st.Key.originName)return kt("randomItem.Key.originName");(et=new wt(st.Key.originName,this)).Add(st.Key,st.Value),this.state.previousRandom=it}this.state.PushEvaluationStack(new Pt(et));break;default:this.Error("unhandled ControlCommand: "+s)}return!0}if(t instanceof Dt){var lt=t,ht=this.state.PopEvaluationStack();return this.state.variablesState.Assign(lt,ht),!0}if(t instanceof Rt){var ct=t,ft=null;if(null!=ct.pathForCount){var vt=ct.containerForCount,dt=this.VisitCountForContainer(vt);ft=new Et(dt)}else if(null==(ft=this.state.variablesState.GetVariableWithName(ct.name))){var yt=this.state.variablesState.TryGetDefaultVariableValue(ct.name);null!=yt?(this.Warning("Variable not found in save state: '"+ct.name+"', but seems to have been newly created. Assigning value from latest ink's declaration: "+yt),ft=yt,this.state.variablesState.SetGlobal(ct.name,ft)):(this.Warning("Variable not found: '"+ct.name+"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit."),ft=new Et(0))}return this.state.PushEvaluationStack(ft),!0}if(t instanceof Gt){var pt=t,mt=this.state.PopEvaluationStack(pt.numberOfParameters),gt=pt.Call(mt);return this.state.PushEvaluationStack(gt),!0}return!1}},{key:"ChoosePathString",value:function(t,e,n){var i=!(1e&&this.state.PopCallStack(),n=r.length,"External function expected "+r.length+" arguments");for(var e=[],n=0,i=t.length;n=e.container.content.length;){t=!1;var n=St(e.container.parent,At);if(n instanceof At==!1)break;var i=n.content.indexOf(e.container);if(-1==i)break;if((e=new Vt(n,i)).index++,t=!0,null===e.container)return kt("pointer.container")}return t||(e=Vt.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?kt("choice.targetPath"):null===n.threadAtGeneration?kt("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,this.ChoosePath(n.targetPath,!1),!0)}},{key:"VisitCountForContainer",value:function(t){if(null===t)return kt("container");if(!t.visitsShouldBeCounted)return console.warn("Read count for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;var e=0,n=t.path.toString();return e=this.state.visitCounts.get(n)||e}},{key:"IncrementVisitCountForContainer",value:function(t){var e=0,n=t.path.toString();this.state.visitCounts.has(n)&&(e=this.state.visitCounts.get(n)),e++,this.state.visitCounts.set(n,e)}},{key:"RecordTurnIndexVisitToContainer",value:function(t){var e=t.path.toString();this.state.turnIndices.set(e,this.state.currentTurnIndex)}},{key:"TurnsSinceForContainer",value:function(t){t.turnIndexShouldBeCounted||this.Error("TURNS_SINCE() for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c).");var e=t.path.toString(),n=this.state.turnIndices.get(e);return void 0!==n?this.state.currentTurnIndex-n:-1}},{key:"NextSequenceShuffleIndex",value:function(){var t=St(this.state.PopEvaluationStack(),Et);if(!(t instanceof Et))return this.Error("expected number of elements in sequence for shuffle index"),0;var e=this.state.currentPointer.container;if(null===e)return kt("seqContainer");if(null===t.value)return kt("numElementsIntVal.value");var n=t.value,i=Ct(this.state.PopEvaluationStack(),Et).value;if(null===i)return kt("seqCount");for(var r=i/n,a=i%n,o=e.path.toString(),u=0,s=0,l=o.length;s