@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
package/dist/sound.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var core=require('@drincs/pixi-vn/core'),sound=require('@pixi/sound');var O=Object.defineProperty;var I=(l,e,t)=>e in l?O(l,e,{enumerable:true,configurable:true,writable:true,value:t}):l[e]=t;var h=(l,e,t)=>I(l,typeof e!="symbol"?e+"":e,t);var p;(i=>(i.log=(u,...s)=>console.log(`[Pixi\u2019VN] ${u}`,...s),i.warn=(u,...s)=>console.warn(`[Pixi\u2019VN] ${u}`,...s),i.error=(u,...s)=>console.error(`[Pixi\u2019VN] ${u}`,...s),i.info=(u,...s)=>console.info(`[Pixi\u2019VN] ${u}`,...s)))(p||(p={}));function g(l){try{if(typeof l>"u")return l;let e=JSON.stringify(l);return JSON.parse(e)}catch(e){throw p.error("Error creating exportable element",l,e),new core.PixiError("not_json_serializable","Error creating exportable element")}}var r=class{constructor(){}};h(r,"soundAliasesOrder",[]),h(r,"soundsPlaying",{}),h(r,"sounds",{});var f=class l extends sound.Sound{constructor(){super(...arguments);h(this,"alias");}pause(){if(!this.alias)throw new core.PixiError("unknown_element","The alias is not defined.");let t=r.soundsPlaying[this.alias];if(!t)throw new core.PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={...t,paused:true},super.pause()}resume(){if(!this.alias)throw new core.PixiError("unknown_element","The alias is not defined.");let t=r.soundsPlaying[this.alias];if(!t)throw new core.PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={options:t.options,stepIndex:core.GameUnifier.stepCounter,paused:false},super.resume()}destroy(){return this.alias&&delete r.soundsPlaying[this.alias],super.destroy()}stop(){if(!this.alias)throw new core.PixiError("unknown_element","The alias is not defined.");return delete r.soundsPlaying[this.alias],super.stop()}play(t){if(typeof t=="string"&&(this.alias=t),!this.alias)throw new core.PixiError("unknown_element","The alias is not defined.");return r.soundsPlaying[this.alias]={stepIndex:core.GameUnifier.stepCounter,options:t,paused:false},super.play(t)}static from(t){let o=sound.Sound.from(t);return new l(o.media,o.options)}};function c(l){let e=[];for(let t of l)t.type==="TelephoneFilter"?e.push(new sound.filters.TelephoneFilter):t.type==="StreamFilter"?e.push(new sound.filters.StreamFilter):t.type==="StereoFilter"?e.push(new sound.filters.StereoFilter(t.pan)):t.type==="ReverbFilter"?e.push(new sound.filters.ReverbFilter(t.seconds,t.decay,t.reverse)):t.type==="MonoFilter"?e.push(new sound.filters.MonoFilter):t.type==="EqualizerFilter"?e.push(new sound.filters.EqualizerFilter(t.f32,t.f64,t.f125,t.f250,t.f500,t.f1k,t.f2k,t.f4k,t.f8k,t.f16k)):t.type==="DistortionFilter"?e.push(new sound.filters.DistortionFilter(t.amount)):p.error("Unknown sound filter type");return e}function F(l){if(!l)return;let e=[];for(let t of l)t instanceof sound.filters.TelephoneFilter?e.push({type:"TelephoneFilter"}):t instanceof sound.filters.StreamFilter?e.push({type:"StreamFilter"}):t instanceof sound.filters.StereoFilter?e.push({type:"StereoFilter",pan:t.pan}):t instanceof sound.filters.ReverbFilter?e.push({type:"ReverbFilter",seconds:t.seconds,decay:t.decay,reverse:t.reverse}):t instanceof sound.filters.MonoFilter?e.push({type:"MonoFilter"}):t instanceof sound.filters.EqualizerFilter?e.push({type:"EqualizerFilter",f32:t.f32,f64:t.f64,f125:t.f125,f250:t.f250,f500:t.f500,f1k:t.f1k,f2k:t.f2k,f4k:t.f4k,f8k:t.f8k,f16k:t.f16k}):t instanceof sound.filters.DistortionFilter?e.push({type:"DistortionFilter",amount:t.amount}):p.error("Unknown sound filter type");return e}var v=class extends sound.SoundLibrary{constructor(){super();}get context(){return sound.sound.context}get filtersAll(){return sound.sound.filtersAll}set filtersAll(e){sound.sound.filtersAll=e.filter(t=>!(t instanceof sound.filters.Filter));}get supported(){return sound.sound.supported}getOptions(e,t){let o;return typeof e=="string"?o={url:e}:Array.isArray(e)?o={url:e}:e instanceof ArrayBuffer||e instanceof AudioBuffer||e instanceof HTMLAudioElement?o={source:e}:o=e,o={...o,...t||{}},o}add(e,t){if(typeof e=="object")throw new core.PixiError("invalid_usage","The method add(map: SoundSourceMap, globalOptions?: Options) is deprecated. Use add(alias: string, options: Options | string | ArrayBuffer | AudioBuffer | HTMLAudioElement | Sound): Sound; instead.");this.exists(e)&&this.remove(e),t instanceof sound.Sound&&(t=t.options);let o;if(t instanceof f)o=t;else {let i=this.getOptions(t||{});o=f.from(i);}return o.alias=e,!r.soundAliasesOrder.includes(e)&&r.soundAliasesOrder.push(e),r.sounds[e]=o,sound.sound.add(e,o),o}get useLegacy(){return sound.sound.useLegacy}set useLegacy(e){sound.sound.useLegacy=e;}get disableAutoPause(){return sound.sound.disableAutoPause}set disableAutoPause(e){sound.sound.disableAutoPause=e;}remove(e){return r.soundAliasesOrder=r.soundAliasesOrder.filter(t=>t!==e),delete r.soundsPlaying[e],delete r.sounds[e],sound.sound.remove(e)}get volumeAll(){return sound.sound.volumeAll}set volumeAll(e){sound.sound.volumeAll=e;}get speedAll(){return sound.sound.speedAll}set speedAll(e){sound.sound.speedAll=e;}togglePauseAll(){return sound.sound.togglePauseAll()}pauseAll(){return sound.sound.pauseAll()}resumeAll(){return sound.sound.resumeAll()}toggleMuteAll(){return sound.sound.toggleMuteAll()}muteAll(){return sound.sound.muteAll()}unmuteAll(){return sound.sound.unmuteAll()}removeAll(){return r.soundAliasesOrder=[],r.soundsPlaying={},r.sounds={},sound.sound.removeAll()}stopAll(){for(let e in r.sounds)r.sounds[e].stop();return r.soundsPlaying={},sound.sound.stopAll()}exists(e,t){return sound.sound.exists(e,t)||e in r.sounds}isPlaying(){return sound.sound.isPlaying()}find(e){let t=r.sounds[e];return t||(t=sound.sound.find(e),t&&(r.sounds[e]=t),t)}play(e,t){if(!this.exists(e))throw new core.PixiError("unknown_element","The alias is not found in the sound library.");return r.soundsPlaying[e]={stepIndex:core.GameUnifier.stepCounter,options:t,paused:false},sound.sound.play(e,t)}stop(e){return delete r.soundsPlaying[e],sound.sound.stop(e)}pause(e){let t=r.soundsPlaying[e];if(!t)throw new core.PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[e]={...t,paused:true},sound.sound.pause(e)}resume(e){let t=r.soundsPlaying[e];if(!t)throw new core.PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[e]={options:t.options,stepIndex:core.GameUnifier.stepCounter,paused:false},sound.sound.resume(e)}volume(e,t){return sound.sound.volume(e,t)}speed(e,t){return sound.sound.speed(e,t)}duration(e){return sound.sound.duration(e)}close(){return sound.sound.close()}clear(){this.stopAll();}export(){let e={};for(let t in r.soundsPlaying){let o=r.soundsPlaying[t],i=this.find(t);i&&(e[t]={...o,sound:{options:{...i.options,autoPlay:i.autoPlay,loop:i.loop,preload:i.preload,singleInstance:i.singleInstance,url:i.options.url,volume:i.options.volume},filters:F(i.media.filters)}});}return {soundsPlaying:g(e),soundAliasesOrder:g(r.soundAliasesOrder),filters:g(F(this.filtersAll))}}removeOldSoundAndExport(){return this.export()}restore(e){let t=core.GameUnifier.stepCounter-1;this.clear();try{if(e.hasOwnProperty("soundAliasesOrder"))r.soundAliasesOrder=e.soundAliasesOrder;else {p.error("The data does not have the properties soundAliasesOrder");return}if(e.hasOwnProperty("filters")){let o=e.filters;o&&(this.filtersAll=c(o));}if(e.hasOwnProperty("playInStepIndex")){let o=e.playInStepIndex;o&&(r.soundsPlaying=o);}if(e.hasOwnProperty("sounds")){let o=e.sounds;for(let i in o){let u=o[i],s=!1,y=this.add(i,{...u.options,autoPlay:!1});if(i in r.soundsPlaying){let a=r.soundsPlaying[i];(u.options.loop||a.options&&typeof a.options=="object"&&a.options.loop||a.stepIndex===t)&&(s=!0),u.filters&&(y.filters=c(u.filters)),s&&y.play();}}}if(e.hasOwnProperty("soundsPlaying")){let o=e.soundsPlaying;for(let i in o){let u=o[i];r.soundsPlaying[i]={paused:u.paused,stepIndex:u.stepIndex,options:u.options};let s=o[i].sound,y=!1,a;if(this.exists(i)?(a=this.find(i),s.options.url=a.options.url,s.options.volume=a.options.volume,a.options=s.options,a.autoPlay=!1,a.filters=s.filters?c(s.filters):[]):a=this.add(i,{...s.options,autoPlay:!1}),i in r.soundsPlaying){let P=r.soundsPlaying[i];(s.options.loop||P.options&&typeof P.options=="object"&&P.options.loop||P.stepIndex===t)&&(y=!0),s.filters&&(a.filters=c(s.filters)),y&&a.play();}}}else {p.error("The data does not have the properties soundsPlaying");return}}catch(o){p.error("Error importing data",o);}}};var G={DistortionFilter:sound.filters.DistortionFilter,EqualizerFilter:sound.filters.EqualizerFilter,MonoFilter:sound.filters.MonoFilter,ReverbFilter:sound.filters.ReverbFilter,StereoFilter:sound.filters.StereoFilter,StreamFilter:sound.filters.StreamFilter,TelephoneFilter:sound.filters.TelephoneFilter};var me=new v;exports.Sound=f;exports.SoundManagerStatic=r;exports.filters=G;exports.sound=me;//# sourceMappingURL=sound.cjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9sb2ctdXRpbGl0eS50cyIsIi4uL3NyYy91dGlscy9leHBvcnQtdXRpbGl0eS50cyIsIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXJTdGF0aWMudHMiLCIuLi9zcmMvc291bmQvY2xhc3Nlcy9Tb3VuZC50cyIsIi4uL3NyYy9zb3VuZC9mdW5jdGlvbnMvc291bmQtdXRpbGl0eS50cyIsIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXIudHMiLCIuLi9zcmMvc291bmQvY29uc3RhbnRzLnRzIiwiLi4vc3JjL3NvdW5kL2luZGV4LnRzIl0sIm5hbWVzIjpbImxvZ2dlciIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsImNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IiwiZWxlbWVudCIsImVsZW1lbnRTdHJpbmciLCJQaXhpRXJyb3IiLCJTb3VuZE1hbmFnZXJTdGF0aWMiLCJfX3B1YmxpY0ZpZWxkIiwiU291bmQiLCJfU291bmQiLCJQaXhpU291bmQiLCJpdGVtIiwiR2FtZVVuaWZpZXIiLCJvcHRpb25zIiwic291cmNlIiwicyIsIkZpbHRlck1lbW9yeVRvRmlsdGVyIiwiZmlsdGVyIiwicmVzIiwiZiIsImZpbHRlcnMiLCJGaWx0ZXJUb0ZpbHRlck1lbW9yeSIsIlNvdW5kTWFuYWdlciIsIlNvdW5kTGlicmFyeSIsInNvdW5kIiwiZmlsdGVyc0FsbCIsIm92ZXJyaWRlcyIsImFsaWFzIiwic291cmNlT3B0aW9ucyIsImxlZ2FjeSIsImF1dG9QYXVzZSIsInZvbHVtZSIsInNwZWVkIiwiYXNzZXJ0Iiwic291bmRFbGVtZW50cyIsImRhdGEiLCJzdGVwQ291bnRlciIsInBsYXlJblN0ZXBJbmRleCIsInNvdW5kcyIsImF1dG9QbGF5Iiwic3RlcCIsInNvdW5kc1BsYXlpbmciLCJvcCIsImUiXSwibWFwcGluZ3MiOiI2UEFBTyxJQUFVQSxDQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxHQUNBQSxDQUFBQSxDQUFBLElBQU0sQ0FBQ0MsQ0FBQUEs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NkIsQ0FBQUEsQ0FBSyxPQUFBLEVBQVcsT0FBT0EsQ0FBQUEsQ0FBSyxPQUFBLEVBQVksVUFBWUEsQ0FBQUEsQ0FBSyxPQUFBLENBQVEsTUFHM0RBLENBQUFBLENBQUssU0FBQSxHQUFjSixLQUMxQkcsQ0FBQUEsQ0FBVyxDQUFBLENBQUEsQ0FBQSxDQUdYNUIsRUFBSyxPQUFBLEdBQ0xJLENBQUFBLENBQUUsUUFBVUMsQ0FBQUEsQ0FBcUJMLENBQUFBLENBQUssT0FBTyxDQUFBLENBQUEsQ0FHN0M0QixDQUFBQSxFQUNBeEIsRUFBRSxJQUFBLEdBRVYsQ0FDSixDQUNKLENBQUEsS0FBTyxDQUNIaEIsRUFBTyxLQUFBLENBQU0scURBQXFELEVBQ2xFLE1BQ0osQ0FDSixPQUFTNEMsQ0FBQUEsQ0FBRyxDQUNSNUMsRUFBTyxLQUFBLENBQU0sc0JBQUEsQ0FBd0I0QyxDQUFDLEVBQzFDLENBQ0osQ0FDSixDQUFBLENDaFlPLElBQU12QixDQUFBQSxDQUFVLENBQ25CLGdCQUFBLENBQWtCRCxjQUFFLGdCQUFBLENBQ3BCLGVBQUEsQ0FBaUJBLGNBQUUsZUFBQSxDQUNuQixVQUFBLENBQVlBLGNBQUUsVUFBQSxDQUNkLFlBQUEsQ0FBY0EsY0FBRSxZQUFBLENBQ2hCLFlBQUEsQ0FBY0EsY0FBRSxZQUFBLENBQ2hCLFlBQUEsQ0FBY0EsY0FBRSxZQUFBLENBQ2hCLGVBQUEsQ0FBaUJBLGNBQUUsZUFDdkIsRUNBQSxJQUFNSyxFQUFBQSxDQUFRLElBQUlGIiwiZmlsZSI6InNvdW5kLmNqcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgbG9nZ2VyIHtcbiAgICBleHBvcnQgY29uc3QgbG9nID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5sb2coYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IHdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PlxuICAgICAgICBjb25zb2xlLndhcm4oYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IGVycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5lcnJvcihgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICBleHBvcnQgY29uc3QgaW5mbyA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn1cbiIsImltcG9ydCB7IFBpeGlFcnJvciB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm4vY29yZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLXV0aWxpdHlcIjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBiZSBjb3BpZWRcbiAqIEByZXR1cm5zIFRoZSBjb3BpZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQ8VD4oZWxlbWVudDogVCk6IFQge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVsZW1lbnRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZWxlbWVudFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIiwgZWxlbWVudCwgZSk7XG4gICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJub3RfanNvbl9zZXJpYWxpemFibGVcIiwgXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IFNvdW5kIGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmltcG9ydCB7IFNvdW5kUGxheSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmRNYW5hZ2VyU3RhdGljIHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbiAgICBzdGF0aWMgc291bmRBbGlhc2VzT3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgc3RhdGljIHNvdW5kc1BsYXlpbmc6IHsgW2tleTogc3RyaW5nXTogU291bmRQbGF5IH0gPSB7fTtcbiAgICBzdGF0aWMgc291bmRzOiB7IFtrZXk6IHN0cmluZ106IFNvdW5kIH0gPSB7fTtcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7IElNZWRpYUluc3RhbmNlLCBTb3VuZCBhcyBQaXhpU291bmQgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4uL1NvdW5kTWFuYWdlclN0YXRpY1wiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU291bmRPcHRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kIGV4dGVuZHMgUGl4aVNvdW5kIHtcbiAgICBhbGlhcz86IHN0cmluZztcbiAgICBvdmVycmlkZSBwYXVzZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHBhdXNlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5yZXN1bWUoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBvdmVycmlkZSBzdG9wKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGxheShvcHRpb25zPzogc3RyaW5nIHwgU291bmRQbGF5T3B0aW9ucyk6IElNZWRpYUluc3RhbmNlIHwgUHJvbWlzZTxJTWVkaWFJbnN0YW5jZT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hbGlhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbdGhpcy5hbGlhc10gPSB7XG4gICAgICAgICAgICBzdGVwSW5kZXg6IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5wbGF5KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvc291bmQvYmxvYi9tYWluL3NyYy9Tb3VuZC50cyNMMjM1XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKHNvdXJjZTogc3RyaW5nIHwgc3RyaW5nW10gfCBTb3VuZE9wdGlvbnMgfCBBcnJheUJ1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBBdWRpb0J1ZmZlcik6IFNvdW5kIHtcbiAgICAgICAgbGV0IHMgPSBQaXhpU291bmQuZnJvbShzb3VyY2UpO1xuICAgICAgICByZXR1cm4gbmV3IFNvdW5kKHMubWVkaWEsIHMub3B0aW9ucyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRmlsdGVyLCBmaWx0ZXJzIH0gZnJvbSBcIkBwaXhpL3NvdW5kXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZEZpbHRlck1lbW9yeSBmcm9tIFwiLi4vdHlwZXMvU291bmRGaWx0ZXJNZW1vcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlck1lbW9yeVRvRmlsdGVyKGZpbHRlcjogU291bmRGaWx0ZXJNZW1vcnlbXSk6IEZpbHRlcltdIHtcbiAgICBsZXQgcmVzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09IFwiVGVsZXBob25lRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlRlbGVwaG9uZUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RyZWFtRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0cmVhbUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RlcmVvRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcihmLnBhbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJSZXZlcmJGaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuUmV2ZXJiRmlsdGVyKGYuc2Vjb25kcywgZi5kZWNheSwgZi5yZXZlcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSBcIk1vbm9GaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuTW9ub0ZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiRXF1YWxpemVyRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcihmLmYzMiwgZi5mNjQsIGYuZjEyNSwgZi5mMjUwLCBmLmY1MDAsIGYuZjFrLCBmLmYyaywgZi5mNGssIGYuZjhrLCBmLmYxNmspXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJEaXN0b3J0aW9uRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLkRpc3RvcnRpb25GaWx0ZXIoZi5hbW91bnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlclRvRmlsdGVyTWVtb3J5KGZpbHRlcj86IEZpbHRlcltdKTogU291bmRGaWx0ZXJNZW1vcnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IHJlczogU291bmRGaWx0ZXJNZW1vcnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmIGluc3RhbmNlb2YgZmlsdGVycy5UZWxlcGhvbmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlRlbGVwaG9uZUZpbHRlclwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuU3RyZWFtRmlsdGVyKSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJlYW1GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RlcmVvRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgcGFuOiBmLnBhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlJldmVyYkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmV2ZXJiRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgc2Vjb25kczogZi5zZWNvbmRzLFxuICAgICAgICAgICAgICAgIGRlY2F5OiBmLmRlY2F5LFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGYucmV2ZXJzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLk1vbm9GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIk1vbm9GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRXF1YWxpemVyRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgZjMyOiBmLmYzMixcbiAgICAgICAgICAgICAgICBmNjQ6IGYuZjY0LFxuICAgICAgICAgICAgICAgIGYxMjU6IGYuZjEyNSxcbiAgICAgICAgICAgICAgICBmMjUwOiBmLmYyNTAsXG4gICAgICAgICAgICAgICAgZjUwMDogZi5mNTAwLFxuICAgICAgICAgICAgICAgIGYxazogZi5mMWssXG4gICAgICAgICAgICAgICAgZjJrOiBmLmYyayxcbiAgICAgICAgICAgICAgICBmNGs6IGYuZjRrLFxuICAgICAgICAgICAgICAgIGY4azogZi5mOGssXG4gICAgICAgICAgICAgICAgZjE2azogZi5mMTZrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuRGlzdG9ydGlvbkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRGlzdG9ydGlvbkZpbHRlclwiLFxuICAgICAgICAgICAgICAgIGFtb3VudDogZi5hbW91bnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLFxuICAgIGZpbHRlcnMsXG4gICAgSU1lZGlhQ29udGV4dCxcbiAgICBJTWVkaWFJbnN0YW5jZSxcbiAgICBTb3VuZCBhcyBQaXhpU291bmQsXG4gICAgc291bmQsXG4gICAgU291bmRMaWJyYXJ5LFxuICAgIFNvdW5kTWFwLFxufSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCB7IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZCBmcm9tIFwiLi9jbGFzc2VzL1NvdW5kXCI7XG5pbXBvcnQgeyBGaWx0ZXJNZW1vcnlUb0ZpbHRlciwgRmlsdGVyVG9GaWx0ZXJNZW1vcnkgfSBmcm9tIFwiLi9mdW5jdGlvbnMvc291bmQtdXRpbGl0eVwiO1xuaW1wb3J0IFNvdW5kR2FtZVN0YXRlLCB7IEV4cG9ydGVkU291bmRQbGF5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZEdhbWVTdGF0ZVwiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZE9wdGlvbnNcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4vU291bmRNYW5hZ2VyU3RhdGljXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kTWFuYWdlciBleHRlbmRzIFNvdW5kTGlicmFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBjb250ZXh0KCk6IElNZWRpYUNvbnRleHQge1xuICAgICAgICByZXR1cm4gc291bmQuY29udGV4dDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGZpbHRlcnNBbGwoKTogRmlsdGVyW10ge1xuICAgICAgICByZXR1cm4gc291bmQuZmlsdGVyc0FsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IGZpbHRlcnNBbGwoZmlsdGVyc0FsbDogRmlsdGVyW10pIHtcbiAgICAgICAgc291bmQuZmlsdGVyc0FsbCA9IGZpbHRlcnNBbGwuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIShmIGluc3RhbmNlb2YgZmlsdGVycy5GaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IHN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN1cHBvcnRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3NvdW5kL2Jsb2IvbWFpbi9zcmMvU291bmRMaWJyYXJ5LnRzI0wxODdcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE9wdGlvbnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZE9wdGlvbnMsXG4gICAgICAgIG92ZXJyaWRlcz86IFNvdW5kT3B0aW9ucyxcbiAgICApOiBTb3VuZE9wdGlvbnMge1xuICAgICAgICBsZXQgb3B0aW9uczogU291bmRPcHRpb25zO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyB1cmw6IHNvdXJjZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBzb3VyY2UgfTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgICAgICAgICBzb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fFxuICAgICAgICAgICAgc291cmNlIGluc3RhbmNlb2YgSFRNTEF1ZGlvRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHNvdXJjZSB9IGFzIGFueTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2UgYXMgU291bmRPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLihvdmVycmlkZXMgfHwge30pIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBTb3VuZE9wdGlvbnMgfCBzdHJpbmcpOiBTb3VuZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogVXNlIGBhZGQoYWxpYXM6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucyB8IHN0cmluZyB8IEFycmF5QnVmZmVyIHwgQXVkaW9CdWZmZXIgfCBIVE1MQXVkaW9FbGVtZW50IHwgU291bmQpOiBTb3VuZDtgIGluc3RlYWQuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgYWRkKG1hcDogYW55LCBnbG9iYWxPcHRpb25zPzogU291bmRPcHRpb25zKTogU291bmRNYXA7XG4gICAgcHVibGljIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBzb3VyY2VPcHRpb25zPzogU291bmRPcHRpb25zIHwgc3RyaW5nKTogU291bmQgfCBTb3VuZE1hcCB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJpbnZhbGlkX3VzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJUaGUgbWV0aG9kIGFkZChtYXA6IFNvdW5kU291cmNlTWFwLCBnbG9iYWxPcHRpb25zPzogT3B0aW9ucykgaXMgZGVwcmVjYXRlZC4gVXNlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zIHwgc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZCk6IFNvdW5kOyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShhbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlT3B0aW9ucyBpbnN0YW5jZW9mIFBpeGlTb3VuZCkge1xuICAgICAgICAgICAgc291cmNlT3B0aW9ucyA9IHNvdXJjZU9wdGlvbnMub3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBsZXQgczogU291bmQ7XG4gICAgICAgIGlmIChzb3VyY2VPcHRpb25zIGluc3RhbmNlb2YgU291bmQpIHtcbiAgICAgICAgICAgIHMgPSBzb3VyY2VPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnM6IFNvdW5kT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhzb3VyY2VPcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIHMgPSBTb3VuZC5mcm9tKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHMuYWxpYXMgPSBhbGlhcztcblxuICAgICAgICAhU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmluY2x1ZGVzKGFsaWFzKSAmJiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIucHVzaChhbGlhcyk7XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdID0gcztcbiAgICAgICAgc291bmQuYWRkKGFsaWFzLCBzKTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB1c2VMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC51c2VMZWdhY3k7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCB1c2VMZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHNvdW5kLnVzZUxlZ2FjeSA9IGxlZ2FjeTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVBdXRvUGF1c2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kaXNhYmxlQXV0b1BhdXNlO1xuICAgIH1cbiAgICBvdmVycmlkZSBzZXQgZGlzYWJsZUF1dG9QYXVzZShhdXRvUGF1c2U6IGJvb2xlYW4pIHtcbiAgICAgICAgc291bmQuZGlzYWJsZUF1dG9QYXVzZSA9IGF1dG9QYXVzZTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmZpbHRlcigodCkgPT4gdCAhPT0gYWxpYXMpO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc107XG4gICAgICAgIHJldHVybiBzb3VuZC5yZW1vdmUoYWxpYXMpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB2b2x1bWVBbGwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZUFsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IHZvbHVtZUFsbCh2b2x1bWU6IG51bWJlcikge1xuICAgICAgICBzb3VuZC52b2x1bWVBbGwgPSB2b2x1bWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBzcGVlZEFsbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWRBbGw7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCBzcGVlZEFsbChzcGVlZDogbnVtYmVyKSB7XG4gICAgICAgIHNvdW5kLnNwZWVkQWxsID0gc3BlZWQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZVBhdXNlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc291bmQudG9nZ2xlUGF1c2VBbGwoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGF1c2VBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5wYXVzZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZUFsbCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnJlc3VtZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZU11dGVBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC50b2dnbGVNdXRlQWxsKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIG11dGVBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgdW5tdXRlQWxsKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQudW5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlQWxsKCk6IHRoaXMge1xuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIgPSBbXTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSB7fTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcyA9IHt9O1xuICAgICAgICByZXR1cm4gc291bmQucmVtb3ZlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3RvcEFsbCgpOiB0aGlzIHtcbiAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcykge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10uc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nID0ge307XG4gICAgICAgIHJldHVybiBzb3VuZC5zdG9wQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgZXhpc3RzKGFsaWFzOiBzdHJpbmcsIGFzc2VydD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLmV4aXN0cyhhbGlhcywgYXNzZXJ0KSB8fCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzO1xuICAgIH1cbiAgICBvdmVycmlkZSBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5pc1BsYXlpbmcoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZmluZChhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IHNvdW5kLmZpbmQoYWxpYXMpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBvdmVycmlkZSBwbGF5KGFsaWFzOiBzdHJpbmcsIG9wdGlvbnM/OiBTb3VuZFBsYXlPcHRpb25zIHwgc3RyaW5nKTogSU1lZGlhSW5zdGFuY2UgfCBQcm9taXNlPElNZWRpYUluc3RhbmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc291bmQgbGlicmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGxheShhbGlhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHN0b3AoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgZGVsZXRlIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN0b3AoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSBwYXVzZShhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgcGxheUluU3RlcEluZGV4LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcGF1c2VkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGF1c2UoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZXN1bWUoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc107XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZm91bmQgaW4gdGhlIHBsYXlJblN0ZXBJbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb3VuZC5yZXN1bWUoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2b2x1bWUoYWxpYXM6IHN0cmluZywgdm9sdW1lPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZShhbGlhcywgdm9sdW1lKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3BlZWQoYWxpYXM6IHN0cmluZywgc3BlZWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWQoYWxpYXMsIHNwZWVkKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZHVyYXRpb24oYWxpYXM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kdXJhdGlvbihhbGlhcyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGNsb3NlKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQuY2xvc2UoKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnN0b3BBbGwoKTtcbiAgICB9XG5cbiAgICAvKiBFeHBvcnQgYW5kIEltcG9ydCBNZXRob2RzICovXG5cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgbGV0IHNvdW5kRWxlbWVudHM6IHsgW2tleTogc3RyaW5nXTogRXhwb3J0ZWRTb3VuZFBsYXkgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZykge1xuICAgICAgICAgICAgbGV0IHNvdW5kID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmQoYWxpYXMpO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBzb3VuZEVsZW1lbnRzW2FsaWFzXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc291bmQsXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBpdGVtLmF1dG9QbGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGl0ZW0ubG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkOiBpdGVtLnByZWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlSW5zdGFuY2U6IGl0ZW0uc2luZ2xlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZTogaXRlbS5vcHRpb25zLnZvbHVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBGaWx0ZXJUb0ZpbHRlck1lbW9yeShpdGVtLm1lZGlhLmZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdW5kc1BsYXlpbmc6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHNvdW5kRWxlbWVudHMpLFxuICAgICAgICAgICAgc291bmRBbGlhc2VzT3JkZXI6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciksXG4gICAgICAgICAgICBmaWx0ZXJzOiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudChGaWx0ZXJUb0ZpbHRlck1lbW9yeSh0aGlzLmZpbHRlcnNBbGwpKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZU9sZFNvdW5kQW5kRXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgLy8gbGV0IHNvdW5kQWxpYXNlc09yZGVyID0gW11cbiAgICAgICAgLy8gZm9yIChsZXQgYWxpYXMgb2YgR2FtZVNvdW5kTWFuYWdlci5zb3VuZEFsaWFzZXNPcmRlcikge1xuICAgICAgICAvLyAgICAgaWYgKHNvdW5kLmV4aXN0cyhhbGlhcykpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgcyA9IHNvdW5kLmZpbmQoYWxpYXMpXG4gICAgICAgIC8vICAgICAgICAgaWYgKHMubG9vcCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBzb3VuZEFsaWFzZXNPcmRlci5wdXNoKGFsaWFzKVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBHYW1lU291bmRNYW5hZ2VyLnNvdW5kQWxpYXNlc09yZGVyID0gc291bmRBbGlhc2VzT3JkZXJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KCk7XG4gICAgfVxuICAgIHB1YmxpYyByZXN0b3JlKGRhdGE6IG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdGVwQ291bnRlciA9IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyIC0gMTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzb3VuZEFsaWFzZXNPcmRlclwiKSkge1xuICAgICAgICAgICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciA9IChkYXRhIGFzIFNvdW5kR2FtZVN0YXRlKVtcInNvdW5kQWxpYXNlc09yZGVyXCJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJUaGUgZGF0YSBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIHNvdW5kQWxpYXNlc09yZGVyXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJmaWx0ZXJzXCJdO1xuICAgICAgICAgICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0FsbCA9IEZpbHRlck1lbW9yeVRvRmlsdGVyKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJwbGF5SW5TdGVwSW5kZXhcIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGxheUluU3RlcEluZGV4ID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wicGxheUluU3RlcEluZGV4XCJdO1xuICAgICAgICAgICAgICAgIGlmIChwbGF5SW5TdGVwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSBwbGF5SW5TdGVwSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNvdW5kc1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHMgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJzb3VuZHNcIl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gc291bmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc291bmRzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMubG9vcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLm9wdGlvbnMgJiYgdHlwZW9mIHN0ZXAub3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBzdGVwLm9wdGlvbnMubG9vcClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5zdGVwSW5kZXggPT09IHN0ZXBDb3VudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5maWx0ZXJzID0gRmlsdGVyTWVtb3J5VG9GaWx0ZXIoaXRlbS5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9QbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic291bmRzUGxheWluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHNQbGF5aW5nID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wic291bmRzUGxheWluZ1wiXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBzb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcCA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQ6IG9wLnBhdXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogb3Auc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3Aub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdLnNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHM6IFNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5maW5kKGFsaWFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy51cmwgPSBzLm9wdGlvbnMudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLnZvbHVtZSA9IHMub3B0aW9ucy52b2x1bWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLm9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBpdGVtLmZpbHRlcnMgPyBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpIDogW107XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGVwID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5sb29wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAub3B0aW9ucyAmJiB0eXBlb2Ygc3RlcC5vcHRpb25zID09PSBcIm9iamVjdFwiICYmIHN0ZXAub3B0aW9ucy5sb29wKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLnN0ZXBJbmRleCA9PT0gc3RlcENvdW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b1BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnBsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiVGhlIGRhdGEgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydGllcyBzb3VuZHNQbGF5aW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgaW1wb3J0aW5nIGRhdGFcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJzIGFzIGYgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgRGlzdG9ydGlvbkZpbHRlcjogZi5EaXN0b3J0aW9uRmlsdGVyLFxuICAgIEVxdWFsaXplckZpbHRlcjogZi5FcXVhbGl6ZXJGaWx0ZXIsXG4gICAgTW9ub0ZpbHRlcjogZi5Nb25vRmlsdGVyLFxuICAgIFJldmVyYkZpbHRlcjogZi5SZXZlcmJGaWx0ZXIsXG4gICAgU3RlcmVvRmlsdGVyOiBmLlN0ZXJlb0ZpbHRlcixcbiAgICBTdHJlYW1GaWx0ZXI6IGYuU3RyZWFtRmlsdGVyLFxuICAgIFRlbGVwaG9uZUZpbHRlcjogZi5UZWxlcGhvbmVGaWx0ZXIsXG59O1xuIiwiaW1wb3J0IFNvdW5kTWFuYWdlciBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZCB9IGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmV4cG9ydCB7IGZpbHRlcnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhwb3J0ZWRTb3VuZCwgZGVmYXVsdCBhcyBTb3VuZEdhbWVTdGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZE9wdGlvbnMsIFNvdW5kUGxheU9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1NvdW5kT3B0aW9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZE1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJTdGF0aWNcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZEZpbHRlck1lbW9yeSB9IGZyb20gXCIuL3R5cGVzL1NvdW5kRmlsdGVyTWVtb3J5XCI7XG5leHBvcnQgeyBzb3VuZCB9O1xuXG5jb25zdCBzb3VuZCA9IG5ldyBTb3VuZE1hbmFnZXIoKTtcbiJdfQ==
|
package/dist/sound.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import'./chunk-
|
|
1
|
+
import'./chunk-52EK6LYW.mjs';import {d,k as k$1,j}from'./chunk-46QBDRUK.mjs';import {PixiError,GameUnifier}from'@drincs/pixi-vn/core';import {filters,SoundLibrary,sound,Sound}from'@pixi/sound';var r=class{constructor(){}};d(r,"soundAliasesOrder",[]),d(r,"soundsPlaying",{}),d(r,"sounds",{});var f=class d$1 extends Sound{constructor(){super(...arguments);d(this,"alias");}pause(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");let e=r.soundsPlaying[this.alias];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={...e,paused:true},super.pause()}resume(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");let e=r.soundsPlaying[this.alias];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[this.alias]={options:e.options,stepIndex:GameUnifier.stepCounter,paused:false},super.resume()}destroy(){return this.alias&&delete r.soundsPlaying[this.alias],super.destroy()}stop(){if(!this.alias)throw new PixiError("unknown_element","The alias is not defined.");return delete r.soundsPlaying[this.alias],super.stop()}play(e){if(typeof e=="string"&&(this.alias=e),!this.alias)throw new PixiError("unknown_element","The alias is not defined.");return r.soundsPlaying[this.alias]={stepIndex:GameUnifier.stepCounter,options:e,paused:false},super.play(e)}static from(e){let o=Sound.from(e);return new d$1(o.media,o.options)}};function g(d){let t=[];for(let e of d)e.type==="TelephoneFilter"?t.push(new filters.TelephoneFilter):e.type==="StreamFilter"?t.push(new filters.StreamFilter):e.type==="StereoFilter"?t.push(new filters.StereoFilter(e.pan)):e.type==="ReverbFilter"?t.push(new filters.ReverbFilter(e.seconds,e.decay,e.reverse)):e.type==="MonoFilter"?t.push(new filters.MonoFilter):e.type==="EqualizerFilter"?t.push(new filters.EqualizerFilter(e.f32,e.f64,e.f125,e.f250,e.f500,e.f1k,e.f2k,e.f4k,e.f8k,e.f16k)):e.type==="DistortionFilter"?t.push(new filters.DistortionFilter(e.amount)):j.error("Unknown sound filter type");return t}function c(d){if(!d)return;let t=[];for(let e of d)e instanceof filters.TelephoneFilter?t.push({type:"TelephoneFilter"}):e instanceof filters.StreamFilter?t.push({type:"StreamFilter"}):e instanceof filters.StereoFilter?t.push({type:"StereoFilter",pan:e.pan}):e instanceof filters.ReverbFilter?t.push({type:"ReverbFilter",seconds:e.seconds,decay:e.decay,reverse:e.reverse}):e instanceof filters.MonoFilter?t.push({type:"MonoFilter"}):e instanceof filters.EqualizerFilter?t.push({type:"EqualizerFilter",f32:e.f32,f64:e.f64,f125:e.f125,f250:e.f250,f500:e.f500,f1k:e.f1k,f2k:e.f2k,f4k:e.f4k,f8k:e.f8k,f16k:e.f16k}):e instanceof filters.DistortionFilter?t.push({type:"DistortionFilter",amount:e.amount}):j.error("Unknown sound filter type");return t}var v=class extends SoundLibrary{constructor(){super();}get context(){return sound.context}get filtersAll(){return sound.filtersAll}set filtersAll(t){sound.filtersAll=t.filter(e=>!(e instanceof filters.Filter));}get supported(){return sound.supported}getOptions(t,e){let o;return typeof t=="string"?o={url:t}:Array.isArray(t)?o={url:t}:t instanceof ArrayBuffer||t instanceof AudioBuffer||t instanceof HTMLAudioElement?o={source:t}:o=t,o={...o,...e||{}},o}add(t,e){if(typeof t=="object")throw new PixiError("invalid_usage","The method add(map: SoundSourceMap, globalOptions?: Options) is deprecated. Use add(alias: string, options: Options | string | ArrayBuffer | AudioBuffer | HTMLAudioElement | Sound): Sound; instead.");this.exists(t)&&this.remove(t),e instanceof Sound&&(e=e.options);let o;if(e instanceof f)o=e;else {let s=this.getOptions(e||{});o=f.from(s);}return o.alias=t,!r.soundAliasesOrder.includes(t)&&r.soundAliasesOrder.push(t),r.sounds[t]=o,sound.add(t,o),o}get useLegacy(){return sound.useLegacy}set useLegacy(t){sound.useLegacy=t;}get disableAutoPause(){return sound.disableAutoPause}set disableAutoPause(t){sound.disableAutoPause=t;}remove(t){return r.soundAliasesOrder=r.soundAliasesOrder.filter(e=>e!==t),delete r.soundsPlaying[t],delete r.sounds[t],sound.remove(t)}get volumeAll(){return sound.volumeAll}set volumeAll(t){sound.volumeAll=t;}get speedAll(){return sound.speedAll}set speedAll(t){sound.speedAll=t;}togglePauseAll(){return sound.togglePauseAll()}pauseAll(){return sound.pauseAll()}resumeAll(){return sound.resumeAll()}toggleMuteAll(){return sound.toggleMuteAll()}muteAll(){return sound.muteAll()}unmuteAll(){return sound.unmuteAll()}removeAll(){return r.soundAliasesOrder=[],r.soundsPlaying={},r.sounds={},sound.removeAll()}stopAll(){for(let t in r.sounds)r.sounds[t].stop();return r.soundsPlaying={},sound.stopAll()}exists(t,e){return sound.exists(t,e)||t in r.sounds}isPlaying(){return sound.isPlaying()}find(t){let e=r.sounds[t];return e||(e=sound.find(t),e&&(r.sounds[t]=e),e)}play(t,e){if(!this.exists(t))throw new PixiError("unknown_element","The alias is not found in the sound library.");return r.soundsPlaying[t]={stepIndex:GameUnifier.stepCounter,options:e,paused:false},sound.play(t,e)}stop(t){return delete r.soundsPlaying[t],sound.stop(t)}pause(t){let e=r.soundsPlaying[t];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[t]={...e,paused:true},sound.pause(t)}resume(t){let e=r.soundsPlaying[t];if(!e)throw new PixiError("unknown_element","The alias is not found in the playInStepIndex.");return r.soundsPlaying[t]={options:e.options,stepIndex:GameUnifier.stepCounter,paused:false},sound.resume(t)}volume(t,e){return sound.volume(t,e)}speed(t,e){return sound.speed(t,e)}duration(t){return sound.duration(t)}close(){return sound.close()}clear(){this.stopAll();}export(){let t={};for(let e in r.soundsPlaying){let o=r.soundsPlaying[e],s=this.find(e);s&&(t[e]={...o,sound:{options:{...s.options,autoPlay:s.autoPlay,loop:s.loop,preload:s.preload,singleInstance:s.singleInstance,url:s.options.url,volume:s.options.volume},filters:c(s.media.filters)}});}return {soundsPlaying:k$1(t),soundAliasesOrder:k$1(r.soundAliasesOrder),filters:k$1(c(this.filtersAll))}}removeOldSoundAndExport(){return this.export()}restore(t){let e=GameUnifier.stepCounter-1;this.clear();try{if(t.hasOwnProperty("soundAliasesOrder"))r.soundAliasesOrder=t.soundAliasesOrder;else {j.error("The data does not have the properties soundAliasesOrder");return}if(t.hasOwnProperty("filters")){let o=t.filters;o&&(this.filtersAll=g(o));}if(t.hasOwnProperty("playInStepIndex")){let o=t.playInStepIndex;o&&(r.soundsPlaying=o);}if(t.hasOwnProperty("sounds")){let o=t.sounds;for(let s in o){let a=o[s],u=!1,y=this.add(s,{...a.options,autoPlay:!1});if(s in r.soundsPlaying){let i=r.soundsPlaying[s];(a.options.loop||i.options&&typeof i.options=="object"&&i.options.loop||i.stepIndex===e)&&(u=!0),a.filters&&(y.filters=g(a.filters)),u&&y.play();}}}if(t.hasOwnProperty("soundsPlaying")){let o=t.soundsPlaying;for(let s in o){let a=o[s];r.soundsPlaying[s]={paused:a.paused,stepIndex:a.stepIndex,options:a.options};let u=o[s].sound,y=!1,i;if(this.exists(s)?(i=this.find(s),u.options.url=i.options.url,u.options.volume=i.options.volume,i.options=u.options,i.autoPlay=!1,i.filters=u.filters?g(u.filters):[]):i=this.add(s,{...u.options,autoPlay:!1}),s in r.soundsPlaying){let P=r.soundsPlaying[s];(u.options.loop||P.options&&typeof P.options=="object"&&P.options.loop||P.stepIndex===e)&&(y=!0),u.filters&&(i.filters=g(u.filters)),y&&i.play();}}}else {j.error("The data does not have the properties soundsPlaying");return}}catch(o){j.error("Error importing data",o);}}};var k={DistortionFilter:filters.DistortionFilter,EqualizerFilter:filters.EqualizerFilter,MonoFilter:filters.MonoFilter,ReverbFilter:filters.ReverbFilter,StereoFilter:filters.StereoFilter,StreamFilter:filters.StreamFilter,TelephoneFilter:filters.TelephoneFilter};var oe=new v;export{f as Sound,r as SoundManagerStatic,k as filters,oe as sound};//# sourceMappingURL=sound.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXJTdGF0aWMudHMiLCIuLi9zcmMvc291bmQvY2xhc3Nlcy9Tb3VuZC50cyIsIi4uL3NyYy9zb3VuZC9mdW5jdGlvbnMvc291bmQtdXRpbGl0eS50cyIsIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXIudHMiLCIuLi9zcmMvc291bmQvY29uc3RhbnRzLnRzIiwiLi4vc3JjL3NvdW5kL2luZGV4LnRzIl0sIm5hbWVzIjpbIlNvdW5kTWFuYWdlclN0YXRpYyIsIl9fcHVibGljRmllbGQiLCJTb3VuZCIsIl9Tb3VuZCIsIlBpeGlTb3VuZCIsIlBpeGlFcnJvciIsIml0ZW0iLCJHYW1lVW5pZmllciIsIm9wdGlvbnMiLCJzb3VyY2UiLCJzIiwiRmlsdGVyTWVtb3J5VG9GaWx0ZXIiLCJmaWx0ZXIiLCJyZXMiLCJmIiwiZmlsdGVycyIsImxvZ2dlciIsIkZpbHRlclRvRmlsdGVyTWVtb3J5IiwiU291bmRNYW5hZ2VyIiwiU291bmRMaWJyYXJ5Iiwic291bmQiLCJmaWx0ZXJzQWxsIiwib3ZlcnJpZGVzIiwiYWxpYXMiLCJzb3VyY2VPcHRpb25zIiwibGVnYWN5IiwiYXV0b1BhdXNlIiwidCIsInZvbHVtZSIsInNwZWVkIiwiYXNzZXJ0Iiwic291bmRFbGVtZW50cyIsImNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IiwiZGF0YSIsInN0ZXBDb3VudGVyIiwicGxheUluU3RlcEluZGV4Iiwic291bmRzIiwiYXV0b1BsYXkiLCJzdGVwIiwic291bmRzUGxheWluZyIsIm9wIiwiZSJdLCJtYXBwaW5ncyI6InFNQUdxQkEsQ0FBQUEsQ0FBckIsS0FBd0MsQ0FDNUIsV0FBQSxFQUFjLENBQUMsQ0FJM0IsRUFISUMsQ0FBQUEsQ0FGaUJELEVBRVYsbUJBQUEsQ0FBOEIsSUFDckNDLENBQUFBLENBSGlCRCxDQUFBQSxDQUdWLGdCQUE4QyxFQUFDLENBQUEsQ0FDdERDLENBQUFBLENBSmlCRCxDQUFBQSxDQUlWLFNBQW1DLEVBQUMsQ0FB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T0FBQSxFQUFXLE9BQU9BLENBQUFBLENBQUssT0FBQSxFQUFZLFVBQVlBLENBQUFBLENBQUssT0FBQSxDQUFRLE1BRzNEQSxDQUFBQSxDQUFLLFNBQUEsR0FBY0osQ0FBQUEsSUFDMUJHLENBQUFBLENBQVcsSUFHWC9CLENBQUFBLENBQUssT0FBQSxHQUNMSSxFQUFFLE9BQUEsQ0FBVUMsQ0FBQUEsQ0FBcUJMLEVBQUssT0FBTyxDQUFBLENBQUEsQ0FHN0MrQixHQUNBM0IsQ0FBQUEsQ0FBRSxJQUFBLEdBRVYsQ0FDSixDQUNKLE1BQU8sQ0FDSE0sQ0FBQUEsQ0FBTyxNQUFNLHFEQUFxRCxDQUFBLENBQ2xFLE1BQ0osQ0FDSixPQUFTeUIsQ0FBQUEsQ0FBRyxDQUNSekIsRUFBTyxLQUFBLENBQU0sc0JBQUEsQ0FBd0J5QixDQUFDLEVBQzFDLENBQ0osQ0FDSixDQUFBLEtDaFlhMUIsQ0FBQUEsQ0FBVSxDQUNuQixpQkFBa0JELE9BQUFBLENBQUUsZ0JBQUEsQ0FDcEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxnQkFDbkIsVUFBQSxDQUFZQSxPQUFBQSxDQUFFLFdBQ2QsWUFBQSxDQUFjQSxPQUFBQSxDQUFFLGFBQ2hCLFlBQUEsQ0FBY0EsT0FBQUEsQ0FBRSxhQUNoQixZQUFBLENBQWNBLE9BQUFBLENBQUUsYUFDaEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxlQUN2QixFQ0FBLElBQU1NLEdBQVEsSUFBSUYiLCJmaWxlIjoic291bmQubWpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNvdW5kIGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmltcG9ydCB7IFNvdW5kUGxheSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmRNYW5hZ2VyU3RhdGljIHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbiAgICBzdGF0aWMgc291bmRBbGlhc2VzT3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgc3RhdGljIHNvdW5kc1BsYXlpbmc6IHsgW2tleTogc3RyaW5nXTogU291bmRQbGF5IH0gPSB7fTtcbiAgICBzdGF0aWMgc291bmRzOiB7IFtrZXk6IHN0cmluZ106IFNvdW5kIH0gPSB7fTtcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7IElNZWRpYUluc3RhbmNlLCBTb3VuZCBhcyBQaXhpU291bmQgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4uL1NvdW5kTWFuYWdlclN0YXRpY1wiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU291bmRPcHRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kIGV4dGVuZHMgUGl4aVNvdW5kIHtcbiAgICBhbGlhcz86IHN0cmluZztcbiAgICBvdmVycmlkZSBwYXVzZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHBhdXNlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5yZXN1bWUoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBvdmVycmlkZSBzdG9wKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGxheShvcHRpb25zPzogc3RyaW5nIHwgU291bmRQbGF5T3B0aW9ucyk6IElNZWRpYUluc3RhbmNlIHwgUHJvbWlzZTxJTWVkaWFJbnN0YW5jZT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hbGlhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbdGhpcy5hbGlhc10gPSB7XG4gICAgICAgICAgICBzdGVwSW5kZXg6IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5wbGF5KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvc291bmQvYmxvYi9tYWluL3NyYy9Tb3VuZC50cyNMMjM1XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKHNvdXJjZTogc3RyaW5nIHwgc3RyaW5nW10gfCBTb3VuZE9wdGlvbnMgfCBBcnJheUJ1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBBdWRpb0J1ZmZlcik6IFNvdW5kIHtcbiAgICAgICAgbGV0IHMgPSBQaXhpU291bmQuZnJvbShzb3VyY2UpO1xuICAgICAgICByZXR1cm4gbmV3IFNvdW5kKHMubWVkaWEsIHMub3B0aW9ucyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRmlsdGVyLCBmaWx0ZXJzIH0gZnJvbSBcIkBwaXhpL3NvdW5kXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZEZpbHRlck1lbW9yeSBmcm9tIFwiLi4vdHlwZXMvU291bmRGaWx0ZXJNZW1vcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlck1lbW9yeVRvRmlsdGVyKGZpbHRlcjogU291bmRGaWx0ZXJNZW1vcnlbXSk6IEZpbHRlcltdIHtcbiAgICBsZXQgcmVzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09IFwiVGVsZXBob25lRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlRlbGVwaG9uZUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RyZWFtRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0cmVhbUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RlcmVvRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcihmLnBhbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJSZXZlcmJGaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuUmV2ZXJiRmlsdGVyKGYuc2Vjb25kcywgZi5kZWNheSwgZi5yZXZlcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSBcIk1vbm9GaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuTW9ub0ZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiRXF1YWxpemVyRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcihmLmYzMiwgZi5mNjQsIGYuZjEyNSwgZi5mMjUwLCBmLmY1MDAsIGYuZjFrLCBmLmYyaywgZi5mNGssIGYuZjhrLCBmLmYxNmspXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJEaXN0b3J0aW9uRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLkRpc3RvcnRpb25GaWx0ZXIoZi5hbW91bnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlclRvRmlsdGVyTWVtb3J5KGZpbHRlcj86IEZpbHRlcltdKTogU291bmRGaWx0ZXJNZW1vcnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IHJlczogU291bmRGaWx0ZXJNZW1vcnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmIGluc3RhbmNlb2YgZmlsdGVycy5UZWxlcGhvbmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlRlbGVwaG9uZUZpbHRlclwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuU3RyZWFtRmlsdGVyKSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJlYW1GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RlcmVvRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgcGFuOiBmLnBhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlJldmVyYkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmV2ZXJiRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgc2Vjb25kczogZi5zZWNvbmRzLFxuICAgICAgICAgICAgICAgIGRlY2F5OiBmLmRlY2F5LFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGYucmV2ZXJzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLk1vbm9GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIk1vbm9GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRXF1YWxpemVyRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgZjMyOiBmLmYzMixcbiAgICAgICAgICAgICAgICBmNjQ6IGYuZjY0LFxuICAgICAgICAgICAgICAgIGYxMjU6IGYuZjEyNSxcbiAgICAgICAgICAgICAgICBmMjUwOiBmLmYyNTAsXG4gICAgICAgICAgICAgICAgZjUwMDogZi5mNTAwLFxuICAgICAgICAgICAgICAgIGYxazogZi5mMWssXG4gICAgICAgICAgICAgICAgZjJrOiBmLmYyayxcbiAgICAgICAgICAgICAgICBmNGs6IGYuZjRrLFxuICAgICAgICAgICAgICAgIGY4azogZi5mOGssXG4gICAgICAgICAgICAgICAgZjE2azogZi5mMTZrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuRGlzdG9ydGlvbkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRGlzdG9ydGlvbkZpbHRlclwiLFxuICAgICAgICAgICAgICAgIGFtb3VudDogZi5hbW91bnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLFxuICAgIGZpbHRlcnMsXG4gICAgSU1lZGlhQ29udGV4dCxcbiAgICBJTWVkaWFJbnN0YW5jZSxcbiAgICBTb3VuZCBhcyBQaXhpU291bmQsXG4gICAgc291bmQsXG4gICAgU291bmRMaWJyYXJ5LFxuICAgIFNvdW5kTWFwLFxufSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCB7IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZCBmcm9tIFwiLi9jbGFzc2VzL1NvdW5kXCI7XG5pbXBvcnQgeyBGaWx0ZXJNZW1vcnlUb0ZpbHRlciwgRmlsdGVyVG9GaWx0ZXJNZW1vcnkgfSBmcm9tIFwiLi9mdW5jdGlvbnMvc291bmQtdXRpbGl0eVwiO1xuaW1wb3J0IFNvdW5kR2FtZVN0YXRlLCB7IEV4cG9ydGVkU291bmRQbGF5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZEdhbWVTdGF0ZVwiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZE9wdGlvbnNcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4vU291bmRNYW5hZ2VyU3RhdGljXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kTWFuYWdlciBleHRlbmRzIFNvdW5kTGlicmFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBjb250ZXh0KCk6IElNZWRpYUNvbnRleHQge1xuICAgICAgICByZXR1cm4gc291bmQuY29udGV4dDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGZpbHRlcnNBbGwoKTogRmlsdGVyW10ge1xuICAgICAgICByZXR1cm4gc291bmQuZmlsdGVyc0FsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IGZpbHRlcnNBbGwoZmlsdGVyc0FsbDogRmlsdGVyW10pIHtcbiAgICAgICAgc291bmQuZmlsdGVyc0FsbCA9IGZpbHRlcnNBbGwuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIShmIGluc3RhbmNlb2YgZmlsdGVycy5GaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IHN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN1cHBvcnRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3NvdW5kL2Jsb2IvbWFpbi9zcmMvU291bmRMaWJyYXJ5LnRzI0wxODdcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE9wdGlvbnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZE9wdGlvbnMsXG4gICAgICAgIG92ZXJyaWRlcz86IFNvdW5kT3B0aW9ucyxcbiAgICApOiBTb3VuZE9wdGlvbnMge1xuICAgICAgICBsZXQgb3B0aW9uczogU291bmRPcHRpb25zO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyB1cmw6IHNvdXJjZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBzb3VyY2UgfTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgICAgICAgICBzb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fFxuICAgICAgICAgICAgc291cmNlIGluc3RhbmNlb2YgSFRNTEF1ZGlvRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHNvdXJjZSB9IGFzIGFueTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2UgYXMgU291bmRPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLihvdmVycmlkZXMgfHwge30pIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBTb3VuZE9wdGlvbnMgfCBzdHJpbmcpOiBTb3VuZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogVXNlIGBhZGQoYWxpYXM6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucyB8IHN0cmluZyB8IEFycmF5QnVmZmVyIHwgQXVkaW9CdWZmZXIgfCBIVE1MQXVkaW9FbGVtZW50IHwgU291bmQpOiBTb3VuZDtgIGluc3RlYWQuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgYWRkKG1hcDogYW55LCBnbG9iYWxPcHRpb25zPzogU291bmRPcHRpb25zKTogU291bmRNYXA7XG4gICAgcHVibGljIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBzb3VyY2VPcHRpb25zPzogU291bmRPcHRpb25zIHwgc3RyaW5nKTogU291bmQgfCBTb3VuZE1hcCB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJpbnZhbGlkX3VzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJUaGUgbWV0aG9kIGFkZChtYXA6IFNvdW5kU291cmNlTWFwLCBnbG9iYWxPcHRpb25zPzogT3B0aW9ucykgaXMgZGVwcmVjYXRlZC4gVXNlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zIHwgc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZCk6IFNvdW5kOyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShhbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlT3B0aW9ucyBpbnN0YW5jZW9mIFBpeGlTb3VuZCkge1xuICAgICAgICAgICAgc291cmNlT3B0aW9ucyA9IHNvdXJjZU9wdGlvbnMub3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBsZXQgczogU291bmQ7XG4gICAgICAgIGlmIChzb3VyY2VPcHRpb25zIGluc3RhbmNlb2YgU291bmQpIHtcbiAgICAgICAgICAgIHMgPSBzb3VyY2VPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnM6IFNvdW5kT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhzb3VyY2VPcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIHMgPSBTb3VuZC5mcm9tKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHMuYWxpYXMgPSBhbGlhcztcblxuICAgICAgICAhU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmluY2x1ZGVzKGFsaWFzKSAmJiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIucHVzaChhbGlhcyk7XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdID0gcztcbiAgICAgICAgc291bmQuYWRkKGFsaWFzLCBzKTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB1c2VMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC51c2VMZWdhY3k7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCB1c2VMZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHNvdW5kLnVzZUxlZ2FjeSA9IGxlZ2FjeTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVBdXRvUGF1c2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kaXNhYmxlQXV0b1BhdXNlO1xuICAgIH1cbiAgICBvdmVycmlkZSBzZXQgZGlzYWJsZUF1dG9QYXVzZShhdXRvUGF1c2U6IGJvb2xlYW4pIHtcbiAgICAgICAgc291bmQuZGlzYWJsZUF1dG9QYXVzZSA9IGF1dG9QYXVzZTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmZpbHRlcigodCkgPT4gdCAhPT0gYWxpYXMpO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc107XG4gICAgICAgIHJldHVybiBzb3VuZC5yZW1vdmUoYWxpYXMpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB2b2x1bWVBbGwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZUFsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IHZvbHVtZUFsbCh2b2x1bWU6IG51bWJlcikge1xuICAgICAgICBzb3VuZC52b2x1bWVBbGwgPSB2b2x1bWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBzcGVlZEFsbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWRBbGw7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCBzcGVlZEFsbChzcGVlZDogbnVtYmVyKSB7XG4gICAgICAgIHNvdW5kLnNwZWVkQWxsID0gc3BlZWQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZVBhdXNlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc291bmQudG9nZ2xlUGF1c2VBbGwoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGF1c2VBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5wYXVzZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZUFsbCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnJlc3VtZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZU11dGVBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC50b2dnbGVNdXRlQWxsKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIG11dGVBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgdW5tdXRlQWxsKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQudW5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlQWxsKCk6IHRoaXMge1xuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIgPSBbXTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSB7fTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcyA9IHt9O1xuICAgICAgICByZXR1cm4gc291bmQucmVtb3ZlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3RvcEFsbCgpOiB0aGlzIHtcbiAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcykge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10uc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nID0ge307XG4gICAgICAgIHJldHVybiBzb3VuZC5zdG9wQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgZXhpc3RzKGFsaWFzOiBzdHJpbmcsIGFzc2VydD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLmV4aXN0cyhhbGlhcywgYXNzZXJ0KSB8fCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzO1xuICAgIH1cbiAgICBvdmVycmlkZSBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5pc1BsYXlpbmcoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZmluZChhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IHNvdW5kLmZpbmQoYWxpYXMpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBvdmVycmlkZSBwbGF5KGFsaWFzOiBzdHJpbmcsIG9wdGlvbnM/OiBTb3VuZFBsYXlPcHRpb25zIHwgc3RyaW5nKTogSU1lZGlhSW5zdGFuY2UgfCBQcm9taXNlPElNZWRpYUluc3RhbmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc291bmQgbGlicmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGxheShhbGlhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHN0b3AoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgZGVsZXRlIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN0b3AoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSBwYXVzZShhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgcGxheUluU3RlcEluZGV4LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcGF1c2VkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGF1c2UoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZXN1bWUoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc107XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZm91bmQgaW4gdGhlIHBsYXlJblN0ZXBJbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb3VuZC5yZXN1bWUoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2b2x1bWUoYWxpYXM6IHN0cmluZywgdm9sdW1lPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZShhbGlhcywgdm9sdW1lKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3BlZWQoYWxpYXM6IHN0cmluZywgc3BlZWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWQoYWxpYXMsIHNwZWVkKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZHVyYXRpb24oYWxpYXM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kdXJhdGlvbihhbGlhcyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGNsb3NlKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQuY2xvc2UoKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnN0b3BBbGwoKTtcbiAgICB9XG5cbiAgICAvKiBFeHBvcnQgYW5kIEltcG9ydCBNZXRob2RzICovXG5cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgbGV0IHNvdW5kRWxlbWVudHM6IHsgW2tleTogc3RyaW5nXTogRXhwb3J0ZWRTb3VuZFBsYXkgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZykge1xuICAgICAgICAgICAgbGV0IHNvdW5kID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmQoYWxpYXMpO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBzb3VuZEVsZW1lbnRzW2FsaWFzXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc291bmQsXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBpdGVtLmF1dG9QbGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGl0ZW0ubG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkOiBpdGVtLnByZWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlSW5zdGFuY2U6IGl0ZW0uc2luZ2xlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZTogaXRlbS5vcHRpb25zLnZvbHVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBGaWx0ZXJUb0ZpbHRlck1lbW9yeShpdGVtLm1lZGlhLmZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdW5kc1BsYXlpbmc6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHNvdW5kRWxlbWVudHMpLFxuICAgICAgICAgICAgc291bmRBbGlhc2VzT3JkZXI6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciksXG4gICAgICAgICAgICBmaWx0ZXJzOiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudChGaWx0ZXJUb0ZpbHRlck1lbW9yeSh0aGlzLmZpbHRlcnNBbGwpKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZU9sZFNvdW5kQW5kRXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgLy8gbGV0IHNvdW5kQWxpYXNlc09yZGVyID0gW11cbiAgICAgICAgLy8gZm9yIChsZXQgYWxpYXMgb2YgR2FtZVNvdW5kTWFuYWdlci5zb3VuZEFsaWFzZXNPcmRlcikge1xuICAgICAgICAvLyAgICAgaWYgKHNvdW5kLmV4aXN0cyhhbGlhcykpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgcyA9IHNvdW5kLmZpbmQoYWxpYXMpXG4gICAgICAgIC8vICAgICAgICAgaWYgKHMubG9vcCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBzb3VuZEFsaWFzZXNPcmRlci5wdXNoKGFsaWFzKVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBHYW1lU291bmRNYW5hZ2VyLnNvdW5kQWxpYXNlc09yZGVyID0gc291bmRBbGlhc2VzT3JkZXJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KCk7XG4gICAgfVxuICAgIHB1YmxpYyByZXN0b3JlKGRhdGE6IG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdGVwQ291bnRlciA9IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyIC0gMTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzb3VuZEFsaWFzZXNPcmRlclwiKSkge1xuICAgICAgICAgICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciA9IChkYXRhIGFzIFNvdW5kR2FtZVN0YXRlKVtcInNvdW5kQWxpYXNlc09yZGVyXCJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJUaGUgZGF0YSBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIHNvdW5kQWxpYXNlc09yZGVyXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJmaWx0ZXJzXCJdO1xuICAgICAgICAgICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0FsbCA9IEZpbHRlck1lbW9yeVRvRmlsdGVyKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJwbGF5SW5TdGVwSW5kZXhcIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGxheUluU3RlcEluZGV4ID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wicGxheUluU3RlcEluZGV4XCJdO1xuICAgICAgICAgICAgICAgIGlmIChwbGF5SW5TdGVwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSBwbGF5SW5TdGVwSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNvdW5kc1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHMgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJzb3VuZHNcIl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gc291bmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc291bmRzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMubG9vcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLm9wdGlvbnMgJiYgdHlwZW9mIHN0ZXAub3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBzdGVwLm9wdGlvbnMubG9vcClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5zdGVwSW5kZXggPT09IHN0ZXBDb3VudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5maWx0ZXJzID0gRmlsdGVyTWVtb3J5VG9GaWx0ZXIoaXRlbS5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9QbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic291bmRzUGxheWluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHNQbGF5aW5nID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wic291bmRzUGxheWluZ1wiXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBzb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcCA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQ6IG9wLnBhdXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogb3Auc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3Aub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdLnNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHM6IFNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5maW5kKGFsaWFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy51cmwgPSBzLm9wdGlvbnMudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLnZvbHVtZSA9IHMub3B0aW9ucy52b2x1bWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLm9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBpdGVtLmZpbHRlcnMgPyBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpIDogW107XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGVwID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5sb29wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAub3B0aW9ucyAmJiB0eXBlb2Ygc3RlcC5vcHRpb25zID09PSBcIm9iamVjdFwiICYmIHN0ZXAub3B0aW9ucy5sb29wKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLnN0ZXBJbmRleCA9PT0gc3RlcENvdW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b1BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnBsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiVGhlIGRhdGEgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydGllcyBzb3VuZHNQbGF5aW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgaW1wb3J0aW5nIGRhdGFcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJzIGFzIGYgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgRGlzdG9ydGlvbkZpbHRlcjogZi5EaXN0b3J0aW9uRmlsdGVyLFxuICAgIEVxdWFsaXplckZpbHRlcjogZi5FcXVhbGl6ZXJGaWx0ZXIsXG4gICAgTW9ub0ZpbHRlcjogZi5Nb25vRmlsdGVyLFxuICAgIFJldmVyYkZpbHRlcjogZi5SZXZlcmJGaWx0ZXIsXG4gICAgU3RlcmVvRmlsdGVyOiBmLlN0ZXJlb0ZpbHRlcixcbiAgICBTdHJlYW1GaWx0ZXI6IGYuU3RyZWFtRmlsdGVyLFxuICAgIFRlbGVwaG9uZUZpbHRlcjogZi5UZWxlcGhvbmVGaWx0ZXIsXG59O1xuIiwiaW1wb3J0IFNvdW5kTWFuYWdlciBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZCB9IGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmV4cG9ydCB7IGZpbHRlcnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhwb3J0ZWRTb3VuZCwgZGVmYXVsdCBhcyBTb3VuZEdhbWVTdGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZE9wdGlvbnMsIFNvdW5kUGxheU9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1NvdW5kT3B0aW9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZE1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJTdGF0aWNcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZEZpbHRlck1lbW9yeSB9IGZyb20gXCIuL3R5cGVzL1NvdW5kRmlsdGVyTWVtb3J5XCI7XG5leHBvcnQgeyBzb3VuZCB9O1xuXG5jb25zdCBzb3VuZCA9IG5ldyBTb3VuZE1hbmFnZXIoKTtcbiJdfQ==
|