var echartsExampleTransformTs;echartsExampleTransformTs=(()=>{"use strict";var e={74:function(e,t,n){var s=this&&this.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var s=Array(e),o=0;for(t=0;t<n;t++)for(var r=arguments[t],i=0,a=r.length;i<a;i++,o++)s[o]=r[i];return s};Object.defineProperty(t,"__esModule",{value:!0}),t.Checker=t.createCheckers=void 0;var o=n(746),r=n(180),i=n(746);Object.defineProperty(t,"TArray",{enumerable:!0,get:function(){return i.TArray}}),Object.defineProperty(t,"TEnumType",{enumerable:!0,get:function(){return i.TEnumType}}),Object.defineProperty(t,"TEnumLiteral",{enumerable:!0,get:function(){return i.TEnumLiteral}}),Object.defineProperty(t,"TFunc",{enumerable:!0,get:function(){return i.TFunc}}),Object.defineProperty(t,"TIface",{enumerable:!0,get:function(){return i.TIface}}),Object.defineProperty(t,"TLiteral",{enumerable:!0,get:function(){return i.TLiteral}}),Object.defineProperty(t,"TName",{enumerable:!0,get:function(){return i.TName}}),Object.defineProperty(t,"TOptional",{enumerable:!0,get:function(){return i.TOptional}}),Object.defineProperty(t,"TParam",{enumerable:!0,get:function(){return i.TParam}}),Object.defineProperty(t,"TParamList",{enumerable:!0,get:function(){return i.TParamList}}),Object.defineProperty(t,"TProp",{enumerable:!0,get:function(){return i.TProp}}),Object.defineProperty(t,"TTuple",{enumerable:!0,get:function(){return i.TTuple}}),Object.defineProperty(t,"TType",{enumerable:!0,get:function(){return i.TType}}),Object.defineProperty(t,"TUnion",{enumerable:!0,get:function(){return i.TUnion}}),Object.defineProperty(t,"TIntersection",{enumerable:!0,get:function(){return i.TIntersection}}),Object.defineProperty(t,"array",{enumerable:!0,get:function(){return i.array}}),Object.defineProperty(t,"enumlit",{enumerable:!0,get:function(){return i.enumlit}}),Object.defineProperty(t,"enumtype",{enumerable:!0,get:function(){return i.enumtype}}),Object.defineProperty(t,"func",{enumerable:!0,get:function(){return i.func}}),Object.defineProperty(t,"iface",{enumerable:!0,get:function(){return i.iface}}),Object.defineProperty(t,"lit",{enumerable:!0,get:function(){return i.lit}}),Object.defineProperty(t,"name",{enumerable:!0,get:function(){return i.name}}),Object.defineProperty(t,"opt",{enumerable:!0,get:function(){return i.opt}}),Object.defineProperty(t,"param",{enumerable:!0,get:function(){return i.param}}),Object.defineProperty(t,"tuple",{enumerable:!0,get:function(){return i.tuple}}),Object.defineProperty(t,"union",{enumerable:!0,get:function(){return i.union}}),Object.defineProperty(t,"intersection",{enumerable:!0,get:function(){return i.intersection}}),Object.defineProperty(t,"BasicType",{enumerable:!0,get:function(){return i.BasicType}});var a=n(180);Object.defineProperty(t,"VError",{enumerable:!0,get:function(){return a.VError}}),t.createCheckers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=Object.assign.apply(Object,s([{},o.basicTypes],e)),r={},i=0,a=e;i<a.length;i++)for(var h=a[i],l=0,p=Object.keys(h);l<p.length;l++){var u=p[l];r[u]=new c(n,h[u])}return r};var c=function(){function e(e,t,n){if(void 0===n&&(n="value"),this.suite=e,this.ttype=t,this._path=n,this.props=new Map,t instanceof o.TIface)for(var s=0,r=t.props;s<r.length;s++){var i=r[s];this.props.set(i.name,i.ttype)}this.checkerPlain=this.ttype.getChecker(e,!1),this.checkerStrict=this.ttype.getChecker(e,!0)}return e.prototype.setReportedPath=function(e){this._path=e},e.prototype.check=function(e){return this._doCheck(this.checkerPlain,e)},e.prototype.test=function(e){return this.checkerPlain(e,new r.NoopContext)},e.prototype.validate=function(e){return this._doValidate(this.checkerPlain,e)},e.prototype.strictCheck=function(e){return this._doCheck(this.checkerStrict,e)},e.prototype.strictTest=function(e){return this.checkerStrict(e,new r.NoopContext)},e.prototype.strictValidate=function(e){return this._doValidate(this.checkerStrict,e)},e.prototype.getProp=function(t){var n=this.props.get(t);if(!n)throw new Error("Type has no property "+t);return new e(this.suite,n,this._path+"."+t)},e.prototype.methodArgs=function(t){var n=this._getMethod(t);return new e(this.suite,n.paramList)},e.prototype.methodResult=function(t){var n=this._getMethod(t);return new e(this.suite,n.result)},e.prototype.getArgs=function(){if(!(this.ttype instanceof o.TFunc))throw new Error("getArgs() applied to non-function");return new e(this.suite,this.ttype.paramList)},e.prototype.getResult=function(){if(!(this.ttype instanceof o.TFunc))throw new Error("getResult() applied to non-function");return new e(this.suite,this.ttype.result)},e.prototype.getType=function(){return this.ttype},e.prototype._doCheck=function(e,t){if(!e(t,new r.NoopContext)){var n=new r.DetailContext;throw e(t,n),n.getError(this._path)}},e.prototype._doValidate=function(e,t){if(e(t,new r.NoopContext))return null;var n=new r.DetailContext;return e(t,n),n.getErrorDetail(this._path)},e.prototype._getMethod=function(e){var t=this.props.get(e);if(!t)throw new Error("Type has no property "+e);if(!(t instanceof o.TFunc))throw new Error("Property "+e+" is not a method");return t},e}();t.Checker=c},746:function(e,t,n){var s,o=this&&this.__extends||(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},s(e,t)},function(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.basicTypes=t.BasicType=t.TParamList=t.TParam=t.param=t.TFunc=t.func=t.TProp=t.TOptional=t.opt=t.TIface=t.iface=t.TEnumLiteral=t.enumlit=t.TEnumType=t.enumtype=t.TIntersection=t.intersection=t.TUnion=t.union=t.TTuple=t.tuple=t.TArray=t.array=t.TLiteral=t.lit=t.TName=t.name=t.TType=void 0;var r=n(180),i=function(){};function a(e){return"string"==typeof e?h(e):e}function c(e,t){var n=e[t];if(!n)throw new Error("Unknown type "+t);return n}function h(e){return new l(e)}t.TType=i,t.name=h;var l=function(e){function t(t){var n=e.call(this)||this;return n.name=t,n._failMsg="is not a "+t,n}return o(t,e),t.prototype.getChecker=function(e,n,s){var o=this,r=c(e,this.name),i=r.getChecker(e,n,s);return r instanceof w||r instanceof t?i:function(e,t){return!!i(e,t)||t.fail(null,o._failMsg,0)}},t}(i);t.TName=l,t.lit=function(e){return new p(e)};var p=function(e){function t(t){var n=e.call(this)||this;return n.value=t,n.name=JSON.stringify(t),n._failMsg="is not "+n.name,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return e===n.value||t.fail(null,n._failMsg,-1)}},t}(i);t.TLiteral=p,t.array=function(e){return new u(a(e))};var u=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var s=0;s<e.length;s++)if(!n(e[s],t))return t.fail(s,null,1);return!0}},t}(i);t.TArray=u,t.tuple=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new f(e.map((function(e){return a(e)})))};var f=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this.ttypes.map((function(n){return n.getChecker(e,t)})),s=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var s=0;s<n.length;s++)if(!n[s](e[s],t))return t.fail(s,null,1);return!0};return t?function(e,t){return!!s(e,t)&&(e.length<=n.length||t.fail(n.length,"is extraneous",2))}:s},t}(i);t.TTuple=f,t.union=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new d(e.map((function(e){return a(e)})))};var d=function(e){function t(t){var n=e.call(this)||this;n.ttypes=t;var s=t.map((function(e){return e instanceof l||e instanceof p?e.name:null})).filter((function(e){return e})),o=t.length-s.length;return s.length?(o>0&&s.push(o+" more"),n._failMsg="is none of "+s.join(", ")):n._failMsg="is none of "+o+" types",n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this,s=this.ttypes.map((function(n){return n.getChecker(e,t)}));return function(e,t){for(var o=t.unionResolver(),r=0;r<s.length;r++)if(s[r](e,o.createContext()))return!0;return t.resolveUnion(o),t.fail(null,n._failMsg,0)}},t}(i);t.TUnion=d,t.intersection=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new m(e.map((function(e){return a(e)})))};var m=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=new Set,s=this.ttypes.map((function(s){return s.getChecker(e,t,n)}));return function(e,t){return!!s.every((function(n){return n(e,t)}))||t.fail(null,null,0)}},t}(i);t.TIntersection=m,t.enumtype=function(e){return new k(e)};var k=function(e){function t(t){var n=e.call(this)||this;return n.members=t,n.validValues=new Set,n._failMsg="is not a valid enum value",n.validValues=new Set(Object.keys(t).map((function(e){return t[e]}))),n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validValues.has(e)||t.fail(null,n._failMsg,0)}},t}(i);t.TEnumType=k,t.enumlit=function(e,t){return new _(e,t)};var _=function(e){function t(t,n){var s=e.call(this)||this;return s.enumName=t,s.prop=n,s._failMsg="is not "+t+"."+n,s}return o(t,e),t.prototype.getChecker=function(e,t){var n=this,s=c(e,this.enumName);if(!(s instanceof k))throw new Error("Type "+this.enumName+" used in enumlit is not an enum type");var o=s.members[this.prop];if(!s.members.hasOwnProperty(this.prop))throw new Error("Unknown value "+this.enumName+"."+this.prop+" used in enumlit");return function(e,t){return e===o||t.fail(null,n._failMsg,-1)}},t}(i);t.TEnumLiteral=_,t.iface=function(e,t){return new g(e,function(e){return Object.keys(e).map((function(t){return function(e,t){return t instanceof y?new x(e,t.ttype,!0):new x(e,a(t),!1)}(t,e[t])}))}(t))};var g=function(e){function t(t,n){var s=e.call(this)||this;return s.bases=t,s.props=n,s.propSet=new Set(n.map((function(e){return e.name}))),s}return o(t,e),t.prototype.getChecker=function(e,t,n){var s=this,o=this.bases.map((function(n){return c(e,n).getChecker(e,t)})),i=this.props.map((function(n){return n.ttype.getChecker(e,t)})),a=new r.NoopContext,h=this.props.map((function(e,t){return!e.isOpt&&!i[t](void 0,a)})),l=function(e,t){if("object"!=typeof e||null===e)return t.fail(null,"is not an object",0);for(var n=0;n<o.length;n++)if(!o[n](e,t))return!1;for(n=0;n<i.length;n++){var r=s.props[n].name,a=e[r];if(void 0===a){if(h[n])return t.fail(r,"is missing",1)}else if(!i[n](a,t))return t.fail(r,null,1)}return!0};if(!t)return l;var p=this.propSet;return n&&(this.propSet.forEach((function(e){return n.add(e)})),p=n),function(e,t){if(!l(e,t))return!1;for(var n in e)if(!p.has(n))return t.fail(n,"is extraneous",2);return!0}},t}(i);t.TIface=g,t.opt=function(e){return new y(a(e))};var y=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){return void 0===e||n(e,t)}},t}(i);t.TOptional=y;var x=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TProp=x,t.func=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return new T(new I(t),a(e))};var T=function(e){function t(t,n){var s=e.call(this)||this;return s.paramList=t,s.result=n,s}return o(t,e),t.prototype.getChecker=function(e,t){return function(e,t){return"function"==typeof e||t.fail(null,"is not a function",0)}},t}(i);t.TFunc=T,t.param=function(e,t,n){return new b(e,a(t),Boolean(n))};var b=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TParam=b;var I=function(e){function t(t){var n=e.call(this)||this;return n.params=t,n}return o(t,e),t.prototype.getChecker=function(e,t){var n=this,s=this.params.map((function(n){return n.ttype.getChecker(e,t)})),o=new r.NoopContext,i=this.params.map((function(e,t){return!e.isOpt&&!s[t](void 0,o)})),a=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var o=0;o<s.length;o++){var r=n.params[o];if(void 0===e[o]){if(i[o])return t.fail(r.name,"is missing",1)}else if(!s[o](e[o],t))return t.fail(r.name,null,1)}return!0};return t?function(e,t){return!!a(e,t)&&(e.length<=s.length||t.fail(s.length,"is extraneous",2))}:a},t}(i);t.TParamList=I;var w=function(e){function t(t,n){var s=e.call(this)||this;return s.validator=t,s.message=n,s}return o(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validator(e)||t.fail(null,n.message,0)}},t}(i);t.BasicType=w,t.basicTypes={any:new w((function(e){return!0}),"is invalid"),number:new w((function(e){return"number"==typeof e}),"is not a number"),object:new w((function(e){return"object"==typeof e&&e}),"is not an object"),boolean:new w((function(e){return"boolean"==typeof e}),"is not a boolean"),string:new w((function(e){return"string"==typeof e}),"is not a string"),symbol:new w((function(e){return"symbol"==typeof e}),"is not a symbol"),void:new w((function(e){return null==e}),"is not void"),undefined:new w((function(e){return void 0===e}),"is not undefined"),null:new w((function(e){return null===e}),"is not null"),never:new w((function(e){return!1}),"is unexpected"),Date:new w(C("[object Date]"),"is not a Date"),RegExp:new w(C("[object RegExp]"),"is not a RegExp")};var v=Object.prototype.toString;function C(e){return function(t){return"object"==typeof t&&t&&v.call(t)===e}}"undefined"!=typeof Buffer&&(t.basicTypes.Buffer=new w((function(e){return Buffer.isBuffer(e)}),"is not a Buffer"));for(var A=function(e){t.basicTypes[e.name]=new w((function(t){return t instanceof e}),"is not a "+e.name)},E=0,S=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,ArrayBuffer];E<S.length;E++)A(S[E])},180:function(e,t){var n,s=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},n(e,t)},function(e,t){function s(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)});Object.defineProperty(t,"__esModule",{value:!0}),t.DetailContext=t.NoopContext=t.VError=void 0;var o=function(e){function t(n,s){var o=e.call(this,s)||this;return o.path=n,Object.setPrototypeOf(o,t.prototype),o}return s(t,e),t}(Error);t.VError=o;var r=function(){function e(){}return e.prototype.fail=function(e,t,n){return!1},e.prototype.unionResolver=function(){return this},e.prototype.createContext=function(){return this},e.prototype.resolveUnion=function(e){},e}();t.NoopContext=r;var i=function(){function e(){this._propNames=[""],this._messages=[null],this._score=0}return e.prototype.fail=function(e,t,n){return this._propNames.push(e),this._messages.push(t),this._score+=n,!1},e.prototype.unionResolver=function(){return new a},e.prototype.resolveUnion=function(e){for(var t,n,s=null,o=0,r=e.contexts;o<r.length;o++){var i=r[o];(!s||i._score>=s._score)&&(s=i)}s&&s._score>0&&((t=this._propNames).push.apply(t,s._propNames),(n=this._messages).push.apply(n,s._messages))},e.prototype.getError=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var s=this._propNames[n];e+="number"==typeof s?"["+s+"]":s?"."+s:"";var r=this._messages[n];r&&t.push(e+" "+r)}return new o(e,t.join("; "))},e.prototype.getErrorDetail=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var s=this._propNames[n];e+="number"==typeof s?"["+s+"]":s?"."+s:"";var o=this._messages[n];o&&t.push({path:e,message:o})}var r=null;for(n=t.length-1;n>=0;n--)r&&(t[n].nested=[r]),r=t[n];return r},e}();t.DetailContext=i;var a=function(){function e(){this.contexts=[]}return e.prototype.createContext=function(){var e=new i;return this.contexts.push(e),e},e}()},624:(e,t,n)=>{var s,o,r;n.d(t,{default:()=>Gs}),function(e){e[e.NONE=0]="NONE",e[e._abstract=1]="_abstract",e[e._accessor=2]="_accessor",e[e._as=3]="_as",e[e._asserts=4]="_asserts",e[e._async=5]="_async",e[e._await=6]="_await",e[e._checks=7]="_checks",e[e._constructor=8]="_constructor",e[e._declare=9]="_declare",e[e._enum=10]="_enum",e[e._exports=11]="_exports",e[e._from=12]="_from",e[e._get=13]="_get",e[e._global=14]="_global",e[e._implements=15]="_implements",e[e._infer=16]="_infer",e[e._interface=17]="_interface",e[e._is=18]="_is",e[e._keyof=19]="_keyof",e[e._mixins=20]="_mixins",e[e._module=21]="_module",e[e._namespace=22]="_namespace",e[e._of=23]="_of",e[e._opaque=24]="_opaque",e[e._out=25]="_out",e[e._override=26]="_override",e[e._private=27]="_private",e[e._protected=28]="_protected",e[e._proto=29]="_proto",e[e._public=30]="_public",e[e._readonly=31]="_readonly",e[e._require=32]="_require",e[e._set=33]="_set",e[e._static=34]="_static",e[e._symbol=35]="_symbol",e[e._type=36]="_type",e[e._unique=37]="_unique"}(s||(s={})),function(e){e[e.PRECEDENCE_MASK=15]="PRECEDENCE_MASK",e[e.IS_KEYWORD=16]="IS_KEYWORD",e[e.IS_ASSIGN=32]="IS_ASSIGN",e[e.IS_RIGHT_ASSOCIATIVE=64]="IS_RIGHT_ASSOCIATIVE",e[e.IS_PREFIX=128]="IS_PREFIX",e[e.IS_POSTFIX=256]="IS_POSTFIX",e[e.IS_EXPRESSION_START=512]="IS_EXPRESSION_START",e[e.num=512]="num",e[e.bigint=1536]="bigint",e[e.decimal=2560]="decimal",e[e.regexp=3584]="regexp",e[e.string=4608]="string",e[e.name=5632]="name",e[e.eof=6144]="eof",e[e.bracketL=7680]="bracketL",e[e.bracketR=8192]="bracketR",e[e.braceL=9728]="braceL",e[e.braceBarL=10752]="braceBarL",e[e.braceR=11264]="braceR",e[e.braceBarR=12288]="braceBarR",e[e.parenL=13824]="parenL",e[e.parenR=14336]="parenR",e[e.comma=15360]="comma",e[e.semi=16384]="semi",e[e.colon=17408]="colon",e[e.doubleColon=18432]="doubleColon",e[e.dot=19456]="dot",e[e.question=20480]="question",e[e.questionDot=21504]="questionDot",e[e.arrow=22528]="arrow",e[e.template=23552]="template",e[e.ellipsis=24576]="ellipsis",e[e.backQuote=25600]="backQuote",e[e.dollarBraceL=27136]="dollarBraceL",e[e.at=27648]="at",e[e.hash=29184]="hash",e[e.eq=29728]="eq",e[e.assign=30752]="assign",e[e.preIncDec=32640]="preIncDec",e[e.postIncDec=33664]="postIncDec",e[e.bang=34432]="bang",e[e.tilde=35456]="tilde",e[e.pipeline=35841]="pipeline",e[e.nullishCoalescing=36866]="nullishCoalescing",e[e.logicalOR=37890]="logicalOR",e[e.logicalAND=38915]="logicalAND",e[e.bitwiseOR=39940]="bitwiseOR",e[e.bitwiseXOR=40965]="bitwiseXOR",e[e.bitwiseAND=41990]="bitwiseAND",e[e.equality=43015]="equality",e[e.lessThan=44040]="lessThan",e[e.greaterThan=45064]="greaterThan",e[e.relationalOrEqual=46088]="relationalOrEqual",e[e.bitShiftL=47113]="bitShiftL",e[e.bitShiftR=48137]="bitShiftR",e[e.plus=49802]="plus",e[e.minus=50826]="minus",e[e.modulo=51723]="modulo",e[e.star=52235]="star",e[e.slash=53259]="slash",e[e.exponent=54348]="exponent",e[e.jsxName=55296]="jsxName",e[e.jsxText=56320]="jsxText",e[e.jsxTagStart=57856]="jsxTagStart",e[e.jsxTagEnd=58368]="jsxTagEnd",e[e.typeParameterStart=59904]="typeParameterStart",e[e.nonNullAssertion=60416]="nonNullAssertion",e[e._break=61456]="_break",e[e._case=62480]="_case",e[e._catch=63504]="_catch",e[e._continue=64528]="_continue",e[e._debugger=65552]="_debugger",e[e._default=66576]="_default",e[e._do=67600]="_do",e[e._else=68624]="_else",e[e._finally=69648]="_finally",e[e._for=70672]="_for",e[e._function=72208]="_function",e[e._if=72720]="_if",e[e._return=73744]="_return",e[e._switch=74768]="_switch",e[e._throw=76432]="_throw",e[e._try=76816]="_try",e[e._var=77840]="_var",e[e._let=78864]="_let",e[e._const=79888]="_const",e[e._while=80912]="_while",e[e._with=81936]="_with",e[e._new=83472]="_new",e[e._this=84496]="_this",e[e._super=85520]="_super",e[e._class=86544]="_class",e[e._extends=87056]="_extends",e[e._export=88080]="_export",e[e._import=89616]="_import",e[e._yield=90640]="_yield",e[e._null=91664]="_null",e[e._true=92688]="_true",e[e._false=93712]="_false",e[e._in=94232]="_in",e[e._instanceof=95256]="_instanceof",e[e._typeof=96912]="_typeof",e[e._void=97936]="_void",e[e._delete=98960]="_delete",e[e._async=99856]="_async",e[e._get=100880]="_get",e[e._set=101904]="_set",e[e._declare=102928]="_declare",e[e._readonly=103952]="_readonly",e[e._abstract=104976]="_abstract",e[e._static=106e3]="_static",e[e._public=106512]="_public",e[e._private=107536]="_private",e[e._protected=108560]="_protected",e[e._override=109584]="_override",e[e._as=111120]="_as",e[e._enum=112144]="_enum",e[e._type=113168]="_type",e[e._implements=114192]="_implements"}(o||(o={}));class i{constructor(e,t,n){this.startTokenIndex=e,this.endTokenIndex=t,this.isFunctionScope=n}}class a{constructor(e,t,n,s,o,r,i,a,c,h,l,p,u){this.potentialArrowAt=e,this.noAnonFunctionType=t,this.inDisallowConditionalTypesContext=n,this.tokensLength=s,this.scopesLength=o,this.pos=r,this.type=i,this.contextualKeyword=a,this.start=c,this.end=h,this.isType=l,this.scopeDepth=p,this.error=u}}class c{constructor(){c.prototype.__init.call(this),c.prototype.__init2.call(this),c.prototype.__init3.call(this),c.prototype.__init4.call(this),c.prototype.__init5.call(this),c.prototype.__init6.call(this),c.prototype.__init7.call(this),c.prototype.__init8.call(this),c.prototype.__init9.call(this),c.prototype.__init10.call(this),c.prototype.__init11.call(this),c.prototype.__init12.call(this),c.prototype.__init13.call(this)}__init(){this.potentialArrowAt=-1}__init2(){this.noAnonFunctionType=!1}__init3(){this.inDisallowConditionalTypesContext=!1}__init4(){this.tokens=[]}__init5(){this.scopes=[]}__init6(){this.pos=0}__init7(){this.type=o.eof}__init8(){this.contextualKeyword=s.NONE}__init9(){this.start=0}__init10(){this.end=0}__init11(){this.isType=!1}__init12(){this.scopeDepth=0}__init13(){this.error=null}snapshot(){return new a(this.potentialArrowAt,this.noAnonFunctionType,this.inDisallowConditionalTypesContext,this.tokens.length,this.scopes.length,this.pos,this.type,this.contextualKeyword,this.start,this.end,this.isType,this.scopeDepth,this.error)}restoreFromSnapshot(e){this.potentialArrowAt=e.potentialArrowAt,this.noAnonFunctionType=e.noAnonFunctionType,this.inDisallowConditionalTypesContext=e.inDisallowConditionalTypesContext,this.tokens.length=e.tokensLength,this.scopes.length=e.scopesLength,this.pos=e.pos,this.type=e.type,this.contextualKeyword=e.contextualKeyword,this.start=e.start,this.end=e.end,this.isType=e.isType,this.scopeDepth=e.scopeDepth,this.error=e.error}}let h,l,p,u,f,d;function m(){return d++}function k(e){if("pos"in e){const t=function(e){let t=1,n=1;for(let s=0;s<e;s++)f.charCodeAt(s)===r.lineFeed?(t++,n=1):n++;return new _(t,n)}(e.pos);e.message+=` (${t.line}:${t.column})`,e.loc=t}return e}!function(e){e[e.backSpace=8]="backSpace",e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.shiftOut=14]="shiftOut",e[e.space=32]="space",e[e.exclamationMark=33]="exclamationMark",e[e.quotationMark=34]="quotationMark",e[e.numberSign=35]="numberSign",e[e.dollarSign=36]="dollarSign",e[e.percentSign=37]="percentSign",e[e.ampersand=38]="ampersand",e[e.apostrophe=39]="apostrophe",e[e.leftParenthesis=40]="leftParenthesis",e[e.rightParenthesis=41]="rightParenthesis",e[e.asterisk=42]="asterisk",e[e.plusSign=43]="plusSign",e[e.comma=44]="comma",e[e.dash=45]="dash",e[e.dot=46]="dot",e[e.slash=47]="slash",e[e.digit0=48]="digit0",e[e.digit1=49]="digit1",e[e.digit2=50]="digit2",e[e.digit3=51]="digit3",e[e.digit4=52]="digit4",e[e.digit5=53]="digit5",e[e.digit6=54]="digit6",e[e.digit7=55]="digit7",e[e.digit8=56]="digit8",e[e.digit9=57]="digit9",e[e.colon=58]="colon",e[e.semicolon=59]="semicolon",e[e.lessThan=60]="lessThan",e[e.equalsTo=61]="equalsTo",e[e.greaterThan=62]="greaterThan",e[e.questionMark=63]="questionMark",e[e.atSign=64]="atSign",e[e.uppercaseA=65]="uppercaseA",e[e.uppercaseB=66]="uppercaseB",e[e.uppercaseC=67]="uppercaseC",e[e.uppercaseD=68]="uppercaseD",e[e.uppercaseE=69]="uppercaseE",e[e.uppercaseF=70]="uppercaseF",e[e.uppercaseG=71]="uppercaseG",e[e.uppercaseH=72]="uppercaseH",e[e.uppercaseI=73]="uppercaseI",e[e.uppercaseJ=74]="uppercaseJ",e[e.uppercaseK=75]="uppercaseK",e[e.uppercaseL=76]="uppercaseL",e[e.uppercaseM=77]="uppercaseM",e[e.uppercaseN=78]="uppercaseN",e[e.uppercaseO=79]="uppercaseO",e[e.uppercaseP=80]="uppercaseP",e[e.uppercaseQ=81]="uppercaseQ",e[e.uppercaseR=82]="uppercaseR",e[e.uppercaseS=83]="uppercaseS",e[e.uppercaseT=84]="uppercaseT",e[e.uppercaseU=85]="uppercaseU",e[e.uppercaseV=86]="uppercaseV",e[e.uppercaseW=87]="uppercaseW",e[e.uppercaseX=88]="uppercaseX",e[e.uppercaseY=89]="uppercaseY",e[e.uppercaseZ=90]="uppercaseZ",e[e.leftSquareBracket=91]="leftSquareBracket",e[e.backslash=92]="backslash",e[e.rightSquareBracket=93]="rightSquareBracket",e[e.caret=94]="caret",e[e.underscore=95]="underscore",e[e.graveAccent=96]="graveAccent",e[e.lowercaseA=97]="lowercaseA",e[e.lowercaseB=98]="lowercaseB",e[e.lowercaseC=99]="lowercaseC",e[e.lowercaseD=100]="lowercaseD",e[e.lowercaseE=101]="lowercaseE",e[e.lowercaseF=102]="lowercaseF",e[e.lowercaseG=103]="lowercaseG",e[e.lowercaseH=104]="lowercaseH",e[e.lowercaseI=105]="lowercaseI",e[e.lowercaseJ=106]="lowercaseJ",e[e.lowercaseK=107]="lowercaseK",e[e.lowercaseL=108]="lowercaseL",e[e.lowercaseM=109]="lowercaseM",e[e.lowercaseN=110]="lowercaseN",e[e.lowercaseO=111]="lowercaseO",e[e.lowercaseP=112]="lowercaseP",e[e.lowercaseQ=113]="lowercaseQ",e[e.lowercaseR=114]="lowercaseR",e[e.lowercaseS=115]="lowercaseS",e[e.lowercaseT=116]="lowercaseT",e[e.lowercaseU=117]="lowercaseU",e[e.lowercaseV=118]="lowercaseV",e[e.lowercaseW=119]="lowercaseW",e[e.lowercaseX=120]="lowercaseX",e[e.lowercaseY=121]="lowercaseY",e[e.lowercaseZ=122]="lowercaseZ",e[e.leftCurlyBrace=123]="leftCurlyBrace",e[e.verticalBar=124]="verticalBar",e[e.rightCurlyBrace=125]="rightCurlyBrace",e[e.tilde=126]="tilde",e[e.nonBreakingSpace=160]="nonBreakingSpace",e[e.oghamSpaceMark=5760]="oghamSpaceMark",e[e.lineSeparator=8232]="lineSeparator",e[e.paragraphSeparator=8233]="paragraphSeparator"}(r||(r={}));class _{constructor(e,t){this.line=e,this.column=t}}function g(e,t,n,s){f=e,u=new c,d=1,h=t,l=n,p=s}function y(e){return u.contextualKeyword===e}function x(e){const t=Z();return t.type===o.name&&t.contextualKeyword===e}function T(e){return u.contextualKeyword===e&&z(o.name)}function b(e){T(e)||E()}function I(){return J(o.eof)||J(o.braceR)||w()}function w(){const e=u.tokens[u.tokens.length-1];for(let t=e?e.end:0;t<u.start;t++){const e=f.charCodeAt(t);if(e===r.lineFeed||e===r.carriageReturn||8232===e||8233===e)return!0}return!1}function v(){return z(o.semi)||I()}function C(){v()||E('Unexpected token, expected ";"')}function A(e){z(e)||E(`Unexpected token, expected "${function(e){switch(e){case o.num:return"num";case o.bigint:return"bigint";case o.decimal:return"decimal";case o.regexp:return"regexp";case o.string:return"string";case o.name:return"name";case o.eof:return"eof";case o.bracketL:return"[";case o.bracketR:return"]";case o.braceL:return"{";case o.braceBarL:return"{|";case o.braceR:return"}";case o.braceBarR:return"|}";case o.parenL:return"(";case o.parenR:return")";case o.comma:return",";case o.semi:return";";case o.colon:return":";case o.doubleColon:return"::";case o.dot:return".";case o.question:return"?";case o.questionDot:return"?.";case o.arrow:return"=>";case o.template:return"template";case o.ellipsis:return"...";case o.backQuote:return"`";case o.dollarBraceL:return"${";case o.at:return"@";case o.hash:return"#";case o.eq:return"=";case o.assign:return"_=";case o.preIncDec:case o.postIncDec:return"++/--";case o.bang:return"!";case o.tilde:return"~";case o.pipeline:return"|>";case o.nullishCoalescing:return"??";case o.logicalOR:return"||";case o.logicalAND:return"&&";case o.bitwiseOR:return"|";case o.bitwiseXOR:return"^";case o.bitwiseAND:return"&";case o.equality:return"==/!=";case o.lessThan:return"<";case o.greaterThan:return">";case o.relationalOrEqual:return"<=/>=";case o.bitShiftL:return"<<";case o.bitShiftR:return">>/>>>";case o.plus:return"+";case o.minus:return"-";case o.modulo:return"%";case o.star:return"*";case o.slash:return"/";case o.exponent:return"**";case o.jsxName:return"jsxName";case o.jsxText:return"jsxText";case o.jsxTagStart:return"jsxTagStart";case o.jsxTagEnd:return"jsxTagEnd";case o.typeParameterStart:return"typeParameterStart";case o.nonNullAssertion:return"nonNullAssertion";case o._break:return"break";case o._case:return"case";case o._catch:return"catch";case o._continue:return"continue";case o._debugger:return"debugger";case o._default:return"default";case o._do:return"do";case o._else:return"else";case o._finally:return"finally";case o._for:return"for";case o._function:return"function";case o._if:return"if";case o._return:return"return";case o._switch:return"switch";case o._throw:return"throw";case o._try:return"try";case o._var:return"var";case o._let:return"let";case o._const:return"const";case o._while:return"while";case o._with:return"with";case o._new:return"new";case o._this:return"this";case o._super:return"super";case o._class:return"class";case o._extends:return"extends";case o._export:return"export";case o._import:return"import";case o._yield:return"yield";case o._null:return"null";case o._true:return"true";case o._false:return"false";case o._in:return"in";case o._instanceof:return"instanceof";case o._typeof:return"typeof";case o._void:return"void";case o._delete:return"delete";case o._async:return"async";case o._get:return"get";case o._set:return"set";case o._declare:return"declare";case o._readonly:return"readonly";case o._abstract:return"abstract";case o._static:return"static";case o._public:return"public";case o._private:return"private";case o._protected:return"protected";case o._override:return"override";case o._as:return"as";case o._enum:return"enum";case o._type:return"type";case o._implements:return"implements";default:return""}}(e)}"`)}function E(e="Unexpected token",t=u.start){if(u.error)return;const n=new SyntaxError(e);n.pos=t,u.error=n,u.pos=f.length,ae(o.eof)}const S=[9,11,12,r.space,r.nonBreakingSpace,r.oghamSpaceMark,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],N=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g,R=new Uint8Array(65536);for(const e of S)R[e]=1;function L(e){if(e<48)return 36===e;if(e<58)return!0;if(e<65)return!1;if(e<91)return!0;if(e<97)return 95===e;if(e<123)return!0;if(e<128)return!1;throw new Error("Should not be called with non-ASCII char code.")}const O=new Uint8Array(65536);for(let e=0;e<128;e++)O[e]=L(e)?1:0;for(let e=128;e<65536;e++)O[e]=1;for(const e of S)O[e]=0;O[8232]=0,O[8233]=0;const D=O.slice();for(let e=r.digit0;e<=r.digit9;e++)D[e]=0;const P=new Int32Array([-1,27,783,918,1755,2376,2862,3483,-1,3699,-1,4617,4752,4833,5130,5508,5940,-1,6480,6939,7533,7965,8127,8289,-1,8505,-1,-1,-1,54,243,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,432,-1,-1,-1,675,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,108,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,216,-1,-1,-1,-1,-1,-1,s._abstract<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,405,-1,-1,-1,-1,-1,-1,-1,-1,s._accessor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._as<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,459,-1,-1,-1,-1,-1,594,-1,-1,-1,-1,-1,-1,486,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,513,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,540,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,567,-1,-1,-1,-1,-1,-1,-1,s._asserts<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,621,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,648,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._async<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,702,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,729,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,756,-1,-1,-1,-1,-1,-1,s._await<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,810,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,837,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,864,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._break<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,945,-1,-1,-1,-1,-1,-1,1107,-1,-1,-1,1242,-1,-1,1350,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,972,1026,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,999,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._case<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1053,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1080,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._catch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1134,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1161,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1215,-1,-1,-1,-1,-1,-1,-1,s._checks<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1269,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1296,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1323,-1,-1,-1,-1,-1,-1,-1,1+(o._class<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1404,1620,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1431,-1,-1,-1,-1,-1,-1,1+(o._const<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1458,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1485,-1,-1,-1,-1,-1,-1,-1,-1,1512,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1539,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1566,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1593,-1,-1,-1,-1,-1,-1,-1,-1,s._constructor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1647,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1674,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1701,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1728,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._continue<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1782,-1,-1,-1,-1,-1,-1,-1,-1,-1,2349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1809,1971,-1,-1,2106,-1,-1,-1,-1,-1,2241,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1836,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1863,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1890,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1917,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1944,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._debugger<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1998,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2025,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2052,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2079,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._declare<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2133,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2160,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2187,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2214,-1,-1,-1,-1,-1,-1,1+(o._default<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2268,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2295,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2322,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._delete<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._do<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2403,-1,2484,-1,-1,-1,-1,-1,-1,-1,-1,-1,2565,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2430,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2457,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._else<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2511,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2538,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._enum<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2592,-1,-1,-1,2727,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2619,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2646,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2673,-1,-1,-1,-1,-1,-1,1+(o._export<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,-1,-1,-1,-1,-1,-1,-1,s._exports<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2754,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2808,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2835,-1,-1,-1,-1,-1,-1,-1,1+(o._extends<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2889,-1,-1,-1,-1,-1,-1,-1,2997,-1,-1,-1,-1,-1,3159,-1,-1,3213,-1,-1,3294,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2916,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2943,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2970,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._false<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3024,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3051,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3078,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3105,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3132,-1,1+(o._finally<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3186,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._for<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._from<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3321,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3348,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3375,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3429,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3456,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._function<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3510,-1,-1,-1,-1,-1,-1,3564,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3537,-1,-1,-1,-1,-1,-1,s._get<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3591,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3618,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3645,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3672,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._global<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3726,-1,-1,-1,-1,-1,-1,3753,4077,-1,-1,-1,-1,4590,-1,-1,-1,-1,-1,-1,-1,1+(o._if<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3780,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3807,-1,-1,3996,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3834,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3861,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3888,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3915,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3942,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3969,-1,-1,-1,-1,-1,-1,-1,s._implements<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4023,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4050,-1,-1,-1,-1,-1,-1,1+(o._import<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._in<<1),-1,-1,-1,-1,-1,4104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4185,4401,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4131,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4158,-1,-1,-1,-1,-1,-1,-1,-1,s._infer<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4212,-1,-1,-1,-1,-1,-1,-1,4239,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4293,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4320,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4374,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._instanceof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4428,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4455,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4482,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4509,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4563,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._interface<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._is<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4644,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4671,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4725,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._keyof<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4779,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4806,-1,-1,-1,-1,-1,-1,1+(o._let<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4860,-1,-1,-1,-1,-1,4995,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4887,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4914,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4941,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4968,-1,-1,-1,-1,-1,-1,-1,s._mixins<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5022,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5049,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._module<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5157,-1,-1,-1,5373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5427,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5211,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5238,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5265,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5292,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5346,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._namespace<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5400,-1,-1,-1,1+(o._new<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5454,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5481,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._null<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5535,-1,-1,-1,-1,-1,-1,-1,-1,-1,5562,-1,-1,-1,-1,5697,5751,-1,-1,-1,-1,s._of<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5589,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5616,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5643,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5670,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._opaque<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5724,-1,-1,-1,-1,-1,-1,s._out<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5778,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5805,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5832,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5886,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5913,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._override<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5967,-1,-1,6345,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5994,-1,-1,-1,-1,-1,6129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6021,-1,-1,-1,-1,-1,6048,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6075,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6102,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._private<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6156,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6183,-1,-1,-1,-1,-1,-1,-1,-1,-1,6318,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6237,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6264,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._protected<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._proto<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6372,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6399,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6426,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6453,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._public<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6507,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6534,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6696,-1,-1,6831,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6561,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6588,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6615,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6642,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6669,-1,s._readonly<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6723,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6750,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6777,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6804,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._require<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6885,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6912,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._return<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6966,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7020,7155,-1,7263,-1,7398,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6993,-1,-1,-1,-1,-1,-1,s._set<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7047,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7074,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7128,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._static<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7182,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7209,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7236,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._super<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7290,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7317,-1,-1,-1,-1,-1,-1,-1,-1,-1,7344,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7371,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._switch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7425,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7452,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7479,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7506,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._symbol<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7560,-1,-1,-1,-1,-1,-1,-1,-1,-1,7722,-1,-1,-1,-1,-1,-1,7830,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7587,-1,-1,-1,-1,-1,-1,-1,-1,7641,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7614,-1,-1,-1,-1,-1,-1,-1,1+(o._this<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7668,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7695,-1,-1,-1,1+(o._throw<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7749,-1,-1,-1,7803,-1,-1,-1,-1,-1,-1,7776,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._true<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._try<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7884,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._type<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7911,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7938,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._typeof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7992,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8019,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8046,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8073,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,s._unique<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8154,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8208,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8181,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._var<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8235,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8262,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._void<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8316,8424,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8343,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8370,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8397,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._while<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8451,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8478,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._with<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8532,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8559,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8586,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8613,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(o._yield<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);var j;function q(e){const t=e.identifierRole;return t===j.TopLevelDeclaration||t===j.FunctionScopedDeclaration||t===j.BlockScopedDeclaration||t===j.ObjectShorthandTopLevelDeclaration||t===j.ObjectShorthandFunctionScopedDeclaration||t===j.ObjectShorthandBlockScopedDeclaration}function F(e){const t=e.identifierRole;return t===j.FunctionScopedDeclaration||t===j.BlockScopedDeclaration||t===j.ObjectShorthandFunctionScopedDeclaration||t===j.ObjectShorthandBlockScopedDeclaration}function $(e){const t=e.identifierRole;return t===j.TopLevelDeclaration||t===j.ObjectShorthandTopLevelDeclaration||t===j.ImportDeclaration}function B(e){const t=e.identifierRole;return t===j.TopLevelDeclaration||t===j.BlockScopedDeclaration||t===j.ObjectShorthandTopLevelDeclaration||t===j.ObjectShorthandBlockScopedDeclaration}function M(e){const t=e.identifierRole;return t===j.FunctionScopedDeclaration||t===j.ObjectShorthandFunctionScopedDeclaration}function K(e){return e.identifierRole===j.ObjectShorthandTopLevelDeclaration||e.identifierRole===j.ObjectShorthandBlockScopedDeclaration||e.identifierRole===j.ObjectShorthandFunctionScopedDeclaration}!function(e){e[e.Access=0]="Access",e[e.ExportAccess=1]="ExportAccess",e[e.TopLevelDeclaration=2]="TopLevelDeclaration",e[e.FunctionScopedDeclaration=3]="FunctionScopedDeclaration",e[e.BlockScopedDeclaration=4]="BlockScopedDeclaration",e[e.ObjectShorthandTopLevelDeclaration=5]="ObjectShorthandTopLevelDeclaration",e[e.ObjectShorthandFunctionScopedDeclaration=6]="ObjectShorthandFunctionScopedDeclaration",e[e.ObjectShorthandBlockScopedDeclaration=7]="ObjectShorthandBlockScopedDeclaration",e[e.ObjectShorthand=8]="ObjectShorthand",e[e.ImportDeclaration=9]="ImportDeclaration",e[e.ObjectKey=10]="ObjectKey",e[e.ImportAccess=11]="ImportAccess"}(j||(j={}));class V{constructor(){this.type=u.type,this.contextualKeyword=u.contextualKeyword,this.start=u.start,this.end=u.end,this.scopeDepth=u.scopeDepth,this.isType=u.isType,this.identifierRole=null,this.shadowsGlobal=!1,this.isAsyncOperation=!1,this.contextId=null,this.rhsEndIndex=null,this.isExpression=!1,this.numNullishCoalesceStarts=0,this.numNullishCoalesceEnds=0,this.isOptionalChainStart=!1,this.isOptionalChainEnd=!1,this.subscriptStartIndex=null,this.nullishStartIndex=null}}function H(){u.tokens.push(new V),se()}function W(){u.tokens.push(new V),u.start=u.pos,function(){for(;;){if(u.pos>=f.length)return void E("Unterminated template");const e=f.charCodeAt(u.pos);if(e===r.graveAccent||e===r.dollarSign&&f.charCodeAt(u.pos+1)===r.leftCurlyBrace)return u.pos===u.start&&J(o.template)?e===r.dollarSign?(u.pos+=2,void ae(o.dollarBraceL)):(++u.pos,void ae(o.backQuote)):void ae(o.template);e===r.backslash&&u.pos++,u.pos++}}()}function U(e){for(let t=u.tokens.length-e;t<u.tokens.length;t++)u.tokens[t].isType=!0;const t=u.isType;return u.isType=!0,t}function X(e){u.isType=e}function z(e){return!!J(e)&&(H(),!0)}function G(e){const t=u.isType;u.isType=!0,z(e),u.isType=t}function J(e){return u.type===e}function Y(){const e=u.snapshot();H();const t=u.type;return u.restoreFromSnapshot(e),t}class Q{constructor(e,t){this.type=e,this.contextualKeyword=t}}function Z(){const e=u.snapshot();H();const t=u.type,n=u.contextualKeyword;return u.restoreFromSnapshot(e),new Q(t,n)}function ee(){return te(u.pos)}function te(e){return N.lastIndex=e,e+N.exec(f)[0].length}function ne(){return f.charCodeAt(ee())}function se(){if(ie(),u.start=u.pos,u.pos>=f.length){const e=u.tokens;return e.length>=2&&e[e.length-1].start>=f.length&&e[e.length-2].start>=f.length&&E("Unexpectedly reached the end of input."),void ae(o.eof)}var e;e=f.charCodeAt(u.pos),D[e]||e===r.backslash||e===r.atSign&&f.charCodeAt(u.pos+1)===r.atSign?function(){let e=0,t=0,n=u.pos;for(;n<f.length&&(t=f.charCodeAt(n),!(t<r.lowercaseA||t>r.lowercaseZ));){const s=P[e+(t-r.lowercaseA)+1];if(-1===s)break;e=s,n++}const s=P[e];if(s>-1&&!O[t])return u.pos=n,void(1&s?ae(s>>>1):ae(o.name,s>>>1));for(;n<f.length;){const e=f.charCodeAt(n);if(O[e])n++;else if(e===r.backslash){if(n+=2,f.charCodeAt(n)===r.leftCurlyBrace){for(;n<f.length&&f.charCodeAt(n)!==r.rightCurlyBrace;)n++;n++}}else{if(e!==r.atSign||f.charCodeAt(n+1)!==r.atSign)break;n+=2}}u.pos=n,ae(o.name)}():he(e)}function oe(){for(;f.charCodeAt(u.pos)!==r.asterisk||f.charCodeAt(u.pos+1)!==r.slash;)if(u.pos++,u.pos>f.length)return void E("Unterminated comment",u.pos-2);u.pos+=2}function re(e){let t=f.charCodeAt(u.pos+=e);if(u.pos<f.length)for(;t!==r.lineFeed&&t!==r.carriageReturn&&t!==r.lineSeparator&&t!==r.paragraphSeparator&&++u.pos<f.length;)t=f.charCodeAt(u.pos)}function ie(){for(;u.pos<f.length;){const e=f.charCodeAt(u.pos);switch(e){case r.carriageReturn:f.charCodeAt(u.pos+1)===r.lineFeed&&++u.pos;case r.lineFeed:case r.lineSeparator:case r.paragraphSeparator:++u.pos;break;case r.slash:switch(f.charCodeAt(u.pos+1)){case r.asterisk:u.pos+=2,oe();break;case r.slash:re(2);break;default:return}break;default:if(!R[e])return;++u.pos}}}function ae(e,t=s.NONE){u.end=u.pos,u.type=e,u.contextualKeyword=t}function ce(){if(u.isType)return void le(o.greaterThan,1);const e=f.charCodeAt(u.pos+1);if(e===r.greaterThan){const e=f.charCodeAt(u.pos+2)===r.greaterThan?3:2;return f.charCodeAt(u.pos+e)===r.equalsTo?void le(o.assign,e+1):void le(o.bitShiftR,e)}e===r.equalsTo?le(o.relationalOrEqual,2):le(o.greaterThan,1)}function he(e){switch(e){case r.numberSign:return++u.pos,void ae(o.hash);case r.dot:return void function(){const e=f.charCodeAt(u.pos+1);e>=r.digit0&&e<=r.digit9?ue(!0):e===r.dot&&f.charCodeAt(u.pos+2)===r.dot?(u.pos+=3,ae(o.ellipsis)):(++u.pos,ae(o.dot))}();case r.leftParenthesis:return++u.pos,void ae(o.parenL);case r.rightParenthesis:return++u.pos,void ae(o.parenR);case r.semicolon:return++u.pos,void ae(o.semi);case r.comma:return++u.pos,void ae(o.comma);case r.leftSquareBracket:return++u.pos,void ae(o.bracketL);case r.rightSquareBracket:return++u.pos,void ae(o.bracketR);case r.leftCurlyBrace:return void(p&&f.charCodeAt(u.pos+1)===r.verticalBar?le(o.braceBarL,2):(++u.pos,ae(o.braceL)));case r.rightCurlyBrace:return++u.pos,void ae(o.braceR);case r.colon:return void(f.charCodeAt(u.pos+1)===r.colon?le(o.doubleColon,2):(++u.pos,ae(o.colon)));case r.questionMark:return void function(){const e=f.charCodeAt(u.pos+1),t=f.charCodeAt(u.pos+2);e!==r.questionMark||p&&u.isType?e!==r.dot||t>=r.digit0&&t<=r.digit9?(++u.pos,ae(o.question)):(u.pos+=2,ae(o.questionDot)):t===r.equalsTo?le(o.assign,3):le(o.nullishCoalescing,2)}();case r.atSign:return++u.pos,void ae(o.at);case r.graveAccent:return++u.pos,void ae(o.backQuote);case r.digit0:{const e=f.charCodeAt(u.pos+1);if(e===r.lowercaseX||e===r.uppercaseX||e===r.lowercaseO||e===r.uppercaseO||e===r.lowercaseB||e===r.uppercaseB)return void function(){for(u.pos+=2;;){const e=f.charCodeAt(u.pos);if(!(e>=r.digit0&&e<=r.digit9||e>=r.lowercaseA&&e<=r.lowercaseF||e>=r.uppercaseA&&e<=r.uppercaseF||e===r.underscore))break;u.pos++}f.charCodeAt(u.pos)===r.lowercaseN?(++u.pos,ae(o.bigint)):ae(o.num)}()}case r.digit1:case r.digit2:case r.digit3:case r.digit4:case r.digit5:case r.digit6:case r.digit7:case r.digit8:case r.digit9:return void ue(!1);case r.quotationMark:case r.apostrophe:return void function(e){for(u.pos++;;){if(u.pos>=f.length)return void E("Unterminated string constant");const t=f.charCodeAt(u.pos);if(t===r.backslash)u.pos++;else if(t===e)break;u.pos++}u.pos++,ae(o.string)}(e);case r.slash:return void(f.charCodeAt(u.pos+1)===r.equalsTo?le(o.assign,2):le(o.slash,1));case r.percentSign:case r.asterisk:return void function(e){let t=e===r.asterisk?o.star:o.modulo,n=1,s=f.charCodeAt(u.pos+1);e===r.asterisk&&s===r.asterisk&&(n++,s=f.charCodeAt(u.pos+2),t=o.exponent),s===r.equalsTo&&f.charCodeAt(u.pos+2)!==r.greaterThan&&(n++,t=o.assign),le(t,n)}(e);case r.verticalBar:case r.ampersand:return void function(e){const t=f.charCodeAt(u.pos+1);if(t!==e){if(e===r.verticalBar){if(t===r.greaterThan)return void le(o.pipeline,2);if(t===r.rightCurlyBrace&&p)return void le(o.braceBarR,2)}t!==r.equalsTo?le(e===r.verticalBar?o.bitwiseOR:o.bitwiseAND,1):le(o.assign,2)}else f.charCodeAt(u.pos+2)===r.equalsTo?le(o.assign,3):le(e===r.verticalBar?o.logicalOR:o.logicalAND,2)}(e);case r.caret:return void(f.charCodeAt(u.pos+1)===r.equalsTo?le(o.assign,2):le(o.bitwiseXOR,1));case r.plusSign:case r.dash:return void function(e){const t=f.charCodeAt(u.pos+1);t!==e?t===r.equalsTo?le(o.assign,2):e===r.plusSign?le(o.plus,1):le(o.minus,1):le(o.preIncDec,2)}(e);case r.lessThan:return void function(){const e=f.charCodeAt(u.pos+1);if(e===r.lessThan)return f.charCodeAt(u.pos+2)===r.equalsTo?void le(o.assign,3):void le(o.bitShiftL,2);e===r.equalsTo?le(o.relationalOrEqual,2):le(o.lessThan,1)}();case r.greaterThan:return void ce();case r.equalsTo:case r.exclamationMark:return void function(e){const t=f.charCodeAt(u.pos+1);if(t!==r.equalsTo)return e===r.equalsTo&&t===r.greaterThan?(u.pos+=2,void ae(o.arrow)):void le(e===r.equalsTo?o.eq:o.bang,1);le(o.equality,f.charCodeAt(u.pos+2)===r.equalsTo?3:2)}(e);case r.tilde:return void le(o.tilde,1)}E(`Unexpected character '${String.fromCharCode(e)}'`,u.pos)}function le(e,t){u.pos+=t,ae(e)}function pe(){for(;;){const e=f.charCodeAt(u.pos);if(!(e>=r.digit0&&e<=r.digit9||e===r.underscore))break;u.pos++}}function ue(e){let t=!1,n=!1;e||pe();let s=f.charCodeAt(u.pos);s===r.dot&&(++u.pos,pe(),s=f.charCodeAt(u.pos)),s!==r.uppercaseE&&s!==r.lowercaseE||(s=f.charCodeAt(++u.pos),s!==r.plusSign&&s!==r.dash||++u.pos,pe(),s=f.charCodeAt(u.pos)),s===r.lowercaseN?(++u.pos,t=!0):s===r.lowercaseM&&(++u.pos,n=!0),ae(t?o.bigint:n?o.decimal:o.num)}function fe(e,t=e.currentIndex()){let n=t+1;if(de(e,n)){const s=e.identifierNameAtIndex(t);return{isType:!1,leftName:s,rightName:s,endIndex:n}}if(n++,de(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};if(n++,de(e,n))return{isType:!1,leftName:e.identifierNameAtIndex(t),rightName:e.identifierNameAtIndex(t+2),endIndex:n};if(n++,de(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};throw new Error(`Unexpected import/export specifier at ${t}`)}function de(e,t){const n=e.tokens[t];return n.type===o.braceR||n.type===o.comma}const me=new Map([["quot",'"'],["amp","&"],["apos","'"],["lt","<"],["gt",">"],["nbsp"," "],["iexcl","¡"],["cent","¢"],["pound","£"],["curren","¤"],["yen","¥"],["brvbar","¦"],["sect","§"],["uml","¨"],["copy","©"],["ordf","ª"],["laquo","«"],["not","¬"],["shy","­"],["reg","®"],["macr","¯"],["deg","°"],["plusmn","±"],["sup2","²"],["sup3","³"],["acute","´"],["micro","µ"],["para","¶"],["middot","·"],["cedil","¸"],["sup1","¹"],["ordm","º"],["raquo","»"],["frac14","¼"],["frac12","½"],["frac34","¾"],["iquest","¿"],["Agrave","À"],["Aacute","Á"],["Acirc","Â"],["Atilde","Ã"],["Auml","Ä"],["Aring","Å"],["AElig","Æ"],["Ccedil","Ç"],["Egrave","È"],["Eacute","É"],["Ecirc","Ê"],["Euml","Ë"],["Igrave","Ì"],["Iacute","Í"],["Icirc","Î"],["Iuml","Ï"],["ETH","Ð"],["Ntilde","Ñ"],["Ograve","Ò"],["Oacute","Ó"],["Ocirc","Ô"],["Otilde","Õ"],["Ouml","Ö"],["times","×"],["Oslash","Ø"],["Ugrave","Ù"],["Uacute","Ú"],["Ucirc","Û"],["Uuml","Ü"],["Yacute","Ý"],["THORN","Þ"],["szlig","ß"],["agrave","à"],["aacute","á"],["acirc","â"],["atilde","ã"],["auml","ä"],["aring","å"],["aelig","æ"],["ccedil","ç"],["egrave","è"],["eacute","é"],["ecirc","ê"],["euml","ë"],["igrave","ì"],["iacute","í"],["icirc","î"],["iuml","ï"],["eth","ð"],["ntilde","ñ"],["ograve","ò"],["oacute","ó"],["ocirc","ô"],["otilde","õ"],["ouml","ö"],["divide","÷"],["oslash","ø"],["ugrave","ù"],["uacute","ú"],["ucirc","û"],["uuml","ü"],["yacute","ý"],["thorn","þ"],["yuml","ÿ"],["OElig","Œ"],["oelig","œ"],["Scaron","Š"],["scaron","š"],["Yuml","Ÿ"],["fnof","ƒ"],["circ","ˆ"],["tilde","˜"],["Alpha","Α"],["Beta","Β"],["Gamma","Γ"],["Delta","Δ"],["Epsilon","Ε"],["Zeta","Ζ"],["Eta","Η"],["Theta","Θ"],["Iota","Ι"],["Kappa","Κ"],["Lambda","Λ"],["Mu","Μ"],["Nu","Ν"],["Xi","Ξ"],["Omicron","Ο"],["Pi","Π"],["Rho","Ρ"],["Sigma","Σ"],["Tau","Τ"],["Upsilon","Υ"],["Phi","Φ"],["Chi","Χ"],["Psi","Ψ"],["Omega","Ω"],["alpha","α"],["beta","β"],["gamma","γ"],["delta","δ"],["epsilon","ε"],["zeta","ζ"],["eta","η"],["theta","θ"],["iota","ι"],["kappa","κ"],["lambda","λ"],["mu","μ"],["nu","ν"],["xi","ξ"],["omicron","ο"],["pi","π"],["rho","ρ"],["sigmaf","ς"],["sigma","σ"],["tau","τ"],["upsilon","υ"],["phi","φ"],["chi","χ"],["psi","ψ"],["omega","ω"],["thetasym","ϑ"],["upsih","ϒ"],["piv","ϖ"],["ensp"," "],["emsp"," "],["thinsp"," "],["zwnj","‌"],["zwj","‍"],["lrm","‎"],["rlm","‏"],["ndash","–"],["mdash","—"],["lsquo","‘"],["rsquo","’"],["sbquo","‚"],["ldquo","“"],["rdquo","”"],["bdquo","„"],["dagger","†"],["Dagger","‡"],["bull","•"],["hellip","…"],["permil","‰"],["prime","′"],["Prime","″"],["lsaquo","‹"],["rsaquo","›"],["oline","‾"],["frasl","⁄"],["euro","€"],["image","ℑ"],["weierp","℘"],["real","ℜ"],["trade","™"],["alefsym","ℵ"],["larr","←"],["uarr","↑"],["rarr","→"],["darr","↓"],["harr","↔"],["crarr","↵"],["lArr","⇐"],["uArr","⇑"],["rArr","⇒"],["dArr","⇓"],["hArr","⇔"],["forall","∀"],["part","∂"],["exist","∃"],["empty","∅"],["nabla","∇"],["isin","∈"],["notin","∉"],["ni","∋"],["prod","∏"],["sum","∑"],["minus","−"],["lowast","∗"],["radic","√"],["prop","∝"],["infin","∞"],["ang","∠"],["and","∧"],["or","∨"],["cap","∩"],["cup","∪"],["int","∫"],["there4","∴"],["sim","∼"],["cong","≅"],["asymp","≈"],["ne","≠"],["equiv","≡"],["le","≤"],["ge","≥"],["sub","⊂"],["sup","⊃"],["nsub","⊄"],["sube","⊆"],["supe","⊇"],["oplus","⊕"],["otimes","⊗"],["perp","⊥"],["sdot","⋅"],["lceil","⌈"],["rceil","⌉"],["lfloor","⌊"],["rfloor","⌋"],["lang","〈"],["rang","〉"],["loz","◊"],["spades","♠"],["clubs","♣"],["hearts","♥"],["diams","♦"]]);function ke(e){const[t,n]=_e(e.jsxPragma||"React.createElement"),[s,o]=_e(e.jsxFragmentPragma||"React.Fragment");return{base:t,suffix:n,fragmentBase:s,fragmentSuffix:o}}function _e(e){let t=e.indexOf(".");return-1===t&&(t=e.length),[e.slice(0,t),e.slice(t)]}class ge{getPrefixCode(){return""}getHoistedCode(){return""}getSuffixCode(){return""}}class ye extends ge{__init(){this.lastLineNumber=1}__init2(){this.lastIndex=0}__init3(){this.filenameVarName=null}constructor(e,t,n,s,o){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=s,this.options=o,ye.prototype.__init.call(this),ye.prototype.__init2.call(this),ye.prototype.__init3.call(this),this.jsxPragmaInfo=ke(o)}process(){return!!this.tokens.matches1(o.jsxTagStart)&&(this.processJSXTag(),!0)}getPrefixCode(){return this.filenameVarName?`const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath||"")};`:""}getLineNumberForIndex(e){const t=this.tokens.code;for(;this.lastIndex<e&&this.lastIndex<t.length;)"\n"===t[this.lastIndex]&&this.lastLineNumber++,this.lastIndex++;return this.lastLineNumber}getFilenameVarName(){return this.filenameVarName||(this.filenameVarName=this.nameManager.claimFreeName("_jsxFileName")),this.filenameVarName}processProps(e){const t=this.getLineNumberForIndex(e),n=this.options.production?"":`__self: this, __source: {fileName: ${this.getFilenameVarName()}, lineNumber: ${t}}`;if(this.tokens.matches1(o.jsxName)||this.tokens.matches1(o.braceL)){for(this.tokens.appendCode(", {");;){if(this.tokens.matches2(o.jsxName,o.eq))this.processPropKeyName(),this.tokens.replaceToken(": "),this.tokens.matches1(o.braceL)?(this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")):this.tokens.matches1(o.jsxTagStart)?this.processJSXTag():this.processStringPropValue();else if(this.tokens.matches1(o.jsxName))this.processPropKeyName(),this.tokens.appendCode(": true");else{if(!this.tokens.matches1(o.braceL))break;this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")}this.tokens.appendCode(",")}n?this.tokens.appendCode(` ${n}}`):this.tokens.appendCode("}")}else n?this.tokens.appendCode(`, {${n}}`):this.tokens.appendCode(", null")}processPropKeyName(){const e=this.tokens.identifierName();e.includes("-")?this.tokens.replaceToken(`'${e}'`):this.tokens.copyToken()}processStringPropValue(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start+1,e.end-1),n=Te(t),s=function(e){let t="";for(let n=0;n<e.length;n++){const s=e[n];if("\n"===s)if(/\s/.test(e[n+1]))for(t+=" ";n<e.length&&/\s/.test(e[n+1]);)n++;else t+="\n";else if("&"===s){const{entity:s,newI:o}=be(e,n+1);t+=s,n=o-1}else t+=s}return JSON.stringify(t)}(t);this.tokens.replaceToken(s+n)}processTagIntro(){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType||!this.tokens.matches2AtIndex(e-1,o.jsxName,o.jsxName)&&!this.tokens.matches2AtIndex(e-1,o.greaterThan,o.jsxName)&&!this.tokens.matches1AtIndex(e,o.braceL)&&!this.tokens.matches1AtIndex(e,o.jsxTagEnd)&&!this.tokens.matches2AtIndex(e,o.slash,o.jsxTagEnd);)e++;if(e===this.tokens.currentIndex()+1){const e=this.tokens.identifierName();xe(e)&&this.tokens.replaceToken(`'${e}'`)}for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}processChildren(){for(;;){if(this.tokens.matches2(o.jsxTagStart,o.slash))return;if(this.tokens.matches1(o.braceL))this.tokens.matches2(o.braceL,o.braceR)?(this.tokens.replaceToken(""),this.tokens.replaceToken("")):(this.tokens.replaceToken(", "),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken(""));else if(this.tokens.matches1(o.jsxTagStart))this.tokens.appendCode(", "),this.processJSXTag();else{if(!this.tokens.matches1(o.jsxText))throw new Error("Unexpected token when processing JSX children.");this.processChildTextElement()}}}processChildTextElement(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start,e.end),n=Te(t),s=function(e){let t="",n="",s=!1,o=!1;for(let r=0;r<e.length;r++){const i=e[r];if(" "===i||"\t"===i||"\r"===i)s||(n+=i);else if("\n"===i)n="",s=!0;else{if(o&&s&&(t+=" "),t+=n,n="","&"===i){const{entity:n,newI:s}=be(e,r+1);r=s-1,t+=n}else t+=i;o=!0,s=!1}}return s||(t+=n),JSON.stringify(t)}(t);'""'===s?this.tokens.replaceToken(n):this.tokens.replaceToken(`, ${s}${n}`)}processJSXTag(){const{jsxPragmaInfo:e}=this,t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.base)||e.base,n=this.tokens.currentToken().start;if(this.tokens.replaceToken(`${t}${e.suffix}(`),this.tokens.matches1(o.jsxTagEnd)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.fragmentBase)||e.fragmentBase;for(this.tokens.replaceToken(`${t}${e.fragmentSuffix}, null`),this.processChildren();!this.tokens.matches1(o.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}else if(this.processTagIntro(),this.processProps(n),this.tokens.matches2(o.slash,o.jsxTagEnd))this.tokens.replaceToken(""),this.tokens.replaceToken(")");else{if(!this.tokens.matches1(o.jsxTagEnd))throw new Error("Expected either /> or > at the end of the tag.");for(this.tokens.replaceToken(""),this.processChildren();!this.tokens.matches1(o.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}}}function xe(e){const t=e.charCodeAt(0);return t>=r.lowercaseA&&t<=r.lowercaseZ}function Te(e){let t=0,n=0;for(const s of e)"\n"===s?(t++,n=0):" "===s&&n++;return"\n".repeat(t)+" ".repeat(n)}function be(e,t){let n,s="",o=0,i=t;if("#"===e[i]){let t,s=10;if(i++,"x"===e[i])for(s=16,i++,t=i;i<e.length&&((a=e.charCodeAt(i))>=r.digit0&&a<=r.digit9||a>=r.lowercaseA&&a<=r.lowercaseF||a>=r.uppercaseA&&a<=r.uppercaseF);)i++;else for(t=i;i<e.length&&Ie(e.charCodeAt(i));)i++;if(";"===e[i]){const o=e.slice(t,i);o&&(i++,n=String.fromCodePoint(parseInt(o,s)))}}else for(;i<e.length&&o++<10;){const t=e[i];if(i++,";"===t){n=me.get(s);break}s+=t}var a;return n?{entity:n,newI:i}:{entity:"&",newI:t}}function Ie(e){return e>=r.digit0&&e<=r.digit9}function we(e,t){const n=ke(t),s=new Set;for(let t=0;t<e.tokens.length;t++){const r=e.tokens[t];r.type!==o.name||r.isType||r.identifierRole!==j.Access&&r.identifierRole!==j.ObjectShorthand&&r.identifierRole!==j.ExportAccess||r.shadowsGlobal||s.add(e.identifierNameForToken(r)),r.type===o.jsxTagStart&&s.add(n.base),r.type===o.jsxTagStart&&t+1<e.tokens.length&&e.tokens[t+1].type===o.jsxTagEnd&&(s.add(n.base),s.add(n.fragmentBase)),r.type===o.jsxName&&r.identifierRole===j.Access&&(xe(e.identifierNameForToken(r))&&e.tokens[t+1].type!==o.dot||s.add(e.identifierNameForToken(r)))}return s}class ve{__init(){this.nonTypeIdentifiers=new Set}__init2(){this.importInfoByPath=new Map}__init3(){this.importsToReplace=new Map}__init4(){this.identifierReplacements=new Map}__init5(){this.exportBindingsByLocalName=new Map}constructor(e,t,n,s,o,r){this.nameManager=e,this.tokens=t,this.enableLegacyTypeScriptModuleInterop=n,this.options=s,this.isTypeScriptTransformEnabled=o,this.helperManager=r,ve.prototype.__init.call(this),ve.prototype.__init2.call(this),ve.prototype.__init3.call(this),ve.prototype.__init4.call(this),ve.prototype.__init5.call(this)}preprocessTokens(){for(let e=0;e<this.tokens.tokens.length;e++)this.tokens.matches1AtIndex(e,o._import)&&!this.tokens.matches3AtIndex(e,o._import,o.name,o.eq)&&this.preprocessImportAtIndex(e),this.tokens.matches1AtIndex(e,o._export)&&!this.tokens.matches2AtIndex(e,o._export,o.eq)&&this.preprocessExportAtIndex(e);this.generateImportReplacements()}pruneTypeOnlyImports(){this.nonTypeIdentifiers=we(this.tokens,this.options);for(const[e,t]of this.importInfoByPath.entries())t.hasBareImport||t.hasStarExport||t.exportStarNames.length>0||t.namedExports.length>0||[...t.defaultNames,...t.wildcardNames,...t.namedImports.map((({localName:e})=>e))].every((e=>this.isTypeName(e)))&&this.importsToReplace.set(e,"")}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}generateImportReplacements(){for(const[e,t]of this.importInfoByPath.entries()){const{defaultNames:n,wildcardNames:s,namedImports:o,namedExports:r,exportStarNames:i,hasStarExport:a}=t;if(0===n.length&&0===s.length&&0===o.length&&0===r.length&&0===i.length&&!a){this.importsToReplace.set(e,`require('${e}');`);continue}const c=this.getFreeIdentifierForPath(e);let h;h=this.enableLegacyTypeScriptModuleInterop?c:s.length>0?s[0]:this.getFreeIdentifierForPath(e);let l=`var ${c} = require('${e}');`;if(s.length>0)for(const e of s)l+=` var ${e} = ${this.enableLegacyTypeScriptModuleInterop?c:`${this.helperManager.getHelperName("interopRequireWildcard")}(${c})`};`;else i.length>0&&h!==c?l+=` var ${h} = ${this.helperManager.getHelperName("interopRequireWildcard")}(${c});`:n.length>0&&h!==c&&(l+=` var ${h} = ${this.helperManager.getHelperName("interopRequireDefault")}(${c});`);for(const{importedName:e,localName:t}of r)l+=` ${this.helperManager.getHelperName("createNamedExportFrom")}(${c}, '${t}', '${e}');`;for(const e of i)l+=` exports.${e} = ${h};`;a&&(l+=` ${this.helperManager.getHelperName("createStarExport")}(${c});`),this.importsToReplace.set(e,l);for(const e of n)this.identifierReplacements.set(e,`${h}.default`);for(const{importedName:e,localName:t}of o)this.identifierReplacements.set(t,`${c}.${e}`)}}getFreeIdentifierForPath(e){const t=e.split("/"),n=t[t.length-1].replace(/\W/g,"");return this.nameManager.claimFreeName(`_${n}`)}preprocessImportAtIndex(e){const t=[],n=[],r=[];if(e++,(this.tokens.matchesContextualAtIndex(e,s._type)||this.tokens.matches1AtIndex(e,o._typeof))&&!this.tokens.matches1AtIndex(e+1,o.comma)&&!this.tokens.matchesContextualAtIndex(e+1,s._from))return;if(this.tokens.matches1AtIndex(e,o.parenL))return;if(this.tokens.matches1AtIndex(e,o.name)&&(t.push(this.tokens.identifierNameAtIndex(e)),e++,this.tokens.matches1AtIndex(e,o.comma)&&e++),this.tokens.matches1AtIndex(e,o.star)&&(e+=2,n.push(this.tokens.identifierNameAtIndex(e)),e++),this.tokens.matches1AtIndex(e,o.braceL)){const n=this.getNamedImports(e+1);e=n.newIndex;for(const e of n.namedImports)"default"===e.importedName?t.push(e.localName):r.push(e)}if(this.tokens.matchesContextualAtIndex(e,s._from)&&e++,!this.tokens.matches1AtIndex(e,o.string))throw new Error("Expected string token at the end of import statement.");const i=this.tokens.stringValueAtIndex(e),a=this.getImportInfo(i);a.defaultNames.push(...t),a.wildcardNames.push(...n),a.namedImports.push(...r),0===t.length&&0===n.length&&0===r.length&&(a.hasBareImport=!0)}preprocessExportAtIndex(e){if(this.tokens.matches2AtIndex(e,o._export,o._var)||this.tokens.matches2AtIndex(e,o._export,o._let)||this.tokens.matches2AtIndex(e,o._export,o._const))this.preprocessVarExportAtIndex(e);else if(this.tokens.matches2AtIndex(e,o._export,o._function)||this.tokens.matches2AtIndex(e,o._export,o._class)){const t=this.tokens.identifierNameAtIndex(e+2);this.addExportBinding(t,t)}else if(this.tokens.matches3AtIndex(e,o._export,o.name,o._function)){const t=this.tokens.identifierNameAtIndex(e+3);this.addExportBinding(t,t)}else this.tokens.matches2AtIndex(e,o._export,o.braceL)?this.preprocessNamedExportAtIndex(e):this.tokens.matches2AtIndex(e,o._export,o.star)&&this.preprocessExportStarAtIndex(e)}preprocessVarExportAtIndex(e){let t=0;for(let n=e+2;;n++)if(this.tokens.matches1AtIndex(n,o.braceL)||this.tokens.matches1AtIndex(n,o.dollarBraceL)||this.tokens.matches1AtIndex(n,o.bracketL))t++;else if(this.tokens.matches1AtIndex(n,o.braceR)||this.tokens.matches1AtIndex(n,o.bracketR))t--;else{if(0===t&&!this.tokens.matches1AtIndex(n,o.name))break;if(this.tokens.matches1AtIndex(1,o.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");n=e-1}else if(q(this.tokens.tokens[n])){const e=this.tokens.identifierNameAtIndex(n);this.identifierReplacements.set(e,`exports.${e}`)}}}preprocessNamedExportAtIndex(e){e+=2;const{newIndex:t,namedImports:n}=this.getNamedImports(e);if(e=t,!this.tokens.matchesContextualAtIndex(e,s._from)){for(const{importedName:e,localName:t}of n)this.addExportBinding(e,t);return}if(e++,!this.tokens.matches1AtIndex(e,o.string))throw new Error("Expected string token at the end of import statement.");const r=this.tokens.stringValueAtIndex(e);this.getImportInfo(r).namedExports.push(...n)}preprocessExportStarAtIndex(e){let t=null;if(this.tokens.matches3AtIndex(e,o._export,o.star,o._as)?(e+=3,t=this.tokens.identifierNameAtIndex(e),e+=2):e+=3,!this.tokens.matches1AtIndex(e,o.string))throw new Error("Expected string token at the end of star export statement.");const n=this.tokens.stringValueAtIndex(e),s=this.getImportInfo(n);null!==t?s.exportStarNames.push(t):s.hasStarExport=!0}getNamedImports(e){const t=[];for(;;){if(this.tokens.matches1AtIndex(e,o.braceR)){e++;break}const n=fe(this.tokens,e);if(e=n.endIndex,n.isType||t.push({importedName:n.leftName,localName:n.rightName}),this.tokens.matches2AtIndex(e,o.comma,o.braceR)){e+=2;break}if(this.tokens.matches1AtIndex(e,o.braceR)){e++;break}if(!this.tokens.matches1AtIndex(e,o.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[e])}`);e++}return{newIndex:e,namedImports:t}}getImportInfo(e){const t=this.importInfoByPath.get(e);if(t)return t;const n={defaultNames:[],wildcardNames:[],namedImports:[],namedExports:[],hasBareImport:!1,exportStarNames:[],hasStarExport:!1};return this.importInfoByPath.set(e,n),n}addExportBinding(e,t){this.exportBindingsByLocalName.has(e)||this.exportBindingsByLocalName.set(e,[]),this.exportBindingsByLocalName.get(e).push(t)}claimImportCode(e){const t=this.importsToReplace.get(e);return this.importsToReplace.set(e,""),t||""}getIdentifierReplacement(e){return this.identifierReplacements.get(e)||null}resolveExportBinding(e){const t=this.exportBindingsByLocalName.get(e);return t&&0!==t.length?t.map((e=>`exports.${e}`)).join(" = "):null}getGlobalNames(){return new Set([...this.identifierReplacements.keys(),...this.exportBindingsByLocalName.keys()])}}function Ce(e,t,{compiledFilename:n}){let s="AAAA";for(let t=0;t<e.length;t++)e.charCodeAt(t)===r.lineFeed&&(s+=";AACA");return{version:3,file:n||"",sources:[t],mappings:s,names:[]}}const Ae={interopRequireWildcard:"\n    function interopRequireWildcard(obj) {\n      if (obj && obj.__esModule) {\n        return obj;\n      } else {\n        var newObj = {};\n        if (obj != null) {\n          for (var key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n        newObj.default = obj;\n        return newObj;\n      }\n    }\n  ",interopRequireDefault:"\n    function interopRequireDefault(obj) {\n      return obj && obj.__esModule ? obj : { default: obj };\n    }\n  ",createNamedExportFrom:"\n    function createNamedExportFrom(obj, localName, importedName) {\n      Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]});\n    }\n  ",createStarExport:'\n    function createStarExport(obj) {\n      Object.keys(obj)\n        .filter((key) => key !== "default" && key !== "__esModule")\n        .forEach((key) => {\n          if (exports.hasOwnProperty(key)) {\n            return;\n          }\n          Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]});\n        });\n    }\n  ',nullishCoalesce:"\n    function nullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return rhsFn();\n      }\n    }\n  ",asyncNullishCoalesce:"\n    async function asyncNullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return await rhsFn();\n      }\n    }\n  ",optionalChain:"\n    function optionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",asyncOptionalChain:"\n    async function asyncOptionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = await fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = await fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",optionalChainDelete:"\n    function optionalChainDelete(ops) {\n      const result = OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  ",asyncOptionalChainDelete:"\n    async function asyncOptionalChainDelete(ops) {\n      const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  "};class Ee{__init(){this.helperNames={}}constructor(e){this.nameManager=e,Ee.prototype.__init.call(this)}getHelperName(e){let t=this.helperNames[e];return t||(t=this.nameManager.claimFreeName(`_${e}`),this.helperNames[e]=t,t)}emitHelpers(){let e="";this.helperNames.optionalChainDelete&&this.getHelperName("optionalChain"),this.helperNames.asyncOptionalChainDelete&&this.getHelperName("asyncOptionalChain");for(const[t,n]of Object.entries(Ae)){const s=this.helperNames[t];let o=n;"optionalChainDelete"===t?o=o.replace("OPTIONAL_CHAIN_NAME",this.helperNames.optionalChain):"asyncOptionalChainDelete"===t&&(o=o.replace("ASYNC_OPTIONAL_CHAIN_NAME",this.helperNames.asyncOptionalChain)),s&&(e+=" ",e+=o.replace(t,s).replace(/\s+/g," ").trim())}return e}}function Se(e,t,n){(function(e,t){for(const n of e.tokens)if(n.type===o.name&&F(n)&&t.has(e.identifierNameForToken(n)))return!0;return!1})(e,n)&&function(e,t,n){const s=[];let r=t.length-1;for(let i=e.tokens.length-1;;i--){for(;s.length>0&&s[s.length-1].startTokenIndex===i+1;)s.pop();for(;r>=0&&t[r].endTokenIndex===i+1;)s.push(t[r]),r--;if(i<0)break;const a=e.tokens[i],c=e.identifierNameForToken(a);if(s.length>1&&a.type===o.name&&n.has(c))if(B(a))Ne(s[s.length-1],e,c);else if(M(a)){let t=s.length-1;for(;t>0&&!s[t].isFunctionScope;)t--;if(t<0)throw new Error("Did not find parent function scope.");Ne(s[t],e,c)}}if(s.length>0)throw new Error("Expected empty scope stack after processing file.")}(e,t,n)}function Ne(e,t,n){for(let s=e.startTokenIndex;s<e.endTokenIndex;s++){const e=t.tokens[s];e.type!==o.name&&e.type!==o.jsxName||t.identifierNameForToken(e)!==n||(e.shadowsGlobal=!0)}}class Re{__init(){this.usedNames=new Set}constructor(e,t){Re.prototype.__init.call(this),this.usedNames=new Set(function(e,t){const n=[];for(const s of t)s.type===o.name&&n.push(e.slice(s.start,s.end));return n}(e,t))}claimFreeName(e){const t=this.findFreeName(e);return this.usedNames.add(t),t}findFreeName(e){if(!this.usedNames.has(e))return e;let t=2;for(;this.usedNames.has(e+String(t));)t++;return e+String(t)}}var Le=n(74);const Oe={Transform:Le.union(Le.lit("jsx"),Le.lit("typescript"),Le.lit("flow"),Le.lit("imports"),Le.lit("react-hot-loader"),Le.lit("jest")),SourceMapOptions:Le.iface([],{compiledFilename:"string"}),Options:Le.iface([],{transforms:Le.array("Transform"),jsxPragma:Le.opt("string"),jsxFragmentPragma:Le.opt("string"),enableLegacyTypeScriptModuleInterop:Le.opt("boolean"),enableLegacyBabel5ModuleInterop:Le.opt("boolean"),sourceMapOptions:Le.opt("SourceMapOptions"),filePath:Le.opt("string"),production:Le.opt("boolean"),disableESTransforms:Le.opt("boolean")})},{Options:De}=(0,Le.createCheckers)(Oe);function Pe(){H(),Mt(!1)}function je(e){H(),Be(e)}function qe(e){gn(),$e(e)}function Fe(){gn(),u.tokens[u.tokens.length-1].identifierRole=j.ImportDeclaration}function $e(e){let t;t=0===u.scopeDepth?j.TopLevelDeclaration:e?j.BlockScopedDeclaration:j.FunctionScopedDeclaration,u.tokens[u.tokens.length-1].identifierRole=t}function Be(e){switch(u.type){case o._this:{const e=U(0);return H(),void X(e)}case o._yield:case o.name:return u.type=o.name,void qe(e);case o.bracketL:return H(),void Me(o.bracketR,e,!0);case o.braceL:return void hn(!0,e);default:E()}}function Me(e,t,n=!1,s=!1,r=0){let i=!0,a=!1;const c=u.tokens.length;for(;!z(e)&&!u.error;)if(i?i=!1:(A(o.comma),u.tokens[u.tokens.length-1].contextId=r,!a&&u.tokens[c].isType&&(u.tokens[u.tokens.length-1].isType=!0,a=!0)),n&&J(o.comma));else{if(z(e))break;if(J(o.ellipsis)){je(t),Ve(),z(o.comma),A(e);break}Ke(s,t)}}function Ke(e,t){e&&Xe([s._public,s._protected,s._private,s._readonly,s._override]),He(t),Ve(),He(t,!0)}function Ve(){p?function(){const e=U(0);z(o.question),J(o.colon)&&Vn(),X(e)}():l&&function(){const e=U(0);z(o.question),ft(),X(e)}()}function He(e,t=!1){if(t||Be(e),!z(o.eq))return;const n=u.tokens.length-1;Mt(),u.tokens[n].rhsEndIndex=u.tokens.length}function We(){return J(o.name)}function Ue(){const e=u.snapshot();return H(),!(!(J(o.bracketL)||J(o.braceL)||J(o.star)||J(o.ellipsis)||J(o.hash)||J(o.name)||Boolean(u.type&o.IS_KEYWORD)||J(o.string)||J(o.num)||J(o.bigint)||J(o.decimal))||w())||(u.restoreFromSnapshot(e),!1)}function Xe(e){for(;null!==ze(e););}function ze(e){if(!J(o.name))return null;const t=u.contextualKeyword;if(-1!==e.indexOf(t)&&Ue()){switch(t){case s._readonly:u.tokens[u.tokens.length-1].type=o._readonly;break;case s._abstract:u.tokens[u.tokens.length-1].type=o._abstract;break;case s._static:u.tokens[u.tokens.length-1].type=o._static;break;case s._public:u.tokens[u.tokens.length-1].type=o._public;break;case s._private:u.tokens[u.tokens.length-1].type=o._private;break;case s._protected:u.tokens[u.tokens.length-1].type=o._protected;break;case s._override:u.tokens[u.tokens.length-1].type=o._override;break;case s._declare:u.tokens[u.tokens.length-1].type=o._declare}return t}return null}function Ge(){for(gn();z(o.dot);)gn()}function Je(){A(o._import),A(o.parenL),A(o.string),A(o.parenR),z(o.dot)&&Ge(),J(o.lessThan)&&Et()}function Ye(){const e=z(o._in),t=T(s._out);!e&&!t||J(o.name)?gn():u.tokens[u.tokens.length-1].type=o.name,z(o._extends)&&mt(),z(o.eq)&&mt()}function Qe(){J(o.lessThan)&&Ze()}function Ze(){const e=U(0);for(J(o.lessThan)||J(o.typeParameterStart)?H():E();!z(o.greaterThan)&&!u.error;)Ye(),z(o.comma);X(e)}function et(e){const t=e===o.arrow;Qe(),A(o.parenL),u.scopeDepth++,Me(o.parenR,false),u.scopeDepth--,(t||J(e))&&ut(e)}function tt(){z(o.comma)||C()}function nt(){et(o.colon),tt()}function st(){if(!J(o.bracketL)||!function(){const e=u.snapshot();H();const t=z(o.name)&&J(o.colon);return u.restoreFromSnapshot(e),t}())return!1;const e=U(0);return A(o.bracketL),gn(),dt(),A(o.bracketR),ft(),tt(),X(e),!0}function ot(e){z(o.question),e||!J(o.parenL)&&!J(o.lessThan)?(ft(),tt()):(et(o.colon),tt())}function rt(){if(J(o.parenL)||J(o.lessThan))return void nt();if(J(o._new))return H(),void(J(o.parenL)||J(o.lessThan)?nt():ot(!1));const e=!!ze([s._readonly]);st()||((y(s._get)||y(s._set))&&Ue(),pn(-1),ot(e))}function it(){for(A(o.braceL);!z(o.braceR)&&!u.error;)rt()}var at;function ct(e){e===at.TSAbstractConstructorType&&b(s._abstract),e!==at.TSConstructorType&&e!==at.TSAbstractConstructorType||A(o._new);const t=u.inDisallowConditionalTypesContext;u.inDisallowConditionalTypesContext=!1,et(o.arrow),u.inDisallowConditionalTypesContext=t}function ht(){switch(u.type){case o.name:return Ge(),void(!w()&&J(o.lessThan)&&Et());case o._void:case o._null:return void H();case o.string:case o.num:case o.bigint:case o.decimal:case o._true:case o._false:return void nn();case o.minus:return H(),void nn();case o._this:return H(),void(y(s._is)&&!w()&&(H(),dt()));case o._typeof:return A(o._typeof),J(o._import)?Je():Ge(),void(!w()&&J(o.lessThan)&&Et());case o._import:return void Je();case o.braceL:return void(function(){const e=u.snapshot(),t=(H(),z(o.plus)||z(o.minus)?y(s._readonly):(y(s._readonly)&&H(),!!J(o.bracketL)&&(H(),!!We()&&(H(),J(o._in)))));return u.restoreFromSnapshot(e),t}()?(A(o.braceL),J(o.plus)||J(o.minus)?(H(),b(s._readonly)):T(s._readonly),A(o.bracketL),gn(),A(o._in),mt(),T(s._as)&&mt(),A(o.bracketR),J(o.plus)||J(o.minus)?(H(),A(o.question)):z(o.question),z(o.colon)&&mt(),C(),A(o.braceR)):it());case o.bracketL:return void function(){for(A(o.bracketL);!z(o.bracketR)&&!u.error;)z(o.ellipsis)?mt():(mt(),z(o.question)),z(o.colon)&&mt(),z(o.comma)}();case o.parenL:return A(o.parenL),mt(),void A(o.parenR);case o.backQuote:return void function(){for(W(),W();!J(o.backQuote)&&!u.error;)A(o.dollarBraceL),mt(),W(),W();H()}();default:if(u.type&o.IS_KEYWORD)return H(),void(u.tokens[u.tokens.length-1].type=o.name)}E()}function lt(){if(y(s._keyof)||y(s._unique)||y(s._readonly))H(),lt();else if(y(s._infer))!function(){if(b(s._infer),gn(),J(o._extends)){const e=u.snapshot();A(o._extends);const t=u.inDisallowConditionalTypesContext;u.inDisallowConditionalTypesContext=!0,mt(),u.inDisallowConditionalTypesContext=t,(u.error||!u.inDisallowConditionalTypesContext&&J(o.question))&&u.restoreFromSnapshot(e)}}();else{const e=u.inDisallowConditionalTypesContext;u.inDisallowConditionalTypesContext=!1,function(){for(ht();!w()&&z(o.bracketL);)z(o.bracketR)||(mt(),A(o.bracketR))}(),u.inDisallowConditionalTypesContext=e}}function pt(){if(z(o.bitwiseAND),lt(),J(o.bitwiseAND))for(;z(o.bitwiseAND);)lt()}function ut(e){const t=U(0);A(e),function(){const e=u.snapshot();return y(s._asserts)?(H(),T(s._is)?(mt(),!0):We()||J(o._this)?(H(),T(s._is)&&mt(),!0):(u.restoreFromSnapshot(e),!1)):!(!We()&&!J(o._this))&&(H(),y(s._is)&&!w()?(H(),mt(),!0):(u.restoreFromSnapshot(e),!1))}()||mt(),X(t)}function ft(){J(o.colon)&&dt()}function dt(){const e=U(0);A(o.colon),mt(),X(e)}function mt(){if(kt(),u.inDisallowConditionalTypesContext||w()||!z(o._extends))return;const e=u.inDisallowConditionalTypesContext;u.inDisallowConditionalTypesContext=!0,kt(),u.inDisallowConditionalTypesContext=e,A(o.question),mt(),A(o.colon),mt()}function kt(){J(o.lessThan)||J(o.parenL)&&function(){const e=u.snapshot(),t=function(){if(H(),J(o.parenR)||J(o.ellipsis))return!0;if(function(){if(J(o.name)||J(o._this))return H(),!0;if(J(o.braceL)||J(o.bracketL)){let e=1;for(H();e>0&&!u.error;)J(o.braceL)||J(o.bracketL)?e++:(J(o.braceR)||J(o.bracketR))&&e--,H();return!0}return!1}()){if(J(o.colon)||J(o.comma)||J(o.question)||J(o.eq))return!0;if(J(o.parenR)&&(H(),J(o.arrow)))return!0}return!1}();return u.restoreFromSnapshot(e),t}()?ct(at.TSFunctionType):J(o._new)?ct(at.TSConstructorType):y(s._abstract)&&Y()===o._new?ct(at.TSAbstractConstructorType):function(){if(z(o.bitwiseOR),pt(),J(o.bitwiseOR))for(;z(o.bitwiseOR);)pt()}()}function _t(){for(;!J(o.braceL)&&!u.error;)Ge(),J(o.lessThan)&&Et(),z(o.comma)}function gt(){if(J(o.string)?nn():gn(),z(o.eq)){const e=u.tokens.length-1;Mt(),u.tokens[e].rhsEndIndex=u.tokens.length}}function yt(){for(qe(!1),A(o.braceL);!z(o.braceR)&&!u.error;)gt(),z(o.comma)}function xt(){A(o.braceL),Zn(o.braceR)}function Tt(){qe(!1),z(o.dot)?Tt():xt()}function bt(){y(s._global)?gn():J(o.string)?en():E(),J(o.braceL)?xt():C()}function It(){Fe(),A(o.eq),y(s._require)&&Y()===o.parenL?(b(s._require),A(o.parenL),J(o.string)||E(),nn(),A(o.parenR)):Ge(),C()}function wt(){return vt(u.contextualKeyword,!0)}function vt(e,t){switch(e){case s._abstract:if(Ct(t)&&J(o._class))return u.tokens[u.tokens.length-1].type=o._abstract,rs(!0,!1),!0;break;case s._enum:if(Ct(t)&&J(o.name))return u.tokens[u.tokens.length-1].type=o._enum,yt(),!0;break;case s._interface:if(Ct(t)&&J(o.name)){const e=U(t?2:1);return qe(!1),Qe(),z(o._extends)&&_t(),it(),X(e),!0}break;case s._module:if(Ct(t)){if(J(o.string)){const e=U(t?2:1);return bt(),X(e),!0}if(J(o.name)){const e=U(t?2:1);return Tt(),X(e),!0}}break;case s._namespace:if(Ct(t)&&J(o.name)){const e=U(t?2:1);return Tt(),X(e),!0}break;case s._type:if(Ct(t)&&J(o.name)){const e=U(t?2:1);return qe(!1),Qe(),A(o.eq),mt(),C(),X(e),!0}}return!1}function Ct(e){return e?(H(),!0):!v()}function At(){u.type===o.bitShiftL&&(u.pos-=1,ae(o.lessThan)),Et()}function Et(){const e=U(0);for(A(o.lessThan);!z(o.greaterThan)&&!u.error;)mt(),z(o.comma);X(e)}function St(){if(J(o.name))switch(u.contextualKeyword){case s._abstract:case s._declare:case s._enum:case s._interface:case s._module:case s._namespace:case s._type:return!0}return!1}function Nt(){qt()}function Rt(e){Nt(),z(o.colon)?Nt():u.tokens[u.tokens.length-1].identifierRole=e}function Lt(){for(Rt(j.Access);J(o.dot);)qt(),Nt()}function Ot(){J(o.braceR)||Bt()}function Dt(){if(z(o.braceL))return A(o.ellipsis),Mt(),void qt();Rt(j.ObjectKey),J(o.eq)&&(qt(),function(){switch(u.type){case o.braceL:return H(),Ot(),void qt();case o.jsxTagStart:return jt(),void qt();case o.string:return void qt();default:E("JSX value should be either an expression or a quoted JSX text")}}())}function Pt(){if(!function(){if(J(o.jsxTagEnd))return!1;for(Lt(),l&&function(){if(z(o.jsxTagStart)){u.tokens[u.tokens.length-1].type=o.typeParameterStart;const e=U(1);for(;!J(o.greaterThan)&&!u.error;)mt(),z(o.comma);qt(),X(e)}}();!J(o.slash)&&!J(o.jsxTagEnd)&&!u.error;)Dt();const e=J(o.slash);return e&&qt(),e}())for(Ft();;)switch(u.type){case o.jsxTagStart:if(qt(),J(o.slash))return qt(),void(J(o.jsxTagEnd)||Lt());Pt(),Ft();break;case o.jsxText:Ft();break;case o.braceL:H(),J(o.ellipsis)?(A(o.ellipsis),Bt(),Ft()):(Ot(),Ft());break;default:return void E()}}function jt(){qt(),Pt()}function qt(){u.tokens.push(new V),ie(),u.start=u.pos;const e=f.charCodeAt(u.pos);if(D[e])!function(){let e;do{if(u.pos>f.length)return void E("Unexpectedly reached the end of input.");e=f.charCodeAt(++u.pos)}while(O[e]||e===r.dash);ae(o.jsxName)}();else if(e===r.quotationMark||e===r.apostrophe)!function(e){for(u.pos++;;){if(u.pos>=f.length)return void E("Unterminated string constant");if(f.charCodeAt(u.pos)===e){u.pos++;break}u.pos++}ae(o.string)}(e);else switch(++u.pos,e){case r.greaterThan:ae(o.jsxTagEnd);break;case r.lessThan:ae(o.jsxTagStart);break;case r.slash:ae(o.slash);break;case r.equalsTo:ae(o.eq);break;case r.leftCurlyBrace:ae(o.braceL);break;case r.dot:ae(o.dot);break;case r.colon:ae(o.colon);break;default:E()}}function Ft(){u.tokens.push(new V),u.start=u.pos,function(){for(;;){if(u.pos>=f.length)return void E("Unterminated JSX contents");const e=f.charCodeAt(u.pos);switch(e){case r.lessThan:case r.leftCurlyBrace:return u.pos===u.start?e===r.lessThan?(u.pos++,void ae(o.jsxTagStart)):void he(e):void ae(o.jsxText);default:u.pos++}}}()}!function(e){e[e.TSFunctionType=0]="TSFunctionType",e[e.TSConstructorType=1]="TSConstructorType",e[e.TSAbstractConstructorType=2]="TSAbstractConstructorType"}(at||(at={}));class $t{constructor(e){this.stop=e}}function Bt(e=!1){if(Mt(e),J(o.comma))for(;z(o.comma);)Mt(e)}function Mt(e=!1,t=!1){return l?function(e,t){return h?function(e,t){if(!J(o.lessThan))return Kt(e,t);const n=u.snapshot();let s=Kt(e,t);return u.error?(u.restoreFromSnapshot(n),u.type=o.typeParameterStart,Ze(),s=Kt(e,t),s||E(),s):s}(e,t):function(e,t){if(!J(o.lessThan))return Kt(e,t);const n=u.snapshot();Ze();const s=Kt(e,t);return s||E(),u.error?(u.restoreFromSnapshot(n),Kt(e,t)):s}(e,t)}(e,t):p?function(e,t){if(J(o.lessThan)){const n=u.snapshot();let s=Kt(e,t);if(!u.error)return s;u.restoreFromSnapshot(n),u.type=o.typeParameterStart;const r=U(0);if(Sn(),X(r),s=Kt(e,t),s)return!0;E()}return Kt(e,t)}(e,t):Kt(e,t)}function Kt(e,t){if(J(o._yield))return H(),J(o.semi)||I()||(z(o.star),Mt()),!1;(J(o.parenL)||J(o.name)||J(o._yield))&&(u.potentialArrowAt=u.start);const n=function(e){return!!function(e){const t=u.tokens.length;return!!Wt()||(Ht(t,-1,e),!1)}(e)||(function(e){l||p?function(e){if(J(o.question)){const e=Y();if(e===o.colon||e===o.comma||e===o.parenR)return}Vt(e)}(e):Vt(e)}(e),!1)}(e);return t&&an(),u.type&o.IS_ASSIGN?(H(),Mt(e),!1):n}function Vt(e){z(o.question)&&(Mt(),A(o.colon),Mt(e))}function Ht(e,t,n){if(l&&(o._in&o.PRECEDENCE_MASK)>t&&!w()&&T(s._as)){u.tokens[u.tokens.length-1].type=o._as;const s=U(1);return mt(),X(s),u.type===o.greaterThan&&(u.pos-=1,ce()),void Ht(e,t,n)}const r=u.type&o.PRECEDENCE_MASK;if(r>0&&(!n||!J(o._in))&&r>t){const s=u.type;H(),s===o.nullishCoalescing&&(u.tokens[u.tokens.length-1].nullishStartIndex=e);const i=u.tokens.length;Wt(),Ht(i,s&o.IS_RIGHT_ASSOCIATIVE?r-1:r,n),s===o.nullishCoalescing&&(u.tokens[e].numNullishCoalesceStarts++,u.tokens[u.tokens.length-1].numNullishCoalesceEnds++),Ht(e,t,n)}}function Wt(){if(l&&!h&&z(o.lessThan))return function(){const e=U(1);mt(),A(o.greaterThan),X(e),Wt()}(),!1;if(y(s._module)&&ne()===r.leftCurlyBrace&&!function(){const e=ee();for(let t=u.end;t<e;t++){const e=f.charCodeAt(t);if(e===r.lineFeed||e===r.carriageReturn||8232===e||8233===e)return!0}return!1}())return b(s._module),A(o.braceL),Zn(o.braceR),!1;if(u.type&o.IS_PREFIX)return H(),Wt(),!1;if(Ut())return!0;for(;u.type&o.IS_POSTFIX&&!I();)u.type===o.preIncDec&&(u.type=o.postIncDec),H();return!1}function Ut(){const e=u.tokens.length;return!!en()||(Xt(e),u.tokens.length>e&&u.tokens[e].isOptionalChainStart&&(u.tokens[u.tokens.length-1].isOptionalChainEnd=!0),!1)}function Xt(e,t=!1){p?function(e,t=!1){if(u.tokens[u.tokens.length-1].contextualKeyword===s._async&&J(o.lessThan)){const e=u.snapshot(),t=function(){u.scopeDepth++;const e=u.tokens.length;return os(),!!rn()&&(fn(e),!0)}();if(t&&!u.error)return;u.restoreFromSnapshot(e)}zt(e,t)}(e,t):zt(e,t)}function zt(e,t=!1){const n=new $t(!1);do{Gt(e,t,n)}while(!n.stop&&!u.error)}function Gt(e,t,n){l?function(e,t,n){if(w()||!z(o.bang)){if(J(o.lessThan)||J(o.bitShiftL)){const n=u.snapshot();if(!t&&Yt()&&function(){const e=u.snapshot();return Ze(),os(),J(o.colon)&&ut(o.colon),A(o.arrow),u.error?(u.restoreFromSnapshot(e),!1):(mn(!0),!0)}())return;if(At(),!t&&z(o.parenL)?(u.tokens[u.tokens.length-1].subscriptStartIndex=e,Qt()):J(o.backQuote)?cn():(u.type===o.greaterThan||u.type!==o.parenL&&Boolean(u.type&o.IS_EXPRESSION_START)&&!w())&&E(),!u.error)return;u.restoreFromSnapshot(n)}else!t&&J(o.questionDot)&&Y()===o.lessThan&&(H(),u.tokens[e].isOptionalChainStart=!0,u.tokens[u.tokens.length-1].subscriptStartIndex=e,Et(),A(o.parenL),Qt());Jt(e,t,n)}else u.tokens[u.tokens.length-1].type=o.nonNullAssertion}(e,t,n):p?function(e,t,n){if(J(o.questionDot)&&Y()===o.lessThan)return t?void(n.stop=!0):(H(),Nn(),A(o.parenL),void Qt());if(!t&&J(o.lessThan)){const e=u.snapshot();if(Nn(),A(o.parenL),Qt(),!u.error)return;u.restoreFromSnapshot(e)}Jt(e,t,n)}(e,t,n):Jt(e,t,n)}function Jt(e,t,n){if(!t&&z(o.doubleColon))Zt(),n.stop=!0,Xt(e,t);else if(J(o.questionDot)){if(u.tokens[e].isOptionalChainStart=!0,t&&Y()===o.parenL)return void(n.stop=!0);H(),u.tokens[u.tokens.length-1].subscriptStartIndex=e,z(o.bracketL)?(Bt(),A(o.bracketR)):z(o.parenL)?Qt():tn()}else if(z(o.dot))u.tokens[u.tokens.length-1].subscriptStartIndex=e,tn();else if(z(o.bracketL))u.tokens[u.tokens.length-1].subscriptStartIndex=e,Bt(),A(o.bracketR);else if(!t&&J(o.parenL))if(Yt()){const t=u.snapshot(),s=u.tokens.length;H(),u.tokens[u.tokens.length-1].subscriptStartIndex=e;const r=m();u.tokens[u.tokens.length-1].contextId=r,Qt(),u.tokens[u.tokens.length-1].contextId=r,(J(o.colon)||J(o.arrow))&&(u.restoreFromSnapshot(t),n.stop=!0,u.scopeDepth++,os(),function(e){l?J(o.colon)&&dt():p&&function(){if(J(o.colon)){const e=u.noAnonFunctionType;u.noAnonFunctionType=!0,Vn(),u.noAnonFunctionType=e}}(),A(o.arrow),fn(e)}(s))}else{H(),u.tokens[u.tokens.length-1].subscriptStartIndex=e;const t=m();u.tokens[u.tokens.length-1].contextId=t,Qt(),u.tokens[u.tokens.length-1].contextId=t}else J(o.backQuote)?cn():n.stop=!0}function Yt(){return u.tokens[u.tokens.length-1].contextualKeyword===s._async&&!I()}function Qt(){let e=!0;for(;!z(o.parenR)&&!u.error;){if(e)e=!1;else if(A(o.comma),z(o.parenR))break;_n(!1)}}function Zt(){const e=u.tokens.length;en(),Xt(e,!0)}function en(){if(z(o.modulo))return gn(),!1;if(J(o.jsxText))return nn(),!1;if(J(o.lessThan)&&h)return u.type=o.jsxTagStart,jt(),H(),!1;const e=u.potentialArrowAt===u.start;switch(u.type){case o.slash:case o.assign:u.type===o.assign&&--u.pos,function(){const e=u.pos;let t=!1,n=!1;for(;;){if(u.pos>=f.length)return void E("Unterminated regular expression",e);const s=f.charCodeAt(u.pos);if(t)t=!1;else{if(s===r.leftSquareBracket)n=!0;else if(s===r.rightSquareBracket&&n)n=!1;else if(s===r.slash&&!n)break;t=s===r.backslash}++u.pos}++u.pos,function(){for(;u.pos<f.length;){const e=f.charCodeAt(u.pos);if(O[e])u.pos++;else{if(e!==r.backslash)break;if(u.pos+=2,f.charCodeAt(u.pos)===r.leftCurlyBrace){for(;u.pos<f.length&&f.charCodeAt(u.pos)!==r.rightCurlyBrace;)u.pos++;u.pos++}}}}(),ae(o.regexp)}();case o._super:case o._this:case o.regexp:case o.num:case o.bigint:case o.decimal:case o.string:case o._null:case o._true:case o._false:return H(),!1;case o._import:return H(),J(o.dot)&&(u.tokens[u.tokens.length-1].type=o.name,H(),gn()),!1;case o.name:{const t=u.tokens.length,n=u.start,r=u.contextualKeyword;return gn(),r===s._await?(Wt(),!1):r===s._async&&J(o._function)&&!I()?(H(),ss(n,!1),!1):e&&r===s._async&&!I()&&J(o.name)?(u.scopeDepth++,qe(!1),A(o.arrow),fn(t),!0):J(o._do)&&!I()?(H(),Qn(),!1):e&&!I()&&J(o.arrow)?(u.scopeDepth++,$e(!1),A(o.arrow),fn(t),!0):(u.tokens[u.tokens.length-1].identifierRole=j.Access,!1)}case o._do:return H(),Qn(),!1;case o.parenL:return on(e);case o.bracketL:return H(),kn(o.bracketR,!0),!1;case o.braceL:return hn(!1,!1),!1;case o._function:return function(){const e=u.start;gn(),z(o.dot)&&gn(),ss(e,!1)}(),!1;case o.at:zn();case o._class:return rs(!1),!1;case o._new:return A(o._new),z(o.dot)?gn():(Zt(),z(o.questionDot),p&&function(){if(J(o.lessThan)){const e=u.snapshot();Nn(),u.error&&u.restoreFromSnapshot(e)}}(),z(o.parenL)&&kn(o.parenR)),!1;case o.backQuote:return cn(),!1;case o.doubleColon:return H(),Zt(),!1;case o.hash:{const e=ne();return D[e]||e===r.backslash?tn():H(),!1}default:return E(),!1}}function tn(){z(o.hash),gn()}function nn(){H()}function sn(){A(o.parenL),Bt(),A(o.parenR)}function on(e){const t=u.snapshot(),n=u.tokens.length;A(o.parenL);let s=!0;for(;!J(o.parenR)&&!u.error;){if(s)s=!1;else if(A(o.comma),J(o.parenR))break;if(J(o.ellipsis)){je(!1),an();break}Mt(!1,!0)}return A(o.parenR),!(!e||!J(o.colon)&&I()||!rn())&&(u.restoreFromSnapshot(t),u.scopeDepth++,os(),rn(),fn(n),!u.error||(u.restoreFromSnapshot(t),on(!1),!1))}function rn(){return l?function(){if(J(o.colon)){const e=u.snapshot();ut(o.colon),I()&&E(),J(o.arrow)||E(),u.error&&u.restoreFromSnapshot(e)}return z(o.arrow)}():p?function(){if(J(o.colon)){const e=U(0),t=u.snapshot(),n=u.noAnonFunctionType;u.noAnonFunctionType=!0,Tn(),u.noAnonFunctionType=n,I()&&E(),J(o.arrow)||E(),u.error&&u.restoreFromSnapshot(t),X(e)}return z(o.arrow)}():z(o.arrow)}function an(){(l||p)&&(G(o.question),J(o.colon)&&(l?dt():p&&Vn()))}function cn(){for(W(),W();!J(o.backQuote)&&!u.error;)A(o.dollarBraceL),Bt(),W(),W();H()}function hn(e,t){const n=m();let r=!0;for(H(),u.tokens[u.tokens.length-1].contextId=n;!z(o.braceR)&&!u.error;){if(r)r=!1;else if(A(o.comma),z(o.braceR))break;let i=!1;if(J(o.ellipsis)){const n=u.tokens.length;if(Pe(),e&&(u.tokens.length===n+2&&$e(t),z(o.braceR)))break}else e||(i=z(o.star)),!e&&y(s._async)?(i&&E(),gn(),J(o.colon)||J(o.parenL)||J(o.braceR)||J(o.eq)||J(o.comma)||(J(o.star)&&(H(),i=!0),pn(n))):pn(n),ln(e,t,n)}u.tokens[u.tokens.length-1].contextId=n}function ln(e,t,n){l?Qe():p&&J(o.lessThan)&&(Sn(),J(o.parenL)||E()),function(e,t){const n=u.start;return J(o.parenL)?(e&&E(),un(n,!1),!0):!!function(e){return!e&&(J(o.string)||J(o.num)||J(o.bracketL)||J(o.name)||!!(u.type&o.IS_KEYWORD))}(e)&&(pn(t),un(n,!1),!0)}(e,n)||function(e,t){if(z(o.colon))return void(e?He(t):Mt(!1));let n;n=e?0===u.scopeDepth?j.ObjectShorthandTopLevelDeclaration:t?j.ObjectShorthandBlockScopedDeclaration:j.ObjectShorthandFunctionScopedDeclaration:j.ObjectShorthand,u.tokens[u.tokens.length-1].identifierRole=n,He(t,!0)}(e,t)}function pn(e){p&&Wn(),z(o.bracketL)?(u.tokens[u.tokens.length-1].contextId=e,Mt(),A(o.bracketR),u.tokens[u.tokens.length-1].contextId=e):(J(o.num)||J(o.string)||J(o.bigint)||J(o.decimal)?en():tn(),u.tokens[u.tokens.length-1].identifierRole=j.ObjectKey,u.tokens[u.tokens.length-1].contextId=e)}function un(e,t){const n=m();u.scopeDepth++;const s=u.tokens.length;os(t,n),dn(e,n);const o=u.tokens.length;u.scopes.push(new i(s,o,!0)),u.scopeDepth--}function fn(e){mn(!0);const t=u.tokens.length;u.scopes.push(new i(e,t,!0)),u.scopeDepth--}function dn(e,t=0){l?function(e,t){if(J(o.colon)&&ut(o.colon),J(o.braceL)||!v())mn(!1,t);else{let t=u.tokens.length-1;for(;t>=0&&(u.tokens[t].start>=e||u.tokens[t].type===o._default||u.tokens[t].type===o._export);)u.tokens[t].isType=!0,t--}}(e,t):p?function(e){J(o.colon)&&Tn(),mn(!1,e)}(t):mn(!1,t)}function mn(e,t=0){e&&!J(o.braceL)?Mt():Qn(!0,t)}function kn(e,t=!1){let n=!0;for(;!z(e)&&!u.error;){if(n)n=!1;else if(A(o.comma),z(e))break;_n(t)}}function _n(e){e&&J(o.comma)||(J(o.ellipsis)?(Pe(),an()):J(o.question)?H():Mt(!1,!0))}function gn(){H(),u.tokens[u.tokens.length-1].type=o.name}function yn(e){const t=U(0);A(e||o.colon),Kn(),X(t)}function xn(){A(o.modulo),b(s._checks),z(o.parenL)&&(Bt(),A(o.parenR))}function Tn(){const e=U(0);A(o.colon),J(o.modulo)?xn():(Kn(),J(o.modulo)&&xn()),X(e)}function bn(){J(o._class)?(H(),In(!0)):J(o._function)?(H(),gn(),J(o.lessThan)&&Sn(),A(o.parenL),qn(),A(o.parenR),Tn(),C()):J(o._var)?(H(),Hn(),C()):T(s._module)?z(o.dot)?(b(s._exports),Vn(),C()):function(){for(J(o.string)?en():gn(),A(o.braceL);!J(o.braceR)&&!u.error;)J(o._import)?(H(),gs()):E();A(o.braceR)}():y(s._type)?(H(),An()):y(s._opaque)?(H(),En(!0)):y(s._interface)?(H(),In()):J(o._export)?(A(o._export),z(o._default)?J(o._function)||J(o._class)?bn():(Kn(),C()):J(o._var)||J(o._function)||J(o._class)||y(s._opaque)?bn():J(o.star)||J(o.braceL)||y(s._interface)||y(s._type)||y(s._opaque)?fs():E()):E()}function In(e=!1){if(Cn(),J(o.lessThan)&&Sn(),z(o._extends))do{wn()}while(!e&&z(o.comma));if(y(s._mixins)){H();do{wn()}while(z(o.comma))}if(y(s._implements)){H();do{wn()}while(z(o.comma))}On(e,!1,e)}function wn(){Pn(!1),J(o.lessThan)&&Nn()}function vn(){In()}function Cn(){gn()}function An(){Cn(),J(o.lessThan)&&Sn(),yn(o.eq),C()}function En(e){b(s._type),Cn(),J(o.lessThan)&&Sn(),J(o.colon)&&yn(o.colon),e||yn(o.eq),C()}function Sn(){const e=U(0);J(o.lessThan)||J(o.typeParameterStart)?H():E();do{Wn(),Hn(),z(o.eq)&&Kn(),J(o.greaterThan)||A(o.comma)}while(!J(o.greaterThan)&&!u.error);A(o.greaterThan),X(e)}function Nn(){const e=U(0);for(A(o.lessThan);!J(o.greaterThan)&&!u.error;)Kn(),J(o.greaterThan)||A(o.comma);A(o.greaterThan),X(e)}function Rn(){J(o.num)||J(o.string)?en():gn()}function Ln(){for(J(o.lessThan)&&Sn(),A(o.parenL);!J(o.parenR)&&!J(o.ellipsis)&&!u.error;)jn(),J(o.parenR)||A(o.comma);z(o.ellipsis)&&jn(),A(o.parenR),yn()}function On(e,t,n){let r;for(t&&J(o.braceBarL)?(A(o.braceBarL),r=o.braceBarR):(A(o.braceL),r=o.braceR);!J(r)&&!u.error;){if(n&&y(s._proto)){const t=Y();t!==o.colon&&t!==o.question&&(H(),e=!1)}if(e&&y(s._static)){const e=Y();e!==o.colon&&e!==o.question&&H()}if(Wn(),z(o.bracketL))z(o.bracketL)?(Rn(),A(o.bracketR),A(o.bracketR),J(o.lessThan)||J(o.parenL)?Ln():(z(o.question),yn())):(Y()===o.colon?(Rn(),yn()):Kn(),A(o.bracketR),yn());else if(J(o.parenL)||J(o.lessThan))Ln();else{if(y(s._get)||y(s._set)){const e=Y();e!==o.name&&e!==o.string&&e!==o.num||H()}Dn()}z(o.semi)||z(o.comma)||J(o.braceR)||J(o.braceBarR)||E()}A(r)}function Dn(){if(J(o.ellipsis)){if(A(o.ellipsis),z(o.comma)||z(o.semi),J(o.braceR))return;Kn()}else Rn(),J(o.lessThan)||J(o.parenL)?Ln():(z(o.question),yn())}function Pn(e){for(e||gn();z(o.dot);)gn()}function jn(){const e=Y();e===o.colon||e===o.question?(gn(),z(o.question),yn()):Kn()}function qn(){for(;!J(o.parenR)&&!J(o.ellipsis)&&!u.error;)jn(),J(o.parenR)||A(o.comma);z(o.ellipsis)&&jn()}function Fn(){let e=!1;const t=u.noAnonFunctionType;switch(u.type){case o.name:return y(s._interface)?void function(){if(b(s._interface),z(o._extends))do{wn()}while(z(o.comma));On(!1,!1,!1)}():(gn(),Pn(!0),void(J(o.lessThan)&&Nn()));case o.braceL:return void On(!1,!1,!1);case o.braceBarL:return void On(!1,!0,!1);case o.bracketL:return void function(){for(A(o.bracketL);u.pos<f.length&&!J(o.bracketR)&&(Kn(),!J(o.bracketR));)A(o.comma);A(o.bracketR)}();case o.lessThan:return Sn(),A(o.parenL),qn(),A(o.parenR),A(o.arrow),void Kn();case o.parenL:if(H(),!J(o.parenR)&&!J(o.ellipsis))if(J(o.name)){const t=Y();e=t!==o.question&&t!==o.colon}else e=!0;if(e){if(u.noAnonFunctionType=!1,Kn(),u.noAnonFunctionType=t,u.noAnonFunctionType||!(J(o.comma)||J(o.parenR)&&Y()===o.arrow))return void A(o.parenR);z(o.comma)}return qn(),A(o.parenR),A(o.arrow),void Kn();case o.minus:return H(),void nn();case o.string:case o.num:case o._true:case o._false:case o._null:case o._this:case o._void:case o.star:return void H();default:if(u.type===o._typeof)return A(o._typeof),void Fn();if(u.type&o.IS_KEYWORD)return H(),void(u.tokens[u.tokens.length-1].type=o.name)}E()}function $n(){z(o.question)?$n():function(){for(Fn();!I()&&(J(o.bracketL)||J(o.questionDot));)z(o.questionDot),A(o.bracketL),z(o.bracketR)||(Kn(),A(o.bracketR))}()}function Bn(){$n(),!u.noAnonFunctionType&&z(o.arrow)&&Kn()}function Mn(){for(z(o.bitwiseAND),Bn();z(o.bitwiseAND);)Bn()}function Kn(){!function(){for(z(o.bitwiseOR),Mn();z(o.bitwiseOR);)Mn()}()}function Vn(){yn()}function Hn(){gn(),J(o.colon)&&Vn()}function Wn(){(J(o.plus)||J(o.minus))&&(H(),u.tokens[u.tokens.length-1].isType=!0)}function Un(){b(s._enum),u.tokens[u.tokens.length-1].type=o._enum,gn(),T(s._of)&&H(),A(o.braceL),function(){for(;!J(o.braceR)&&!u.error&&!z(o.ellipsis);)gn(),z(o.eq)&&H(),J(o.braceR)||A(o.comma)}(),A(o.braceR)}function Xn(e){p&&function(){if(J(o.name)&&u.contextualKeyword===s._interface){const e=U(0);return H(),vn(),X(e),!0}return!!y(s._enum)&&(Un(),!0)}()||(J(o.at)&&zn(),function(e){if(l&&function(){if(u.type===o._const){const e=Z();if(e.type===o.name&&e.contextualKeyword===s._enum)return A(o._const),b(s._enum),u.tokens[u.tokens.length-1].type=o._enum,yt(),!0}return!1}())return;const t=u.type;switch(t){case o._break:case o._continue:return H(),void(v()||(gn(),C()));case o._debugger:return H(),void C();case o._do:return H(),Xn(!1),A(o._while),sn(),void z(o.semi);case o._for:return void function(){u.scopeDepth++;const e=u.tokens.length;!function(){H();let e=!1;if(y(s._await)&&(e=!0,H()),A(o.parenL),J(o.semi))return e&&E(),void es();if(J(o._var)||J(o._let)||J(o._const)){const t=u.type;return H(),ns(!0,t),J(o._in)||y(s._of)?void ts(e):void es()}Bt(!0),J(o._in)||y(s._of)?ts(e):(e&&E(),es())}();const t=u.tokens.length;u.scopes.push(new i(e,t,!1)),u.scopeDepth--}();case o._function:if(Y()===o.dot)break;return e||E(),void function(){const e=u.start;H(),ss(e,!0)}();case o._class:return e||E(),void rs(!0);case o._if:return H(),sn(),Xn(!1),void(z(o._else)&&Xn(!1));case o._return:return H(),void(v()||(Bt(),C()));case o._switch:return void function(){H(),sn(),u.scopeDepth++;const e=u.tokens.length;for(A(o.braceL);!J(o.braceR)&&!u.error;)if(J(o._case)||J(o._default)){const e=J(o._case);H(),e&&Bt(),A(o.colon)}else Xn(!0);H();const t=u.tokens.length;u.scopes.push(new i(e,t,!1)),u.scopeDepth--}();case o._throw:return H(),Bt(),void C();case o._try:return void function(){if(H(),Qn(),J(o._catch)){H();let e=null;if(J(o.parenL)&&(u.scopeDepth++,e=u.tokens.length,A(o.parenL),Be(!0),l&&ft(),A(o.parenR)),Qn(),null!=e){const t=u.tokens.length;u.scopes.push(new i(e,t,!1)),u.scopeDepth--}}z(o._finally)&&Qn()}();case o._let:case o._const:e||E();case o._var:return void Yn(t);case o._while:return H(),sn(),void Xn(!1);case o.braceL:return void Qn();case o.semi:return void H();case o._export:case o._import:{const e=Y();if(e===o.parenL||e===o.dot)break;return H(),void(t===o._import?gs():fs())}case o.name:if(u.contextualKeyword===s._async){const e=u.start,t=u.snapshot();if(H(),J(o._function)&&!I())return A(o._function),void ss(e,!0);u.restoreFromSnapshot(t)}}const n=u.tokens.length;Bt();let r=null;if(u.tokens.length===n+1){const e=u.tokens[u.tokens.length-1];e.type===o.name&&(r=e.contextualKeyword)}var a;null!=r?z(o.colon)?Xn(!0):(a=r,l?function(e){(function(e){switch(e){case s._declare:{const e=u.tokens.length-1,t=function(){if(v())return!1;switch(u.type){case o._function:{const e=U(1);return H(),ss(u.start,!0),X(e),!0}case o._class:{const e=U(1);return rs(!0,!1),X(e),!0}case o._const:if(J(o._const)&&x(s._enum)){const e=U(1);return A(o._const),b(s._enum),u.tokens[u.tokens.length-1].type=o._enum,yt(),X(e),!0}case o._var:case o._let:{const e=U(1);return Yn(u.type),X(e),!0}case o.name:{const e=U(1),t=u.contextualKeyword;let n=!1;return t===s._global?(bt(),n=!0):n=vt(t,!0),X(e),n}default:return!1}}();if(t)return u.tokens[e].type=o._declare,!0;break}case s._global:if(J(o.braceL))return xt(),!0;break;default:return vt(e,!1)}return!1})(e)||C()}(a):p?function(e){if(e===s._declare){if(J(o._class)||J(o.name)||J(o._function)||J(o._var)||J(o._export)){const e=U(1);bn(),X(e)}}else if(J(o.name))if(e===s._interface){const e=U(1);vn(),X(e)}else if(e===s._type){const e=U(1);An(),X(e)}else if(e===s._opaque){const e=U(1);En(!1),X(e)}C()}(a):C()):C()}(e))}function zn(){for(;J(o.at);)Gn()}function Gn(){if(H(),z(o.parenL))Bt(),A(o.parenR);else for(gn();z(o.dot);)gn();l?((J(o.lessThan)||J(o.bitShiftL))&&At(),Jn()):Jn()}function Jn(){z(o.parenL)&&Qt()}function Yn(e){H(),ns(!1,e),C()}function Qn(e=!1,t=0){const n=u.tokens.length;u.scopeDepth++,A(o.braceL),t&&(u.tokens[u.tokens.length-1].contextId=t),Zn(o.braceR),t&&(u.tokens[u.tokens.length-1].contextId=t);const s=u.tokens.length;u.scopes.push(new i(n,s,e)),u.scopeDepth--}function Zn(e){for(;!z(e)&&!u.error;)Xn(!0)}function es(){A(o.semi),J(o.semi)||Bt(),A(o.semi),J(o.parenR)||Bt(),A(o.parenR),Xn(!1)}function ts(e){e?T(s._of):H(),Bt(),A(o.parenR),Xn(!1)}function ns(e,t){for(;;){if(Be(t===o._const||t===o._let),l?function(){const e=U(0);w()||z(o.bang),ft(),X(e)}():p&&J(o.colon)&&Vn(),z(o.eq)){const t=u.tokens.length-1;Mt(e),u.tokens[t].rhsEndIndex=u.tokens.length}if(!z(o.comma))break}}function ss(e,t,n=!1){J(o.star)&&H(),!t||n||J(o.name)||J(o._yield)||E();let s=null;J(o.name)&&(t||(s=u.tokens.length,u.scopeDepth++),qe(!1));const r=u.tokens.length;u.scopeDepth++,os(),dn(e);const a=u.tokens.length;u.scopes.push(new i(r,a,!0)),u.scopeDepth--,null!==s&&(u.scopes.push(new i(s,a,!0)),u.scopeDepth--)}function os(e=!1,t=0){l?Qe():p&&function(){if(J(o.lessThan)){const e=U(0);Sn(),X(e)}}(),A(o.parenL),t&&(u.tokens[u.tokens.length-1].contextId=t),Me(o.parenR,!1,!1,e,t),t&&(u.tokens[u.tokens.length-1].contextId=t)}function rs(e,t=!1){const n=m();H(),u.tokens[u.tokens.length-1].contextId=n,u.tokens[u.tokens.length-1].isExpression=!e;let r=null;e||(r=u.tokens.length,u.scopeDepth++),function(e,t=!1){l&&(!e||t)&&y(s._implements)||(J(o.name)&&qe(!0),l?Qe():p&&J(o.lessThan)&&Sn())}(e,t),function(){let e=!1;z(o._extends)?(Ut(),e=!0):e=!1,l?function(e){if(e&&(J(o.lessThan)||J(o.bitShiftL))&&At(),T(s._implements)){u.tokens[u.tokens.length-1].type=o._implements;const e=U(1);_t(),X(e)}}(e):p&&function(e){if(e&&J(o.lessThan)&&Nn(),y(s._implements)){const e=U(0);H(),u.tokens[u.tokens.length-1].type=o._implements;do{Cn(),J(o.lessThan)&&Nn()}while(z(o.comma));X(e)}}(e)}();const a=u.tokens.length;if(function(e){for(A(o.braceL);!z(o.braceR)&&!u.error;)z(o.semi)||(J(o.at)?Gn():cs(u.start,e))}(n),!u.error&&(u.tokens[a].contextId=n,u.tokens[u.tokens.length-1].contextId=n,null!==r)){const e=u.tokens.length;u.scopes.push(new i(r,e,!1)),u.scopeDepth--}}function is(){return J(o.eq)||J(o.semi)||J(o.braceR)||J(o.bang)||J(o.colon)}function as(){return J(o.parenL)||J(o.lessThan)}function cs(e,t){l&&Xe([s._declare,s._public,s._protected,s._private,s._override]);let n=!1;if(J(o.name)&&u.contextualKeyword===s._static){if(gn(),as())return void hs(e,!1);if(is())return void us();if(u.tokens[u.tokens.length-1].type=o._static,n=!0,J(o.braceL))return u.tokens[u.tokens.length-1].contextId=t,void Qn()}!function(e,t,n){if(l&&function(e){const t=u.tokens.length;Xe([s._abstract,s._readonly,s._declare,s._static,s._override]);const n=u.tokens.length;if(st()){for(let s=e?t-1:t;s<n;s++)u.tokens[s].isType=!0;return!0}return!1}(t))return;if(z(o.star))return ls(n),void hs(e,!1);ls(n);let r=!1;const i=u.tokens[u.tokens.length-1];i.contextualKeyword===s._constructor&&(r=!0),ps(),as()?hs(e,r):is()?us():i.contextualKeyword!==s._async||v()?i.contextualKeyword!==s._get&&i.contextualKeyword!==s._set||v()&&J(o.star)?i.contextualKeyword!==s._accessor||v()?v()?us():E():(ls(n),us()):(i.contextualKeyword===s._get?u.tokens[u.tokens.length-1].type=o._get:u.tokens[u.tokens.length-1].type=o._set,ls(n),hs(e,!1)):(u.tokens[u.tokens.length-1].type=o._async,J(o.star)&&H(),ls(n),ps(),hs(e,!1))}(e,n,t)}function hs(e,t){l?Qe():p&&J(o.lessThan)&&Sn(),un(e,t)}function ls(e){pn(e)}function ps(){if(l){const e=U(0);z(o.question),X(e)}}function us(){if(l?(G(o.bang),ft()):p&&J(o.colon)&&Vn(),J(o.eq)){const e=u.tokens.length;H(),Mt(),u.tokens[e].rhsEndIndex=u.tokens.length}C()}function fs(){const e=u.tokens.length-1;l&&(z(o._import)?(y(s._type)&&Y()!==o.eq&&b(s._type),It(),1):z(o.eq)?(Bt(),C(),1):T(s._as)?(b(s._namespace),gn(),C(),1):(y(s._type)&&Y()===o.braceL&&H(),0))||((p?J(o.star)||y(s._type)&&Y()===o.star:J(o.star))?p?function(){if(T(s._type)){const e=U(2);ks(),X(e)}else ks()}():ks():function(){if(l&&St())return!1;if(p&&J(o.name)&&(u.contextualKeyword===s._type||u.contextualKeyword===s._interface||u.contextualKeyword===s._opaque||u.contextualKeyword===s._enum))return!1;if(J(o.name))return u.contextualKeyword!==s._async;if(!J(o._default))return!1;const e=ee(),t=Z(),n=t.type===o.name&&t.contextualKeyword===s._from;if(t.type===o.comma)return!0;if(n){const t=f.charCodeAt(te(e+4));return t===r.quotationMark||t===r.apostrophe}return!1}()?(gn(),J(o.comma)&&Y()===o.star?(A(o.comma),A(o.star),b(s._as),gn()):ds(),ms()):z(o._default)?function(){if(l&&function(){if(y(s._abstract)&&Y()===o._class)return u.type=o._abstract,H(),rs(!0,!0),!0;if(y(s._interface)){const e=U(2);return vt(s._interface,!0),X(e),!0}return!1}())return;if(p&&y(s._enum)&&(Un(),1))return;const e=u.start;z(o._function)?ss(e,!0,!0):y(s._async)&&Y()===o._function?(T(s._async),z(o._function),ss(e,!0,!0)):J(o._class)?rs(!0,!0):J(o.at)?(zn(),rs(!0,!0)):(Mt(),C())}():l&&St()||p&&(y(s._type)||y(s._interface)||y(s._opaque)||y(s._enum))||u.type===o._var||u.type===o._const||u.type===o._let||u.type===o._function||u.type===o._class||y(s._async)||J(o.at)?l?function(){const e=T(s._declare);e&&(u.tokens[u.tokens.length-1].type=o._declare);let t=!1;if(J(o.name))if(e){const e=U(2);t=wt(),X(e)}else t=wt();if(!t)if(e){const e=U(2);Xn(!0),X(e)}else Xn(!0)}():p?function(){if(y(s._type)){const e=U(1);H(),J(o.braceL)?(_s(),ms()):An(),X(e)}else if(y(s._opaque)){const e=U(1);H(),En(!1),X(e)}else if(y(s._interface)){const e=U(1);H(),vn(),X(e)}else Xn(!0)}():Xn(!0):(_s(),ms()),u.tokens[e].rhsEndIndex=u.tokens.length)}function ds(){z(o.comma)&&_s()}function ms(){T(s._from)&&en(),C()}function ks(){A(o.star),y(s._as)?(H(),u.tokens[u.tokens.length-1].type=o._as,gn(),ds(),ms()):ms()}function _s(){let e=!0;for(A(o.braceL);!z(o.braceR)&&!u.error;){if(e)e=!1;else if(A(o.comma),z(o.braceR))break;l?function(){if(gn(),J(o.comma)||J(o.braceR))u.tokens[u.tokens.length-1].identifierRole=j.ExportAccess;else{if(gn(),J(o.comma)||J(o.braceR))return u.tokens[u.tokens.length-1].identifierRole=j.ExportAccess,u.tokens[u.tokens.length-2].isType=!0,void(u.tokens[u.tokens.length-1].isType=!0);gn(),J(o.comma)||J(o.braceR)?u.tokens[u.tokens.length-3].identifierRole=j.ExportAccess:(gn(),u.tokens[u.tokens.length-3].identifierRole=j.ExportAccess,u.tokens[u.tokens.length-4].isType=!0,u.tokens[u.tokens.length-3].isType=!0,u.tokens[u.tokens.length-2].isType=!0,u.tokens[u.tokens.length-1].isType=!0)}}():(gn(),u.tokens[u.tokens.length-1].identifierRole=j.ExportAccess,T(s._as)&&gn())}}function gs(){if(l&&J(o.name)&&Y()===o.eq)It();else{if(l&&y(s._type)){const e=Z();if(e.type===o.name&&e.contextualKeyword!==s._from){if(b(s._type),Y()===o.eq)return void It()}else e.type!==o.star&&e.type!==o.braceL||b(s._type)}J(o.string)||(function(){p&&function(){if(J(o._typeof)||y(s._type)){const t=Z();(((e=t).type===o.name||e.type&o.IS_KEYWORD)&&e.contextualKeyword!==s._from||t.type===o.braceL||t.type===o.star)&&H()}var e}();let e=!0;if(!J(o.name)||(ys(),z(o.comma))){if(J(o.star))return H(),b(s._as),void ys();for(A(o.braceL);!z(o.braceR)&&!u.error;){if(e)e=!1;else if(z(o.colon)&&E("ES2015 named imports do not destructure. Use another statement for destructuring after the import."),A(o.comma),z(o.braceR))break;l?function(){if(gn(),J(o.comma)||J(o.braceR))u.tokens[u.tokens.length-1].identifierRole=j.ImportDeclaration;else{if(gn(),J(o.comma)||J(o.braceR))return u.tokens[u.tokens.length-1].identifierRole=j.ImportDeclaration,u.tokens[u.tokens.length-2].isType=!0,void(u.tokens[u.tokens.length-1].isType=!0);if(gn(),J(o.comma)||J(o.braceR))return u.tokens[u.tokens.length-3].identifierRole=j.ImportAccess,void(u.tokens[u.tokens.length-1].identifierRole=j.ImportDeclaration);gn(),u.tokens[u.tokens.length-3].identifierRole=j.ImportAccess,u.tokens[u.tokens.length-1].identifierRole=j.ImportDeclaration,u.tokens[u.tokens.length-4].isType=!0,u.tokens[u.tokens.length-3].isType=!0,u.tokens[u.tokens.length-2].isType=!0,u.tokens[u.tokens.length-1].isType=!0}}():p?function(){const e=u.contextualKeyword===s._type||u.type===o._typeof;e?H():gn(),y(s._as)&&!x(s._as)?(gn(),(!e||J(o.name)||u.type&o.IS_KEYWORD)&&gn()):(e&&(J(o.name)||u.type&o.IS_KEYWORD)&&gn(),T(s._as)&&gn())}():(Fe(),y(s._as)&&(u.tokens[u.tokens.length-1].identifierRole=j.ImportAccess,H(),Fe()))}}}(),b(s._from)),en(),C()}}function ys(){Fe()}function xs(){return 0===u.pos&&f.charCodeAt(0)===r.numberSign&&f.charCodeAt(1)===r.exclamationMark&&re(2),se(),function(){if(Zn(o.eof),u.scopes.push(new i(0,u.tokens.length,!0)),0!==u.scopeDepth)throw new Error(`Invalid scope depth at end of file: ${u.scopeDepth}`);return new Ts(u.tokens,u.scopes)}()}class Ts{constructor(e,t){this.tokens=e,this.scopes=t}}class bs{__init(){this.resultCode=""}__init2(){this.tokenIndex=0}constructor(e,t,n,s,o){this.code=e,this.tokens=t,this.isFlowEnabled=n,this.disableESTransforms=s,this.helperManager=o,bs.prototype.__init.call(this),bs.prototype.__init2.call(this)}snapshot(){return{resultCode:this.resultCode,tokenIndex:this.tokenIndex}}restoreToSnapshot(e){this.resultCode=e.resultCode,this.tokenIndex=e.tokenIndex}getResultCodeIndex(){return this.resultCode.length}reset(){this.resultCode="",this.tokenIndex=0}matchesContextualAtIndex(e,t){return this.matches1AtIndex(e,o.name)&&this.tokens[e].contextualKeyword===t}identifierNameAtIndex(e){return this.identifierNameForToken(this.tokens[e])}identifierNameAtRelativeIndex(e){return this.identifierNameForToken(this.tokenAtRelativeIndex(e))}identifierName(){return this.identifierNameForToken(this.currentToken())}identifierNameForToken(e){return this.code.slice(e.start,e.end)}rawCodeForToken(e){return this.code.slice(e.start,e.end)}stringValueAtIndex(e){return this.stringValueForToken(this.tokens[e])}stringValue(){return this.stringValueForToken(this.currentToken())}stringValueForToken(e){return this.code.slice(e.start+1,e.end-1)}matches1AtIndex(e,t){return this.tokens[e].type===t}matches2AtIndex(e,t,n){return this.tokens[e].type===t&&this.tokens[e+1].type===n}matches3AtIndex(e,t,n,s){return this.tokens[e].type===t&&this.tokens[e+1].type===n&&this.tokens[e+2].type===s}matches1(e){return this.tokens[this.tokenIndex].type===e}matches2(e,t){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t}matches3(e,t,n){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n}matches4(e,t,n,s){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===s}matches5(e,t,n,s,o){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===s&&this.tokens[this.tokenIndex+4].type===o}matchesContextual(e){return this.matchesContextualAtIndex(this.tokenIndex,e)}matchesContextIdAndLabel(e,t){return this.matches1(e)&&this.currentToken().contextId===t}previousWhitespaceAndComments(){let e=this.code.slice(this.tokenIndex>0?this.tokens[this.tokenIndex-1].end:0,this.tokenIndex<this.tokens.length?this.tokens[this.tokenIndex].start:this.code.length);return this.isFlowEnabled&&(e=e.replace(/@flow/g,"")),e}replaceToken(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}replaceTokenTrimmingLeftWhitespace(e){this.resultCode+=this.previousWhitespaceAndComments().replace(/[^\r\n]/g,""),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}removeInitialToken(){this.replaceToken("")}removeToken(){this.replaceTokenTrimmingLeftWhitespace("")}copyExpectedToken(e){if(this.tokens[this.tokenIndex].type!==e)throw new Error(`Expected token ${e}`);this.copyToken()}copyToken(){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}copyTokenWithPrefix(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}appendTokenPrefix(){const e=this.currentToken();if((e.numNullishCoalesceStarts||e.isOptionalChainStart)&&(e.isAsyncOperation=function(e){let t=e.currentIndex(),n=0;const o=e.currentToken();do{const r=e.tokens[t];if(r.isOptionalChainStart&&n++,r.isOptionalChainEnd&&n--,n+=r.numNullishCoalesceStarts,n-=r.numNullishCoalesceEnds,r.contextualKeyword===s._await&&null==r.identifierRole&&r.scopeDepth===o.scopeDepth)return!0;t+=1}while(n>0&&t<e.tokens.length);return!1}(this)),!this.disableESTransforms){if(e.numNullishCoalesceStarts)for(let t=0;t<e.numNullishCoalesceStarts;t++)e.isAsyncOperation?(this.resultCode+="await ",this.resultCode+=this.helperManager.getHelperName("asyncNullishCoalesce")):this.resultCode+=this.helperManager.getHelperName("nullishCoalesce"),this.resultCode+="(";e.isOptionalChainStart&&(e.isAsyncOperation&&(this.resultCode+="await "),this.tokenIndex>0&&this.tokenAtRelativeIndex(-1).type===o._delete?e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChainDelete"):this.resultCode+=this.helperManager.getHelperName("optionalChainDelete"):e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChain"):this.resultCode+=this.helperManager.getHelperName("optionalChain"),this.resultCode+="([")}}appendTokenSuffix(){const e=this.currentToken();if(e.isOptionalChainEnd&&!this.disableESTransforms&&(this.resultCode+="])"),e.numNullishCoalesceEnds&&!this.disableESTransforms)for(let t=0;t<e.numNullishCoalesceEnds;t++)this.resultCode+="))"}appendCode(e){this.resultCode+=e}currentToken(){return this.tokens[this.tokenIndex]}currentTokenCode(){const e=this.currentToken();return this.code.slice(e.start,e.end)}tokenAtRelativeIndex(e){return this.tokens[this.tokenIndex+e]}currentIndex(){return this.tokenIndex}nextToken(){if(this.tokenIndex===this.tokens.length)throw new Error("Unexpectedly reached end of input.");this.tokenIndex++}previousToken(){this.tokenIndex--}finish(){if(this.tokenIndex!==this.tokens.length)throw new Error("Tried to finish processing tokens before reaching the end.");return this.resultCode+=this.previousWhitespaceAndComments(),this.resultCode}isAtEnd(){return this.tokenIndex===this.tokens.length}}function Is(e,t){for(e.nextToken();e.currentToken().contextId!==t;)e.nextToken();for(;vs(e.tokenAtRelativeIndex(-1));)e.previousToken()}function ws(e){const t=[];e.nextToken();const n=e.currentToken().contextId;if(null==n)throw new Error("Expected context ID on open-paren starting constructor params.");for(;!e.matchesContextIdAndLabel(o.parenR,n);)if(e.currentToken().contextId===n){if(e.nextToken(),vs(e.currentToken())){for(e.nextToken();vs(e.currentToken());)e.nextToken();const n=e.currentToken();if(n.type!==o.name)throw new Error("Expected identifier after access modifiers in constructor arg.");const s=e.identifierNameForToken(n);t.push(`this.${s} = ${s}`)}}else e.nextToken();e.nextToken();let s=e.currentIndex(),r=!1;for(;!e.matchesContextIdAndLabel(o.braceR,n);){if(!r&&e.matches2(o._super,o.parenL)){e.nextToken();const t=e.currentToken().contextId;if(null==t)throw new Error("Expected a context ID on the super call");for(;!e.matchesContextIdAndLabel(o.parenR,t);)e.nextToken();s=e.currentIndex(),r=!0}e.nextToken()}return e.nextToken(),{constructorInitializerStatements:t,constructorInsertPos:s}}function vs(e){return[o._async,o._get,o._set,o.plus,o.minus,o._readonly,o._static,o._public,o._private,o._protected,o._override,o._abstract,o.star,o._declare,o.hash].includes(e.type)}function Cs(e){if(e.matches1(o.bracketL)){const t=e.currentToken().contextId;if(null==t)throw new Error("Expected class context ID on computed name open bracket.");for(;!e.matchesContextIdAndLabel(o.bracketR,t);)e.nextToken();e.nextToken()}else e.nextToken()}function As(e){if(e.removeInitialToken(),e.removeToken(),e.removeToken(),e.removeToken(),e.matches1(o.parenL))e.removeToken(),e.removeToken(),e.removeToken();else for(;e.matches1(o.dot);)e.removeToken(),e.removeToken()}const Es={typeDeclarations:new Set,valueDeclarations:new Set};function Ss(e){const t=new Set,n=new Set;for(let s=0;s<e.tokens.length;s++){const r=e.tokens[s];r.type===o.name&&$(r)&&(r.isType?t.add(e.identifierNameForToken(r)):n.add(e.identifierNameForToken(r)))}return{typeDeclarations:t,valueDeclarations:n}}function Ns(e,t,n){if(!e)return!1;const s=t.currentToken();if(null==s.rhsEndIndex)throw new Error("Expected non-null rhsEndIndex on export token.");const r=s.rhsEndIndex-t.currentIndex();if(3!==r&&(4!==r||!t.matches1AtIndex(s.rhsEndIndex-1,o.semi)))return!1;const i=t.tokenAtRelativeIndex(2);if(i.type!==o.name)return!1;const a=t.identifierNameForToken(i);return n.typeDeclarations.has(a)&&!n.valueDeclarations.has(a)}class Rs extends ge{__init(){this.hadExport=!1}__init2(){this.hadNamedExport=!1}__init3(){this.hadDefaultExport=!1}constructor(e,t,n,s,o,r,i){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=s,this.reactHotLoaderTransformer=o,this.enableLegacyBabel5ModuleInterop=r,this.isTypeScriptTransformEnabled=i,Rs.prototype.__init.call(this),Rs.prototype.__init2.call(this),Rs.prototype.__init3.call(this),this.declarationInfo=i?Ss(t):Es}getPrefixCode(){let e="";return this.hadExport&&(e+='Object.defineProperty(exports, "__esModule", {value: true});'),e}getSuffixCode(){return this.enableLegacyBabel5ModuleInterop&&this.hadDefaultExport&&!this.hadNamedExport?"\nmodule.exports = exports.default;\n":""}process(){return this.tokens.matches3(o._import,o.name,o.eq)?this.processImportEquals():this.tokens.matches1(o._import)?(this.processImport(),!0):this.tokens.matches2(o._export,o.eq)?(this.tokens.replaceToken("module.exports"),!0):this.tokens.matches1(o._export)&&!this.tokens.currentToken().isType?(this.hadExport=!0,this.processExport()):!(!this.tokens.matches2(o.name,o.postIncDec)||!this.processPostIncDec())||(this.tokens.matches1(o.name)||this.tokens.matches1(o.jsxName)?this.processIdentifier():this.tokens.matches1(o.eq)?this.processAssignment():this.tokens.matches1(o.assign)?this.processComplexAssignment():!!this.tokens.matches1(o.preIncDec)&&this.processPreIncDec())}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.importProcessor.isTypeName(e)?As(this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(o._import,o.parenL)){this.tokens.replaceToken("Promise.resolve().then(() => require");const e=this.tokens.currentToken().contextId;if(null==e)throw new Error("Expected context ID on dynamic import invocation.");for(this.tokens.copyToken();!this.tokens.matchesContextIdAndLabel(o.parenR,e);)this.rootTransformer.processToken();this.tokens.replaceToken("))")}else{if(this.removeImportAndDetectIfType())this.tokens.removeToken();else{const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.appendCode(this.importProcessor.claimImportCode(e))}this.tokens.matches1(o.semi)&&this.tokens.removeToken()}}removeImportAndDetectIfType(){if(this.tokens.removeInitialToken(),this.tokens.matchesContextual(s._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,o.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s._from))return this.removeRemainingImport(),!0;if(this.tokens.matches1(o.name)||this.tokens.matches1(o.star))return this.removeRemainingImport(),!1;if(this.tokens.matches1(o.string))return!1;let e=!1;for(;!this.tokens.matches1(o.string);)(!e&&this.tokens.matches1(o.braceL)||this.tokens.matches1(o.comma))&&(this.tokens.removeToken(),(this.tokens.matches2(o.name,o.comma)||this.tokens.matches2(o.name,o.braceR)||this.tokens.matches4(o.name,o.name,o.name,o.comma)||this.tokens.matches4(o.name,o.name,o.name,o.braceR))&&(e=!0)),this.tokens.removeToken();return!e}removeRemainingImport(){for(;!this.tokens.matches1(o.string);)this.tokens.removeToken()}processIdentifier(){const e=this.tokens.currentToken();if(e.shadowsGlobal)return!1;if(e.identifierRole===j.ObjectShorthand)return this.processObjectShorthand();if(e.identifierRole!==j.Access)return!1;const t=this.importProcessor.getIdentifierReplacement(this.tokens.identifierNameForToken(e));if(!t)return!1;let n=this.tokens.currentIndex()+1;for(;n<this.tokens.tokens.length&&this.tokens.tokens[n].type===o.parenR;)n++;return this.tokens.tokens[n].type===o.parenL?this.tokens.tokenAtRelativeIndex(1).type===o.parenL&&this.tokens.tokenAtRelativeIndex(-1).type!==o._new?(this.tokens.replaceToken(`${t}.call(void 0, `),this.tokens.removeToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.parenR)):this.tokens.replaceToken(`(0, ${t})`):this.tokens.replaceToken(t),!0}processObjectShorthand(){const e=this.tokens.identifierName(),t=this.importProcessor.getIdentifierReplacement(e);return!!t&&(this.tokens.replaceToken(`${e}: ${t}`),!0)}processExport(){if(this.tokens.matches2(o._export,o._enum)||this.tokens.matches3(o._export,o._const,o._enum))return!1;if(this.tokens.matches2(o._export,o._default))return this.hadDefaultExport=!0,!this.tokens.matches3(o._export,o._default,o._enum)&&(this.processExportDefault(),!0);if(this.hadNamedExport=!0,this.tokens.matches2(o._export,o._var)||this.tokens.matches2(o._export,o._let)||this.tokens.matches2(o._export,o._const))return this.processExportVar(),!0;if(this.tokens.matches2(o._export,o._function)||this.tokens.matches3(o._export,o.name,o._function))return this.processExportFunction(),!0;if(this.tokens.matches2(o._export,o._class)||this.tokens.matches3(o._export,o._abstract,o._class))return this.processExportClass(),!0;if(this.tokens.matches2(o._export,o.braceL))return this.processExportBindings(),!0;if(this.tokens.matches2(o._export,o.star))return this.processExportStar(),!0;if(this.tokens.matches3(o._export,o.name,o.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(o.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(s._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,o.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}throw new Error("Unrecognized export syntax.")}processAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.isType||t.type!==o.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,o.dot))return!1;if(e>=2&&[o._var,o._let,o._const].includes(this.tokens.tokens[e-2].type))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.copyToken(),this.tokens.appendCode(` ${n} =`),!0)}processComplexAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.type!==o.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,o.dot))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.appendCode(` = ${n}`),this.tokens.copyToken(),!0)}processPreIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e+1];if(t.type!==o.name)return!1;if(t.shadowsGlobal)return!1;if(e+2<this.tokens.tokens.length&&(this.tokens.matches1AtIndex(e+2,o.dot)||this.tokens.matches1AtIndex(e+2,o.bracketL)||this.tokens.matches1AtIndex(e+2,o.parenL)))return!1;const n=this.tokens.identifierNameForToken(t),s=this.importProcessor.resolveExportBinding(n);return!!s&&(this.tokens.appendCode(`${s} = `),this.tokens.copyToken(),!0)}processPostIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e],n=this.tokens.tokens[e+1];if(t.type!==o.name)return!1;if(t.shadowsGlobal)return!1;if(e>=1&&this.tokens.matches1AtIndex(e-1,o.dot))return!1;const s=this.tokens.identifierNameForToken(t),r=this.importProcessor.resolveExportBinding(s);if(!r)return!1;const i=this.tokens.rawCodeForToken(n),a=this.importProcessor.getIdentifierReplacement(s)||s;if("++"===i)this.tokens.replaceToken(`(${a} = ${r} = ${a} + 1, ${a} - 1)`);else{if("--"!==i)throw new Error(`Unexpected operator: ${i}`);this.tokens.replaceToken(`(${a} = ${r} = ${a} - 1, ${a} + 1)`)}return this.tokens.removeToken(),!0}processExportDefault(){if(this.tokens.matches4(o._export,o._default,o._function,o.name)||this.tokens.matches5(o._export,o._default,o.name,o._function,o.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,s._async)){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.processNamedFunction();this.tokens.appendCode(` exports.default = ${e};`)}else if(this.tokens.matches4(o._export,o._default,o._class,o.name)||this.tokens.matches5(o._export,o._default,o._abstract,o._class,o.name)){this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(o._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.default = ${e};`)}else{if(this.tokens.matches3(o._export,o._default,o.at))throw new Error("Export default statements with decorators are not yet supported.");if(Ns(this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken();else if(this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");this.tokens.replaceToken(`let ${e}; exports.`),this.tokens.copyToken(),this.tokens.appendCode(` = ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e)}else this.tokens.replaceToken("exports."),this.tokens.copyToken(),this.tokens.appendCode(" =")}}processExportVar(){this.isSimpleExportVar()?this.processSimpleExportVar():this.processComplexExportVar()}isSimpleExportVar(){let e=this.tokens.currentIndex();if(e++,e++,!this.tokens.matches1AtIndex(e,o.name))return!1;for(e++;e<this.tokens.tokens.length&&this.tokens.tokens[e].isType;)e++;return!!this.tokens.matches1AtIndex(e,o.eq)}processSimpleExportVar(){this.tokens.removeInitialToken(),this.tokens.copyToken();const e=this.tokens.identifierName();for(;!this.tokens.matches1(o.eq);)this.rootTransformer.processToken();const t=this.tokens.currentToken().rhsEndIndex;if(null==t)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<t;)this.rootTransformer.processToken();this.tokens.appendCode(`; exports.${e} = ${e}`)}processComplexExportVar(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.matches1(o.braceL);e&&this.tokens.appendCode("(");let t=0;for(;;)if(this.tokens.matches1(o.braceL)||this.tokens.matches1(o.dollarBraceL)||this.tokens.matches1(o.bracketL))t++,this.tokens.copyToken();else if(this.tokens.matches1(o.braceR)||this.tokens.matches1(o.bracketR))t--,this.tokens.copyToken();else{if(0===t&&!this.tokens.matches1(o.name)&&!this.tokens.currentToken().isType)break;if(this.tokens.matches1(o.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}else{const e=this.tokens.currentToken();if(q(e)){const t=this.tokens.identifierName();let n=this.importProcessor.getIdentifierReplacement(t);if(null===n)throw new Error(`Expected a replacement for ${t} in \`export var\` syntax.`);K(e)&&(n=`${t}: ${n}`),this.tokens.replaceToken(n)}else this.rootTransformer.processToken()}}if(e){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken();this.tokens.appendCode(")")}}processExportFunction(){this.tokens.replaceToken("");const e=this.processNamedFunction();this.tokens.appendCode(` exports.${e} = ${e};`)}processNamedFunction(){if(this.tokens.matches1(o._function))this.tokens.copyToken();else if(this.tokens.matches2(o.name,o._function)){if(!this.tokens.matchesContextual(s._async))throw new Error("Expected async keyword in function export.");this.tokens.copyToken(),this.tokens.copyToken()}if(this.tokens.matches1(o.star)&&this.tokens.copyToken(),!this.tokens.matches1(o.name))throw new Error("Expected identifier for exported function name.");const e=this.tokens.identifierName();if(this.tokens.copyToken(),this.tokens.currentToken().isType)for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return this.tokens.copyExpectedToken(o.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.parenR),this.rootTransformer.processPossibleTypeRange(),this.tokens.copyExpectedToken(o.braceL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.braceR),e}processExportClass(){this.tokens.removeInitialToken(),this.tokens.matches1(o._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.${e} = ${e};`)}processExportBindings(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=[];for(;;){if(this.tokens.matches1(o.braceR)){this.tokens.removeToken();break}const t=fe(this.tokens);for(;this.tokens.currentIndex()<t.endIndex;)this.tokens.removeToken();if(!t.isType&&!this.shouldElideExportedIdentifier(t.leftName)){const n=t.leftName,s=t.rightName,o=this.importProcessor.getIdentifierReplacement(n);e.push(`exports.${s} = ${o||n};`)}if(this.tokens.matches1(o.braceR)){this.tokens.removeToken();break}if(this.tokens.matches2(o.comma,o.braceR)){this.tokens.removeToken(),this.tokens.removeToken();break}if(!this.tokens.matches1(o.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`);this.tokens.removeToken()}if(this.tokens.matchesContextual(s._from)){this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e))}else this.tokens.appendCode(e.join(" "));this.tokens.matches1(o.semi)&&this.tokens.removeToken()}processExportStar(){for(this.tokens.removeInitialToken();!this.tokens.matches1(o.string);)this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.matches1(o.semi)&&this.tokens.removeToken()}shouldElideExportedIdentifier(e){return this.isTypeScriptTransformEnabled&&!this.declarationInfo.valueDeclarations.has(e)}}class Ls extends ge{constructor(e,t,n,s,o){super(),this.tokens=e,this.nameManager=t,this.reactHotLoaderTransformer=n,this.isTypeScriptTransformEnabled=s,this.nonTypeIdentifiers=s?we(e,o):new Set,this.declarationInfo=s?Ss(e):Es}process(){if(this.tokens.matches3(o._import,o.name,o.eq))return this.processImportEquals();if(this.tokens.matches4(o._import,o.name,o.name,o.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s._type)){this.tokens.removeInitialToken();for(let e=0;e<7;e++)this.tokens.removeToken();return!0}if(this.tokens.matches2(o._export,o.eq))return this.tokens.replaceToken("module.exports"),!0;if(this.tokens.matches5(o._export,o._import,o.name,o.name,o.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,s._type)){this.tokens.removeInitialToken();for(let e=0;e<8;e++)this.tokens.removeToken();return!0}if(this.tokens.matches1(o._import))return this.processImport();if(this.tokens.matches2(o._export,o._default))return this.processExportDefault();if(this.tokens.matches2(o._export,o.braceL))return this.processNamedExports();if(this.tokens.matches3(o._export,o.name,o.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(o.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(s._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,o.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}return!1}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.isTypeName(e)?As(this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(o._import,o.parenL))return!1;const e=this.tokens.snapshot();if(this.removeImportTypeBindings()){for(this.tokens.restoreToSnapshot(e);!this.tokens.matches1(o.string);)this.tokens.removeToken();this.tokens.removeToken(),this.tokens.matches1(o.semi)&&this.tokens.removeToken()}return!0}removeImportTypeBindings(){if(this.tokens.copyExpectedToken(o._import),this.tokens.matchesContextual(s._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,o.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s._from))return!0;if(this.tokens.matches1(o.string))return this.tokens.copyToken(),!1;let e=!1,t=!1;if(this.tokens.matches1(o.name)&&(this.isTypeName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(o.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(o.comma)&&(t=!0,this.tokens.removeToken()))),this.tokens.matches1(o.star))this.isTypeName(this.tokens.identifierNameAtRelativeIndex(2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken()):(t&&this.tokens.appendCode(","),e=!0,this.tokens.copyExpectedToken(o.star),this.tokens.copyExpectedToken(o.name),this.tokens.copyExpectedToken(o.name));else if(this.tokens.matches1(o.braceL)){for(t&&this.tokens.appendCode(","),this.tokens.copyToken();!this.tokens.matches1(o.braceR);){const t=fe(this.tokens);if(t.isType||this.isTypeName(t.rightName)){for(;this.tokens.currentIndex()<t.endIndex;)this.tokens.removeToken();this.tokens.matches1(o.comma)&&this.tokens.removeToken()}else{for(e=!0;this.tokens.currentIndex()<t.endIndex;)this.tokens.copyToken();this.tokens.matches1(o.comma)&&this.tokens.copyToken()}}this.tokens.copyExpectedToken(o.braceR)}return!e}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}processExportDefault(){if(Ns(this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))return this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken(),!0;if(!(this.tokens.matches4(o._export,o._default,o._function,o.name)||this.tokens.matches5(o._export,o._default,o.name,o._function,o.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,s._async)||this.tokens.matches4(o._export,o._default,o._class,o.name)||this.tokens.matches5(o._export,o._default,o._abstract,o._class,o.name))&&this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");return this.tokens.replaceToken(`let ${e}; export`),this.tokens.copyToken(),this.tokens.appendCode(` ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e),!0}return!1}processNamedExports(){if(!this.isTypeScriptTransformEnabled)return!1;for(this.tokens.copyExpectedToken(o._export),this.tokens.copyExpectedToken(o.braceL);!this.tokens.matches1(o.braceR);){const e=fe(this.tokens);if(e.isType||this.shouldElideExportedName(e.leftName)){for(;this.tokens.currentIndex()<e.endIndex;)this.tokens.removeToken();this.tokens.matches1(o.comma)&&this.tokens.removeToken()}else{for(;this.tokens.currentIndex()<e.endIndex;)this.tokens.copyToken();this.tokens.matches1(o.comma)&&this.tokens.copyToken()}}return this.tokens.copyExpectedToken(o.braceR),!0}shouldElideExportedName(e){return this.isTypeScriptTransformEnabled&&this.declarationInfo.typeDeclarations.has(e)&&!this.declarationInfo.valueDeclarations.has(e)}}class Os extends ge{constructor(e,t,n){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=n}process(){return!(!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())&&(this.tokens.matches1(o._enum)?(this.processEnum(),0):this.tokens.matches2(o._export,o._enum)?(this.processNamedExportEnum(),0):!this.tokens.matches3(o._export,o._default,o._enum)||(this.processDefaultExportEnum(),0)))}processNamedExportEnum(){if(this.isImportsTransformEnabled){this.tokens.removeInitialToken();const e=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.tokens.appendCode(` exports.${e} = ${e};`)}else this.tokens.copyToken(),this.processEnum()}processDefaultExportEnum(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.isImportsTransformEnabled?this.tokens.appendCode(` exports.default = ${e};`):this.tokens.appendCode(` export default ${e};`)}processEnum(){this.tokens.replaceToken("const"),this.tokens.copyExpectedToken(o.name);let e=!1;this.tokens.matchesContextual(s._of)&&(this.tokens.removeToken(),e=this.tokens.matchesContextual(s._symbol),this.tokens.removeToken());const t=this.tokens.matches3(o.braceL,o.name,o.eq);this.tokens.appendCode(' = require("flow-enums-runtime")');const n=!e&&!t;for(this.tokens.replaceTokenTrimmingLeftWhitespace(n?".Mirrored([":"({");!this.tokens.matches1(o.braceR);){if(this.tokens.matches1(o.ellipsis)){this.tokens.removeToken();break}this.processEnumElement(e,t),this.tokens.matches1(o.comma)&&this.tokens.copyToken()}this.tokens.replaceToken(n?"]);":"});")}processEnumElement(e,t){if(e){const e=this.tokens.identifierName();this.tokens.copyToken(),this.tokens.appendCode(`: Symbol("${e}")`)}else t?(this.tokens.copyToken(),this.tokens.replaceTokenTrimmingLeftWhitespace(":"),this.tokens.copyToken()):this.tokens.replaceToken(`"${this.tokens.identifierName()}"`)}}const Ds="jest",Ps=["mock","unmock","enableAutomock","disableAutomock"];class js extends ge{__init(){this.hoistedFunctionNames=[]}constructor(e,t,n,s){super(),this.rootTransformer=e,this.tokens=t,this.nameManager=n,this.importProcessor=s,js.prototype.__init.call(this)}process(){return!(0!==this.tokens.currentToken().scopeDepth||!this.tokens.matches4(o.name,o.dot,o.name,o.parenL)||this.tokens.identifierName()!==Ds)&&!function(e){let t,n=e[0],s=1;for(;s<e.length;){const o=e[s],r=e[s+1];if(s+=2,("optionalAccess"===o||"optionalCall"===o)&&null==n)return;"access"===o||"optionalAccess"===o?(t=n,n=r(n)):"call"!==o&&"optionalCall"!==o||(n=r(((...e)=>n.call(t,...e))),t=void 0)}return n}([this,"access",e=>e.importProcessor,"optionalAccess",e=>e.getGlobalNames,"call",e=>e(),"optionalAccess",e=>e.has,"call",e=>e(Ds)])&&this.extractHoistedCalls()}getHoistedCode(){return this.hoistedFunctionNames.length>0?this.hoistedFunctionNames.map((e=>`${e}();`)).join(""):""}extractHoistedCalls(){this.tokens.removeToken();let e=!1;for(;this.tokens.matches3(o.dot,o.name,o.parenL);){const t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);if(Ps.includes(t)){const t=this.nameManager.claimFreeName("__jestHoist");this.hoistedFunctionNames.push(t),this.tokens.replaceToken(`function ${t}(){jest.`),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.parenR),this.tokens.appendCode(";}"),e=!1}else e?this.tokens.copyToken():this.tokens.replaceToken("jest."),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.parenR),e=!0}return!0}}class qs extends ge{constructor(e){super(),this.tokens=e}process(){if(this.tokens.matches1(o.num)){const e=this.tokens.currentTokenCode();if(e.includes("_"))return this.tokens.replaceToken(e.replace(/_/g,"")),!0}return!1}}class Fs extends ge{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){return!!this.tokens.matches2(o._catch,o.braceL)&&(this.tokens.copyToken(),this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`),!0)}}class $s extends ge{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){if(this.tokens.matches1(o.nullishCoalescing)){const e=this.tokens.currentToken();return this.tokens.tokens[e.nullishStartIndex].isAsyncOperation?this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("):this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("),!0}if(this.tokens.matches1(o._delete)&&this.tokens.tokenAtRelativeIndex(1).isOptionalChainStart)return this.tokens.removeInitialToken(),!0;const e=this.tokens.currentToken().subscriptStartIndex;if(null!=e&&this.tokens.tokens[e].isOptionalChainStart&&this.tokens.tokenAtRelativeIndex(-1).type!==o._super){const t=this.nameManager.claimFreeName("_");let n;if(n=e>0&&this.tokens.matches1AtIndex(e-1,o._delete)&&this.isLastSubscriptInChain()?`${t} => delete ${t}`:`${t} => ${t}`,this.tokens.tokens[e].isAsyncOperation&&(n=`async ${n}`),this.tokens.matches2(o.questionDot,o.parenL)||this.tokens.matches2(o.questionDot,o.lessThan))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${n}`);else if(this.tokens.matches2(o.questionDot,o.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${n}`);else if(this.tokens.matches1(o.questionDot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${n}.`);else if(this.tokens.matches1(o.dot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}.`);else if(this.tokens.matches1(o.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}[`);else{if(!this.tokens.matches1(o.parenL))throw new Error("Unexpected subscript operator in optional chain.");this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${n}(`)}return!0}return!1}isLastSubscriptInChain(){let e=0;for(let t=this.tokens.currentIndex()+1;;t++){if(t>=this.tokens.tokens.length)throw new Error("Reached the end of the code while finding the end of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e++:this.tokens.tokens[t].isOptionalChainEnd&&e--,e<0)return!0;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return!1}}justSkippedSuper(){let e=0,t=this.tokens.currentIndex()-1;for(;;){if(t<0)throw new Error("Reached the start of the code while finding the start of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e--:this.tokens.tokens[t].isOptionalChainEnd&&e++,e<0)return!1;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return this.tokens.tokens[t-1].type===o._super;t--}}}class Bs extends ge{constructor(e,t,n,s){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.options=s}process(){const e=this.tokens.currentIndex();if("createReactClass"===this.tokens.identifierName()){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("createReactClass");return t?this.tokens.replaceToken(`(0, ${t})`):this.tokens.copyToken(),this.tryProcessCreateClassCall(e),!0}if(this.tokens.matches3(o.name,o.dot,o.name)&&"React"===this.tokens.identifierName()&&"createClass"===this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("React")||"React";return t?(this.tokens.replaceToken(t),this.tokens.copyToken(),this.tokens.copyToken()):(this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken()),this.tryProcessCreateClassCall(e),!0}return!1}tryProcessCreateClassCall(e){const t=this.findDisplayName(e);t&&this.classNeedsDisplayName()&&(this.tokens.copyExpectedToken(o.parenL),this.tokens.copyExpectedToken(o.braceL),this.tokens.appendCode(`displayName: '${t}',`),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(o.braceR),this.tokens.copyExpectedToken(o.parenR))}findDisplayName(e){return e<2?null:this.tokens.matches2AtIndex(e-2,o.name,o.eq)||e>=2&&this.tokens.tokens[e-2].identifierRole===j.ObjectKey?this.tokens.identifierNameAtIndex(e-2):this.tokens.matches2AtIndex(e-2,o._export,o._default)?this.getDisplayNameFromFilename():null}getDisplayNameFromFilename(){const e=(this.options.filePath||"unknown").split("/"),t=e[e.length-1],n=t.lastIndexOf("."),s=-1===n?t:t.slice(0,n);return"index"===s&&e[e.length-2]?e[e.length-2]:s}classNeedsDisplayName(){let e=this.tokens.currentIndex();if(!this.tokens.matches2(o.parenL,o.braceL))return!1;const t=e+1,n=this.tokens.tokens[t].contextId;if(null==n)throw new Error("Expected non-null context ID on object open-brace.");for(;e<this.tokens.tokens.length;e++){const t=this.tokens.tokens[e];if(t.type===o.braceR&&t.contextId===n){e++;break}if("displayName"===this.tokens.identifierNameAtIndex(e)&&this.tokens.tokens[e].identifierRole===j.ObjectKey&&t.contextId===n)return!1}if(e===this.tokens.tokens.length)throw new Error("Unexpected end of input when processing React class.");return this.tokens.matches1AtIndex(e,o.parenR)||this.tokens.matches2AtIndex(e,o.comma,o.parenR)}}class Ms extends ge{__init(){this.extractedDefaultExportName=null}constructor(e,t){super(),this.tokens=e,this.filePath=t,Ms.prototype.__init.call(this)}setExtractedDefaultExportName(e){this.extractedDefaultExportName=e}getPrefixCode(){return"\n      (function () {\n        var enterModule = require('react-hot-loader').enterModule;\n        enterModule && enterModule(module);\n      })();".replace(/\s+/g," ").trim()}getSuffixCode(){const e=new Set;for(const t of this.tokens.tokens)!t.isType&&$(t)&&t.identifierRole!==j.ImportDeclaration&&e.add(this.tokens.identifierNameForToken(t));const t=Array.from(e).map((e=>({variableName:e,uniqueLocalName:e})));return this.extractedDefaultExportName&&t.push({variableName:this.extractedDefaultExportName,uniqueLocalName:"default"}),`\n;(function () {\n  var reactHotLoader = require('react-hot-loader').default;\n  var leaveModule = require('react-hot-loader').leaveModule;\n  if (!reactHotLoader) {\n    return;\n  }\n${t.map((({variableName:e,uniqueLocalName:t})=>`  reactHotLoader.register(${e}, "${t}", ${JSON.stringify(this.filePath||"")});`)).join("\n")}\n  leaveModule(module);\n})();`}process(){return!1}}const Ks=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await","false","null","true"]);function Vs(e){if(0===e.length)return!1;if(!D[e.charCodeAt(0)])return!1;for(let t=1;t<e.length;t++)if(!O[e.charCodeAt(t)])return!1;return!Ks.has(e)}class Hs extends ge{constructor(e,t,n){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=n}process(){return!(!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())&&(this.tokens.matches1(o._public)||this.tokens.matches1(o._protected)||this.tokens.matches1(o._private)||this.tokens.matches1(o._abstract)||this.tokens.matches1(o._readonly)||this.tokens.matches1(o._override)||this.tokens.matches1(o.nonNullAssertion)?(this.tokens.removeInitialToken(),0):this.tokens.matches1(o._enum)||this.tokens.matches2(o._const,o._enum)?(this.processEnum(),0):!this.tokens.matches2(o._export,o._enum)&&!this.tokens.matches3(o._export,o._const,o._enum)||(this.processEnum(!0),0)))}processEnum(e=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(o._const)||this.tokens.matches1(o._enum);)this.tokens.removeToken();const t=this.tokens.identifierName();this.tokens.removeToken(),e&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${t}; (function (${t})`),this.tokens.copyExpectedToken(o.braceL),this.processEnumBody(t),this.tokens.copyExpectedToken(o.braceR),e&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${t} || (exports.${t} = ${t} = {}));`):this.tokens.appendCode(`)(${t} || (${t} = {}));`)}processEnumBody(e){let t=null;for(;!this.tokens.matches1(o.braceR);){const{nameStringCode:n,variableName:s}=this.extractEnumKeyInfo(this.tokens.currentToken());this.tokens.removeInitialToken(),this.tokens.matches3(o.eq,o.string,o.comma)||this.tokens.matches3(o.eq,o.string,o.braceR)?this.processStringLiteralEnumMember(e,n,s):this.tokens.matches1(o.eq)?this.processExplicitValueEnumMember(e,n,s):this.processImplicitValueEnumMember(e,n,s,t),this.tokens.matches1(o.comma)&&this.tokens.removeToken(),t=null!=s?s:`${e}[${n}]`}}extractEnumKeyInfo(e){if(e.type===o.name){const t=this.tokens.identifierNameForToken(e);return{nameStringCode:`"${t}"`,variableName:Vs(t)?t:null}}if(e.type===o.string){const t=this.tokens.stringValueForToken(e);return{nameStringCode:this.tokens.code.slice(e.start,e.end),variableName:Vs(t)?t:null}}throw new Error("Expected name or string at beginning of enum element.")}processStringLiteralEnumMember(e,t,n){null!=n?(this.tokens.appendCode(`const ${n}`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(`; ${e}[${t}] = ${n};`)):(this.tokens.appendCode(`${e}[${t}]`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(";"))}processExplicitValueEnumMember(e,t,n){const s=this.tokens.currentToken().rhsEndIndex;if(null==s)throw new Error("Expected rhsEndIndex on enum assign.");if(null!=n){for(this.tokens.appendCode(`const ${n}`),this.tokens.copyToken();this.tokens.currentIndex()<s;)this.rootTransformer.processToken();this.tokens.appendCode(`; ${e}[${e}[${t}] = ${n}] = ${t};`)}else{for(this.tokens.appendCode(`${e}[${e}[${t}]`),this.tokens.copyToken();this.tokens.currentIndex()<s;)this.rootTransformer.processToken();this.tokens.appendCode(`] = ${t};`)}}processImplicitValueEnumMember(e,t,n,s){let o=null!=s?`${s} + 1`:"0";null!=n&&(this.tokens.appendCode(`const ${n} = ${o}; `),o=n),this.tokens.appendCode(`${e}[${e}[${t}] = ${o}] = ${t};`)}}class Ws{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(e,t,n,s){Ws.prototype.__init.call(this),Ws.prototype.__init2.call(this),this.nameManager=e.nameManager,this.helperManager=e.helperManager;const{tokenProcessor:o,importProcessor:r}=e;this.tokens=o,this.isImportsTransformEnabled=t.includes("imports"),this.isReactHotLoaderTransformEnabled=t.includes("react-hot-loader"),this.disableESTransforms=Boolean(s.disableESTransforms),s.disableESTransforms||(this.transformers.push(new $s(o,this.nameManager)),this.transformers.push(new qs(o)),this.transformers.push(new Fs(o,this.nameManager))),t.includes("jsx")&&(this.transformers.push(new ye(this,o,r,this.nameManager,s)),this.transformers.push(new Bs(this,o,r,s)));let i=null;if(t.includes("react-hot-loader")){if(!s.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");i=new Ms(o,s.filePath),this.transformers.push(i)}if(t.includes("imports")){if(null===r)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new Rs(this,o,r,this.nameManager,i,n,t.includes("typescript")))}else this.transformers.push(new Ls(o,this.nameManager,i,t.includes("typescript"),s));t.includes("flow")&&this.transformers.push(new Os(this,o,t.includes("imports"))),t.includes("typescript")&&this.transformers.push(new Hs(this,o,t.includes("imports"))),t.includes("jest")&&this.transformers.push(new js(this,o,this.nameManager,r))}transform(){this.tokens.reset(),this.processBalancedCode();let e=this.isImportsTransformEnabled?'"use strict";':"";for(const t of this.transformers)e+=t.getPrefixCode();e+=this.helperManager.emitHelpers(),e+=this.generatedVariables.map((e=>` var ${e};`)).join("");for(const t of this.transformers)e+=t.getHoistedCode();let t="";for(const e of this.transformers)t+=e.getSuffixCode();let n=this.tokens.finish();if(n.startsWith("#!")){let s=n.indexOf("\n");return-1===s&&(s=n.length,n+="\n"),n.slice(0,s+1)+e+n.slice(s+1)+t}return e+this.tokens.finish()+t}processBalancedCode(){let e=0,t=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(o.braceL)||this.tokens.matches1(o.dollarBraceL))e++;else if(this.tokens.matches1(o.braceR)){if(0===e)return;e--}if(this.tokens.matches1(o.parenL))t++;else if(this.tokens.matches1(o.parenR)){if(0===t)return;t--}this.processToken()}}processToken(){if(this.tokens.matches1(o._class))this.processClass();else{for(const e of this.transformers)if(e.process())return;this.tokens.copyToken()}}processNamedClass(){if(!this.tokens.matches2(o._class,o.name))throw new Error("Expected identifier for exported class name.");const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),e}processClass(){const e=function(e,t,n,r){const i=t.snapshot(),a=function(e){const t=e.currentToken(),n=t.contextId;if(null==n)throw new Error("Expected context ID on class token.");const s=t.isExpression;if(null==s)throw new Error("Expected isExpression on class token.");let r=null,i=!1;for(e.nextToken(),e.matches1(o.name)&&(r=e.identifierName());!e.matchesContextIdAndLabel(o.braceL,n);)e.matches1(o._extends)&&!e.currentToken().isType&&(i=!0),e.nextToken();return{isExpression:s,className:r,hasSuperclass:i}}(t);let c=[];const h=[],l=[];let p=null;const u=[],f=[],d=t.currentToken().contextId;if(null==d)throw new Error("Expected non-null class context ID on class open-brace.");for(t.nextToken();!t.matchesContextIdAndLabel(o.braceR,d);)if(t.matchesContextual(s._constructor)&&!t.currentToken().isType)({constructorInitializerStatements:c,constructorInsertPos:p}=ws(t));else if(t.matches1(o.semi))r||f.push({start:t.currentIndex(),end:t.currentIndex()+1}),t.nextToken();else if(t.currentToken().isType)t.nextToken();else{const i=t.currentIndex();let a=!1,m=!1,k=!1;for(;vs(t.currentToken());)t.matches1(o._static)&&(a=!0),t.matches1(o.hash)&&(m=!0),t.matches1(o._declare)&&(k=!0),t.nextToken();if(a&&t.matches1(o.braceL)){Is(t,d);continue}if(m){Is(t,d);continue}if(t.matchesContextual(s._constructor)&&!t.currentToken().isType){({constructorInitializerStatements:c,constructorInsertPos:p}=ws(t));continue}const _=t.currentIndex();if(Cs(t),t.matches1(o.lessThan)||t.matches1(o.parenL)){Is(t,d);continue}for(;t.currentToken().isType;)t.nextToken();if(t.matches1(o.eq)){const s=t.currentIndex(),o=t.currentToken().rhsEndIndex;if(null==o)throw new Error("Expected rhsEndIndex on class field assignment.");for(t.nextToken();t.currentIndex()<o;)e.processToken();let r;a?(r=n.claimFreeName("__initStatic"),l.push(r)):(r=n.claimFreeName("__init"),h.push(r)),u.push({initializerName:r,equalsIndex:s,start:_,end:t.currentIndex()})}else r&&!k||f.push({start:i,end:t.currentIndex()})}return t.restoreToSnapshot(i),r?{headerInfo:a,constructorInitializerStatements:c,instanceInitializerNames:[],staticInitializerNames:[],constructorInsertPos:p,fields:[],rangesToRemove:f}:{headerInfo:a,constructorInitializerStatements:c,instanceInitializerNames:h,staticInitializerNames:l,constructorInsertPos:p,fields:u,rangesToRemove:f}}(this,this.tokens,this.nameManager,this.disableESTransforms),t=(e.headerInfo.isExpression||!e.headerInfo.className)&&e.staticInitializerNames.length+e.instanceInitializerNames.length>0;let n=e.headerInfo.className;t&&(n=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(n),this.tokens.appendCode(` (${n} =`));const r=this.tokens.currentToken().contextId;if(null==r)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(o._class);!this.tokens.matchesContextIdAndLabel(o.braceL,r);)this.processToken();this.processClassBody(e,n);const i=e.staticInitializerNames.map((e=>`${n}.${e}()`));t?this.tokens.appendCode(`, ${i.map((e=>`${e}, `)).join("")}${n})`):e.staticInitializerNames.length>0&&this.tokens.appendCode(` ${i.map((e=>`${e};`)).join(" ")}`)}processClassBody(e,t){const{headerInfo:n,constructorInsertPos:s,constructorInitializerStatements:r,fields:i,instanceInitializerNames:a,rangesToRemove:c}=e;let h=0,l=0;const p=this.tokens.currentToken().contextId;if(null==p)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(o.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");const u=r.length+a.length>0;if(null===s&&u){const e=this.makeConstructorInitCode(r,a,t);if(n.hasSuperclass){const t=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${t}) { super(...${t}); ${e}; }`)}else this.tokens.appendCode(`constructor() { ${e}; }`)}for(;!this.tokens.matchesContextIdAndLabel(o.braceR,p);)if(h<i.length&&this.tokens.currentIndex()===i[h].start){let e=!1;for(this.tokens.matches1(o.bracketL)?this.tokens.copyTokenWithPrefix(`${i[h].initializerName}() {this`):this.tokens.matches1(o.string)||this.tokens.matches1(o.num)?(this.tokens.copyTokenWithPrefix(`${i[h].initializerName}() {this[`),e=!0):this.tokens.copyTokenWithPrefix(`${i[h].initializerName}() {this.`);this.tokens.currentIndex()<i[h].end;)e&&this.tokens.currentIndex()===i[h].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),h++}else if(l<c.length&&this.tokens.currentIndex()>=c[l].start){for(this.tokens.currentIndex()<c[l].end&&this.tokens.removeInitialToken();this.tokens.currentIndex()<c[l].end;)this.tokens.removeToken();l++}else this.tokens.currentIndex()===s?(this.tokens.copyToken(),u&&this.tokens.appendCode(`;${this.makeConstructorInitCode(r,a,t)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(o.braceR)}makeConstructorInitCode(e,t,n){return[...e,...t.map((e=>`${n}.prototype.${e}.call(this)`))].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(o.parenR,o.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType;)e++;if(this.tokens.matches1AtIndex(e,o.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<e;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(s._async)&&!this.tokens.matches1(o._async))return!1;const e=this.tokens.tokenAtRelativeIndex(1);if(e.type!==o.lessThan||!e.isType)return!1;let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,o.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<t;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}}var Us="\n";function Xs(e,t,n){t++,e.matches1AtIndex(t,o.parenL)||(e.matches1AtIndex(t,o.name)&&(n.add(e.identifierNameAtIndex(t)),t++,e.matches1AtIndex(t,o.comma)&&t++),e.matches1AtIndex(t,o.star)&&(t+=2,n.add(e.identifierNameAtIndex(t)),t++),e.matches1AtIndex(t,o.braceL)&&function(e,t,n){for(;;){if(e.matches1AtIndex(t,o.braceR))return;const s=fe(e,t);if(t=s.endIndex,s.isType||n.add(s.rightName),e.matches2AtIndex(t,o.comma,o.braceR))return;if(e.matches1AtIndex(t,o.braceR))return;if(!e.matches1AtIndex(t,o.comma))throw new Error(`Unexpected token: ${JSON.stringify(e.tokens[t])}`);t++}}(e,++t,n))}function zs(e,t){!function(e){De.strictCheck(e)}(t);try{const n=function(e,t){const n=t.transforms.includes("jsx"),s=t.transforms.includes("typescript"),r=t.transforms.includes("flow"),i=!0===t.disableESTransforms,a=function(e,t,n,s){if(s&&n)throw new Error("Cannot combine flow and typescript plugins.");g(e,t,n,s);const o=xs();if(u.error)throw k(u.error);return o}(e,n,s,r),c=a.tokens,h=a.scopes,l=new Re(e,c),p=new Ee(l),f=new bs(e,c,r,i,p),d=Boolean(t.enableLegacyTypeScriptModuleInterop);let m=null;return t.transforms.includes("imports")?(m=new ve(l,f,d,t,t.transforms.includes("typescript"),p),m.preprocessTokens(),Se(f,h,m.getGlobalNames()),t.transforms.includes("typescript")&&m.pruneTypeOnlyImports()):t.transforms.includes("typescript")&&Se(f,h,function(e){const t=new Set;for(let n=0;n<e.tokens.length;n++)e.matches1AtIndex(n,o._import)&&!e.matches3AtIndex(n,o._import,o.name,o.eq)&&Xs(e,n,t);return t}(f)),{tokenProcessor:f,scopes:h,nameManager:l,importProcessor:m,helperManager:p}}(e,t);let s={code:new Ws(n,t.transforms,Boolean(t.enableLegacyBabel5ModuleInterop),t).transform()};if(t.sourceMapOptions){if(!t.filePath)throw new Error("filePath must be specified when generating a source map.");s={...s,sourceMap:Ce(s.code,t.filePath,t.sourceMapOptions)}}return s}catch(e){throw t.filePath&&(e.message=`Error transforming ${t.filePath}: ${e.message}`),e}}function Gs(e){return zs(e,{transforms:["typescript"]}).code.trim()}!function(){function e(e){this.string=e;for(var t=[0],n=0;n<e.length;)switch(e[n]){case Us:n+=Us.length,t.push(n);break;case"\r":e[n+="\r".length]===Us&&(n+=Us.length),t.push(n);break;default:n++}this.offsets=t}e.prototype.locationForIndex=function(e){if(e<0||e>this.string.length)return null;for(var t=0,n=this.offsets;n[t+1]<=e;)t++;return{line:t,column:e-n[t]}},e.prototype.indexForLocation=function(e){var t=e.line,n=e.column;return t<0||t>=this.offsets.length||n<0||n>this.lengthOfLine(t)?null:this.offsets[t]+n},e.prototype.lengthOfLine=function(e){var t=this.offsets[e];return(e===this.offsets.length-1?this.string.length:this.offsets[e+1])-t}}()}},t={};function n(s){if(t[s])return t[s].exports;var o=t[s]={exports:{}};return e[s].call(o.exports,o,o.exports,n),o.exports}return n.d=(e,t)=>{for(var s in t)n.o(t,s)&&!n.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n(624)})().default;