valtech-components 4.0.412 → 4.0.413
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/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +29 -13
- package/esm2022/lib/components/organisms/mini-games/retro-audio.service.mjs +14 -4
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +42 -16
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +4 -1
- package/lib/components/organisms/mini-games/retro-audio.service.d.ts +2 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -90,9 +90,11 @@ export class RetroAudioService {
|
|
|
90
90
|
const volume = this.normalizeVolume(value);
|
|
91
91
|
this.musicVolume.set(volume);
|
|
92
92
|
this.writeSetting('val-mini-games-music-volume', `${volume}`);
|
|
93
|
-
if (
|
|
94
|
-
this.
|
|
93
|
+
if (volume <= 0) {
|
|
94
|
+
this.stopMusic();
|
|
95
|
+
return;
|
|
95
96
|
}
|
|
97
|
+
this.applySampleMusicVolume();
|
|
96
98
|
}
|
|
97
99
|
setSfxVolume(value) {
|
|
98
100
|
const volume = this.normalizeVolume(value);
|
|
@@ -583,7 +585,7 @@ export class RetroAudioService {
|
|
|
583
585
|
const audio = new Audio(config.src);
|
|
584
586
|
audio.loop = true;
|
|
585
587
|
audio.preload = 'auto';
|
|
586
|
-
audio.volume =
|
|
588
|
+
audio.volume = this.sampleMusicVolume(config);
|
|
587
589
|
this.sampleMusic = audio;
|
|
588
590
|
this.sampleMusicConfig = config;
|
|
589
591
|
try {
|
|
@@ -602,6 +604,14 @@ export class RetroAudioService {
|
|
|
602
604
|
music.pause();
|
|
603
605
|
music.currentTime = 0;
|
|
604
606
|
}
|
|
607
|
+
applySampleMusicVolume() {
|
|
608
|
+
if (!this.sampleMusic || !this.sampleMusicConfig)
|
|
609
|
+
return;
|
|
610
|
+
this.sampleMusic.volume = this.sampleMusicVolume(this.sampleMusicConfig);
|
|
611
|
+
}
|
|
612
|
+
sampleMusicVolume(config) {
|
|
613
|
+
return Math.min(1, Math.max(0, config.volume * this.musicVolume()));
|
|
614
|
+
}
|
|
605
615
|
async tone(freq, duration = 0.1, type = 'square', gainValue = 0.04) {
|
|
606
616
|
if (!this.canPlaySfx())
|
|
607
617
|
return;
|
|
@@ -742,4 +752,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
742
752
|
type: Injectable,
|
|
743
753
|
args: [{ providedIn: 'root' }]
|
|
744
754
|
}], ctorParameters: () => [] });
|
|
745
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFuRCxNQUFNLHdCQUF3QixHQUEwQztJQUN0RSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNyRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNyRSxDQUFDO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUN0RSxDQUFDO0FBQ0YsTUFBTSxxQkFBcUIsR0FBc0I7SUFDL0MsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFzQjtJQUMvQyxHQUFHLEVBQUUsa0NBQWtDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBaUI7SUF1QjVCO1FBbkJRLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFJTCxrQkFBYSxH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RUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0QixLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFVBQVUsQ0FB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LENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELHFCQUFxQjtRQUNuQixLQUFLLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0UsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ2YsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ2YsRUFDRCxVQUFVLEVBQ1YsS0FBSyxFQUNMLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixLQUFLLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0UsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQ1osQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ2YsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ2YsRUFDRCxVQUFVLEVBQ1YsS0FBSyxFQUNMLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsUUFBaUI7UUFDdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUFFLE9BQU8sUUFBUSxDQUFDO1lBQ3BDLE9BQU8sS0FBSyxLQUFLLEdBQUcsQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7UUFDckQsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUFFLE9BQU8sUUFBUSxDQUFDO1lBQzdELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN6RSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDN0MsSUFBSSxDQUFDO1lBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHVEQUF1RDtRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVc7UUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asb0VBQW9FO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQVc7UUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELElBQUksYUFBYTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBRXhDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO2dCQUFFLE9BQU87WUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLEVBQUU7YUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sOEJBQThCO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLDZDQUE2QyxDQUFDO1lBQ25FLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3BELFlBQVksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNoRCxZQUFZLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsdURBQXVEO1FBQ3pELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU87WUFDTCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDWCxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDVCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDVCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDWCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDWCxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDUixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7WUFDVixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDWCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFZO1FBQy9CLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTztZQUNMLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNmLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FDcEIsS0FBYSxFQUNiLE9BQXVCLFFBQVEsRUFDL0IsSUFBSSxHQUFHLEtBQUssRUFDWixVQUFVLEdBQUcsRUFBRTtRQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTztRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQXlCO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQUUsT0FBTztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU07WUFBRSxPQUFPO1FBQ3BGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVc7WUFBRSxPQUFPO1FBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN2QixLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBWSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsT0FBdUIsUUFBUSxFQUFFLFNBQVMsR0FBRyxJQUFJO1FBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUMvQixJQUFJLElBQUksSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN0QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMzRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQ2pCLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxRQUFRLEdBQUcsSUFBSSxFQUNmLE9BQXVCLFVBQVUsRUFDakMsU0FBUyxHQUFHLElBQUk7UUFFaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELFVBQVUsQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDM0UsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQzlELEtBQUssQ0FBQyxhQUFhLENBQ3pCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsU0FBUyxHQUFHLEtBQUssRUFDakIsYUFBK0IsVUFBVSxFQUN6QyxTQUFTLEdBQUcsR0FBRztRQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDL0MsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQTRCTyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNoRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUM5QixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU87UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUNuQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQWlCO1FBQzNDLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsNkZBQTZGO1FBQy9GLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWEsRUFBRSxPQUFlO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDN0QsQ0FBQzsrR0E1eEJVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBOb3RlID0gW251bWJlciwgbnVtYmVyXTtcbnR5cGUgTWVsb2R5TW9kZSA9ICdtZW51JyB8ICdnYW1lJztcbnR5cGUgQ2hlc3NpbWFsc1Bvd2VyID0gJ2VhZ2xlJyB8ICdidWxsJyB8ICdrYW5nYXJvbycgfCAnbGlvbic7XG50eXBlIFNhbXBsZUNvbmZpZyA9IHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH07XG50eXBlIFNhbXBsZU11c2ljQ29uZmlnID0geyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfTtcblxuY29uc3QgQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc1Bvd2VyLCBTYW1wbGVDb25maWc+ID0ge1xuICBlYWdsZTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9lYWdsZS1jcnkud2F2Jywgdm9sdW1lOiAwLjcyIH0sXG4gIGJ1bGw6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvYnVsbC53YXYnLCB2b2x1bWU6IDAuNjQgfSxcbiAga2FuZ2Fyb286IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMva2FuZ2Fyb28tanVtcC5tcDMnLCB2b2x1bWU6IDAuNzIgfSxcbiAgbGlvbjogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9saW9uLXJvYXIud2F2Jywgdm9sdW1lOiAwLjY4IH0sXG59O1xuY29uc3QgQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMgPSB7XG4gIHZpY3Rvcnk6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvdGFkYS5tcDMnLCB2b2x1bWU6IDAuNzIgfSxcbiAgZGVmZWF0OiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL3lvdS1sb3NlLm1wMycsIHZvbHVtZTogMC43MiB9LFxufTtcbmNvbnN0IENIRVNTSU1BTFNfTUVOVV9NVVNJQzogU2FtcGxlTXVzaWNDb25maWcgPSB7XG4gIHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL21haW4tbWVudS5tcDMnLFxuICB2b2x1bWU6IDAuMzQsXG59O1xuY29uc3QgQ0hFU1NJTUFMU19HQU1FX01VU0lDOiBTYW1wbGVNdXNpY0NvbmZpZyA9IHtcbiAgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvR2FtZS5tcDMnLFxuICB2b2x1bWU6IDAuMjgsXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJldHJvQXVkaW9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZXh0PzogQXVkaW9Db250ZXh0O1xuICBwcml2YXRlIG1hc3RlckdhaW4/OiBHYWluTm9kZTtcbiAgcHJpdmF0ZSBtdXNpY1RpbWVyPzogbnVtYmVyO1xuICBwcml2YXRlIG5vdGVJbmRleCA9IDA7XG4gIHByaXZhdGUgYWN0aXZlTWVsb2R5PzogTWVsb2R5TW9kZTtcbiAgcHJpdmF0ZSBwYXVzZWRNZWxvZHk/OiBNZWxvZHlNb2RlO1xuICBwcml2YXRlIHN1c3BlbmRUaW1lcj86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVTYW1wbGVzID0gbmV3IFNldDxIVE1MQXVkaW9FbGVtZW50PigpO1xuICBwcml2YXRlIHNhbXBsZU11c2ljPzogSFRNTEF1ZGlvRWxlbWVudDtcbiAgcHJpdmF0ZSBzYW1wbGVNdXNpY0NvbmZpZz86IFNhbXBsZU11c2ljQ29uZmlnO1xuICBwcml2YXRlIHBhdXNlZFNhbXBsZU11c2ljPzogU2FtcGxlTXVzaWNDb25maWc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0c1JlYWR5ID0gdGhpcy5taWdyYXRlQ2hlc3NpbWFsc0F1ZGlvRGVmYXVsdHMoKTtcbiAgcmVhZG9ubHkgZW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRFbmFibGVkKCkpO1xuICByZWFkb25seSBtdXNpY0VuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLWVuYWJsZWQnLCB0cnVlKSk7XG4gIHJlYWRvbmx5IHNmeEVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC1lbmFibGVkJywgdHJ1ZSkpO1xuICByZWFkb25seSBtdXNpY1ZvbHVtZSA9IHNpZ25hbDxudW1iZXI+KHRoaXMucmVhZFZvbHVtZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsIDAuMjUpKTtcbiAgcmVhZG9ubHkgc2Z4Vm9sdW1lID0gc2lnbmFsPG51bWJlcj4odGhpcy5yZWFkVm9sdW1lU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsIDAuOCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQXVkaW9CdWZmZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyUHJlbG9hZHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgdGhpcy5oYW5kbGVQYWdlSGlkZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNob3cnLCB0aGlzLmhhbmRsZVBhZ2VTaG93KTtcbiAgICB9XG4gIH1cblxuICBzZXRFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1hdWRpbycsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgaWYgKCF2YWx1ZSkgdGhpcy5zdG9wTXVzaWMoKTtcbiAgfVxuXG4gIHNldE11c2ljRW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubXVzaWNFbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLWVuYWJsZWQnLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gICAgaWYgKCF2YWx1ZSkgdGhpcy5zdG9wTXVzaWMoKTtcbiAgfVxuXG4gIHNldFNmeEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNmeEVuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LWVuYWJsZWQnLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gIH1cblxuICBzZXRNdXNpY1ZvbHVtZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgdm9sdW1lID0gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpO1xuICAgIHRoaXMubXVzaWNWb2x1bWUuc2V0KHZvbHVtZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsIGAke3ZvbHVtZX1gKTtcbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpYyAmJiB0aGlzLnNhbXBsZU11c2ljQ29uZmlnKSB7XG4gICAgICB0aGlzLnNhbXBsZU11c2ljLnZvbHVtZSA9IHRoaXMuc2FtcGxlTXVzaWNDb25maWcudm9sdW1lICogdm9sdW1lO1xuICAgIH1cbiAgfVxuXG4gIHNldFNmeFZvbHVtZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgdm9sdW1lID0gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpO1xuICAgIHRoaXMuc2Z4Vm9sdW1lLnNldCh2b2x1bWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJywgYCR7dm9sdW1lfWApO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRNZW51TXVzaWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdGFydE11c2ljKCdtZW51Jyk7XG4gIH1cblxuICBhc3luYyBzdGFydENoZXNzaW1hbHNNZW51TXVzaWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmVsb2FkQ2hlc3NpbWFsc1NhbXBsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19NRU5VX01VU0lDKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2hlc3NpbWFsc0dhbWVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZWxvYWRDaGVzc2ltYWxzU2FtcGxlcygpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRTYW1wbGVNdXNpYyhDSEVTU0lNQUxTX0dBTUVfTVVTSUMpO1xuICB9XG5cbiAgcHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXMoQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTKS5mb3JFYWNoKChzYW1wbGUpID0+IHtcbiAgICAgIHZvaWQgdGhpcy5wcmVsb2FkU2FtcGxlQnVmZmVyKHNhbXBsZS5zcmMpO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgW1xuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhDSEVTU0lNQUxTX1BPV0VSX1NBTVBMRVMpLFxuICAgICAgQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMudmljdG9yeSxcbiAgICAgIENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLmRlZmVhdCxcbiAgICBdLmZvckVhY2goKHNhbXBsZSkgPT4gdGhpcy5wcmVsb2FkU2FtcGxlKHNhbXBsZS5zcmMpKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0R2FtZU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnZ2FtZScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRNdXNpYyhtb2RlOiBNZWxvZHlNb2RlID0gJ2dhbWUnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlNdXNpYygpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMucGF1c2VkTWVsb2R5ID0gbW9kZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyICYmIHRoaXMuYWN0aXZlTWVsb2R5ID09PSBtb2RlKSByZXR1cm47XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjI0KTtcbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IG1vZGU7XG4gICAgdGhpcy5ub3RlSW5kZXggPSAwO1xuICAgIGNvbnN0IG1lbG9keSA9IG1vZGUgPT09ICdtZW51JyA/IHRoaXMubWVudU1lbG9keSgpIDogdGhpcy5nYW1lTWVsb2R5KCk7XG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9IG1vZGUgPT09ICdtZW51JyA/IDY0MCA6IDE5MDtcbiAgICBjb25zdCB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9IG1vZGUgPT09ICdtZW51JyA/ICd0cmlhbmdsZScgOiAnc3F1YXJlJztcbiAgICBjb25zdCBnYWluID0gbW9kZSA9PT0gJ21lbnUnID8gMC4wMTggOiAwLjAyNTtcbiAgICB0aGlzLm11c2ljVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RlcCA9IHRoaXMubm90ZUluZGV4O1xuICAgICAgY29uc3QgW2ZyZXEsIGR1cmF0aW9uXSA9IG1lbG9keVt0aGlzLm5vdGVJbmRleCAlIG1lbG9keS5sZW5ndGhdO1xuICAgICAgdGhpcy5ub3RlSW5kZXggKz0gMTtcbiAgICAgIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2Fpbik7XG4gICAgICBpZiAobW9kZSA9PT0gJ21lbnUnKSB0aGlzLnNhdmFubmFQdWxzZShzdGVwKTtcbiAgICB9LCBpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIHN0b3BNdXNpYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm11c2ljVGltZXIpO1xuICAgICAgdGhpcy5tdXNpY1RpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdXNlZE1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RvcFNhbXBsZU11c2ljKCk7XG4gIH1cblxuICBmbGlwKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKDQ0MCwgMC4wNTUsICdzcXVhcmUnLCAwLjA1KTtcbiAgfVxuXG4gIG1hdGNoKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbNjYwLCAwLjA4XSxcbiAgICAgIFs4ODAsIDAuMV0sXG4gICAgICBbOTkwLCAwLjEyXSxcbiAgICBdKTtcbiAgfVxuXG4gIG1pc3MoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsyMjAsIDAuMDhdLFxuICAgICAgWzE3NC42MSwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICB3aW4oKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzUyMy4yNSwgMC4wOV0sXG4gICAgICBbNjU5LjI1LCAwLjA5XSxcbiAgICAgIFs3ODMuOTksIDAuMDldLFxuICAgICAgWzEwNDYuNSwgMC4xNF0sXG4gICAgICBbMTMxOC41MSwgMC4yMl0sXG4gICAgICBbMTU2Ny45OCwgMC4yNl0sXG4gICAgXSk7XG4gIH1cblxuICBsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsyOTMuNjYsIDAuMTJdLFxuICAgICAgWzI0Ni45NCwgMC4xMl0sXG4gICAgICBbMTk2LCAwLjJdLFxuICAgIF0pO1xuICB9XG5cbiAgc2ltb25QYWQoZnJlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnRvbmUoZnJlcSwgMC4yMiwgJ3NpbmUnLCAwLjA1NSk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXJQcmV2aWV3KHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0b25lczogUmVjb3JkPENoZXNzaW1hbHNQb3dlciwgbnVtYmVyPiA9IHtcbiAgICAgIGVhZ2xlOiA4ODAsXG4gICAgICBidWxsOiAzNDkuMjMsXG4gICAgICBrYW5nYXJvbzogNjU5LjI1LFxuICAgICAgbGlvbjogNTIzLjI1LFxuICAgIH07XG4gICAgdm9pZCB0aGlzLnRvbmUodG9uZXNbcG93ZXJdLCAwLjEyLCBwb3dlciA9PT0gJ2J1bGwnID8gJ3Nhd3Rvb3RoJyA6ICd0cmlhbmdsZScsIDAuMDM4KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSh0b25lc1twb3dlcl0gKiAxLjI1LCAwLjA3LCAnc2luZScsIDAuMDE4KSwgNzIpO1xuICB9XG5cbiAgc2ltb25TdGVwT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnRvbmUoODgwLCAwLjA4LCAndHJpYW5nbGUnLCAwLjAzNSk7XG4gIH1cblxuICBzaW1vblJvdW5kT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs2NTkuMjUsIDAuMDhdLFxuICAgICAgWzg4MCwgMC4wOF0sXG4gICAgICBbMTE3NC42NiwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBzaW1vbkZhaWwoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsxOTYsIDAuMTJdLFxuICAgICAgWzE0Ni44MywgMC4xOF0sXG4gICAgXSk7XG4gIH1cblxuICBjaGVzc2ltYWxzTW92ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDQ1XSxcbiAgICAgICAgWzQ5My44OCwgMC4wNTVdLFxuICAgICAgXSxcbiAgICAgICd0cmlhbmdsZScsXG4gICAgICAwLjAzMixcbiAgICAgIDQ4LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wMzUsIDAuMDEyLCAnYmFuZHBhc3MnLCA4MjApLCA4KTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNCb3RNb3ZlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzMyOS42MywgMC4wNTVdLFxuICAgICAgICBbMjQ2Ljk0LCAwLjA3XSxcbiAgICAgIF0sXG4gICAgICAnc2F3dG9vdGgnLFxuICAgICAgMC4wMjQsXG4gICAgICA1NixcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDUsIDAuMDEsICdsb3dwYXNzJywgNDIwKSwgMTYpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0NhcHR1cmUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMTc0LjYxLCAwLjA0XSxcbiAgICAgICAgWzI0Ni45NCwgMC4wNDVdLFxuICAgICAgICBbNTg3LjMzLCAwLjA5NV0sXG4gICAgICAgIFs3ODMuOTksIDAuMDhdLFxuICAgICAgXSxcbiAgICAgICdzcXVhcmUnLFxuICAgICAgMC4wNDYsXG4gICAgICA0NCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg5NiwgNDIsIDAuMTgsICdzYXd0b290aCcsIDAuMDI2KSwgMjApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTgsIDAuMDUsICdsb3dwYXNzJywgNTIwKSwgMTgpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDcsIDAuMDI4LCAnYmFuZHBhc3MnLCAxODAwKSwgODQpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbGF5Q2hlc3NpbWFsc1Bvd2VyU2FtcGxlKHBvd2VyKSkgcmV0dXJuO1xuICAgIHRoaXMuY2hlc3NpbWFsc1Bvd2VyRmFsbGJhY2socG93ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogdm9pZCB7XG4gICAgY29uc3Qgbm90ZXM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIE5vdGVbXT4gPSB7XG4gICAgICBlYWdsZTogW1xuICAgICAgICBbNjU5LjI1LCAwLjA1NV0sXG4gICAgICAgIFs4ODAsIDAuMDY1XSxcbiAgICAgICAgWzEzMTguNTEsIDAuMTJdLFxuICAgICAgXSxcbiAgICAgIGJ1bGw6IFtcbiAgICAgICAgWzE5NiwgMC4wNzVdLFxuICAgICAgICBbMTY0LjgxLCAwLjA3NV0sXG4gICAgICAgIFsyNDYuOTQsIDAuMTNdLFxuICAgICAgXSxcbiAgICAgIGthbmdhcm9vOiBbXG4gICAgICAgIFszOTIsIDAuMDU1XSxcbiAgICAgICAgWzAsIDAuMDRdLFxuICAgICAgICBbNzgzLjk5LCAwLjExXSxcbiAgICAgIF0sXG4gICAgICBsaW9uOiBbXG4gICAgICAgIFsyNjEuNjMsIDAuMDZdLFxuICAgICAgICBbMzkyLCAwLjA2XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNl0sXG4gICAgICAgIFs3ODMuOTksIDAuMTRdLFxuICAgICAgXSxcbiAgICB9O1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShub3Rlc1twb3dlcl0sIHBvd2VyID09PSAnYnVsbCcgPyAnc2F3dG9vdGgnIDogJ3RyaWFuZ2xlJywgMC4wNDYsIDU4KTtcbiAgICBpZiAocG93ZXIgPT09ICdlYWdsZScpIHtcbiAgICAgIHZvaWQgdGhpcy5zd2VlcCg3MjAsIDE1NjgsIDAuMTgsICd0cmlhbmdsZScsIDAuMDI4KTtcbiAgICAgIHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjIsIDAuMDI1LCAnaGlnaHBhc3MnLCAxNjAwKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDgsIDAuMDE4LCAnYmFuZHBhc3MnLCAyNjAwKSwgOTIpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoMTc2MCwgMC4wNTUsICdzaW5lJywgMC4wMTgpLCAxNTApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG93ZXIgPT09ICdidWxsJykge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoODIuNDEsIDAuMTYsICdzYXd0b290aCcsIDAuMDM4KSwgNzIpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDEzOC41OSwgNjUuNDEsIDAuMTgsICdzYXd0b290aCcsIDAuMDI2KSwgMTE4KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTYsIDAuMDM4LCAnbG93cGFzcycsIDI2MCksIDM2KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDU1LCAwLjAyNiwgJ2JhbmRwYXNzJywgOTYwKSwgMTcwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvd2VyID09PSAna2FuZ2Fyb28nKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoNDIwLCA5NDAsIDAuMTEsICdzaW5lJywgMC4wMzIpLCA4OCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTQwLCA1MjAsIDAuMSwgJ3NpbmUnLCAwLjAyNiksIDE5MCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgyNjEuNjMsIDAuMDU1LCAndHJpYW5nbGUnLCAwLjAxOCksIDI0NSk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjAzNSwgMC4wMTgsICdiYW5kcGFzcycsIDExODApLCAyMTgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMTY0LjgxLCAzOTIsIDAuMjQsICdzYXd0b290aCcsIDAuMDM0KSwgNzApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDk4LCAwLjE4LCAnc2F3dG9vdGgnLCAwLjAyKSwgMTUwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjI4LCAwLjAzMiwgJ2JhbmRwYXNzJywgMzQwKSwgNjIpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxOTYsIDE0Ni44MywgMC4yMiwgJ3Nhd3Rvb3RoJywgMC4wMjIpLCAxMTYpO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF5Q2hlc3NpbWFsc1Bvd2VyU2FtcGxlKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYW1wbGUgPSBDSEVTU0lNQUxTX1BPV0VSX1NBTVBMRVNbcG93ZXJdO1xuICAgIGlmICh0aGlzLnBsYXlCdWZmZXJlZFNhbXBsZShzYW1wbGUpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5wbGF5U2FtcGxlKHNhbXBsZSwgKCkgPT4gdGhpcy5jaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF5U2FtcGxlKHNhbXBsZTogU2FtcGxlQ29uZmlnLCBmYWxsYmFjazogKCkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkgfHwgdHlwZW9mIEF1ZGlvID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNhbXBsZUNhY2hlLmdldChzYW1wbGUuc3JjKTtcbiAgICAgIGNvbnN0IGF1ZGlvID0gY2FjaGVkID8gKGNhY2hlZC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEF1ZGlvRWxlbWVudCkgOiBuZXcgQXVkaW8oc2FtcGxlLnNyYyk7XG4gICAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xuICAgICAgYXVkaW8udm9sdW1lID0gc2FtcGxlLnZvbHVtZSAqIHRoaXMuc2Z4Vm9sdW1lKCk7XG4gICAgICB0aGlzLmFjdGl2ZVNhbXBsZXMuYWRkKGF1ZGlvKTtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSAoKSA9PiB0aGlzLmFjdGl2ZVNhbXBsZXMuZGVsZXRlKGF1ZGlvKTtcbiAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgcmVsZWFzZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWxlYXNlLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBjb25zdCBwbGF5UmVzdWx0ID0gYXVkaW8ucGxheSgpO1xuICAgICAgaWYgKHBsYXlSZXN1bHQpIHtcbiAgICAgICAgcGxheVJlc3VsdC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICAgIGZhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwbGF5QnVmZmVyZWRTYW1wbGUoc2FtcGxlOiBTYW1wbGVDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXJDYWNoZS5nZXQoc2FtcGxlLnNyYyk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0O1xuICAgIGlmICghYnVmZmVyIHx8ICFjdHggfHwgY3R4LnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdm9pZCB0aGlzLnByZWxvYWRTYW1wbGVCdWZmZXIoc2FtcGxlLnNyYyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoY3R4LnN0YXRlID09PSAnc3VzcGVuZGVkJykgdm9pZCBjdHgucmVzdW1lKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGN0eC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcbiAgICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgICAgc291cmNlLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZShzYW1wbGUudm9sdW1lICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICAgIHNvdXJjZS5jb25uZWN0KGdhaW4pO1xuICAgICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgICAgc291cmNlLnN0YXJ0KGN0eC5jdXJyZW50VGltZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGVzc2ltYWxzVmljdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMudmljdG9yeSwgKCkgPT4gdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCkpKSByZXR1cm47XG4gICAgdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk7XG4gIH1cblxuICBjaGVzc2ltYWxzRGVmZWF0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgaWYgKHRoaXMucGxheVNhbXBsZShDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQsICgpID0+IHRoaXMubG9zZSgpKSkgcmV0dXJuO1xuICAgIHRoaXMubG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzE5NiwgMC4wOF0sXG4gICAgICAgIFsyNjEuNjMsIDAuMDhdLFxuICAgICAgICBbMzI5LjYzLCAwLjA4XSxcbiAgICAgICAgWzM5MiwgMC4xXSxcbiAgICAgICAgWzUyMy4yNSwgMC4xMl0sXG4gICAgICAgIFs3ODMuOTksIDAuMTZdLFxuICAgICAgICBbMTA0Ni41LCAwLjIyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wNSxcbiAgICAgIDcyLFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDEzMC44MSwgNjUuNDEsIDAuMjgsICdzYXd0b290aCcsIDAuMDIpLCA0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDUyMy4yNSwgMTU2Ny45OCwgMC4zNCwgJ3NpbmUnLCAwLjAyNiksIDI0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMjIsICdiYW5kcGFzcycsIDE0MDApLCAxMjApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zZXF1ZW5jZShbWzk4Ny43NywgMC4wOF0sIFsxMzE4LjUxLCAwLjEyXV0sICd0cmlhbmdsZScsIDAuMDMyLCA4NiksIDUyMCk7XG4gIH1cblxuICBjaGVzc2ltYWxzSm9pblJlcXVlc3QoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbNTIzLjI1LCAwLjA1NV0sXG4gICAgICAgIFs2NTkuMjUsIDAuMDZdLFxuICAgICAgICBbOTg3Ljc3LCAwLjEyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wMzQsXG4gICAgICA1OCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDEzMTguNTEsIDAuMDc1LCAnc2luZScsIDAuMDIpLCAxMzYpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDYsIDAuMDEsICdoaWdocGFzcycsIDE4MDApLCA5OCk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXJVbmxvY2tlZCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDU1XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNTVdLFxuICAgICAgICBbNjU5LjI1LCAwLjA4XSxcbiAgICAgICAgWzk4Ny43NywgMC4xM10sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDM4LFxuICAgICAgNjQsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMjIwLCA4ODAsIDAuMjIsICdzaW5lJywgMC4wMjQpLCA3MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yNCwgMC4wMTgsICdiYW5kcGFzcycsIDEyMDApLCA1NCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtYXVkaW8nLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZEJvb2xlYW5TZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxsYmFjaztcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gJzAnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZvbHVtZVNldHRpbmcoa2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHZvaWQgdGhpcy5kZWZhdWx0c1JlYWR5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHN0b3JlZCA9PT0gbnVsbCB8fCBzdG9yZWQudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoc3RvcmVkKTtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpIDogZmFsbGJhY2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVNldHRpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVWb2x1bWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHByZWxvYWRTYW1wbGUoc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYW1wbGVDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhzcmMpO1xuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcbiAgICAgIGF1ZGlvLmxvYWQoKTtcbiAgICAgIHRoaXMuc2FtcGxlQ2FjaGUuc2V0KHNyYywgYXVkaW8pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2kgZWwgbmF2ZWdhZG9yIG5vIHBlcm1pdGUgcHJlY2FyZ2FyLCBzZSBpbnRlbnRhcmEgYWwgcmVwcm9kdWNpci5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZWxvYWRTYW1wbGVCdWZmZXIoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5idWZmZXJDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZVByZWxvYWQgPSB0aGlzLmJ1ZmZlclByZWxvYWRzLmdldChzcmMpO1xuICAgIGlmIChhY3RpdmVQcmVsb2FkKSByZXR1cm4gYWN0aXZlUHJlbG9hZDtcblxuICAgIGNvbnN0IHByZWxvYWQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzcmMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjdHguZGVjb2RlQXVkaW9EYXRhKGRhdGEuc2xpY2UoMCkpO1xuICAgICAgdGhpcy5idWZmZXJDYWNoZS5zZXQoc3JjLCBidWZmZXIpO1xuICAgIH0pKClcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyUHJlbG9hZHMuZGVsZXRlKHNyYyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYnVmZmVyUHJlbG9hZHMuc2V0KHNyYywgcHJlbG9hZCk7XG4gICAgcmV0dXJuIHByZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIG1pZ3JhdGVDaGVzc2ltYWxzQXVkaW9EZWZhdWx0cygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWlncmF0aW9uS2V5ID0gJ3ZhbC1taW5pLWdhbWVzLWNoZXNzaW1hbHMtYXVkaW8tZGVmYXVsdHMtdjInO1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1pZ3JhdGlvbktleSkgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBzdG9yZWRNdXNpY1ZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnKTtcbiAgICAgIGNvbnN0IHN0b3JlZFNmeFZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJyk7XG4gICAgICBpZiAoIXN0b3JlZE11c2ljVm9sdW1lIHx8IHN0b3JlZE11c2ljVm9sdW1lID09PSAnMCcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsICcwLjI1Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlZFNmeFZvbHVtZSB8fCBzdG9yZWRTZnhWb2x1bWUgPT09ICcwJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsICcwLjgnKTtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1pZ3JhdGlvbktleSwgJzEnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNhblBsYXlNdXNpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5tdXNpY0VuYWJsZWQoKSAmJiB0aGlzLm11c2ljVm9sdW1lKCkgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5U2Z4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQoKSAmJiB0aGlzLnNmeEVuYWJsZWQoKSAmJiB0aGlzLnNmeFZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29udGV4dCgpOiBQcm9taXNlPEF1ZGlvQ29udGV4dD4ge1xuICAgIGlmICghdGhpcy5jb250ZXh0IHx8IHRoaXMuY29udGV4dC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcbiAgICAgIHRoaXMubWFzdGVyR2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uZ2Fpbi52YWx1ZSA9IDE7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBtZW51TWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFsyMjAsIDAuMzhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzI2MS42MywgMC4zNF0sXG4gICAgICBbMzI5LjYzLCAwLjQyXSxcbiAgICAgIFsyOTMuNjYsIDAuMjhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzM5MiwgMC40OF0sXG4gICAgICBbMzI5LjYzLCAwLjM0XSxcbiAgICAgIFsyNjEuNjMsIDAuMzZdLFxuICAgICAgWzIyMCwgMC41OF0sXG4gICAgICBbMCwgMC4yXSxcbiAgICAgIFsyOTMuNjYsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbNDQwLCAwLjVdLFxuICAgICAgWzM5MiwgMC4zNl0sXG4gICAgICBbMjYxLjYzLCAwLjYyXSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZhbm5hUHVsc2Uoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJSA0ID09PSAwKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTYsIDQ4LCAwLjE4LCAnc2luZScsIDAuMDEyKSwgMTgpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDggPT09IDUpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDE2NC44MSwgMC4wNDUsICd0cmlhbmdsZScsIDAuMDEyKSwgOTYpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDE2ID09PSAxMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE0Ni44MywgMTk2LCAwLjA4LCAndHJpYW5nbGUnLCAwLjAxKSwgMTQwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdhbWVNZWxvZHkoKTogTm90ZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgWzUyMy4yNSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs3ODMuOTksIDAuMTNdLFxuICAgICAgWzEwNDYuNSwgMC4xOF0sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFs2NTkuMjUsIDAuMTNdLFxuICAgICAgWzU4Ny4zMywgMC4xOF0sXG4gICAgICBbNjU5LjI1LCAwLjE4XSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXF1ZW5jZShcbiAgICBub3RlczogTm90ZVtdLFxuICAgIHdhdmU6IE9zY2lsbGF0b3JUeXBlID0gJ3NxdWFyZScsXG4gICAgZ2FpbiA9IDAuMDU1LFxuICAgIGludGVydmFsTXMgPSA5MCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IFtmcmVxLCBkdXJhdGlvbl0gPSBub3Rlc1tpXTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKGZyZXEsIGR1cmF0aW9uLCB3YXZlLCBnYWluKSwgaSAqIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRTYW1wbGVNdXNpYyhjb25maWc6IFNhbXBsZU11c2ljQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlNdXNpYygpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSBjb25maWc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljQ29uZmlnPy5zcmMgPT09IGNvbmZpZy5zcmMgJiYgIXRoaXMuc2FtcGxlTXVzaWM/LnBhdXNlZCkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgaWYgKHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKGNvbmZpZy5zcmMpO1xuICAgIGF1ZGlvLmxvb3AgPSB0cnVlO1xuICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgYXVkaW8udm9sdW1lID0gY29uZmlnLnZvbHVtZSAqIHRoaXMubXVzaWNWb2x1bWUoKTtcbiAgICB0aGlzLnNhbXBsZU11c2ljID0gYXVkaW87XG4gICAgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZyA9IGNvbmZpZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXVkaW8ucGxheSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IGNvbmZpZztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BTYW1wbGVNdXNpYygpOiB2b2lkIHtcbiAgICBjb25zdCBtdXNpYyA9IHRoaXMuc2FtcGxlTXVzaWM7XG4gICAgdGhpcy5zYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhbXBsZU11c2ljQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIGlmICghbXVzaWMpIHJldHVybjtcbiAgICBtdXNpYy5wYXVzZSgpO1xuICAgIG11c2ljLmN1cnJlbnRUaW1lID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdG9uZShmcmVxOiBudW1iZXIsIGR1cmF0aW9uID0gMC4xLCB0eXBlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLCBnYWluVmFsdWUgPSAwLjA0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuO1xuICAgIGlmIChmcmVxIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3ZWVwKFxuICAgIGZyb21GcmVxOiBudW1iZXIsXG4gICAgdG9GcmVxOiBudW1iZXIsXG4gICAgZHVyYXRpb24gPSAwLjE2LFxuICAgIHR5cGU6IE9zY2lsbGF0b3JUeXBlID0gJ3RyaWFuZ2xlJyxcbiAgICBnYWluVmFsdWUgPSAwLjAzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKGZyb21GcmVxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoTWF0aC5tYXgoMSwgdG9GcmVxKSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICAvLyBDaGVzc2ltYWxzIHVzZXMgZ2VuZXJhdGVkIFdlYkF1ZGlvIGxheWVycyBpbnN0ZWFkIG9mIHRoaXJkLXBhcnR5IHNhbXBsZXMsXG4gIC8vIGF2b2lkaW5nIGxpY2Vuc2luZyByaXNrIHdoaWxlIGtlZXBpbmcgZWFjaCBhbmltYWwgcG93ZXIgZXhwcmVzc2l2ZS5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJlZE5vaXNlKFxuICAgIGR1cmF0aW9uID0gMC4xMixcbiAgICBnYWluVmFsdWUgPSAwLjAyNSxcbiAgICBmaWx0ZXJUeXBlOiBCaXF1YWRGaWx0ZXJUeXBlID0gJ2JhbmRwYXNzJyxcbiAgICBmcmVxdWVuY3kgPSA5MDAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IHNhbXBsZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjdHguc2FtcGxlUmF0ZSAqIGR1cmF0aW9uKSk7XG4gICAgY29uc3QgYnVmZmVyID0gY3R4LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVDb3VudCwgY3R4LnNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IGNoYW5uZWwgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVDb3VudDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBkZWNheSA9IDEgLSBpIC8gc2FtcGxlQ291bnQ7XG4gICAgICBjaGFubmVsW2ldID0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBkZWNheTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgY29uc3QgZmlsdGVyID0gY3R4LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIGZpbHRlci50eXBlID0gZmlsdGVyVHlwZTtcbiAgICBmaWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gZnJlcXVlbmN5O1xuICAgIGZpbHRlci5RLnZhbHVlID0gZmlsdGVyVHlwZSA9PT0gJ2xvd3Bhc3MnID8gMC43IDogMS44O1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMTIpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIHNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG4gICAgc291cmNlLmNvbm5lY3QoZmlsdGVyKTtcbiAgICBmaWx0ZXIuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgc291cmNlLnN0YXJ0KCk7XG4gICAgc291cmNlLnN0b3AoY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24gKyAwLjAyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLnBhdXNlRm9yQmFja2dyb3VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVBhZ2VIaWRlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucGF1c2VGb3JCYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVQYWdlU2hvdyA9ICgpOiB2b2lkID0+IHtcbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVzZXJBY3RpdmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkgfHwgIXRoaXMuaXNEb2N1bWVudFZpc2libGUoKSkgcmV0dXJuO1xuICAgIHRoaXMucHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk7XG4gICAgaWYgKHRoaXMucGF1c2VkU2FtcGxlTXVzaWMpIHtcbiAgICAgIHZvaWQgdGhpcy5yZXN1bWVGcm9tQmFja2dyb3VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMud2FrZUF1ZGlvKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwYXVzZUZvckJhY2tncm91bmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlTWVsb2R5KSB0aGlzLnBhdXNlZE1lbG9keSA9IHRoaXMuYWN0aXZlTWVsb2R5O1xuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljICYmIHRoaXMuc2FtcGxlTXVzaWNDb25maWcpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSB0aGlzLnNhbXBsZU11c2ljQ29uZmlnO1xuICAgICAgdGhpcy5zdG9wU2FtcGxlTXVzaWMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMC4wMDAxLCAwLjIpO1xuICAgIGlmICh0aGlzLnN1c3BlbmRUaW1lcikgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnN1c3BlbmRUaW1lcik7XG4gICAgdGhpcy5zdXNwZW5kVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIHZvaWQgdGhpcy5jb250ZXh0Py5zdXNwZW5kKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB9LCAyNjApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN1bWVGcm9tQmFja2dyb3VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdXNwZW5kVGltZXIpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zdXNwZW5kVGltZXIpO1xuICAgICAgdGhpcy5zdXNwZW5kVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBjb25zdCBzYW1wbGVNdXNpYyA9IHRoaXMucGF1c2VkU2FtcGxlTXVzaWM7XG4gICAgaWYgKHNhbXBsZU11c2ljKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFNhbXBsZU11c2ljKHNhbXBsZU11c2ljKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVsb2R5ID0gdGhpcy5wYXVzZWRNZWxvZHk7XG4gICAgaWYgKCFtZWxvZHkpIHJldHVybjtcbiAgICB0aGlzLnBhdXNlZE1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLmVuc3VyZUNvbnRleHQoKTtcbiAgICBhd2FpdCB0aGlzLnJlc3VtZUNvbnRleHQoY3R4KTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjM1KTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMobWVsb2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FrZUF1ZGlvKCk6IFByb21pc2U8QXVkaW9Db250ZXh0PiB7XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy5lbnN1cmVDb250ZXh0KCk7XG4gICAgYXdhaXQgdGhpcy5yZXN1bWVDb250ZXh0KGN0eCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4xMik7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdW1lQ29udGV4dChjdHg6IEF1ZGlvQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjdHguc3RhdGUgPT09ICdydW5uaW5nJykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjdHgucmVzdW1lKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpT1MgcHVlZGUgZXhpZ2lyIHVuYSBudWV2YSBpbnRlcmFjY2nDs24gZGVsIHVzdWFyaW87IGVsIGxpc3RlbmVyIGRlIGFjdGl2YWNpw7NuIHJlaW50ZW50YXLDoS5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZhZGVNYXN0ZXJUbyh2YWx1ZTogbnVtYmVyLCBzZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5tYXN0ZXJHYWluKSByZXR1cm47XG4gICAgY29uc3QgZ2FpbiA9IHRoaXMubWFzdGVyR2Fpbi5nYWluO1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcbiAgICBnYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuICAgIGdhaW4uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBub3csIE1hdGgubWF4KDAuMDEsIHNlY29uZHMgLyA0KSk7XG4gIH1cblxuICBwcml2YXRlIGlzRG9jdW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICFkb2N1bWVudC5oaWRkZW47XG4gIH1cbn1cbiJdfQ==
|
|
755
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFuRCxNQUFNLHdCQUF3QixHQUEwQztJQUN0RSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNyRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNyRSxDQUFDO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUN0RSxDQUFDO0FBQ0YsTUFBTSxxQkFBcUIsR0FBc0I7SUFDL0MsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFzQjtJQUMvQyxHQUFHLEVBQUUsa0NBQWtDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBaUI7SUF1QjVCO1FBbkJRLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFJTCxrQkFBYSxH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SUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsTUFBTSxD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USxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDOytHQXZ5QlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIE5vdGUgPSBbbnVtYmVyLCBudW1iZXJdO1xudHlwZSBNZWxvZHlNb2RlID0gJ21lbnUnIHwgJ2dhbWUnO1xudHlwZSBDaGVzc2ltYWxzUG93ZXIgPSAnZWFnbGUnIHwgJ2J1bGwnIHwgJ2thbmdhcm9vJyB8ICdsaW9uJztcbnR5cGUgU2FtcGxlQ29uZmlnID0geyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfTtcbnR5cGUgU2FtcGxlTXVzaWNDb25maWcgPSB7IHNyYzogc3RyaW5nOyB2b2x1bWU6IG51bWJlciB9O1xuXG5jb25zdCBDSEVTU0lNQUxTX1BPV0VSX1NBTVBMRVM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIFNhbXBsZUNvbmZpZz4gPSB7XG4gIGVhZ2xlOiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2VhZ2xlLWNyeS53YXYnLCB2b2x1bWU6IDAuNzIgfSxcbiAgYnVsbDogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9idWxsLndhdicsIHZvbHVtZTogMC42NCB9LFxuICBrYW5nYXJvbzogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9rYW5nYXJvby1qdW1wLm1wMycsIHZvbHVtZTogMC43MiB9LFxuICBsaW9uOiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2xpb24tcm9hci53YXYnLCB2b2x1bWU6IDAuNjggfSxcbn07XG5jb25zdCBDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUyA9IHtcbiAgdmljdG9yeTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy90YWRhLm1wMycsIHZvbHVtZTogMC43MiB9LFxuICBkZWZlYXQ6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMveW91LWxvc2UubXAzJywgdm9sdW1lOiAwLjcyIH0sXG59O1xuY29uc3QgQ0hFU1NJTUFMU19NRU5VX01VU0lDOiBTYW1wbGVNdXNpY0NvbmZpZyA9IHtcbiAgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvbWFpbi1tZW51Lm1wMycsXG4gIHZvbHVtZTogMC4zNCxcbn07XG5jb25zdCBDSEVTU0lNQUxTX0dBTUVfTVVTSUM6IFNhbXBsZU11c2ljQ29uZmlnID0ge1xuICBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9HYW1lLm1wMycsXG4gIHZvbHVtZTogMC4yOCxcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmV0cm9BdWRpb1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQ/OiBBdWRpb0NvbnRleHQ7XG4gIHByaXZhdGUgbWFzdGVyR2Fpbj86IEdhaW5Ob2RlO1xuICBwcml2YXRlIG11c2ljVGltZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgbm90ZUluZGV4ID0gMDtcbiAgcHJpdmF0ZSBhY3RpdmVNZWxvZHk/OiBNZWxvZHlNb2RlO1xuICBwcml2YXRlIHBhdXNlZE1lbG9keT86IE1lbG9keU1vZGU7XG4gIHByaXZhdGUgc3VzcGVuZFRpbWVyPzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVNhbXBsZXMgPSBuZXcgU2V0PEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgc2FtcGxlTXVzaWM/OiBIVE1MQXVkaW9FbGVtZW50O1xuICBwcml2YXRlIHNhbXBsZU11c2ljQ29uZmlnPzogU2FtcGxlTXVzaWNDb25maWc7XG4gIHByaXZhdGUgcGF1c2VkU2FtcGxlTXVzaWM/OiBTYW1wbGVNdXNpY0NvbmZpZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRzUmVhZHkgPSB0aGlzLm1pZ3JhdGVDaGVzc2ltYWxzQXVkaW9EZWZhdWx0cygpO1xuICByZWFkb25seSBlbmFibGVkID0gc2lnbmFsPGJvb2xlYW4+KHRoaXMucmVhZEVuYWJsZWQoKSk7XG4gIHJlYWRvbmx5IG11c2ljRW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtZW5hYmxlZCcsIHRydWUpKTtcbiAgcmVhZG9ubHkgc2Z4RW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LWVuYWJsZWQnLCB0cnVlKSk7XG4gIHJlYWRvbmx5IG11c2ljVm9sdW1lID0gc2lnbmFsPG51bWJlcj4odGhpcy5yZWFkVm9sdW1lU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtdm9sdW1lJywgMC4yNSkpO1xuICByZWFkb25seSBzZnhWb2x1bWUgPSBzaWduYWw8bnVtYmVyPih0aGlzLnJlYWRWb2x1bWVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJywgMC44KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FtcGxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgSFRNTEF1ZGlvRWxlbWVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXJDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBdWRpb0J1ZmZlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXJQcmVsb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCB0aGlzLmhhbmRsZVBhZ2VIaWRlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlc2hvdycsIHRoaXMuaGFuZGxlUGFnZVNob3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLWF1ZGlvJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbG9jYWxTdG9yYWdlIHB1ZWRlIG5vIGVzdGFyIGRpc3BvbmlibGUgZW4gU1NSL3Rlc3RzLlxuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB0aGlzLnN0b3BNdXNpYygpO1xuICB9XG5cbiAgc2V0TXVzaWNFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tdXNpY0VuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtZW5hYmxlZCcsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgICBpZiAoIXZhbHVlKSB0aGlzLnN0b3BNdXNpYygpO1xuICB9XG5cbiAgc2V0U2Z4RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2Z4RW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtZW5hYmxlZCcsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgfVxuXG4gIHNldE11c2ljVm9sdW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2b2x1bWUgPSB0aGlzLm5vcm1hbGl6ZVZvbHVtZSh2YWx1ZSk7XG4gICAgdGhpcy5tdXNpY1ZvbHVtZS5zZXQodm9sdW1lKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtdm9sdW1lJywgYCR7dm9sdW1lfWApO1xuICAgIGlmICh2b2x1bWUgPD0gMCkge1xuICAgICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNhbXBsZU11c2ljVm9sdW1lKCk7XG4gIH1cblxuICBzZXRTZnhWb2x1bWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKTtcbiAgICB0aGlzLnNmeFZvbHVtZS5zZXQodm9sdW1lKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsIGAke3ZvbHVtZX1gKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0TWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnbWVudScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDaGVzc2ltYWxzTWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFNhbXBsZU11c2ljKENIRVNTSU1BTFNfTUVOVV9NVVNJQyk7XG4gIH1cblxuICBhc3luYyBzdGFydENoZXNzaW1hbHNHYW1lTXVzaWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmVsb2FkQ2hlc3NpbWFsc1NhbXBsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19HQU1FX01VU0lDKTtcbiAgfVxuXG4gIHByZWxvYWRDaGVzc2ltYWxzU2FtcGxlcygpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKENIRVNTSU1BTFNfUE9XRVJfU0FNUExFUykuZm9yRWFjaCgoc2FtcGxlKSA9PiB7XG4gICAgICB2b2lkIHRoaXMucHJlbG9hZFNhbXBsZUJ1ZmZlcihzYW1wbGUuc3JjKTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIEF1ZGlvID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIFtcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMoQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTKSxcbiAgICAgIENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLnZpY3RvcnksXG4gICAgICBDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQsXG4gICAgXS5mb3JFYWNoKChzYW1wbGUpID0+IHRoaXMucHJlbG9hZFNhbXBsZShzYW1wbGUuc3JjKSk7XG4gIH1cblxuICBhc3luYyBzdGFydEdhbWVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMoJ2dhbWUnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0TXVzaWMobW9kZTogTWVsb2R5TW9kZSA9ICdnYW1lJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLnBhdXNlZE1lbG9keSA9IG1vZGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lciAmJiB0aGlzLmFjdGl2ZU1lbG9keSA9PT0gbW9kZSkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4yNCk7XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSBtb2RlO1xuICAgIHRoaXMubm90ZUluZGV4ID0gMDtcbiAgICBjb25zdCBtZWxvZHkgPSBtb2RlID09PSAnbWVudScgPyB0aGlzLm1lbnVNZWxvZHkoKSA6IHRoaXMuZ2FtZU1lbG9keSgpO1xuICAgIGNvbnN0IGludGVydmFsTXMgPSBtb2RlID09PSAnbWVudScgPyA2NDAgOiAxOTA7XG4gICAgY29uc3Qgd2F2ZTogT3NjaWxsYXRvclR5cGUgPSBtb2RlID09PSAnbWVudScgPyAndHJpYW5nbGUnIDogJ3NxdWFyZSc7XG4gICAgY29uc3QgZ2FpbiA9IG1vZGUgPT09ICdtZW51JyA/IDAuMDE4IDogMC4wMjU7XG4gICAgdGhpcy5tdXNpY1RpbWVyID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLm5vdGVJbmRleDtcbiAgICAgIGNvbnN0IFtmcmVxLCBkdXJhdGlvbl0gPSBtZWxvZHlbdGhpcy5ub3RlSW5kZXggJSBtZWxvZHkubGVuZ3RoXTtcbiAgICAgIHRoaXMubm90ZUluZGV4ICs9IDE7XG4gICAgICB0aGlzLnRvbmUoZnJlcSwgZHVyYXRpb24sIHdhdmUsIGdhaW4pO1xuICAgICAgaWYgKG1vZGUgPT09ICdtZW51JykgdGhpcy5zYXZhbm5hUHVsc2Uoc3RlcCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG4gIH1cblxuICBzdG9wTXVzaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICB9XG5cbiAgZmxpcCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudG9uZSg0NDAsIDAuMDU1LCAnc3F1YXJlJywgMC4wNSk7XG4gIH1cblxuICBtYXRjaCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzY2MCwgMC4wOF0sXG4gICAgICBbODgwLCAwLjFdLFxuICAgICAgWzk5MCwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBtaXNzKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjIwLCAwLjA4XSxcbiAgICAgIFsxNzQuNjEsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgd2luKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs1MjMuMjUsIDAuMDldLFxuICAgICAgWzY1OS4yNSwgMC4wOV0sXG4gICAgICBbNzgzLjk5LCAwLjA5XSxcbiAgICAgIFsxMDQ2LjUsIDAuMTRdLFxuICAgICAgWzEzMTguNTEsIDAuMjJdLFxuICAgICAgWzE1NjcuOTgsIDAuMjZdLFxuICAgIF0pO1xuICB9XG5cbiAgbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjkzLjY2LCAwLjEyXSxcbiAgICAgIFsyNDYuOTQsIDAuMTJdLFxuICAgICAgWzE5NiwgMC4yXSxcbiAgICBdKTtcbiAgfVxuXG4gIHNpbW9uUGFkKGZyZXE6IG51bWJlcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKGZyZXEsIDAuMjIsICdzaW5lJywgMC4wNTUpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyUHJldmlldyhwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogdm9pZCB7XG4gICAgY29uc3QgdG9uZXM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIG51bWJlcj4gPSB7XG4gICAgICBlYWdsZTogODgwLFxuICAgICAgYnVsbDogMzQ5LjIzLFxuICAgICAga2FuZ2Fyb286IDY1OS4yNSxcbiAgICAgIGxpb246IDUyMy4yNSxcbiAgICB9O1xuICAgIHZvaWQgdGhpcy50b25lKHRvbmVzW3Bvd2VyXSwgMC4xMiwgcG93ZXIgPT09ICdidWxsJyA/ICdzYXd0b290aCcgOiAndHJpYW5nbGUnLCAwLjAzOCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUodG9uZXNbcG93ZXJdICogMS4yNSwgMC4wNywgJ3NpbmUnLCAwLjAxOCksIDcyKTtcbiAgfVxuXG4gIHNpbW9uU3RlcE9rKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKDg4MCwgMC4wOCwgJ3RyaWFuZ2xlJywgMC4wMzUpO1xuICB9XG5cbiAgc2ltb25Sb3VuZE9rKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbNjU5LjI1LCAwLjA4XSxcbiAgICAgIFs4ODAsIDAuMDhdLFxuICAgICAgWzExNzQuNjYsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgc2ltb25GYWlsKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMTk2LCAwLjEyXSxcbiAgICAgIFsxNDYuODMsIDAuMThdLFxuICAgIF0pO1xuICB9XG5cbiAgY2hlc3NpbWFsc01vdmUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzkyLCAwLjA0NV0sXG4gICAgICAgIFs0OTMuODgsIDAuMDU1XSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wMzIsXG4gICAgICA0OCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDM1LCAwLjAxMiwgJ2JhbmRwYXNzJywgODIwKSwgOCk7XG4gIH1cblxuICBjaGVzc2ltYWxzQm90TW92ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszMjkuNjMsIDAuMDU1XSxcbiAgICAgICAgWzI0Ni45NCwgMC4wN10sXG4gICAgICBdLFxuICAgICAgJ3Nhd3Rvb3RoJyxcbiAgICAgIDAuMDI0LFxuICAgICAgNTYsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA1LCAwLjAxLCAnbG93cGFzcycsIDQyMCksIDE2KTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNDYXB0dXJlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzE3NC42MSwgMC4wNF0sXG4gICAgICAgIFsyNDYuOTQsIDAuMDQ1XSxcbiAgICAgICAgWzU4Ny4zMywgMC4wOTVdLFxuICAgICAgICBbNzgzLjk5LCAwLjA4XSxcbiAgICAgIF0sXG4gICAgICAnc3F1YXJlJyxcbiAgICAgIDAuMDQ2LFxuICAgICAgNDQsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTYsIDQyLCAwLjE4LCAnc2F3dG9vdGgnLCAwLjAyNiksIDIwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjE4LCAwLjA1LCAnbG93cGFzcycsIDUyMCksIDE4KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA3LCAwLjAyOCwgJ2JhbmRwYXNzJywgMTgwMCksIDg0KTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNQb3dlcihwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxheUNoZXNzaW1hbHNQb3dlclNhbXBsZShwb3dlcikpIHJldHVybjtcbiAgICB0aGlzLmNoZXNzaW1hbHNQb3dlckZhbGxiYWNrKHBvd2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlc3NpbWFsc1Bvd2VyRmFsbGJhY2socG93ZXI6IENoZXNzaW1hbHNQb3dlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdGVzOiBSZWNvcmQ8Q2hlc3NpbWFsc1Bvd2VyLCBOb3RlW10+ID0ge1xuICAgICAgZWFnbGU6IFtcbiAgICAgICAgWzY1OS4yNSwgMC4wNTVdLFxuICAgICAgICBbODgwLCAwLjA2NV0sXG4gICAgICAgIFsxMzE4LjUxLCAwLjEyXSxcbiAgICAgIF0sXG4gICAgICBidWxsOiBbXG4gICAgICAgIFsxOTYsIDAuMDc1XSxcbiAgICAgICAgWzE2NC44MSwgMC4wNzVdLFxuICAgICAgICBbMjQ2Ljk0LCAwLjEzXSxcbiAgICAgIF0sXG4gICAgICBrYW5nYXJvbzogW1xuICAgICAgICBbMzkyLCAwLjA1NV0sXG4gICAgICAgIFswLCAwLjA0XSxcbiAgICAgICAgWzc4My45OSwgMC4xMV0sXG4gICAgICBdLFxuICAgICAgbGlvbjogW1xuICAgICAgICBbMjYxLjYzLCAwLjA2XSxcbiAgICAgICAgWzM5MiwgMC4wNl0sXG4gICAgICAgIFs1MjMuMjUsIDAuMDZdLFxuICAgICAgICBbNzgzLjk5LCAwLjE0XSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2Uobm90ZXNbcG93ZXJdLCBwb3dlciA9PT0gJ2J1bGwnID8gJ3Nhd3Rvb3RoJyA6ICd0cmlhbmdsZScsIDAuMDQ2LCA1OCk7XG4gICAgaWYgKHBvd2VyID09PSAnZWFnbGUnKSB7XG4gICAgICB2b2lkIHRoaXMuc3dlZXAoNzIwLCAxNTY4LCAwLjE4LCAndHJpYW5nbGUnLCAwLjAyOCk7XG4gICAgICB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjIyLCAwLjAyNSwgJ2hpZ2hwYXNzJywgMTYwMCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA4LCAwLjAxOCwgJ2JhbmRwYXNzJywgMjYwMCksIDkyKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDE3NjAsIDAuMDU1LCAnc2luZScsIDAuMDE4KSwgMTUwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvd2VyID09PSAnYnVsbCcpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDgyLjQxLCAwLjE2LCAnc2F3dG9vdGgnLCAwLjAzOCksIDcyKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxMzguNTksIDY1LjQxLCAwLjE4LCAnc2F3dG9vdGgnLCAwLjAyNiksIDExOCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjE2LCAwLjAzOCwgJ2xvd3Bhc3MnLCAyNjApLCAzNik7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA1NSwgMC4wMjYsICdiYW5kcGFzcycsIDk2MCksIDE3MCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwb3dlciA9PT0gJ2thbmdhcm9vJykge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDQyMCwgOTQwLCAwLjExLCAnc2luZScsIDAuMDMyKSwgODgpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk0MCwgNTIwLCAwLjEsICdzaW5lJywgMC4wMjYpLCAxOTApO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoMjYxLjYzLCAwLjA1NSwgJ3RyaWFuZ2xlJywgMC4wMTgpLCAyNDUpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wMzUsIDAuMDE4LCAnYmFuZHBhc3MnLCAxMTgwKSwgMjE4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE2NC44MSwgMzkyLCAwLjI0LCAnc2F3dG9vdGgnLCAwLjAzNCksIDcwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSg5OCwgMC4xOCwgJ3Nhd3Rvb3RoJywgMC4wMiksIDE1MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yOCwgMC4wMzIsICdiYW5kcGFzcycsIDM0MCksIDYyKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMTk2LCAxNDYuODMsIDAuMjIsICdzYXd0b290aCcsIDAuMDIyKSwgMTE2KTtcbiAgfVxuXG4gIHByaXZhdGUgcGxheUNoZXNzaW1hbHNQb3dlclNhbXBsZShwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FtcGxlID0gQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTW3Bvd2VyXTtcbiAgICBpZiAodGhpcy5wbGF5QnVmZmVyZWRTYW1wbGUoc2FtcGxlKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMucGxheVNhbXBsZShzYW1wbGUsICgpID0+IHRoaXMuY2hlc3NpbWFsc1Bvd2VyRmFsbGJhY2socG93ZXIpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxheVNhbXBsZShzYW1wbGU6IFNhbXBsZUNvbmZpZywgZmFsbGJhY2s6ICgpID0+IHZvaWQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpIHx8IHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zYW1wbGVDYWNoZS5nZXQoc2FtcGxlLnNyYyk7XG4gICAgICBjb25zdCBhdWRpbyA9IGNhY2hlZCA/IChjYWNoZWQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxBdWRpb0VsZW1lbnQpIDogbmV3IEF1ZGlvKHNhbXBsZS5zcmMpO1xuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcbiAgICAgIGF1ZGlvLnZvbHVtZSA9IHNhbXBsZS52b2x1bWUgKiB0aGlzLnNmeFZvbHVtZSgpO1xuICAgICAgdGhpcy5hY3RpdmVTYW1wbGVzLmFkZChhdWRpbyk7XG4gICAgICBjb25zdCByZWxlYXNlID0gKCkgPT4gdGhpcy5hY3RpdmVTYW1wbGVzLmRlbGV0ZShhdWRpbyk7XG4gICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHJlbGVhc2UsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVsZWFzZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgcGxheVJlc3VsdCA9IGF1ZGlvLnBsYXkoKTtcbiAgICAgIGlmIChwbGF5UmVzdWx0KSB7XG4gICAgICAgIHBsYXlSZXN1bHQuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGxheUJ1ZmZlcmVkU2FtcGxlKHNhbXBsZTogU2FtcGxlQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyQ2FjaGUuZ2V0KHNhbXBsZS5zcmMpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dDtcbiAgICBpZiAoIWJ1ZmZlciB8fCAhY3R4IHx8IGN0eC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHZvaWQgdGhpcy5wcmVsb2FkU2FtcGxlQnVmZmVyKHNhbXBsZS5zcmMpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpIHZvaWQgY3R4LnJlc3VtZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICAgIHNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG4gICAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoc2FtcGxlLnZvbHVtZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSk7XG4gICAgICBzb3VyY2UuY29ubmVjdChnYWluKTtcbiAgICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIHNvdXJjZS5zdGFydChjdHguY3VycmVudFRpbWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlc3NpbWFsc1ZpY3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICBpZiAodGhpcy5wbGF5U2FtcGxlKENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLnZpY3RvcnksICgpID0+IHRoaXMuY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpKSkgcmV0dXJuO1xuICAgIHRoaXMuY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0RlZmVhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMuZGVmZWF0LCAoKSA9PiB0aGlzLmxvc2UoKSkpIHJldHVybjtcbiAgICB0aGlzLmxvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFsxOTYsIDAuMDhdLFxuICAgICAgICBbMjYxLjYzLCAwLjA4XSxcbiAgICAgICAgWzMyOS42MywgMC4wOF0sXG4gICAgICAgIFszOTIsIDAuMV0sXG4gICAgICAgIFs1MjMuMjUsIDAuMTJdLFxuICAgICAgICBbNzgzLjk5LCAwLjE2XSxcbiAgICAgICAgWzEwNDYuNSwgMC4yMl0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDUsXG4gICAgICA3MixcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxMzAuODEsIDY1LjQxLCAwLjI4LCAnc2F3dG9vdGgnLCAwLjAyKSwgNDApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg1MjMuMjUsIDE1NjcuOTgsIDAuMzQsICdzaW5lJywgMC4wMjYpLCAyNDApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTYsIDAuMDIyLCAnYmFuZHBhc3MnLCAxNDAwKSwgMTIwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc2VxdWVuY2UoW1s5ODcuNzcsIDAuMDhdLCBbMTMxOC41MSwgMC4xMl1dLCAndHJpYW5nbGUnLCAwLjAzMiwgODYpLCA1MjApO1xuICB9XG5cbiAgY2hlc3NpbWFsc0pvaW5SZXF1ZXN0KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzUyMy4yNSwgMC4wNTVdLFxuICAgICAgICBbNjU5LjI1LCAwLjA2XSxcbiAgICAgICAgWzk4Ny43NywgMC4xMl0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDM0LFxuICAgICAgNTgsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxMzE4LjUxLCAwLjA3NSwgJ3NpbmUnLCAwLjAyKSwgMTM2KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA2LCAwLjAxLCAnaGlnaHBhc3MnLCAxODAwKSwgOTgpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyVW5sb2NrZWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzkyLCAwLjA1NV0sXG4gICAgICAgIFs1MjMuMjUsIDAuMDU1XSxcbiAgICAgICAgWzY1OS4yNSwgMC4wOF0sXG4gICAgICAgIFs5ODcuNzcsIDAuMTNdLFxuICAgICAgXSxcbiAgICAgICd0cmlhbmdsZScsXG4gICAgICAwLjAzOCxcbiAgICAgIDY0LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDIyMCwgODgwLCAwLjIyLCAnc2luZScsIDAuMDI0KSwgNzApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjQsIDAuMDE4LCAnYmFuZHBhc3MnLCAxMjAwKSwgNTQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLWF1ZGlvJywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRCb29sZWFuU2V0dGluZyhrZXk6IHN0cmluZywgZmFsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgICByZXR1cm4gdmFsdWUgIT09ICcwJztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRWb2x1bWVTZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB2b2lkIHRoaXMuZGVmYXVsdHNSZWFkeTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgIGlmIChzdG9yZWQgPT09IG51bGwgfHwgc3RvcmVkLnRyaW0oKSA9PT0gJycpIHJldHVybiBmYWxsYmFjaztcbiAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHN0b3JlZCk7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKSA6IGZhbGxiYWNrO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVTZXR0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbG9jYWxTdG9yYWdlIHB1ZWRlIG5vIGVzdGFyIGRpc3BvbmlibGUgZW4gU1NSL3Rlc3RzLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVm9sdW1lKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVsb2FkU2FtcGxlKHNyYzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2FtcGxlQ2FjaGUuaGFzKHNyYykpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8oc3JjKTtcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgICBhdWRpby5sb2FkKCk7XG4gICAgICB0aGlzLnNhbXBsZUNhY2hlLnNldChzcmMsIGF1ZGlvKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpIGVsIG5hdmVnYWRvciBubyBwZXJtaXRlIHByZWNhcmdhciwgc2UgaW50ZW50YXJhIGFsIHJlcHJvZHVjaXIuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVsb2FkU2FtcGxlQnVmZmVyKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYnVmZmVyQ2FjaGUuaGFzKHNyYykpIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmVQcmVsb2FkID0gdGhpcy5idWZmZXJQcmVsb2Fkcy5nZXQoc3JjKTtcbiAgICBpZiAoYWN0aXZlUHJlbG9hZCkgcmV0dXJuIGFjdGl2ZVByZWxvYWQ7XG5cbiAgICBjb25zdCBwcmVsb2FkID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLmVuc3VyZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc3JjKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY3R4LmRlY29kZUF1ZGlvRGF0YShkYXRhLnNsaWNlKDApKTtcbiAgICAgIHRoaXMuYnVmZmVyQ2FjaGUuc2V0KHNyYywgYnVmZmVyKTtcbiAgICB9KSgpXG4gICAgICAuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1ZmZlclByZWxvYWRzLmRlbGV0ZShzcmMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmJ1ZmZlclByZWxvYWRzLnNldChzcmMsIHByZWxvYWQpO1xuICAgIHJldHVybiBwcmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSBtaWdyYXRlQ2hlc3NpbWFsc0F1ZGlvRGVmYXVsdHMoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1pZ3JhdGlvbktleSA9ICd2YWwtbWluaS1nYW1lcy1jaGVzc2ltYWxzLWF1ZGlvLWRlZmF1bHRzLXYyJztcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShtaWdyYXRpb25LZXkpID09PSAnMScpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3Qgc3RvcmVkTXVzaWNWb2x1bWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtbXVzaWMtdm9sdW1lJyk7XG4gICAgICBjb25zdCBzdG9yZWRTZnhWb2x1bWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScpO1xuICAgICAgaWYgKCFzdG9yZWRNdXNpY1ZvbHVtZSB8fCBzdG9yZWRNdXNpY1ZvbHVtZSA9PT0gJzAnKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnLCAnMC4yNScpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZWRTZnhWb2x1bWUgfHwgc3RvcmVkU2Z4Vm9sdW1lID09PSAnMCcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLXNmeC12b2x1bWUnLCAnMC44Jyk7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtaWdyYXRpb25LZXksICcxJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5TXVzaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCgpICYmIHRoaXMubXVzaWNFbmFibGVkKCkgJiYgdGhpcy5tdXNpY1ZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUGxheVNmeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5zZnhFbmFibGVkKCkgJiYgdGhpcy5zZnhWb2x1bWUoKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbnRleHQoKTogUHJvbWlzZTxBdWRpb0NvbnRleHQ+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmNvbnRleHQuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWUgPSAxO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgbWVudU1lbG9keSgpOiBOb3RlW10ge1xuICAgIHJldHVybiBbXG4gICAgICBbMjIwLCAwLjM4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFsyNjEuNjMsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbMjkzLjY2LCAwLjI4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFszOTIsIDAuNDhdLFxuICAgICAgWzMyOS42MywgMC4zNF0sXG4gICAgICBbMjYxLjYzLCAwLjM2XSxcbiAgICAgIFsyMjAsIDAuNThdLFxuICAgICAgWzAsIDAuMl0sXG4gICAgICBbMjkzLjY2LCAwLjM0XSxcbiAgICAgIFszMjkuNjMsIDAuNDJdLFxuICAgICAgWzQ0MCwgMC41XSxcbiAgICAgIFszOTIsIDAuMzZdLFxuICAgICAgWzI2MS42MywgMC42Ml0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2YW5uYVB1bHNlKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzdGVwICUgNCA9PT0gMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk2LCA0OCwgMC4xOCwgJ3NpbmUnLCAwLjAxMiksIDE4KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSA4ID09PSA1KSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxNjQuODEsIDAuMDQ1LCAndHJpYW5nbGUnLCAwLjAxMiksIDk2KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSAxNiA9PT0gMTApIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxNDYuODMsIDE5NiwgMC4wOCwgJ3RyaWFuZ2xlJywgMC4wMSksIDE0MCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnYW1lTWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFs1MjMuMjUsIDAuMTNdLFxuICAgICAgWzY1OS4yNSwgMC4xM10sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFsxMDQ2LjUsIDAuMThdLFxuICAgICAgWzc4My45OSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs1ODcuMzMsIDAuMThdLFxuICAgICAgWzY1OS4yNSwgMC4xOF0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VxdWVuY2UoXG4gICAgbm90ZXM6IE5vdGVbXSxcbiAgICB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLFxuICAgIGdhaW4gPSAwLjA1NSxcbiAgICBpbnRlcnZhbE1zID0gOTAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbm90ZXNbaV07XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2FpbiksIGkgKiBpbnRlcnZhbE1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2FtcGxlTXVzaWMoY29uZmlnOiBTYW1wbGVNdXNpY0NvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gY29uZmlnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpY0NvbmZpZz8uc3JjID09PSBjb25maWcuc3JjICYmICF0aGlzLnNhbXBsZU11c2ljPy5wYXVzZWQpIHJldHVybjtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhjb25maWcuc3JjKTtcbiAgICBhdWRpby5sb29wID0gdHJ1ZTtcbiAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xuICAgIGF1ZGlvLnZvbHVtZSA9IHRoaXMuc2FtcGxlTXVzaWNWb2x1bWUoY29uZmlnKTtcbiAgICB0aGlzLnNhbXBsZU11c2ljID0gYXVkaW87XG4gICAgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZyA9IGNvbmZpZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXVkaW8ucGxheSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IGNvbmZpZztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BTYW1wbGVNdXNpYygpOiB2b2lkIHtcbiAgICBjb25zdCBtdXNpYyA9IHRoaXMuc2FtcGxlTXVzaWM7XG4gICAgdGhpcy5zYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhbXBsZU11c2ljQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIGlmICghbXVzaWMpIHJldHVybjtcbiAgICBtdXNpYy5wYXVzZSgpO1xuICAgIG11c2ljLmN1cnJlbnRUaW1lID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTYW1wbGVNdXNpY1ZvbHVtZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2FtcGxlTXVzaWMgfHwgIXRoaXMuc2FtcGxlTXVzaWNDb25maWcpIHJldHVybjtcbiAgICB0aGlzLnNhbXBsZU11c2ljLnZvbHVtZSA9IHRoaXMuc2FtcGxlTXVzaWNWb2x1bWUodGhpcy5zYW1wbGVNdXNpY0NvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNhbXBsZU11c2ljVm9sdW1lKGNvbmZpZzogU2FtcGxlTXVzaWNDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb25maWcudm9sdW1lICogdGhpcy5tdXNpY1ZvbHVtZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAnc3F1YXJlJywgZ2FpblZhbHVlID0gMC4wNCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBpZiAoZnJlcSA8PSAwKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gZnJlcTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd2VlcChcbiAgICBmcm9tRnJlcTogbnVtYmVyLFxuICAgIHRvRnJlcTogbnVtYmVyLFxuICAgIGR1cmF0aW9uID0gMC4xNixcbiAgICB0eXBlOiBPc2NpbGxhdG9yVHlwZSA9ICd0cmlhbmdsZScsXG4gICAgZ2FpblZhbHVlID0gMC4wMyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgY29uc3Qgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7XG4gICAgY29uc3QgZ2FpbiA9IGN0eC5jcmVhdGVHYWluKCk7XG4gICAgb3NjaWxsYXRvci50eXBlID0gdHlwZTtcbiAgICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShmcm9tRnJlcSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKE1hdGgubWF4KDEsIHRvRnJlcSksIGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uKTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgLy8gQ2hlc3NpbWFscyB1c2VzIGdlbmVyYXRlZCBXZWJBdWRpbyBsYXllcnMgaW5zdGVhZCBvZiB0aGlyZC1wYXJ0eSBzYW1wbGVzLFxuICAvLyBhdm9pZGluZyBsaWNlbnNpbmcgcmlzayB3aGlsZSBrZWVwaW5nIGVhY2ggYW5pbWFsIHBvd2VyIGV4cHJlc3NpdmUuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyZWROb2lzZShcbiAgICBkdXJhdGlvbiA9IDAuMTIsXG4gICAgZ2FpblZhbHVlID0gMC4wMjUsXG4gICAgZmlsdGVyVHlwZTogQmlxdWFkRmlsdGVyVHlwZSA9ICdiYW5kcGFzcycsXG4gICAgZnJlcXVlbmN5ID0gOTAwLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBzYW1wbGVDb3VudCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY3R4LnNhbXBsZVJhdGUgKiBkdXJhdGlvbikpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGN0eC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlQ291bnQsIGN0eC5zYW1wbGVSYXRlKTtcbiAgICBjb25zdCBjaGFubmVsID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlQ291bnQ7IGkgKz0gMSkge1xuICAgICAgY29uc3QgZGVjYXkgPSAxIC0gaSAvIHNhbXBsZUNvdW50O1xuICAgICAgY2hhbm5lbFtpXSA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogZGVjYXk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0gY3R4LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuICAgIGNvbnN0IGZpbHRlciA9IGN0eC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBmaWx0ZXIudHlwZSA9IGZpbHRlclR5cGU7XG4gICAgZmlsdGVyLmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXF1ZW5jeTtcbiAgICBmaWx0ZXIuUS52YWx1ZSA9IGZpbHRlclR5cGUgPT09ICdsb3dwYXNzJyA/IDAuNyA6IDEuODtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEyKTtcbiAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uKTtcbiAgICBzb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuICAgIHNvdXJjZS5jb25uZWN0KGZpbHRlcik7XG4gICAgZmlsdGVyLmNvbm5lY3QoZ2Fpbik7XG4gICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgIHNvdXJjZS5zdGFydCgpO1xuICAgIHNvdXJjZS5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgdGhpcy5wYXVzZUZvckJhY2tncm91bmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVQYWdlSGlkZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLnBhdXNlRm9yQmFja2dyb3VuZCgpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlUGFnZVNob3cgPSAoKTogdm9pZCA9PiB7XG4gICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVVc2VyQWN0aXZhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpIHx8ICF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHJldHVybjtcbiAgICB0aGlzLnByZWxvYWRDaGVzc2ltYWxzU2FtcGxlcygpO1xuICAgIGlmICh0aGlzLnBhdXNlZFNhbXBsZU11c2ljKSB7XG4gICAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdm9pZCB0aGlzLndha2VBdWRpbygpO1xuICB9O1xuXG4gIHByaXZhdGUgcGF1c2VGb3JCYWNrZ3JvdW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU1lbG9keSkgdGhpcy5wYXVzZWRNZWxvZHkgPSB0aGlzLmFjdGl2ZU1lbG9keTtcbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpYyAmJiB0aGlzLnNhbXBsZU11c2ljQ29uZmlnKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdGhpcy5zYW1wbGVNdXNpY0NvbmZpZztcbiAgICAgIHRoaXMuc3RvcFNhbXBsZU11c2ljKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm11c2ljVGltZXIpIHtcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMubXVzaWNUaW1lcik7XG4gICAgICB0aGlzLm11c2ljVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTWVsb2R5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDAuMDAwMSwgMC4yKTtcbiAgICBpZiAodGhpcy5zdXNwZW5kVGltZXIpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zdXNwZW5kVGltZXIpO1xuICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdXNwZW5kVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICB2b2lkIHRoaXMuY29udGV4dD8uc3VzcGVuZCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfSwgMjYwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdW1lRnJvbUJhY2tncm91bmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3VzcGVuZFRpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc3VzcGVuZFRpbWVyKTtcbiAgICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpKSByZXR1cm47XG4gICAgY29uc3Qgc2FtcGxlTXVzaWMgPSB0aGlzLnBhdXNlZFNhbXBsZU11c2ljO1xuICAgIGlmIChzYW1wbGVNdXNpYykge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTYW1wbGVNdXNpYyhzYW1wbGVNdXNpYyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lbG9keSA9IHRoaXMucGF1c2VkTWVsb2R5O1xuICAgIGlmICghbWVsb2R5KSByZXR1cm47XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy5lbnN1cmVDb250ZXh0KCk7XG4gICAgYXdhaXQgdGhpcy5yZXN1bWVDb250ZXh0KGN0eCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4zNSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydE11c2ljKG1lbG9keSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdha2VBdWRpbygpOiBQcm9taXNlPEF1ZGlvQ29udGV4dD4ge1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgIGF3YWl0IHRoaXMucmVzdW1lQ29udGV4dChjdHgpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMTIpO1xuICAgIHJldHVybiBjdHg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3VtZUNvbnRleHQoY3R4OiBBdWRpb0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3R4LnN0YXRlID09PSAncnVubmluZycpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3R4LnJlc3VtZSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaU9TIHB1ZWRlIGV4aWdpciB1bmEgbnVldmEgaW50ZXJhY2Npw7NuIGRlbCB1c3VhcmlvOyBlbCBsaXN0ZW5lciBkZSBhY3RpdmFjacOzbiByZWludGVudGFyw6EuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmYWRlTWFzdGVyVG8odmFsdWU6IG51bWJlciwgc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQgfHwgIXRoaXMubWFzdGVyR2FpbikgcmV0dXJuO1xuICAgIGNvbnN0IGdhaW4gPSB0aGlzLm1hc3RlckdhaW4uZ2FpbjtcbiAgICBjb25zdCBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG4gICAgZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcbiAgICBnYWluLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgbm93LCBNYXRoLm1heCgwLjAxLCBzZWNvbmRzIC8gNCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RvY3VtZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQuaGlkZGVuO1xuICB9XG59XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '4.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '4.0.413';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC40MTMnO1xuIl19
|
|
@@ -58,7 +58,7 @@ import fixWebmDuration from 'fix-webm-duration';
|
|
|
58
58
|
* Current version of valtech-components.
|
|
59
59
|
* This is automatically updated during the publish process.
|
|
60
60
|
*/
|
|
61
|
-
const VERSION = '4.0.
|
|
61
|
+
const VERSION = '4.0.413';
|
|
62
62
|
|
|
63
63
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
64
64
|
let isRefreshing = false;
|
|
@@ -62979,9 +62979,11 @@ class RetroAudioService {
|
|
|
62979
62979
|
const volume = this.normalizeVolume(value);
|
|
62980
62980
|
this.musicVolume.set(volume);
|
|
62981
62981
|
this.writeSetting('val-mini-games-music-volume', `${volume}`);
|
|
62982
|
-
if (
|
|
62983
|
-
this.
|
|
62982
|
+
if (volume <= 0) {
|
|
62983
|
+
this.stopMusic();
|
|
62984
|
+
return;
|
|
62984
62985
|
}
|
|
62986
|
+
this.applySampleMusicVolume();
|
|
62985
62987
|
}
|
|
62986
62988
|
setSfxVolume(value) {
|
|
62987
62989
|
const volume = this.normalizeVolume(value);
|
|
@@ -63472,7 +63474,7 @@ class RetroAudioService {
|
|
|
63472
63474
|
const audio = new Audio(config.src);
|
|
63473
63475
|
audio.loop = true;
|
|
63474
63476
|
audio.preload = 'auto';
|
|
63475
|
-
audio.volume =
|
|
63477
|
+
audio.volume = this.sampleMusicVolume(config);
|
|
63476
63478
|
this.sampleMusic = audio;
|
|
63477
63479
|
this.sampleMusicConfig = config;
|
|
63478
63480
|
try {
|
|
@@ -63491,6 +63493,14 @@ class RetroAudioService {
|
|
|
63491
63493
|
music.pause();
|
|
63492
63494
|
music.currentTime = 0;
|
|
63493
63495
|
}
|
|
63496
|
+
applySampleMusicVolume() {
|
|
63497
|
+
if (!this.sampleMusic || !this.sampleMusicConfig)
|
|
63498
|
+
return;
|
|
63499
|
+
this.sampleMusic.volume = this.sampleMusicVolume(this.sampleMusicConfig);
|
|
63500
|
+
}
|
|
63501
|
+
sampleMusicVolume(config) {
|
|
63502
|
+
return Math.min(1, Math.max(0, config.volume * this.musicVolume()));
|
|
63503
|
+
}
|
|
63494
63504
|
async tone(freq, duration = 0.1, type = 'square', gainValue = 0.04) {
|
|
63495
63505
|
if (!this.canPlaySfx())
|
|
63496
63506
|
return;
|
|
@@ -63868,7 +63878,7 @@ class ChessimalsGameComponent {
|
|
|
63868
63878
|
}));
|
|
63869
63879
|
this.musicVolumeProps = computed(() => ({
|
|
63870
63880
|
control: this.musicVolumeControl,
|
|
63871
|
-
label: this.t('chessimalsMusicVolume')
|
|
63881
|
+
label: `${this.t('chessimalsMusicVolume')} · ${Math.round(this.audio.musicVolume() * 100)}%`,
|
|
63872
63882
|
min: 0,
|
|
63873
63883
|
max: 100,
|
|
63874
63884
|
step: 5,
|
|
@@ -63880,7 +63890,7 @@ class ChessimalsGameComponent {
|
|
|
63880
63890
|
}));
|
|
63881
63891
|
this.sfxVolumeProps = computed(() => ({
|
|
63882
63892
|
control: this.sfxVolumeControl,
|
|
63883
|
-
label: this.t('chessimalsSfxVolume')
|
|
63893
|
+
label: `${this.t('chessimalsSfxVolume')} · ${Math.round(this.audio.sfxVolume() * 100)}%`,
|
|
63884
63894
|
min: 0,
|
|
63885
63895
|
max: 100,
|
|
63886
63896
|
step: 5,
|
|
@@ -64108,12 +64118,8 @@ class ChessimalsGameComponent {
|
|
|
64108
64118
|
this.syncChessimalsMusicAfterSettingsChange();
|
|
64109
64119
|
}));
|
|
64110
64120
|
this.routeSubscription.add(this.sfxEnabledControl.valueChanges.subscribe((enabled) => this.audio.setSfxEnabled(enabled)));
|
|
64111
|
-
this.routeSubscription.add(this.musicVolumeControl.valueChanges.subscribe((volume) =>
|
|
64112
|
-
|
|
64113
|
-
if (volume > 0 && this.audio.musicEnabled())
|
|
64114
|
-
this.syncChessimalsMusicAfterSettingsChange();
|
|
64115
|
-
}));
|
|
64116
|
-
this.routeSubscription.add(this.sfxVolumeControl.valueChanges.subscribe((volume) => this.audio.setSfxVolume(volume / 100)));
|
|
64121
|
+
this.routeSubscription.add(this.musicVolumeControl.valueChanges.subscribe((volume) => this.setMusicVolume(volume)));
|
|
64122
|
+
this.routeSubscription.add(this.sfxVolumeControl.valueChanges.subscribe((volume) => this.setSfxVolume(volume)));
|
|
64117
64123
|
effect(() => {
|
|
64118
64124
|
const user = this.loggedInUser();
|
|
64119
64125
|
if (user) {
|
|
@@ -64168,6 +64174,10 @@ class ChessimalsGameComponent {
|
|
|
64168
64174
|
return normalized;
|
|
64169
64175
|
return `${normalized.slice(0, 4)}…${normalized.slice(-4)}`;
|
|
64170
64176
|
}
|
|
64177
|
+
rangeValueToNumber(value) {
|
|
64178
|
+
const raw = typeof value === 'number' ? value : value.upper ?? value.lower ?? 0;
|
|
64179
|
+
return Math.min(100, Math.max(0, Math.round(raw)));
|
|
64180
|
+
}
|
|
64171
64181
|
startGame() {
|
|
64172
64182
|
this.onlineSubscription?.unsubscribe();
|
|
64173
64183
|
this.openedOnlineGameId = undefined;
|
|
@@ -64423,6 +64433,22 @@ class ChessimalsGameComponent {
|
|
|
64423
64433
|
closeSettingsModal() {
|
|
64424
64434
|
this.isSettingsModalOpen.set(false);
|
|
64425
64435
|
}
|
|
64436
|
+
setMusicVolume(value) {
|
|
64437
|
+
const volume = this.rangeValueToNumber(value);
|
|
64438
|
+
if (this.musicVolumeControl.value !== volume) {
|
|
64439
|
+
this.musicVolumeControl.setValue(volume, { emitEvent: false });
|
|
64440
|
+
}
|
|
64441
|
+
this.audio.setMusicVolume(volume / 100);
|
|
64442
|
+
if (volume > 0 && this.audio.musicEnabled())
|
|
64443
|
+
this.syncChessimalsMusicAfterSettingsChange();
|
|
64444
|
+
}
|
|
64445
|
+
setSfxVolume(value) {
|
|
64446
|
+
const volume = this.rangeValueToNumber(value);
|
|
64447
|
+
if (this.sfxVolumeControl.value !== volume) {
|
|
64448
|
+
this.sfxVolumeControl.setValue(volume, { emitEvent: false });
|
|
64449
|
+
}
|
|
64450
|
+
this.audio.setSfxVolume(volume / 100);
|
|
64451
|
+
}
|
|
64426
64452
|
selectCell(position) {
|
|
64427
64453
|
const game = this.game();
|
|
64428
64454
|
if (this.projectionMode || game.status !== 'in_progress' || !this.canPlayCurrentTurn() || this.movingPiece() || this.moveSyncing())
|
|
@@ -65848,11 +65874,11 @@ class ChessimalsGameComponent {
|
|
|
65848
65874
|
<section class="chessimals-settings">
|
|
65849
65875
|
<article>
|
|
65850
65876
|
<val-toggle-input [props]="musicToggleProps()" />
|
|
65851
|
-
<val-range-input [props]="musicVolumeProps()" />
|
|
65877
|
+
<val-range-input [props]="musicVolumeProps()" (rangeChange)="setMusicVolume($event)" />
|
|
65852
65878
|
</article>
|
|
65853
65879
|
<article>
|
|
65854
65880
|
<val-toggle-input [props]="sfxToggleProps()" />
|
|
65855
|
-
<val-range-input [props]="sfxVolumeProps()" />
|
|
65881
|
+
<val-range-input [props]="sfxVolumeProps()" (rangeChange)="setSfxVolume($event)" />
|
|
65856
65882
|
</article>
|
|
65857
65883
|
</section>
|
|
65858
65884
|
</val-modal-layout>
|
|
@@ -66517,11 +66543,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
66517
66543
|
<section class="chessimals-settings">
|
|
66518
66544
|
<article>
|
|
66519
66545
|
<val-toggle-input [props]="musicToggleProps()" />
|
|
66520
|
-
<val-range-input [props]="musicVolumeProps()" />
|
|
66546
|
+
<val-range-input [props]="musicVolumeProps()" (rangeChange)="setMusicVolume($event)" />
|
|
66521
66547
|
</article>
|
|
66522
66548
|
<article>
|
|
66523
66549
|
<val-toggle-input [props]="sfxToggleProps()" />
|
|
66524
|
-
<val-range-input [props]="sfxVolumeProps()" />
|
|
66550
|
+
<val-range-input [props]="sfxVolumeProps()" (rangeChange)="setSfxVolume($event)" />
|
|
66525
66551
|
</article>
|
|
66526
66552
|
</section>
|
|
66527
66553
|
</val-modal-layout>
|