@drincs/pixi-vn 1.5.13 → 1.5.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/canvas.cjs +3 -2
- package/dist/canvas.d.cts +46 -105
- package/dist/canvas.d.ts +46 -105
- package/dist/canvas.mjs +3 -2
- package/dist/characters.cjs +2 -1
- package/dist/characters.mjs +2 -1
- package/dist/chunk-46QBDRUK.mjs +2 -0
- package/dist/chunk-52EK6LYW.mjs +2 -0
- package/dist/chunk-INJYRMJ3.mjs +2 -0
- package/dist/{chunk-TTRUPDAB.mjs → chunk-JJFD2BVW.mjs} +2 -1
- package/dist/chunk-JJFD2BVW.mjs.map +1 -0
- package/dist/chunk-OXRIVLY2.mjs +2 -0
- package/dist/chunk-SOFV7YZ5.mjs +2 -0
- package/dist/chunk-XZMYXKAY.mjs +2 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.cts +399 -0
- package/dist/core.d.ts +399 -0
- package/dist/core.mjs +1 -0
- package/dist/history.cjs +2 -1
- package/dist/history.d.cts +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/history.mjs +2 -1
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +9 -10
- package/dist/index.d.ts +9 -10
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -0
- package/dist/motion.cjs +2 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +96 -0
- package/dist/motion.d.ts +96 -0
- package/dist/motion.mjs +2 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/narration.cjs +3 -2
- package/dist/narration.mjs +3 -2
- package/dist/pixi/browser.js +170 -167
- package/dist/sound.cjs +2 -1
- package/dist/sound.mjs +2 -1
- package/dist/storage.cjs +2 -1
- package/dist/storage.mjs +2 -1
- package/dist/vite-listener.cjs +2 -1
- package/dist/vite-listener.cjs.map +1 -0
- package/dist/vite-listener.mjs +2 -1
- package/dist/vite-listener.mjs.map +1 -0
- package/dist/vite.cjs +2 -1
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.mjs +2 -1
- package/dist/vite.mjs.map +1 -0
- package/package.json +27 -10
- package/dist/chunk-6GO4XVS7.mjs +0 -1
- package/dist/chunk-6IVCTY6P.mjs +0 -1
- package/dist/chunk-GNJIUFU2.mjs +0 -1
- package/dist/chunk-HVEJJGVC.mjs +0 -1
- package/dist/chunk-XDBHD3IV.mjs +0 -1
- package/dist/chunk-XSN6P5JL.mjs +0 -0
- package/dist/unifier.cjs +0 -1
- package/dist/unifier.mjs +0 -1
|
@@ -1 +1,2 @@
|
|
|
1
|
-
var f=Object.defineProperty;var g=a=>{throw TypeError(a)};var i=(a,b,c)=>b in a?f(a,b,{enumerable:true,configurable:true,writable:true,value:c}):a[b]=c;var l=(a,b)=>{for(var c in b)f(a,c,{get:b[c],enumerable:true});};var m=(a,b,c)=>i(a,typeof b!="symbol"?b+"":b,c),e=(a,b,c)=>b.has(a)||g("Cannot "+c);var j=(a,b,c)=>(e(a,b,"read from private field"),c?c.call(a):b.get(a)),n=(a,b,c)=>b.has(a)?g("Cannot add the same private member more than once"):b instanceof WeakSet?b.add(a):b.set(a,c),k=(a,b,c,d)=>(e(a,b,"write to private field"),d?d.call(a,c):b.set(a,c),c),o=(a,b,c)=>(e(a,b,"access private method"),c);var p=(a,b,c,d)=>({set _(h){k(a,b,h,c);},get _(){return j(a,b,d)}});export{l as a,m as b,j as c,n as d,k as e,o as f,p as g}
|
|
1
|
+
var f=Object.defineProperty;var g=a=>{throw TypeError(a)};var i=(a,b,c)=>b in a?f(a,b,{enumerable:true,configurable:true,writable:true,value:c}):a[b]=c;var l=(a,b)=>{for(var c in b)f(a,c,{get:b[c],enumerable:true});};var m=(a,b,c)=>i(a,typeof b!="symbol"?b+"":b,c),e=(a,b,c)=>b.has(a)||g("Cannot "+c);var j=(a,b,c)=>(e(a,b,"read from private field"),c?c.call(a):b.get(a)),n=(a,b,c)=>b.has(a)?g("Cannot add the same private member more than once"):b instanceof WeakSet?b.add(a):b.set(a,c),k=(a,b,c,d)=>(e(a,b,"write to private field"),d?d.call(a,c):b.set(a,c),c),o=(a,b,c)=>(e(a,b,"access private method"),c);var p=(a,b,c,d)=>({set _(h){k(a,b,h,c);},get _(){return j(a,b,d)}});export{l as a,m as b,j as c,n as d,k as e,o as f,p as g};//# sourceMappingURL=chunk-JJFD2BVW.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-JJFD2BVW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-JJFD2BVW.mjs"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var _={CURRENT_DIALOGUE_MEMORY_KEY:"___current_dialogue_memory___",LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY:"___last_dialogue_added_in_step_memory___",CURRENT_MENU_OPTIONS_MEMORY_KEY:"___current_menu_options_memory___",LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY:"___last_menu_options_added_in_step_memory___",CURRENT_INPUT_VALUE_MEMORY_KEY:"_input_value_",LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY:"___last_input_added_in_step_memory___",CURRENT_INPUT_INFO_MEMORY_KEY:"___current_input_info_memory___",CHARACTER_CATEGORY_KEY:"___character___",ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY:"___glue___",OPENED_LABELS_COUNTER_KEY:"___opened_labels_counter___",ALL_CHOICES_MADE_KEY:"___all_choices_made___",CURRENT_STEP_TIMES_COUNTER_KEY:"___current_step_times_counter___",LAST_STEP_GLUED:"___last_step_glued___"};export{_ as a};//# sourceMappingURL=chunk-OXRIVLY2.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdG9yYWdlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6WyJTWVNURU1fUkVTRVJWRURfU1RPUkFHRV9LRVlTIl0sIm1hcHBpbmdzIjoiQUFBTyxJQUFNQSxDQUFBQSxDQUErQixDQUl4QywyQkFBQSxDQUE2QiwrQkFBQSxDQUk3QixzQ0FBQSxDQUF3QywwQ0FBQSxDQUl4QywrQkFBQSxDQUFpQyxtQ0FBQSxDQUlqQywwQ0FBQSxDQUE0Qyw4Q0FBQSxDQUk1Qyw4QkFBQSxDQUFnQyxlQUFBLENBSWhDLG1DQUFBLENBQXFDLHVDQUFBLENBSXJDLDZCQUFBLENBQStCLGlDQUFBLENBSS9CLHNCQUFBLENBQXdCLGlCQUFBLENBS3hCLHFEQUFBLENBQXVELFlBQUEsQ0FJdkQseUJBQUEsQ0FBMkIsNkJBQUEsQ0FJM0Isb0JBQUEsQ0FBc0Isd0JBQUEsQ0FLdEIsOEJBQUEsQ0FBZ0Msa0NBQUEsQ0FJaEMsZUFBQSxDQUFpQix1QkFDckIiLCJmaWxlIjoiY2h1bmstT1hSSVZMWTIubWpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNZU1RFTV9SRVNFUlZFRF9TVE9SQUdFX0tFWVMgPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgY3VycmVudCBkaWFsb2d1ZSBtZW1vcnlcbiAgICAgKi9cbiAgICBDVVJSRU5UX0RJQUxPR1VFX01FTU9SWV9LRVk6IFwiX19fY3VycmVudF9kaWFsb2d1ZV9tZW1vcnlfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBsYXN0IGRpYWxvZ3VlIGFkZGVkIGluIHRoZSBzdGVwIG1lbW9yeVxuICAgICAqL1xuICAgIExBU1RfRElBTE9HVUVfQURERURfSU5fU1RFUF9NRU1PUllfS0VZOiBcIl9fX2xhc3RfZGlhbG9ndWVfYWRkZWRfaW5fc3RlcF9tZW1vcnlfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG1lbnUgb3B0aW9ucyBtZW1vcnlcbiAgICAgKi9cbiAgICBDVVJSRU5UX01FTlVfT1BUSU9OU19NRU1PUllfS0VZOiBcIl9fX2N1cnJlbnRfbWVudV9vcHRpb25zX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGxhc3QgbWVudSBvcHRpb25zIGFkZGVkIGluIHRoZSBzdGVwIG1lbW9yeVxuICAgICAqL1xuICAgIExBU1RfTUVOVV9PUFRJT05TX0FEREVEX0lOX1NURVBfTUVNT1JZX0tFWTogXCJfX19sYXN0X21lbnVfb3B0aW9uc19hZGRlZF9pbl9zdGVwX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGlucHV0IG1lbW9yeS4gVGhpcyB2YWx1ZSBjYW4gYmUgcmVhZCBieSBwaXhpLXZuIGpzb24gaW1wb3J0ZXJcbiAgICAgKi9cbiAgICBDVVJSRU5UX0lOUFVUX1ZBTFVFX01FTU9SWV9LRVk6IFwiX2lucHV0X3ZhbHVlX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGxhc3QgaW5wdXQgYWRkZWQgaW4gdGhlIHN0ZXAgbWVtb3J5XG4gICAgICovXG4gICAgTEFTVF9JTlBVVF9BRERFRF9JTl9TVEVQX01FTU9SWV9LRVk6IFwiX19fbGFzdF9pbnB1dF9hZGRlZF9pbl9zdGVwX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgaW5wdXQgaW5mb1xuICAgICAqL1xuICAgIENVUlJFTlRfSU5QVVRfSU5GT19NRU1PUllfS0VZOiBcIl9fX2N1cnJlbnRfaW5wdXRfaW5mb19tZW1vcnlfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBjaGFyYWN0ZXJzIG1lbW9yeVxuICAgICAqL1xuICAgIENIQVJBQ1RFUl9DQVRFR09SWV9LRVk6IFwiX19fY2hhcmFjdGVyX19fXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGFkZCB0aGUgbmV4dCBkaWFsb2cgdGV4dCBpbnRvIHRoZSBjdXJyZW50IGRpYWxvZyBtZW1vcnkuXG4gICAgICogVGhpcyB2YWx1ZSB3YXMgYWRkZWQgdG8gaW50cm9kdWNlIEluayBHbHVlIGZ1bmN0aW9uYWxpdHkgaHR0cHM6Ly9naXRodWIuY29tL2lua2xlL2luay9ibG9iL21hc3Rlci9Eb2N1bWVudGF0aW9uL1dyaXRpbmdXaXRoSW5rLm1kI2dsdWVcbiAgICAgKi9cbiAgICBBRERfTkVYVF9ESUFMT0dfVEVYVF9JTlRPX1RIRV9DVVJSRU5UX0RJQUxPR19GTEFHX0tFWTogXCJfX19nbHVlX19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiBhIGxpc3Qgb2YgYWxsIGxhYmVscyB0aGF0IGhhdmUgYmVlbiBvcGVuZWQgZHVyaW5nIHRoZSBwcm9ncmVzc2lvbiBvZiB0aGUgc3RlcHMuXG4gICAgICovXG4gICAgT1BFTkVEX0xBQkVMU19DT1VOVEVSX0tFWTogXCJfX19vcGVuZWRfbGFiZWxzX2NvdW50ZXJfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIGEgbGlzdCBvZiBhbGwgY2hvaWNlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIGR1cmluZyB0aGUgcHJvZ3Jlc3Npb24gb2YgdGhlIHN0ZXBzLlxuICAgICAqL1xuICAgIEFMTF9DSE9JQ0VTX01BREVfS0VZOiBcIl9fX2FsbF9jaG9pY2VzX21hZGVfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBjdXJyZW50IHN0ZXAgdGltZXMgY291bnRlci5cbiAgICAgKiBUaGlzIHZhbHVlIHdhcyBhZGRlZCB0byBpbnRyb2R1Y2UgSW5rIFNlcXVlbmNlcywgY3ljbGVzIGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMgaHR0cHM6Ly9naXRodWIuY29tL2lua2xlL2luay9ibG9iL21hc3Rlci9Eb2N1bWVudGF0aW9uL1dyaXRpbmdXaXRoSW5rLm1kI3NlcXVlbmNlcy1jeWNsZXMtYW5kLW90aGVyLWFsdGVybmF0aXZlc1xuICAgICAqL1xuICAgIENVUlJFTlRfU1RFUF9USU1FU19DT1VOVEVSX0tFWTogXCJfX19jdXJyZW50X3N0ZXBfdGltZXNfY291bnRlcl9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGxhc3QgZGlhbG9ndWUgc3RlcCBnbHVlZCBpbiB0aGUgc3RlcCBtZW1vcnlcbiAgICAgKi9cbiAgICBMQVNUX1NURVBfR0xVRUQ6IFwiX19fbGFzdF9zdGVwX2dsdWVkX19fXCIsXG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b,a}from'./chunk-46QBDRUK.mjs';var L=b((S,I)=>{(function(w,o){typeof S=="object"?I.exports=S=o():typeof define=="function"&&define.amd?define([],o):w.CryptoJS=o();})(S,function(){var w=w||(function(o,x){var a$1;if(typeof window<"u"&&window.crypto&&(a$1=window.crypto),typeof self<"u"&&self.crypto&&(a$1=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(a$1=globalThis.crypto),!a$1&&typeof window<"u"&&window.msCrypto&&(a$1=window.msCrypto),!a$1&&typeof global<"u"&&global.crypto&&(a$1=global.crypto),!a$1&&typeof a=="function")try{a$1=a("crypto");}catch{}var _=function(){if(a$1){if(typeof a$1.getRandomValues=="function")try{return a$1.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof a$1.randomBytes=="function")try{return a$1.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},C=Object.create||(function(){function t(){}return function(e){var n;return t.prototype=e,n=new t,t.prototype=null,n}})(),d={},B=d.lib={},u=B.Base=(function(){return {extend:function(t){var e=C(this);return t&&e.mixIn(t),(!e.hasOwnProperty("init")||this.init===e.init)&&(e.init=function(){e.$super.init.apply(this,arguments);}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString);},clone:function(){return this.init.prototype.extend(this)}}})(),l=B.WordArray=u.extend({init:function(t,e){t=this.words=t||[],e!=x?this.sigBytes=e:this.sigBytes=t.length*4;},toString:function(t){return (t||v).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,f=t.sigBytes;if(this.clamp(),r%4)for(var c=0;c<f;c++){var z=n[c>>>2]>>>24-c%4*8&255;e[r+c>>>2]|=z<<24-(r+c)%4*8;}else for(var g=0;g<f;g+=4)e[r+g>>>2]=n[g>>>2];return this.sigBytes+=f,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=o.ceil(e/4);},clone:function(){var t=u.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],n=0;n<t;n+=4)e.push(_());return new l.init(e,t)}}),i=d.enc={},v=i.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],f=0;f<n;f++){var c=e[f>>>2]>>>24-f%4*8&255;r.push((c>>>4).toString(16)),r.push((c&15).toString(16));}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new l.init(n,e/2)}},h=i.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],f=0;f<n;f++){var c=e[f>>>2]>>>24-f%4*8&255;r.push(String.fromCharCode(c));}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r++)n[r>>>2]|=(t.charCodeAt(r)&255)<<24-r%4*8;return new l.init(n,e)}},p=i.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},y=B.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new l.init,this._nDataBytes=0;},_append:function(t){typeof t=="string"&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes;},_process:function(t){var e,n=this._data,r=n.words,f=n.sigBytes,c=this.blockSize,z=c*4,g=f/z;t?g=o.ceil(g):g=o.max((g|0)-this._minBufferSize,0);var b=g*c,R=o.min(b*4,f);if(b){for(var A=0;A<b;A+=c)this._doProcessBlock(r,A);e=r.splice(0,b),n.sigBytes-=R;}return new l.init(e,R)},clone:function(){var t=u.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});B.Hasher=y.extend({cfg:u.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset();},reset:function(){y.reset.call(this),this._doReset();},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var e=this._doFinalize();return e},blockSize:512/32,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new s.HMAC.init(t,n).finalize(e)}}});var s=d.algo={};return d})(Math);return w});});var T=b((H,P)=>{(function(w,o){typeof H=="object"?P.exports=H=o(L()):typeof define=="function"&&define.amd?define(["./core"],o):o(w.CryptoJS);})(H,function(w){return (function(){var o=w,x=o.lib,a=x.WordArray,_=x.Hasher,C=o.algo,d=[],B=C.SHA1=_.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878,3285377520]);},_doProcessBlock:function(u,l){for(var i=this._hash.words,v=i[0],h=i[1],p=i[2],y=i[3],m=i[4],s=0;s<80;s++){if(s<16)d[s]=u[l+s]|0;else {var t=d[s-3]^d[s-8]^d[s-14]^d[s-16];d[s]=t<<1|t>>>31;}var e=(v<<5|v>>>27)+m+d[s];s<20?e+=(h&p|~h&y)+1518500249:s<40?e+=(h^p^y)+1859775393:s<60?e+=(h&p|h&y|p&y)-1894007588:e+=(h^p^y)-899497514,m=y,y=p,p=h<<30|h>>>2,h=v,v=e;}i[0]=i[0]+v|0,i[1]=i[1]+h|0,i[2]=i[2]+p|0,i[3]=i[3]+y|0,i[4]=i[4]+m|0;},_doFinalize:function(){var u=this._data,l=u.words,i=this._nDataBytes*8,v=u.sigBytes*8;return l[v>>>5]|=128<<24-v%32,l[(v+64>>>9<<4)+14]=Math.floor(i/4294967296),l[(v+64>>>9<<4)+15]=i,u.sigBytes=l.length*4,this._process(),this._hash},clone:function(){var u=_.clone.call(this);return u._hash=this._hash.clone(),u}});o.SHA1=_._createHelper(B),o.HmacSHA1=_._createHmacHelper(B);})(),w.SHA1});});export{T as a};//# sourceMappingURL=chunk-SOFV7YZ5.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvY29yZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMS5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlX2NvcmUiLCJfX2NvbW1vbkpTTWluIiwiZXhwb3J0cyIsIm1vZHVsZSIsInJvb3QiLCJmYWN0b3J5IiwiQ3J5cHRvSlMiLCJNYXRoIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwiX19yZXF1aXJlIiwiVyIsImNyeXB0b1NlY3VyZVJhbmRvbUludCIsImNyZWF0ZSIsIkYiLCJvYmoiLCJzdWJ0eXBlIiwiQyIsIkNfbGliIiwiQmFzZSIsIm92ZXJyaWRlcyIsImluc3RhbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5TmFtZSIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJlbmNvZGVyIiwiSGV4Iiwid29yZEFycmF5IiwidGhpc1dvcmRzIiwidGhhdFdvcmRzIiwidGhpc1NpZ0J5dGVzIiwidGhhdFNpZ0J5dGVzIiwiaSIsInRoYXRCeXRlIiwiaiIsImNsb25lIiwibkJ5dGVzIiwiQ19lbmMiLCJoZXhDaGFycyIsImJpdGUiLCJoZXhTdHIiLCJoZXhTdHJMZW5ndGgiLCJMYXRpbjEiLCJsYXRpbjFDaGFycyIsImxhdGluMVN0ciIsImxhdGluMVN0ckxlbmd0aCIsIlV0ZjgiLCJ1dGY4U3RyIiwiQnVmZmVyZWRCbG9ja0FsZ29yaXRobSIsImRhdGEiLCJkb0ZsdXNoIiwicHJvY2Vzc2VkV29yZHMiLCJkYXRhV29yZHMiLCJkYXRhU2lnQnl0ZXMiLCJibG9ja1NpemUiLCJibG9ja1NpemVCeXRlcyIsIm5CbG9ja3NSZWFkeSIsIm5Xb3Jkc1JlYWR5IiwibkJ5dGVzUmVhZHkiLCJvZmZzZXQiLCJjZmciLCJtZXNzYWdlVXBkYXRlIiwiaGFzaCIsImhhc2hlciIsIm1lc3NhZ2UiLCJrZXkiLCJDX2FsZ28iLCJyZXF1aXJlX3NoYTEiLCJIYXNoZXIiLCJTSEExIiwiTSIsIkgiLCJhIiwiYiIsImMi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QUFBQSxDQUFhLElBQUEsQ0FBSyxXQUFBLENBQWMsQ0FBQSxDQUNoQ0MsRUFBWS9CLENBQUFBLENBQUssUUFBQSxDQUFXLENBQUEsQ0FHaEMsT0FBQUcsRUFBVTRCLENBQUFBLEdBQWMsQ0FBQyxDQUFBLEVBQUssR0FBQSxFQUFTLEdBQUtBLENBQUFBLENBQVksRUFBQSxDQUN4RDVCLEdBQWE0QixDQUFBQSxDQUFZLEVBQUEsR0FBUSxHQUFNLENBQUEsRUFBSyxFQUFFLENBQUEsQ0FBSSxJQUFBLENBQUssTUFBTUQsQ0FBQUEsQ0FBYSxVQUFXLENBQUEsQ0FDckYzQixDQUFBQSxDQUFBQSxDQUFhNEIsRUFBWSxFQUFBLEdBQVEsQ0FBQSxFQUFNLENBQUEsRUFBSyxFQUFFLEVBQUlELENBQUFBLENBQ2xEOUIsQ0FBQUEsQ0FBSyxTQUFXRyxDQUFBQSxDQUFVLE1BQUEsQ0FBUyxFQUduQyxJQUFBLENBQUssUUFBQSxFQUFTLENBR1AsSUFBQSxDQUFLLEtBQ2hCLENBQUEsQ0FFQSxLQUFBLENBQU8sVUFBWSxDQUNmLElBQUlqQixDQUFBQSxDQUFRaUMsQ0FBQUEsQ0FBTyxLQUFBLENBQU0sSUFBQSxDQUFLLElBQUksQ0FBQSxDQUNsQyxPQUFBakMsRUFBTSxLQUFBLENBQVEsSUFBQSxDQUFLLE1BQU0sS0FBQSxFQUFNLENBRXhCQSxDQUNYLENBQ0osQ0FBQyxDQUFBLENBZ0JEcEIsQ0FBQUEsQ0FBRSxLQUFPcUQsQ0FBQUEsQ0FBTyxhQUFBLENBQWNDLENBQUksQ0FBQSxDQWdCbEN0RCxDQUFBQSxDQUFFLFFBQUEsQ0FBV3FELENBQUFBLENBQU8sa0JBQWtCQyxDQUFJLEVBQzlDLElBQUUsQ0FHS2pFLENBQUFBLENBQVMsSUFFakIsQ0FBQyxFQUFBLENBQUEiLCJmaWxlIjoiY2h1bmstU09GVjdZWjUubWpzIiwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdHJvb3QuQ3J5cHRvSlMgPSBmYWN0b3J5KCk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG5cdC8qZ2xvYmFscyB3aW5kb3csIGdsb2JhbCwgcmVxdWlyZSovXG5cblx0LyoqXG5cdCAqIENyeXB0b0pTIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdHZhciBDcnlwdG9KUyA9IENyeXB0b0pTIHx8IChmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG5cblx0ICAgIHZhciBjcnlwdG87XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHdpbmRvdy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gaW4gd2ViIHdvcmtlciAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBzZWxmLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdvcmtlclxuXHQgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IGdsb2JhbFRoaXMuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1zQ3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93Lm1zQ3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gZ2xvYmFsIChOb2RlSlMpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbXBvcnQgdmlhIHJlcXVpcmUgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cdCAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgfVxuXG5cdCAgICAvKlxuXHQgICAgICogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG5cdCAgICAgKlxuXHQgICAgICogQXMgTWF0aC5yYW5kb20oKSBpcyBjcnlwdG9ncmFwaGljYWxseSBub3Qgc2FmZSB0byB1c2Vcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyeXB0b1NlY3VyZVJhbmRvbUludCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoY3J5cHRvKSB7XG5cdCAgICAgICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVzZSByYW5kb21CeXRlcyBtZXRob2QgKE5vZGVKUylcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuJyk7XG5cdCAgICB9O1xuXG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ3J5cHRvSlMgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExpYnJhcnkgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2UgPSAoZnVuY3Rpb24gKCkge1xuXG5cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIFByb3BlcnRpZXMgdG8gY29weSBpbnRvIHRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgTXlUeXBlID0gQ3J5cHRvSlMubGliLkJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKG92ZXJyaWRlcykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3Bhd25cblx0ICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBdWdtZW50XG5cdCAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5taXhJbihvdmVycmlkZXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXHQgICAgICAgICAgICAgICAgaWYgKCFzdWJ0eXBlLmhhc093blByb3BlcnR5KCdpbml0JykgfHwgdGhpcy5pbml0ID09PSBzdWJ0eXBlLmluaXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplcidzIHByb3RvdHlwZSBpcyB0aGUgc3VidHlwZSBvYmplY3Rcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cdCAgICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBFeHRlbmRzIHRoaXMgb2JqZWN0IGFuZCBydW5zIHRoZSBpbml0IG1ldGhvZC5cblx0ICAgICAgICAgICAgICogQXJndW1lbnRzIHRvIGNyZWF0ZSgpIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKS5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGluc3RhbmNlID0gTXlUeXBlLmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5pdC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG5cdCAgICAgICAgICAgICAqICAgICAgICAgfVxuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgbWl4SW46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSUUgd29uJ3QgY29weSB0b1N0cmluZyB1c2luZyB0aGUgbG9vcCBhYm92ZVxuXHQgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGNsb25lID0gaW5zdGFuY2UuY2xvbmUoKTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSk7XG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMDAxMDIwMywgMHgwNDA1MDYwN10sIDYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyB3b3JkIGFycmF5IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZW5jb2Rlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmNhdGVuYXRlcyBhIHdvcmQgYXJyYXkgdG8gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5MS5jb25jYXQod29yZEFycmF5Mik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29uY2F0OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgdGhpcy5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbmNhdFxuXHQgICAgICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgYnl0ZSBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdEJ5dGUgPSAodGhhdFdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAoMjQgLSAoKHRoaXNTaWdCeXRlcyArIGkpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIENvcHkgb25lIHdvcmQgYXQgYSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoYXRTaWdCeXRlczsgaiArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpc1dvcmRzWyh0aGlzU2lnQnl0ZXMgKyBqKSA+Pj4gMl0gPSB0aGF0V29yZHNbaiA+Pj4gMl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xhbXA6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXBcblx0ICAgICAgICAgICAgd29yZHNbc2lnQnl0ZXMgPj4+IDJdICY9IDB4ZmZmZmZmZmYgPDwgKDMyIC0gKHNpZ0J5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgd29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHNpZ0J5dGVzIC8gNCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB3b3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSB3b3JkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBieXRlcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSByYW5kb20gd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByYW5kb206IGZ1bmN0aW9uIChuQnl0ZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgd29yZHMucHVzaChjcnlwdG9TZWN1cmVSYW5kb21JbnQoKSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhleCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlID4+PiA0KS50b1N0cmluZygxNikpO1xuXHQgICAgICAgICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSAmIDB4MGYpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gaGV4Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGhleFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGV4U3RyTGVuZ3RoID0gaGV4U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAzXSB8PSBwYXJzZUludChoZXhTdHIuc3Vic3RyKGksIDIpLCAxNikgPDwgKDI0IC0gKGkgJSA4KSAqIDQpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBMYXRpbjEgPSBDX2VuYy5MYXRpbjEgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbGF0aW4xU3RyaW5nID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMUNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdGUgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXRpbjFTdHIgVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShsYXRpbjFTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAobGF0aW4xU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBsYXRpbjFTdHJMZW5ndGggPSBsYXRpbjFTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0aW4xU3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IChsYXRpbjFTdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIGxhdGluMVN0ckxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtOCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGY4U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShMYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSkpKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgVVRGLTggZGF0YScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodXRmOFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGY4U3RyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBMYXRpbjEucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHV0ZjhTdHIpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBidWZmZXJlZCBibG9jayBhbGdvcml0aG0gdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX21pbkJ1ZmZlclNpemUgVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBzaG91bGQgYmUga2VwdCB1bnByb2Nlc3NlZCBpbiB0aGUgYnVmZmVyLiBEZWZhdWx0OiAwXG5cdCAgICAgKi9cblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBibG9jayBhbGdvcml0aG0ncyBkYXRhIGJ1ZmZlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYXBwZW5kLiBTdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gYSBXb3JkQXJyYXkgdXNpbmcgVVRGLTguXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9hcHBlbmQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfYXBwZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBcHBlbmRcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YS5jb25jYXQoZGF0YSk7XG5cdCAgICAgICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgX2RvUHJvY2Vzc0Jsb2NrKG9mZnNldCksIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBkb0ZsdXNoIFdoZXRoZXIgYWxsIGJsb2NrcyBhbmQgcGFydGlhbCBibG9ja3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHByb2Nlc3NlZERhdGEgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3Byb2Nlc3M6IGZ1bmN0aW9uIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgIHZhciBwcm9jZXNzZWRXb3JkcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGRhdGFTaWdCeXRlcyA9IGRhdGEuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSB0aGlzLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBibG9ja3MgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CbG9ja3NSZWFkeSA9IGRhdGFTaWdCeXRlcyAvIGJsb2NrU2l6ZUJ5dGVzO1xuXHQgICAgICAgICAgICBpZiAoZG9GbHVzaCkge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAgdG8gaW5jbHVkZSBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5jZWlsKG5CbG9ja3NSZWFkeSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duIHRvIGluY2x1ZGUgb25seSBmdWxsIGJsb2Nrcyxcblx0ICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYnVmZmVyXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLm1heCgobkJsb2Nrc1JlYWR5IHwgMCkgLSB0aGlzLl9taW5CdWZmZXJTaXplLCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHdvcmRzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuV29yZHNSZWFkeSA9IG5CbG9ja3NSZWFkeSAqIGJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBieXRlcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJ5dGVzUmVhZHkgPSBNYXRoLm1pbihuV29yZHNSZWFkeSAqIDQsIGRhdGFTaWdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3Ncblx0ICAgICAgICAgICAgaWYgKG5Xb3Jkc1JlYWR5KSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSAwOyBvZmZzZXQgPCBuV29yZHNSZWFkeTsgb2Zmc2V0ICs9IGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtYWxnb3JpdGhtIGxvZ2ljXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9Qcm9jZXNzQmxvY2soZGF0YVdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcHJvY2Vzc2VkIHdvcmRzXG5cdCAgICAgICAgICAgICAgICBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuQnl0ZXNSZWFkeTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9taW5CdWZmZXJTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBoYXNoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyID0gQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggY29tcHV0YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoZXIgPSBDcnlwdG9KUy5hbGdvLlNIQTI1Ni5jcmVhdGUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIGhhc2hlciB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtIYXNoZXJ9IFRoaXMgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBoYXNoXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIG1lc3NhZ2UgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWhhc2hlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2RvRmluYWxpemUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA1MTIvMzIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgc2hvcnRjdXQgZnVuY3Rpb24gdG8gYSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlIGluIHRoaXMgSE1BQyBoZWxwZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgSG1hY1NIQTI1NiA9IENyeXB0b0pTLmxpYi5IYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ28gPSB7fTtcblxuXHQgICAgcmV0dXJuIEM7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsXG5cdCAgICAgICAgICAgICAgICAweGMzZDJlMWYwXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblx0ICAgICAgICAgICAgdmFyIGUgPSBIWzRdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSAobiA8PCAxKSB8IChuID4+PiAzMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gKChhIDw8IDUpIHwgKGEgPj4+IDI3KSkgKyBlICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKH5iICYgZCkpICsgMHg1YTgyNzk5OTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSArIDB4NmVkOWViYTE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA2MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSkgLSAweDcwZTQ0MzI0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChpIDwgODApICovIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpIC0gMHgzNTlkM2UyYTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZSA9IGQ7XG5cdCAgICAgICAgICAgICAgICBkID0gYztcblx0ICAgICAgICAgICAgICAgIGMgPSAoYiA8PCAzMCkgfCAoYiA+Pj4gMik7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSB0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEExID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMShtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEExID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTEpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTE7XG5cbn0pKTsiXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-INJYRMJ3.mjs';import {d,k,j}from'./chunk-46QBDRUK.mjs';import {GameUnifier}from'@drincs/pixi-vn/core';var s=class s{constructor(){}static clearOldTempVariables(e){s.tempStorageDeadlines.forEach((t,a)=>{t>e&&(s.tempStorage.delete(a),s.tempStorageDeadlines.delete(a),s.storage.cache.delete(a));});}static setVariable(e,t){let a=s.tempStorage.has(e);t==null?(s.storage.map.delete(e),!a&&s.storage.cache.delete(e)):(s.storage.map.set(e,t),!a&&s.storage.cache.set(e,t));}static getVariable(e){let t=s.storage.cache.get(e);return t===void 0&&(t=s.tempStorage.get(e)),t===void 0&&(t=s.storage.map.get(e)),t===void 0&&(t=s.default.get(e)),k(t)}static removeVariable(e){s.storage.delete(e);}static setFlag(e,t){if(t)this.flags.includes(e)||this.flags.push(e);else {let a=this.flags.indexOf(e);a>-1&&this.flags.splice(a,1);}}static getFlag(e){return this.flags.includes(e)}};d(s,"storage",new a({cacheSize:20})),d(s,"default",new a({cacheSize:20})),d(s,"flags",Array()),d(s,"tempStorage",new Map),d(s,"tempStorageDeadlines",new Map);var r=s;var n=class{get storage(){return r.storage.map}get cache(){return r.storage.cache}get flags(){return r.flags}get tempStorage(){return r.tempStorage}get tempStorageDeadlines(){return r.tempStorageDeadlines}set default(e){Object.entries(e).forEach(([t,a])=>{r.default.set(t,a);});}set(e,t){return r.setVariable(e,t)}get(e){return r.getVariable(e)}remove(e){return r.removeVariable(e)}setTempVariable(e,t){if(t==null){this.removeTempVariable(e);return}else r.tempStorage.set(e,t),r.storage.cache.set(e,t),r.tempStorageDeadlines.has(e)||r.tempStorageDeadlines.set(e,GameUnifier.openedLabels);}removeTempVariable(e){r.tempStorage.has(e)&&(r.tempStorage.delete(e),r.tempStorageDeadlines.delete(e),r.storage.cache.delete(e));}setFlag(e,t){return r.setFlag(e,t)}getFlag(e){return r.getFlag(e)}clear(){this.storage.clear(),this.cache.clear(),r.flags=[],r.tempStorage.clear(),r.tempStorageDeadlines.clear();}export(){let e=[];[...this.storage.keys()].forEach(o=>{e.push({key:o,value:this.storage.get(o)});});let t=[];[...r.tempStorage.keys()].forEach(o=>{t.push({key:o,value:r.tempStorage.get(o)});});let a=[];return [...r.tempStorageDeadlines.keys()].forEach(o=>{a.push({key:o,value:r.tempStorageDeadlines.get(o)});}),k({base:e,temp:t,tempDeadlines:a,flags:r.flags})}restore(e){this.clear();try{e?(Array.isArray(e)&&e.forEach(t=>{if(t.key==="___temp_storage___"){let a=t.value;Object.entries(a).forEach(([o,g])=>{r.tempStorage.set(o,g);});}else if(t.key==="___temp_storage_deadlines___"){let a=t.value;Object.entries(a).forEach(([o,g])=>{r.tempStorageDeadlines.set(o,g);});}else t.key==="___flags___"?t.value.forEach(o=>{r.flags.push(o);}):this.storage.set(t.key,t.value);}),"base"in e&&"temp"in e&&"tempDeadlines"in e?(e.base?.forEach(t=>{this.storage.set(t.key,t.value);}),e.temp?.forEach(t=>{r.tempStorage.set(t.key,t.value);}),e.tempDeadlines?.forEach(t=>{r.tempStorageDeadlines.set(t.key,t.value);})):Object.entries(e).forEach(([t,a])=>{t==="___temp_storage___"?Object.entries(a).forEach(([o,g])=>{r.tempStorage.set(o,g);}):t==="___temp_storage_deadlines___"?Object.entries(a).forEach(([o,g])=>{r.tempStorageDeadlines.set(o,g);}):t==="___flags___"?a.forEach(o=>{r.flags.push(o);}):this.storage.set(t,a);})):j.warn("No storage data found");}catch(t){j.error("Error importing data",t);}}};var p=class{constructor(e,t){d(this,"id");d(this,"categoryId");this.categoryId=e,this.id=t;}setStorageProperty(e,t){let a=r.getVariable(this.categoryId);a||(a={}),a.hasOwnProperty(this.id)||(a[this.id]={}),t==null?a[this.id].hasOwnProperty(e)&&delete a[this.id][e]:a[this.id]={...a[this.id],[e]:t},Object.keys(a[this.id]).length===0&&delete a[this.id],r.setVariable(this.categoryId,a);}getStorageProperty(e,t=this.id){let a=r.getVariable(this.categoryId);if(a&&a.hasOwnProperty(t)&&a[t].hasOwnProperty(e))return a[t][e]}};var v=new n;export{r as a,p as b,v as c};//# sourceMappingURL=chunk-XZMYXKAY.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyU3RhdGljLnRzIiwiLi4vc3JjL3N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIudHMiLCIuLi9zcmMvc3RvcmFnZS9jbGFzc2VzL1N0b3JlZENsYXNzTW9kZWwudHMiLCIuLi9zcmMvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6WyJfU3RvcmFnZU1hbmFnZXJTdGF0aWMiLCJvcGVuZWRMYWJlbHNOdW1iZXIiLCJkZWFkbGluZSIsImtleSIsInZhbHVlIiwiaXNJblRlbXBTdG9yYWdlIiwicmVzdWx0IiwiY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQiLCJpbmRleCIsIl9fcHVibGljRmllbGQiLCJDYWNoZWRNYXAiLCJTdG9yYWdlTWFuYWdlclN0YXRpYyIsIlN0b3JhZ2VNYW5hZ2VyIiwiR2FtZVVuaWZpZXIiLCJiYXNlIiwidGVtcCIsInRlbXBEZWFkbGluZXMiLCJkYXRhIiwiaXRlbSIsImZsYWciLCJsb2dnZXIiLCJlIiwiU3RvcmVkQ2xhc3NNb2RlbCIsImNhdGVnb3J5SWQiLCJpZCIsInByb3BlcnR5TmFtZSIsInN0b3JhZ2VWYWx1ZSIsImlkVG9Vc2UiLCJzdG9yYWdlIl0sIm1hcHBpbmdzIjoiNkhBSUEsSUFBcUJBLENBQUFBLENBQXJCLE1BQXFCQSxDQUFxQixDQU85QixXQUFBLEVBQWMsQ0FBQyxDQUV2QixPQUFPLHNCQUFzQkMsQ0FBQUEsQ0FBNEIsQ0FDckRELENBQUFBLENBQXFCLG9CQUFBLENBQXFCLE9BQUEsQ0FBUSxDQUFDRSxFQUFVQyxDQUFBQSxHQUFRLENBQzdERCxDQUFBQSxDQUFXRCxDQUFBQSxHQUNYRCxDQUFBQSxDQUFxQixXQUFBLENBQVksT0FBT0csQ0FBRyxDQUFBLENBQzNDSCxDQUFBQSxDQUFxQixvQkFBQSxDQUFxQixNQUFBLENBQU9HLENBQUcsRUFDcERILENBQUFBLENBQXFCLE9BQUEsQ0FBUSxLQUFBLENBQU0sTUFBQSxDQUFPRyxDQUFHLENBQUEsRUFFckQsQ0FBQyxF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aUIsSUFBQSxDQUFLLFVBQVUsQ0FBQSxDQUN4RSxHQUNJZSxDQUFBQSxFQUNBQSxFQUFhLGNBQUEsQ0FBZUMsQ0FBTyxDQUFBLEVBQ25DRCxDQUFBQSxDQUFhQyxDQUFPLENBQUEsQ0FBRSxlQUFlRixDQUFZLENBQUEsQ0FFakQsT0FBT0MsQ0FBQUEsQ0FBYUMsQ0FBTyxDQUFBLENBQUVGLENBQVksQ0FHakQsQ0FDSixFQy9FQSxJQUFNRyxDQUFBQSxDQUFtQyxJQUFJaEIiLCJmaWxlIjoiY2h1bmstWFpNWVhLQVkubWpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FjaGVkTWFwIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IH0gZnJvbSBcIi4uL3V0aWxzL2V4cG9ydC11dGlsaXR5XCI7XG5pbXBvcnQgeyBTdG9yYWdlRWxlbWVudFR5cGUgfSBmcm9tIFwiLi90eXBlcy9TdG9yYWdlRWxlbWVudFR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RvcmFnZU1hbmFnZXJTdGF0aWMge1xuICAgIHN0YXRpYyBzdG9yYWdlID0gbmV3IENhY2hlZE1hcDxzdHJpbmcsIGFueT4oeyBjYWNoZVNpemU6IDIwIH0pO1xuICAgIHN0YXRpYyBkZWZhdWx0ID0gbmV3IENhY2hlZE1hcDxzdHJpbmcsIGFueT4oeyBjYWNoZVNpemU6IDIwIH0pO1xuICAgIHN0YXRpYyBmbGFncyA9IEFycmF5PHN0cmluZz4oKTtcbiAgICBzdGF0aWMgdGVtcFN0b3JhZ2UgPSBuZXcgTWFwPHN0cmluZywgU3RvcmFnZUVsZW1lbnRUeXBlPigpO1xuICAgIHN0YXRpYyB0ZW1wU3RvcmFnZURlYWRsaW5lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHN0YXRpYyBjbGVhck9sZFRlbXBWYXJpYWJsZXMob3BlbmVkTGFiZWxzTnVtYmVyOiBudW1iZXIpIHtcbiAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuZm9yRWFjaCgoZGVhZGxpbmUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRlYWRsaW5lID4gb3BlbmVkTGFiZWxzTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogU3RvcmFnZUVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IGlzSW5UZW1wU3RvcmFnZSA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLmhhcyhrZXkpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAhaXNJblRlbXBTdG9yYWdlICYmIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAhaXNJblRlbXBTdG9yYWdlICYmIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFZhcmlhYmxlPFQgZXh0ZW5kcyBTdG9yYWdlRWxlbWVudFR5cGU+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCByZXN1bHQgPSBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5tYXAuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdG9yYWdlTWFuYWdlclN0YXRpYy5kZWZhdWx0LmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudChyZXN1bHQpIGFzIFQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZVZhcmlhYmxlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldEZsYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZsYWdzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYWdzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuZmxhZ3MuaW5kZXhPZihrZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYWdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmxhZyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGFncy5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyIH0gZnJvbSBcIkBkcmluY3MvcGl4aS12bi9jb3JlXCI7XG5pbXBvcnQgeyBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudCB9IGZyb20gXCIuLi91dGlscy9leHBvcnQtdXRpbGl0eVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZy11dGlsaXR5XCI7XG5pbXBvcnQgU3RvcmFnZUdhbWVTdGF0ZSwgeyBTdG9yYWdlR2FtZVN0YXRlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU3RvcmFnZUdhbWVTdGF0ZVwiO1xuaW1wb3J0IFN0b3JhZ2VNYW5hZ2VySW50ZXJmYWNlIGZyb20gXCIuL2ludGVyZmFjZXMvU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2VcIjtcbmltcG9ydCBTdG9yYWdlTWFuYWdlclN0YXRpYyBmcm9tIFwiLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuaW1wb3J0IHsgU3RvcmFnZUVsZW1lbnRUeXBlIH0gZnJvbSBcIi4vdHlwZXMvU3RvcmFnZUVsZW1lbnRUeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIGltcGxlbWVudHMgU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2Uge1xuICAgIGdldCBzdG9yYWdlKCkge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5tYXA7XG4gICAgfVxuICAgIGdldCBjYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGU7XG4gICAgfVxuICAgIGdldCBmbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmZsYWdzO1xuICAgIH1cbiAgICBnZXQgdGVtcFN0b3JhZ2UoKSB7XG4gICAgICAgIHJldHVybiBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZTtcbiAgICB9XG4gICAgZ2V0IHRlbXBTdG9yYWdlRGVhZGxpbmVzKCkge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXM7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0KHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IFN0b3JhZ2VFbGVtZW50VHlwZSB9KSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmRlZmF1bHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFN0b3JhZ2VFbGVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMuc2V0VmFyaWFibGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQ8VCBleHRlbmRzIFN0b3JhZ2VFbGVtZW50VHlwZT4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmdldFZhcmlhYmxlPFQ+KGtleSk7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnJlbW92ZVZhcmlhYmxlKGtleSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXRUZW1wVmFyaWFibGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBTdG9yYWdlRWxlbWVudFR5cGUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGVtcFZhcmlhYmxlKGtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5zZXQoa2V5LCBHYW1lVW5pZmllci5vcGVuZWRMYWJlbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmVUZW1wVmFyaWFibGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRGbGFnKGtleTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMuc2V0RmxhZyhrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0RmxhZyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXJTdGF0aWMuZ2V0RmxhZyhrZXkpO1xuICAgIH1cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmZsYWdzID0gW107XG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLmNsZWFyKCk7XG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlRGVhZGxpbmVzLmNsZWFyKCk7XG4gICAgfVxuICAgIHB1YmxpYyBleHBvcnQoKTogU3RvcmFnZUdhbWVTdGF0ZSB7XG4gICAgICAgIGxldCBiYXNlOiBTdG9yYWdlR2FtZVN0YXRlSXRlbVtdID0gW107XG4gICAgICAgIFsuLi50aGlzLnN0b3JhZ2Uua2V5cygpXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGJhc2UucHVzaCh7IGtleSwgdmFsdWU6IHRoaXMuc3RvcmFnZS5nZXQoa2V5KSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0ZW1wOiBTdG9yYWdlR2FtZVN0YXRlSXRlbVtdID0gW107XG4gICAgICAgIFsuLi5TdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5rZXlzKCldLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGVtcC5wdXNoKHsga2V5LCB2YWx1ZTogU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuZ2V0KGtleSkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGVtcERlYWRsaW5lczogU3RvcmFnZUdhbWVTdGF0ZUl0ZW08bnVtYmVyPltdID0gW107XG4gICAgICAgIFsuLi5TdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5rZXlzKCldLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGVtcERlYWRsaW5lcy5wdXNoKHsga2V5LCB2YWx1ZTogU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuZ2V0KGtleSkhIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHtcbiAgICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgICB0ZW1wLFxuICAgICAgICAgICAgdGVtcERlYWRsaW5lcyxcbiAgICAgICAgICAgIGZsYWdzOiBTdG9yYWdlTWFuYWdlclN0YXRpYy5mbGFncyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyByZXN0b3JlKGRhdGE6IFN0b3JhZ2VHYW1lU3RhdGUpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBpZCBkYXRhIGlzIGFycmF5XG4gICAgICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgICAgIC8vIFRPRE8gdGhpcyBpZiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBzb21lIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gXCJfX190ZW1wX3N0b3JhZ2VfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW0udmFsdWUgYXMgUmVjb3JkPHN0cmluZywgU3RvcmFnZUVsZW1lbnRUeXBlPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5rZXkgPT09IFwiX19fdGVtcF9zdG9yYWdlX2RlYWRsaW5lc19fX1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbS52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmtleSA9PT0gXCJfX19mbGFnc19fX1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbS52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmZsYWdzLnB1c2goZmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoaXRlbS5rZXksIGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFwiYmFzZVwiIGluIGRhdGEgJiYgXCJ0ZW1wXCIgaW4gZGF0YSAmJiBcInRlbXBEZWFkbGluZXNcIiBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIChkYXRhLmJhc2UgYXMgYW55KT8uZm9yRWFjaCgoaXRlbTogU3RvcmFnZUdhbWVTdGF0ZUl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoaXRlbS5rZXksIGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgKGRhdGEudGVtcCBhcyBhbnkpPy5mb3JFYWNoKChpdGVtOiBTdG9yYWdlR2FtZVN0YXRlSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2Uuc2V0KGl0ZW0ua2V5LCBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIChkYXRhLnRlbXBEZWFkbGluZXMgYXMgYW55KT8uZm9yRWFjaCgoaXRlbTogU3RvcmFnZUdhbWVTdGF0ZUl0ZW08bnVtYmVyPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2VEZWFkbGluZXMuc2V0KGl0ZW0ua2V5LCBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIGRhdGEgaXMgb2JqZWN0XG4gICAgICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgICAgIC8vIFRPRE8gdGhpcyBpZiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBzb21lIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIl9fX3RlbXBfc3RvcmFnZV9fX1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgU3RvcmFnZUVsZW1lbnRUeXBlPikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnRlbXBTdG9yYWdlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIl9fX3RlbXBfc3RvcmFnZV9kZWFkbGluZXNfX19cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX19mbGFnc19fX1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIHN0cmluZ1tdKS5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmZsYWdzLnB1c2goZmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJObyBzdG9yYWdlIGRhdGEgZm91bmRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGltcG9ydGluZyBkYXRhXCIsIGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0b3JhZ2VNYW5hZ2VyU3RhdGljIGZyb20gXCIuLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuXG4vKipcbiAqIFN0b3JlZENsYXNzTW9kZWwgaXMgYSBhYnN0cmFjdCBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRob2RzIHRvIHN0b3JlIGEgY2xhc3MgaW4gdGhlIGdhbWUuXG4gKiBJIHN1Z2dlc3QgeW91IGV4dGVuZCB0aGlzIGNsYXNzIHRvIGNyZWF0ZSB5b3VyIG93biBzdG9yZWQgY2xhc3MuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIENoYXJhY3RlckJhc2VNb2RlbCBleHRlbmRzIFN0b3JlZENsYXNzTW9kZWwgaW1wbGVtZW50cyBDaGFyYWN0ZXJCYXNlTW9kZWxQcm9wcyB7XG4gKiAgICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IENoYXJhY3RlckJhc2VNb2RlbFByb3BzKSB7XG4gKiAgICAgICAgIHN1cGVyKFwiX19fY2hhcmFjdGVyX19fXCIsIGlkKVxuICogICAgICAgICB0aGlzLmRlZmF1bHROYW1lID0gcHJvcHMubmFtZVxuICogICAgICAgICB0aGlzLmRlZmF1bHRTdXJuYW1lID0gcHJvcHMuc3VybmFtZVxuICogICAgIH1cbiAqICAgICBwcml2YXRlIGRlZmF1bHROYW1lOiBzdHJpbmcgPSBcIlwiXG4gKiAgICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZVByb3BlcnR5PHN0cmluZz4oXCJuYW1lXCIpIHx8IHRoaXMuZGVmYXVsdE5hbWVcbiAqICAgICB9XG4gKiAgICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICogICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwibmFtZVwiLCB2YWx1ZSlcbiAqICAgICB9XG4gKiAgICAgcHJpdmF0ZSBkZWZhdWx0U3VybmFtZT86IHN0cmluZ1xuICogICAgIGdldCBzdXJuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gKiAgICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwic3VybmFtZVwiKSB8fCB0aGlzLmRlZmF1bHRTdXJuYW1lXG4gKiAgICAgfVxuICogICAgIHNldCBzdXJuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAqICAgICAgICAgdGhpcy5zZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcInN1cm5hbWVcIiwgdmFsdWUpXG4gKiAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JlZENsYXNzTW9kZWwge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBpZCBvZiB0aGUgY2F0ZWdvcnkuIEZvciBleGFtcGxlIGlmIHlvdSBhcmUgc3RvcmluZyBhIGNoYXJhY3RlciBjbGFzcywgeW91IGNhbiB1c2UgXCJjaGFyYWN0ZXJzXCIgYXMgY2F0ZWdvcnlJZC4gc28gYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVyIGNsYXNzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBcImNoYXJhY3RlcnNcIiBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4gVGhpcyBpZCBtdXN0IGJlIHVuaXF1ZSBmb3IgdGhlIGNhdGVnb3J5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5SWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIGlkIG9mIHRoZSBzdG9yZWQgY2xhc3MuIGlzIHVuaXF1ZSBmb3IgdGhpcyBjbGFzcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHByaXZhdGUgY2F0ZWdvcnlJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIHRoZSBzdG9yYWdlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gSWYgaXMgdW5kZWZpbmVkLCB0aGUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IFQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VWYWx1ZSA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmdldFZhcmlhYmxlPGFueT4odGhpcy5jYXRlZ29yeUlkKTtcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHN0b3JhZ2Ugbm90IGhhdmUgYSBrZXkgd2l0aCB0aGUgaWRcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUuaGFzT3duUHJvcGVydHkodGhpcy5pZCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzdG9yYWdlVmFsdWVbdGhpcy5pZF0uaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdG9yYWdlVmFsdWVbdGhpcy5pZF1bcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHsgLi4uc3RvcmFnZVZhbHVlW3RoaXMuaWRdLCBbcHJvcGVydHlOYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdG9yYWdlVmFsdWVbdGhpcy5pZF0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnNldFZhcmlhYmxlKHRoaXMuY2F0ZWdvcnlJZCwgc3RvcmFnZVZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgcHJvcGVydHkgZnJvbSB0aGUgc3RvcmFnZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIGlkVG9Vc2UgVGhlIGlkIG9mIHRoZSBpbnN0YW5jZSB0byBnZXQgdGhlIHByb3BlcnR5LiBAZGVmYXVsdCB0aGlzLmlkXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyB1bmRlZmluZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgaWRUb1VzZTogc3RyaW5nID0gdGhpcy5pZCk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgc3RvcmFnZVZhbHVlID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMuZ2V0VmFyaWFibGU8YW55Pih0aGlzLmNhdGVnb3J5SWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdG9yYWdlVmFsdWUgJiZcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZS5oYXNPd25Qcm9wZXJ0eShpZFRvVXNlKSAmJlxuICAgICAgICAgICAgc3RvcmFnZVZhbHVlW2lkVG9Vc2VdLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZVZhbHVlW2lkVG9Vc2VdW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJpbXBvcnQgU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2UgZnJvbSBcIi4vaW50ZXJmYWNlcy9TdG9yYWdlTWFuYWdlckludGVyZmFjZVwiO1xuaW1wb3J0IFN0b3JhZ2VNYW5hZ2VyIGZyb20gXCIuL1N0b3JhZ2VNYW5hZ2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcmVkQ2xhc3NNb2RlbCB9IGZyb20gXCIuL2NsYXNzZXMvU3RvcmVkQ2xhc3NNb2RlbFwiO1xuZXhwb3J0IHsgU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0IHR5cGUgeyBkZWZhdWx0IGFzIFN0b3JhZ2VHYW1lU3RhdGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1N0b3JhZ2VHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTdG9yYWdlTWFuYWdlckludGVyZmFjZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU3RvcmFnZU1hbmFnZXJJbnRlcmZhY2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcmFnZU1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuZXhwb3J0IHR5cGUgeyBTdG9yYWdlRWxlbWVudFR5cGUsIFN0b3JhZ2VPYmplY3RUeXBlIH0gZnJvbSBcIi4vdHlwZXMvU3RvcmFnZUVsZW1lbnRUeXBlXCI7XG5leHBvcnQgeyBzdG9yYWdlIH07XG5cbmNvbnN0IHN0b3JhZ2U6IFN0b3JhZ2VNYW5hZ2VySW50ZXJmYWNlID0gbmV3IFN0b3JhZ2VNYW5hZ2VyKCk7XG4iXX0=
|
package/dist/core.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var p=Object.defineProperty;var g=(r,t,o)=>t in r?p(r,t,{enumerable:true,configurable:true,writable:true,value:o}):r[t]=o;var i=(r,t,o)=>g(r,typeof t!="symbol"?t+"":t,o);var a;(l=>(l.log=(s,...m)=>console.log(`[Pixi\u2019VN] ${s}`,...m),l.warn=(s,...m)=>console.warn(`[Pixi\u2019VN] ${s}`,...m),l.error=(s,...m)=>console.error(`[Pixi\u2019VN] ${s}`,...m),l.info=(s,...m)=>console.info(`[Pixi\u2019VN] ${s}`,...m)))(a||(a={}));var n=class extends Error{constructor(o,u){super(`[Pixi\u2019VN] ${u}`);i(this,"code");this.code=o;}};var e=class e{static init(t){t.navigate&&(e._navigate=t.navigate),e._getStepCounter=t.getStepCounter,e._setStepCounter=t.setStepCounter,e._getCurrentGameStepState=t.getCurrentGameStepState,e._restoreGameStepState=t.restoreGameStepState,e._getOpenedLabels=t.getOpenedLabels,t.onPreContinue&&e.addOnPreContinue(t.onPreContinue),e._processNavigationRequests=t.processNavigationRequests,e._getVariable=t.getVariable,e._setVariable=t.setVariable,e._removeVariable=t.removeVariable,e._getFlag=t.getFlag,e._setFlag=t.setFlag,t.onLabelClosing&&(e._onLabelClosing=t.onLabelClosing),e._addHistoryItem=t.addHistoryItem,e._getCharacter=t.getCharacter,e._animate=t.animate;}static get navigate(){return e._navigate}static set navigate(t){e._navigate=t;}static get stepCounter(){return e._getStepCounter()}static set stepCounter(t){e._setStepCounter(t);}static get currentGameStepState(){return e._getCurrentGameStepState()}static get restoreGameStepState(){return e._restoreGameStepState}static get openedLabels(){return e._getOpenedLabels()}static addOnPreContinue(t){e._onPreContinueHandlers.push(t);}static removeOnPreContinue(t){e._onPreContinueHandlers=e._onPreContinueHandlers.filter(o=>o!==t);}static clearOnPreContinueHandlers(){e._onPreContinueHandlers=[];}static async runOnPreContinue(){let t=e._onPreContinueHandlers.slice();await Promise.all(t.map(o=>o()));}static get onPreContinue(){return e.runOnPreContinue}static get continueRequestsCount(){return e.navigationRequestsCount}static increaseContinueRequest(t=1){e.navigationRequestsCount+=t;}static get backRequestsCount(){return -1*e.navigationRequestsCount}static increaseBackRequest(t=1){e.navigationRequestsCount-=t;}static async processNavigationRequests(t){let o=e._processNavigationRequests(e.navigationRequestsCount,t);return e.navigationRequestsCount=o.newValue,await o.result}static get getVariable(){return e._getVariable}static get setVariable(){return e._setVariable}static get removeVariable(){return e._removeVariable}static get getFlag(){return e._getFlag}static get setFlag(){return e._setFlag}static get onLabelClosing(){return e._onLabelClosing}static get addHistoryItem(){return e._addHistoryItem}static get getCharacter(){return e._getCharacter}static get animate(){return e._animate}};i(e,"_navigate",()=>{a.warn("Navigate function not initialized. You should add the navigate function in the Game.init() method.");}),i(e,"_getStepCounter",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_setStepCounter",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_getCurrentGameStepState",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_restoreGameStepState",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_getOpenedLabels",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_onPreContinueHandlers",[]),i(e,"navigationRequestsCount",0),i(e,"processNavigationLock",Promise.resolve()),i(e,"_processNavigationRequests",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_getVariable",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_setVariable",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_removeVariable",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_getFlag",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_setFlag",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"_onLabelClosing",()=>{}),i(e,"_addHistoryItem",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")}),i(e,"runningStepsCount",0),i(e,"_getCharacter",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented.")}),i(e,"onEnd"),i(e,"onError"),i(e,"_animate",()=>{throw a.error("Method not implemented, you should initialize the Game: Game.init()"),new n("not_implemented","Method not implemented, you should initialize the Game: Game.init()")});var d=e;exports.GameUnifier=d;exports.PixiError=n;
|