@tilde-nlp/ngx-translate 5.0.78 → 5.0.80
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/modules/tld-common/services/tld-translate-system-management.service.mjs +10 -5
- package/esm2022/lib/modules/tld-text/services/tld-translate-text.service.mjs +52 -50
- package/esm2022/lib/modules/tld-tooltip/translation-system-picker/dropdown-body/translation-system-picker-dropdown-body.component.mjs +2 -2
- package/fesm2022/tilde-nlp-ngx-translate.mjs +61 -54
- package/fesm2022/tilde-nlp-ngx-translate.mjs.map +1 -1
- package/lib/modules/tld-common/services/tld-translate-system-management.service.d.ts +1 -1
- package/lib/modules/tld-text/services/tld-translate-text.service.d.ts +1 -1
- package/package.json +1 -1
- package/src/assets/webcomponent/tilde-translate-box.js +1 -1
|
@@ -88,6 +88,7 @@ export class TldTranslateSystemManagementService {
|
|
|
88
88
|
this.changeSystem(systemId, retranslate);
|
|
89
89
|
}
|
|
90
90
|
showSameLanguages(lang) {
|
|
91
|
+
this.activeSystem.sourceLanguage = AUTO_LANGUAGE_DETECTION_KEY;
|
|
91
92
|
this.activeSystem.detectedLanguage = lang;
|
|
92
93
|
this.activeSystem.domain = '';
|
|
93
94
|
this.activeSystem.includesTerminology = false;
|
|
@@ -192,7 +193,7 @@ export class TldTranslateSystemManagementService {
|
|
|
192
193
|
swapSystemLanguages() {
|
|
193
194
|
this.changeLanguage(this.targetLanguage, this.sourceLanguage);
|
|
194
195
|
}
|
|
195
|
-
changeSystem(languageId, retranslate = true) {
|
|
196
|
+
changeSystem(languageId, retranslate = true, isRecentSystem) {
|
|
196
197
|
if (this.activeSystem?.languageId === languageId) {
|
|
197
198
|
return;
|
|
198
199
|
}
|
|
@@ -201,7 +202,9 @@ export class TldTranslateSystemManagementService {
|
|
|
201
202
|
for (const system of this.systems) {
|
|
202
203
|
if (system.languageId === languageId) {
|
|
203
204
|
selectedSystem = system;
|
|
204
|
-
|
|
205
|
+
if (!isRecentSystem) {
|
|
206
|
+
selectedSystem.detectedLanguage = this.activeSystem?.detectedLanguage ?? null;
|
|
207
|
+
}
|
|
205
208
|
break;
|
|
206
209
|
}
|
|
207
210
|
}
|
|
@@ -218,8 +221,10 @@ export class TldTranslateSystemManagementService {
|
|
|
218
221
|
}
|
|
219
222
|
this.targetLangList = this.createLangList(this.systems, selectedSystem?.sourceLanguage);
|
|
220
223
|
this.targetLanguage = selectedSystem?.targetLanguage;
|
|
221
|
-
this.sourceLanguage = this.activeSystem?.detectedLanguage ? AUTO_LANGUAGE_DETECTION_KEY : selectedSystem.sourceLanguage;
|
|
222
|
-
|
|
224
|
+
this.sourceLanguage = this.activeSystem?.detectedLanguage && !isRecentSystem ? AUTO_LANGUAGE_DETECTION_KEY : selectedSystem.sourceLanguage;
|
|
225
|
+
if (!isRecentSystem) {
|
|
226
|
+
selectedSystem.detectedLanguage = this.activeSystem?.detectedLanguage ?? null;
|
|
227
|
+
}
|
|
223
228
|
this.activeSystem = selectedSystem;
|
|
224
229
|
this.getActiveVendorsAndDomains();
|
|
225
230
|
this.onActiveSystemChange(retranslate);
|
|
@@ -386,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
386
391
|
providedIn: 'root'
|
|
387
392
|
}]
|
|
388
393
|
}], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i2.TldTranslateConfigService }, { type: i1.SystemService }]; } });
|
|
389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1zeXN0ZW0tbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXN5c3RlbS1tYW5hZ2VtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9DLGtDQUFrQyxFQUFnQixVQUFVLEVBQWlDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEssT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBTTFGLE1BQU0sT0FBTyxtQ0FBbUM7SUE4QzNCO0lBQ0E7SUFDQTtJQS9DbkIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFVO0lBQ3RCLGdCQUFnQixDQUFXO0lBRTNCLDBCQUEwQixHQUFHLHVDQUF1QyxDQUFDO0lBRTdELG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFFdkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hC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LEVBQUUsbUJBQTRCO1FBQ3pMLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxDQUFBO0lBQ2xILENBQUM7d0dBcGJVLG1DQUFtQzs0R0FBbkMsbUNBQW1DLGNBRmxDLE1BQU07OzRGQUVQLG1DQUFtQztrQkFIL0MsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2ZURhdGEsIEFsZXJ0U2VydmljZSwgRG9tYWluLCBMQVNUX1VTRURfU1lTVEVNX0xPQ0FMX1NUT1JBR0VfS0VZLCBMYW5nTGlzdEl0ZW0sIFNvcnRIZWxwZXIsIFN5c3RlbSwgU3lzdGVtU2VydmljZSwgVmVuZG9yIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi90bGQtdHJhbnNsYXRlLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIHtcclxuICBub1N5c3RlbXNFcnJvciA9IGZhbHNlO1xyXG4gIHN5c3RlbXM6IFN5c3RlbVtdID0gW107XHJcbiAgd2lkZ2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBzeXNMaXN0ID0gbmV3IFJlcGxheVN1YmplY3Q8U3lzdGVtW10+KDEpO1xyXG4gIGFjdGl2ZURvbWFpbiE6IERvbWFpbjtcclxuICBjYW5Td2FwTGFuZ3VhZ2VzITogYm9vbGVhbjtcclxuXHJcbiAgZGVmYXVsdEVycm9yVHJhbnNsYXRpb25LZXkgPSAnVExEX1RSQU5TTEFURS5FUlJPUl9OT19TWVNURU1TX0xPQURFRCc7XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkU3lzdGVtc1N1YmplY3QgPSBuZXcgU3ViamVjdDxTeXN0ZW1bXT4oKTtcclxuXHJcbiAgZ2V0IGFjdGl2ZVZlbmRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN5c3RlbS52ZW5kb3IgfHwgdGhpcy5kZWZhdWx0VmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHRWZW5kb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5kZWZhdWx0VmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHREb21haW5zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuZGVmYXVsdERvbWFpbnMgYXMgc3RyaW5nW107XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdFRhcmdldExhbmd1YWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuZGVmYXVsdFRhcmdldExhbmd1YWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVTeXN0ZW0hOiBTeXN0ZW07XHJcbiAgcHJpdmF0ZSBkb21haW5zOiBEb21haW5bXSA9IFtdO1xyXG4gIHByaXZhdGUgdmVuZG9yczogVmVuZG9yW10gPSBbXTtcclxuICBwcml2YXRlIHNvdXJjZUxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHByaXZhdGUgdGFyZ2V0TGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzb3VyY2VMYW5nTGlzdDogTGFuZ0xpc3RJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIHRhcmdldExhbmdMaXN0OiBMYW5nTGlzdEl0ZW1bXSA9IFtdO1xyXG5cclxuICAvLyNyZWdpb24gUmVjZW50IHN5c3RlbSB2YXJpYWJsZXNcclxuICAvLyBQb3NzaWJseSBmcm9tIGNvbmZpZ1xyXG4gIGdldCByZWNlbnRTeXN0ZW1zTWF4Q291bnQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLm1heFJlY2VudFN5c3RlbUNvdW50IGFzIG51bWJlcjsgfVxyXG4gIHByaXZhdGUgcmVjZW50U3lzdGVtczogU3lzdGVtW10gPSBbXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWNlbnRTeXN0ZW1LZXkgPSBcInJlY2VudFN5c3RlbXNcIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZTogQmVoYXZpb3JTdWJqZWN0PEFjdGl2ZURhdGE+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBY3RpdmVEYXRhPig8YW55Pm51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnQ6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgKiBUaGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgd2hlbiBhdXRvIGxhbmd1YWdlIGRldGVjdGlvbiB3YXMgY2hvc2VuLlxyXG4gICovXHJcbiAgZW5hYmxlTGFuZ3VhZ2VEZXRlY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcbiAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuc291cmNlTGFuZ3VhZ2UsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBUaGlzIG1ldGhvZCBpcyBiZWluZyB1c2VkIHRvIHNldCBkZXRlY3RlZCBsYW5ndWFnZS5cclxuICAqIEFsc28sIHdoZW4gbGFuZ3VhZ2Ugd2FzIGRldGVjdGVkIGFuZCB3ZSB3YW50IHRvIGNsZWFyIHNvdXJjZSB0ZXh0LCB0aGlzIG1ldGhvZCBhbHNvIGlzIGJlaW5nIGNhbGxlZC5cclxuICAqL1xyXG4gIHNldERldGVjdGVkTGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZykge1xyXG4gICAgaWYgKGxhbmdDb2RlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgICAgdGhpcy5lbmFibGVMYW5ndWFnZURldGVjdGlvbigpO1xyXG4gICAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UobGFuZ0NvZGUsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIHRydWUsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3lzdGVtcygpOiBTeXN0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1zO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlTGFuZ3VhZ2Uoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nLCByZXRyYW5zbGF0ZT86IGJvb2xlYW4sIGlzRGV0ZWN0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCgoc291cmNlICE9PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHx8ICh0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gc291cmNlKSkgJiYgIWlzRGV0ZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBzb3VyY2U7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBudWxsO1xyXG4gICAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtSWQgPSB0aGlzLmZpbmRDb3JyZWN0U3lzdGVtKHNvdXJjZSwgdGFyZ2V0LCB0aGlzLmFjdGl2ZVN5c3RlbT8uZG9tYWluKTtcclxuXHJcbiAgICBpZiAoIXN5c3RlbUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZVN5c3RlbShzeXN0ZW1JZCwgcmV0cmFuc2xhdGUpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NhbWVMYW5ndWFnZXMobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID0gbGFuZztcclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRvbWFpbiA9ICcnO1xyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0uaW5jbHVkZXNUZXJtaW5vbG9neSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kb21haW5zID0gW107XHJcbiAgICB0aGlzLnZlbmRvcnMgPSBbXTtcclxuICAgIHRoaXMub25BY3RpdmVTeXN0ZW1DaGFuZ2UoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZS5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZVN5c3RlbU9iaigpOiBTeXN0ZW0ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3lzdGVtO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlVmVuZG9yc0FuZERvbWFpbnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuc291cmNlTGFuZ3VhZ2UgfHwgIXRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmVuZG9yczogVmVuZG9yW10gPSBbXTtcclxuICAgIGNvbnN0IGRvbWFpbnM6IERvbWFpbltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgIGlmICghKHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gKHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID8/IHRoaXMuc291cmNlTGFuZ3VhZ2UpICYmIHN5c3RlbS50YXJnZXRMYW5ndWFnZSA9PT0gdGhpcy50YXJnZXRMYW5ndWFnZSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICBjb25zdCBkb21haW46IERvbWFpbiA9IHtcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgICB0aXRsZTogc3lzdGVtLmRvbWFpbiBhcyBzdHJpbmdcclxuICAgICAgfTtcclxuICAgICAgZG9tYWlucy5wdXNoKGRvbWFpbik7XHJcbiAgICAgIGNvbnN0IHZlbmRvcjogVmVuZG9yID0ge1xyXG4gICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICAgIHRpdGxlOiBzeXN0ZW0udmVuZG9yXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdmVuZG9ycy5pbmNsdWRlcyh2ZW5kb3IpKSB7XHJcbiAgICAgICAgdmVuZG9ycy5wdXNoKHZlbmRvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb21haW4ubGFuZ3VhZ2VJZCA9PT0gdGhpcy5hY3RpdmVTeXN0ZW0ubGFuZ3VhZ2VJZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRG9tYWluID0gZG9tYWluO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kb21haW5zID0gZG9tYWlucztcclxuICAgIHRoaXMudmVuZG9ycyA9IHZlbmRvcnM7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0TGFzdFVzZWRTeXN0ZW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMQVNUX1VTRURfU1lTVEVNX0xPQ0FMX1NUT1JBR0VfS0VZKSBhcyBzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRVbmlxdWVMYW5ndWFnZXMobGlzdDogTGFuZ0xpc3RJdGVtW10pOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWxpc3QpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGxpc3QuZm9yRWFjaCgobGFuZykgPT4ge1xyXG4gICAgICBjb25zdCBsYW5nVGl0bGUgPSBsYW5nLmxhbmc7XHJcbiAgICAgIGNvbnN0IGl4ID0gdGl0bGVzLmluZGV4T2YobGFuZ1RpdGxlIGFzIHN0cmluZyk7XHJcbiAgICAgIGlmIChpeCA9PSAtMSkge1xyXG4gICAgICAgIHRpdGxlcy5wdXNoKGxhbmdUaXRsZSBhcyBzdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGl0bGVzO1xyXG4gIH1cclxuXHJcbiAgaW5pdChkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0U3lzdGVtTGlzdCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IFN5c3RlbVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gcmVzO1xyXG4gICAgICAgIGlmIChyZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIHRoaXMubG9hZGVkU3lzdGVtc1N1YmplY3QubmV4dChyZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN5c3RlbUV4aXN0cyhkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCwgdGhpcy5zeXN0ZW1zKSAmJiBkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCAhPT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgICBkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9IHRoaXMuc3lzdGVtc1swXT8ubGFuZ3VhZ2VJZDtcclxuICAgICAgICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICAgICAgICBjb25zdCB2ZW5kb3IgPSBzeXN0ZW0udmVuZG9yO1xyXG4gICAgICAgICAgICBpZiAodmVuZG9yID09PSB0aGlzLmRlZmF1bHRWZW5kb3IpIHtcclxuICAgICAgICAgICAgICBkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9IHN5c3RlbS5sYW5ndWFnZUlkO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHRoaXMuZGVmYXVsdFRhcmdldExhbmd1YWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNlbnRTeXN0ZW1BcnJheSgpO1xyXG4gICAgICAgIHRoaXMuc291cmNlTGFuZ0xpc3QgPSB0aGlzLmNyZWF0ZUxhbmdMaXN0KHRoaXMuc3lzdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VTeXN0ZW0oZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQpO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3lzTGlzdC5uZXh0KHRoaXMuc3lzdGVtcyk7XHJcbiAgICAgICAgdGhpcy5ub1N5c3RlbXNFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICAgICAgdGhpcy5lbmFibGVMYW5ndWFnZURldGVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMubm9TeXN0ZW1zRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWxlcnQuZXJyb3IodGhpcy5kZWZhdWx0RXJyb3JUcmFuc2xhdGlvbktleSwgZXJyb3IpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2FkZWRTeXN0ZW1zKCk6IE9ic2VydmFibGU8U3lzdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZFN5c3RlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFzdFVzZWRTeXN0ZW0oc3lzdGVtSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExBU1RfVVNFRF9TWVNURU1fTE9DQUxfU1RPUkFHRV9LRVksIHN5c3RlbUlkKTtcclxuICB9XHJcblxyXG4gIHN3YXBTeXN0ZW1MYW5ndWFnZXMoKSB7XHJcbiAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIHRoaXMuc291cmNlTGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU3lzdGVtKGxhbmd1YWdlSWQ6IHN0cmluZywgcmV0cmFuc2xhdGUgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVTeXN0ZW0/Lmxhbmd1YWdlSWQgPT09IGxhbmd1YWdlSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzZWxlY3RlZFN5c3RlbSE6IFN5c3RlbTtcclxuXHJcbiAgICBpZiAoIWxhbmd1YWdlSWQ/LmluY2x1ZGVzKEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkpIHtcclxuICAgICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgICAgaWYgKHN5c3RlbS5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZFN5c3RlbSA9IHN5c3RlbTtcclxuICAgICAgICAgIHNlbGVjdGVkU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSA/PyBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFN5c3RlbSA9IHRoaXMuY3JlYXRlU3lzdGVtKCcnLCBsYW5ndWFnZUlkLCBsYW5ndWFnZUlkLCBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVksIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsICcnLCB0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSA/PyBudWxsLCBmYWxzZSk7XHJcblxyXG4gICAgICB0aGlzLnRhcmdldExhbmdMaXN0ID0gdGhpcy5jcmVhdGVMYW5nTGlzdCh0aGlzLnN5c3RlbXMsIEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSk7XHJcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPSB0aGlzLnRhcmdldExhbmd1YWdlO1xyXG4gICAgICB0aGlzLnNvdXJjZUxhbmd1YWdlID0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZO1xyXG4gICAgICB0aGlzLmFjdGl2ZVN5c3RlbSA9IHNlbGVjdGVkU3lzdGVtO1xyXG4gICAgICB0aGlzLmdldEFjdGl2ZVZlbmRvcnNBbmREb21haW5zKCk7XHJcbiAgICAgIHRoaXMub25BY3RpdmVTeXN0ZW1DaGFuZ2UocmV0cmFuc2xhdGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50YXJnZXRMYW5nTGlzdCA9IHRoaXMuY3JlYXRlTGFuZ0xpc3QodGhpcy5zeXN0ZW1zLCBzZWxlY3RlZFN5c3RlbT8uc291cmNlTGFuZ3VhZ2UpO1xyXG4gICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHNlbGVjdGVkU3lzdGVtPy50YXJnZXRMYW5ndWFnZTtcclxuICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSB0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSA/IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSA6IHNlbGVjdGVkU3lzdGVtLnNvdXJjZUxhbmd1YWdlO1xyXG4gICAgc2VsZWN0ZWRTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID8/IG51bGw7XHJcbiAgICB0aGlzLmFjdGl2ZVN5c3RlbSA9IHNlbGVjdGVkU3lzdGVtO1xyXG4gICAgdGhpcy5nZXRBY3RpdmVWZW5kb3JzQW5kRG9tYWlucygpO1xyXG5cclxuICAgIHRoaXMub25BY3RpdmVTeXN0ZW1DaGFuZ2UocmV0cmFuc2xhdGUpO1xyXG5cclxuICAgIHRoaXMuc2V0TGFzdFVzZWRTeXN0ZW0oc2VsZWN0ZWRTeXN0ZW0ubGFuZ3VhZ2VJZCk7XHJcbiAgfVxyXG5cclxuICBzeXN0ZW1FeGlzdHMobGFuZ3VhZ2VJZDogc3RyaW5nLCBzeXN0ZW1MaXN0OiBTeXN0ZW1bXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3lzdGVtcyA9IHN5c3RlbUxpc3QgPz8gdGhpcy5zeXN0ZW1zO1xyXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2Ygc3lzdGVtcykge1xyXG4gICAgICBpZiAoc3lzdGVtLmxhbmd1YWdlSWQgPT09IGxhbmd1YWdlSWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzVGVybWlub2xvZ3lTdXBwb3J0ZWQoc3lzdGVtOiBTeXN0ZW0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzeXN0ZW0uaW5jbHVkZXNUZXJtaW5vbG9neSBhcyBib29sZWFuO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlTGFuZ3VhZ2Uoc291cmNlTGFuZ3VhZ2VDb2RlOiBzdHJpbmcpIHtcclxuICAgIGlmIChzb3VyY2VMYW5ndWFnZUNvZGUgPT09IHRoaXMuYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2Uoc291cmNlTGFuZ3VhZ2VDb2RlLCB0aGlzLmFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZSwgdGhpcy5hY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVGFyZ2V0TGFuZ3VhZ2UodGFyZ2V0TGFuZ3VhZ2VDb2RlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRhcmdldExhbmd1YWdlQ29kZSA9PT0gdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2VDb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UgPyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgOiB0aGlzLmFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2VDb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUmVjZW50U3lzdGVtQXJyYXkoKSB7XHJcbiAgICBsZXQgc3lzdGVtSWRBcnJheTogc3RyaW5nW107XHJcbiAgICBjb25zdCByZWNlbnRTeXN0ZW1BcnJheTogU3lzdGVtW10gPSBbXTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBzeXN0ZW1JZEFycmF5ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnJlY2VudFN5c3RlbUtleSkgPz8gXCJbXVwiKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3lzdGVtSWRBcnJheS5mb3JFYWNoKChsYW5ndWFnZUlkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3lzdGVtID0gdGhpcy5zeXN0ZW1zLmZpbmQoc3lzdGVtID0+IHN5c3RlbS5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKTtcclxuICAgICAgaWYgKGV4aXN0aW5nU3lzdGVtICYmICF0aGlzLnJlY2VudFN5c3RlbXMuaW5jbHVkZXMoZXhpc3RpbmdTeXN0ZW0pKSB7XHJcbiAgICAgICAgcmVjZW50U3lzdGVtQXJyYXkucHVzaChleGlzdGluZ1N5c3RlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVjZW50U3lzdGVtcyA9IHJlY2VudFN5c3RlbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRUb1JlY2VudFN5c3RlbUFycmF5KHN5c3RlbTogU3lzdGVtKSB7XHJcbiAgICBjb25zdCBleGlzdGluZ1N5c3RlbSA9IHRoaXMucmVjZW50U3lzdGVtcy5maW5kKGV4aXN0aW5nID0+IGV4aXN0aW5nLmxhbmd1YWdlSWQgPT09IHN5c3RlbS5sYW5ndWFnZUlkKTtcclxuICAgIC8vIGlmIHN5c3RlbSBhbHJlYWR5IGluIGxpc3QsIHB1dCBpdCB0byBmaXJzdCBwb3NpdGlvbi4gSWYgaXggMCwgbm8gYWN0aW9uIHJlcXVpcmVkIHNpbmNlIGxhdGVzdCBzeXN0ZW0gaXMgYWxyZWFkeSBmaXJzdC5cclxuICAgIGlmIChleGlzdGluZ1N5c3RlbSkge1xyXG4gICAgICBjb25zdCBzeXN0ZW1JeEluUmVjZW50TGlzdCA9IHRoaXMucmVjZW50U3lzdGVtcy5pbmRleE9mKGV4aXN0aW5nU3lzdGVtKTtcclxuICAgICAgaWYgKHN5c3RlbUl4SW5SZWNlbnRMaXN0ID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2Uoc3lzdGVtSXhJblJlY2VudExpc3QsIDEpO1xyXG4gICAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2UoMCwgMCwgc3lzdGVtKTtcclxuICAgICAgICAvLyByZXNldGluZyBkZXRlY3RlZExhbmd1YWdlLCBzbyAoLSBEZXRlY3RlZCkgbGFiZWwgZG9lc250IGFwcGVhcnMgaWYgd2Ugc2VsZWN0IGxhbmd1YWdlIGRpcmVjdGlvbiBmcm9tIHJlY2VudCBzeXN0ZW0gbGlzdFxyXG4gICAgICAgIHN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiBsaXN0IHRvbyBsb25nLCByZW1vdmUgbGFzdCAob2xkZXN0IGVsZW1lbnQpXHJcbiAgICAgIHdoaWxlICh0aGlzLnJlY2VudFN5c3RlbXMubGVuZ3RoID49IHRoaXMucmVjZW50U3lzdGVtc01heENvdW50KSB7XHJcbiAgICAgICAgdGhpcy5yZWNlbnRTeXN0ZW1zLnBvcCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJlY2VudFN5c3RlbXMuc3BsaWNlKDAsIDAsIHN5c3RlbSk7XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJlY2VudFN5c3RlbUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5yZWNlbnRTeXN0ZW1zLm1hcChzeXN0ZW0gPT4gc3lzdGVtLmxhbmd1YWdlSWQpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhblN3YXBTeXN0ZW1MYW5ndWFnZXMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbGFuZ1N3YXBBY3RpdmUgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnN5c3RlbXMpIHtcclxuICAgICAgY29uc3Qgc3lzdGVtID0gZWxlbWVudDtcclxuICAgICAgaWYgKHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PSB0aGlzLnRhcmdldExhbmd1YWdlICYmIHN5c3RlbS50YXJnZXRMYW5ndWFnZSA9PSB0aGlzLnNvdXJjZUxhbmd1YWdlKSB7XHJcbiAgICAgICAgbGFuZ1N3YXBBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhblN3YXBMYW5ndWFnZXMgPSBsYW5nU3dhcEFjdGl2ZTtcclxuICAgIHJldHVybiBsYW5nU3dhcEFjdGl2ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTGFuZ0xpc3Qoc3lzdGVtczogU3lzdGVtW10sIHNyY0xhbmdDb2RlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBsYW5nTGlzdEl0ZW1BcnJheTogTGFuZ0xpc3RJdGVtW10gPSBbXTtcclxuICAgIHN5c3RlbXMuZm9yRWFjaCgoc3lzdGVtKSA9PiB7XHJcbiAgICAgIGlmICghc3JjTGFuZ0NvZGUgfHwgc3JjTGFuZ0NvZGUgPT09IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSB8fCBzcmNMYW5nQ29kZSA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgbGFuZ0xpc3RJdGVtQXJyYXkucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgbGFuZzogc3JjTGFuZ0NvZGUgPyBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgOiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICAgICAgICB2ZW5kb3I6IHN5c3RlbS52ZW5kb3JcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGxhbmdMaXN0SXRlbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ29ycmVjdFN5c3RlbShzb3VyY2VMYW5ndWFnZTogc3RyaW5nLCB0YXJnZXRMYW5ndWFnZTogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3lzdGVtcyA9IHRoaXMuc3lzdGVtcztcclxuICAgIFxyXG4gICAgaWYgKHNvdXJjZUxhbmd1YWdlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHRhcmdldExhbmd1YWdlO1xyXG4gICAgICB0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSA9IHRhcmdldExhbmd1YWdlO1xyXG4gICAgICByZXR1cm4gYCR7QVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZfS0ke3RhcmdldExhbmd1YWdlfWBcclxuICAgIH0gXHJcblxyXG4gICAgY29uc3Qgc3lzdGVtc0Zvckxhbmd1YWdlUGFpciA9IHN5c3RlbXMuZmlsdGVyKHN5c3RlbSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHNvdXJjZUxhbmd1YWdlICYmIHRhcmdldExhbmd1YWdlID09PSBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gICAgLy8gSWRlYWxseSB0aGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBpdCBpcyBwb3NzaWJsZS5cclxuICAgIGlmIChzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zeXN0ZW1zLmZpbmQoc3lzdGVtID0+IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gc291cmNlTGFuZ3VhZ2UpPy5sYW5ndWFnZUlkIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yID0gc3lzdGVtc0Zvckxhbmd1YWdlUGFpci5maWx0ZXIoc3lzdGVtID0+IChzeXN0ZW0udmVuZG9yIHx8IHRoaXMuZGVmYXVsdFZlbmRvcikgPT09IHRoaXMuZGVmYXVsdFZlbmRvcik7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IgPSBzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IuZmlsdGVyKHN5c3RlbSA9PiBkb21haW4gPyBzeXN0ZW0uZG9tYWluID09PSBkb21haW4gOiB0aGlzLmRlZmF1bHREb21haW5zLmluY2x1ZGVzKHN5c3RlbS5kb21haW4gYXMgc3RyaW5nKSk7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0RG9tYWluLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3I7XHJcbiAgICB9XHJcbiAgICBTb3J0SGVscGVyLnNvcnRCeUFycmF5KHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpbiwgdGhpcy5kZWZhdWx0RG9tYWlucywgXCJkb21haW5cIik7XHJcblxyXG4gICAgcmV0dXJuIHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpblswXS5sYW5ndWFnZUlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFjdGl2ZVN5c3RlbUNoYW5nZShyZXRyYW5zbGF0ZSA9IHRydWUpIHtcclxuICAgIGNvbnN0IHN5c3RlbTogU3lzdGVtID0gdGhpcy5hY3RpdmVTeXN0ZW07XHJcbiAgICBjb25zdCB2ZW5kb3IgPSB0aGlzLmFjdGl2ZVN5c3RlbS52ZW5kb3I7XHJcblxyXG4gICAgaWYgKHRoaXMuc291cmNlTGFuZ3VhZ2UgIT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSAmJiAhc3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlICYmIHN5c3RlbS5kb21haW4/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFkZFRvUmVjZW50U3lzdGVtQXJyYXkoc3lzdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGl2ZS5uZXh0KHtcclxuICAgICAgc291cmNlTGFuZzoge1xyXG4gICAgICAgIGxhbmc6IHRoaXMuc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluLFxyXG4gICAgICAgIHZlbmRvcjogdmVuZG9yLFxyXG4gICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICB9LFxyXG4gICAgICBzb3VyY2VMYW5nTGlzdDogdGhpcy5zb3VyY2VMYW5nTGlzdCxcclxuICAgICAgc3lzdGVtSWQ6IHN5c3RlbS5pZCxcclxuICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgIHRhcmdldExhbmc6IHtcclxuICAgICAgICBkb21haW46IHN5c3RlbS5kb21haW4gPz8gdGhpcy5hY3RpdmVEb21haW4udGl0bGUsXHJcbiAgICAgICAgdmVuZG9yOiB2ZW5kb3IsXHJcbiAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgbGFuZzogdGhpcy50YXJnZXRMYW5ndWFnZVxyXG4gICAgICB9LFxyXG4gICAgICB0YXJnZXRMYW5nTGlzdDogdGhpcy50YXJnZXRMYW5nTGlzdCxcclxuICAgICAgdmVuZG9yczogdGhpcy52ZW5kb3JzLFxyXG4gICAgICBkb21haW5zOiB7IGFjdGl2ZTogdGhpcy5hY3RpdmVEb21haW4sIGRvbWFpbnM6IHRoaXMuZG9tYWlucyB9LFxyXG4gICAgICBzd2FwTGFuZ0FjdGl2ZTogdGhpcy5jYW5Td2FwU3lzdGVtTGFuZ3VhZ2VzKCksXHJcbiAgICAgIHN5c3RlbTogc3lzdGVtLFxyXG4gICAgICByZXRyYW5zbGF0ZTogcmV0cmFuc2xhdGUsXHJcbiAgICAgIHJlY2VudFN5c3RlbXM6IHRoaXMucmVjZW50U3lzdGVtc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVN5c3RlbShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZywgbGFuZ3VhZ2VJZDogc3RyaW5nLCBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLCB0YXJnZXRMYW5ndWFnZTogc3RyaW5nLCB2ZW5kb3I6IHN0cmluZywgZGV0ZWN0ZWRMYW5ndWFnZTogc3RyaW5nLCBpbmNsdWRlc1Rlcm1pbm9sb2d5OiBib29sZWFuKTogU3lzdGVtIHtcclxuICAgIHJldHVybiB7IGRvbWFpbiwgaWQsIGxhbmd1YWdlSWQsIHNvdXJjZUxhbmd1YWdlLCB0YXJnZXRMYW5ndWFnZSwgdmVuZG9yLCBkZXRlY3RlZExhbmd1YWdlLCBpbmNsdWRlc1Rlcm1pbm9sb2d5IH1cclxuICB9XHJcbn1cclxuIl19
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1zeXN0ZW0tbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXN5c3RlbS1tYW5hZ2VtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9DLGtDQUFrQyxFQUFnQixVQUFVLEVBQWlDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEssT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBTTFGLE1BQU0sT0FBTyxtQ0FBbUM7SUE4QzNCO0lBQ0E7SUFDQTtJQS9DbkIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFVO0lBQ3RCLGdCQUFnQixDQUFXO0lBRTNCLDBCQUEwQixHQUFHLHVDQUF1QyxDQUFDO0lBRTdELG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFFdkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hC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eEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLEVBQVUsRUFBRSxVQUFrQixFQUFFLGNBQXNCLEVBQUUsY0FBc0IsRUFBRSxNQUFjLEVBQUUsZ0JBQXdCLEVBQUUsbUJBQTRCO1FBQ3pMLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxDQUFBO0lBQ2xILENBQUM7d0dBN2JVLG1DQUFtQzs0R0FBbkMsbUNBQW1DLGNBRmxDLE1BQU07OzRGQUVQLG1DQUFtQztrQkFIL0MsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2ZURhdGEsIEFsZXJ0U2VydmljZSwgRG9tYWluLCBMQVNUX1VTRURfU1lTVEVNX0xPQ0FMX1NUT1JBR0VfS0VZLCBMYW5nTGlzdEl0ZW0sIFNvcnRIZWxwZXIsIFN5c3RlbSwgU3lzdGVtU2VydmljZSwgVmVuZG9yIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi90bGQtdHJhbnNsYXRlLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIHtcclxuICBub1N5c3RlbXNFcnJvciA9IGZhbHNlO1xyXG4gIHN5c3RlbXM6IFN5c3RlbVtdID0gW107XHJcbiAgd2lkZ2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBzeXNMaXN0ID0gbmV3IFJlcGxheVN1YmplY3Q8U3lzdGVtW10+KDEpO1xyXG4gIGFjdGl2ZURvbWFpbiE6IERvbWFpbjtcclxuICBjYW5Td2FwTGFuZ3VhZ2VzITogYm9vbGVhbjtcclxuXHJcbiAgZGVmYXVsdEVycm9yVHJhbnNsYXRpb25LZXkgPSAnVExEX1RSQU5TTEFURS5FUlJPUl9OT19TWVNURU1TX0xPQURFRCc7XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkU3lzdGVtc1N1YmplY3QgPSBuZXcgU3ViamVjdDxTeXN0ZW1bXT4oKTtcclxuXHJcbiAgZ2V0IGFjdGl2ZVZlbmRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN5c3RlbS52ZW5kb3IgfHwgdGhpcy5kZWZhdWx0VmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHRWZW5kb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5kZWZhdWx0VmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHREb21haW5zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuZGVmYXVsdERvbWFpbnMgYXMgc3RyaW5nW107XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdFRhcmdldExhbmd1YWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuZGVmYXVsdFRhcmdldExhbmd1YWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVTeXN0ZW0hOiBTeXN0ZW07XHJcbiAgcHJpdmF0ZSBkb21haW5zOiBEb21haW5bXSA9IFtdO1xyXG4gIHByaXZhdGUgdmVuZG9yczogVmVuZG9yW10gPSBbXTtcclxuICBwcml2YXRlIHNvdXJjZUxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHByaXZhdGUgdGFyZ2V0TGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzb3VyY2VMYW5nTGlzdDogTGFuZ0xpc3RJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIHRhcmdldExhbmdMaXN0OiBMYW5nTGlzdEl0ZW1bXSA9IFtdO1xyXG5cclxuICAvLyNyZWdpb24gUmVjZW50IHN5c3RlbSB2YXJpYWJsZXNcclxuICAvLyBQb3NzaWJseSBmcm9tIGNvbmZpZ1xyXG4gIGdldCByZWNlbnRTeXN0ZW1zTWF4Q291bnQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLm1heFJlY2VudFN5c3RlbUNvdW50IGFzIG51bWJlcjsgfVxyXG4gIHByaXZhdGUgcmVjZW50U3lzdGVtczogU3lzdGVtW10gPSBbXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWNlbnRTeXN0ZW1LZXkgPSBcInJlY2VudFN5c3RlbXNcIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZTogQmVoYXZpb3JTdWJqZWN0PEFjdGl2ZURhdGE+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBY3RpdmVEYXRhPig8YW55Pm51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnQ6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgKiBUaGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgd2hlbiBhdXRvIGxhbmd1YWdlIGRldGVjdGlvbiB3YXMgY2hvc2VuLlxyXG4gICovXHJcbiAgZW5hYmxlTGFuZ3VhZ2VEZXRlY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcbiAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuc291cmNlTGFuZ3VhZ2UsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBUaGlzIG1ldGhvZCBpcyBiZWluZyB1c2VkIHRvIHNldCBkZXRlY3RlZCBsYW5ndWFnZS5cclxuICAqIEFsc28sIHdoZW4gbGFuZ3VhZ2Ugd2FzIGRldGVjdGVkIGFuZCB3ZSB3YW50IHRvIGNsZWFyIHNvdXJjZSB0ZXh0LCB0aGlzIG1ldGhvZCBhbHNvIGlzIGJlaW5nIGNhbGxlZC5cclxuICAqL1xyXG4gIHNldERldGVjdGVkTGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZykge1xyXG4gICAgaWYgKGxhbmdDb2RlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgICAgdGhpcy5lbmFibGVMYW5ndWFnZURldGVjdGlvbigpO1xyXG4gICAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UobGFuZ0NvZGUsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIHRydWUsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3lzdGVtcygpOiBTeXN0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1zO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlTGFuZ3VhZ2Uoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nLCByZXRyYW5zbGF0ZT86IGJvb2xlYW4sIGlzRGV0ZWN0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCgoc291cmNlICE9PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHx8ICh0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gc291cmNlKSkgJiYgIWlzRGV0ZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBzb3VyY2U7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBudWxsO1xyXG4gICAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtSWQgPSB0aGlzLmZpbmRDb3JyZWN0U3lzdGVtKHNvdXJjZSwgdGFyZ2V0LCB0aGlzLmFjdGl2ZVN5c3RlbT8uZG9tYWluKTtcclxuXHJcbiAgICBpZiAoIXN5c3RlbUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZVN5c3RlbShzeXN0ZW1JZCwgcmV0cmFuc2xhdGUpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NhbWVMYW5ndWFnZXMobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWTtcclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nO1xyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0uZG9tYWluID0gJyc7XHJcbiAgICB0aGlzLmFjdGl2ZVN5c3RlbS5pbmNsdWRlc1Rlcm1pbm9sb2d5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmRvbWFpbnMgPSBbXTtcclxuICAgIHRoaXMudmVuZG9ycyA9IFtdO1xyXG4gICAgdGhpcy5vbkFjdGl2ZVN5c3RlbUNoYW5nZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlU3lzdGVtT2JqKCk6IFN5c3RlbSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVTeXN0ZW07XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVWZW5kb3JzQW5kRG9tYWlucygpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VMYW5ndWFnZSB8fCAhdGhpcy50YXJnZXRMYW5ndWFnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB2ZW5kb3JzOiBWZW5kb3JbXSA9IFtdO1xyXG4gICAgY29uc3QgZG9tYWluczogRG9tYWluW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiB0aGlzLnN5c3RlbXMpIHtcclxuICAgICAgaWYgKCEoc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSAodGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UgPz8gdGhpcy5zb3VyY2VMYW5ndWFnZSkgJiYgc3lzdGVtLnRhcmdldExhbmd1YWdlID09PSB0aGlzLnRhcmdldExhbmd1YWdlKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIGNvbnN0IGRvbWFpbjogRG9tYWluID0ge1xyXG4gICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICAgIHRpdGxlOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZ1xyXG4gICAgICB9O1xyXG4gICAgICBkb21haW5zLnB1c2goZG9tYWluKTtcclxuICAgICAgY29uc3QgdmVuZG9yOiBWZW5kb3IgPSB7XHJcbiAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgdGl0bGU6IHN5c3RlbS52ZW5kb3JcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF2ZW5kb3JzLmluY2x1ZGVzKHZlbmRvcikpIHtcclxuICAgICAgICB2ZW5kb3JzLnB1c2godmVuZG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRvbWFpbi5sYW5ndWFnZUlkID09PSB0aGlzLmFjdGl2ZVN5c3RlbS5sYW5ndWFnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEb21haW4gPSBkb21haW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvbWFpbnMgPSBkb21haW5zO1xyXG4gICAgdGhpcy52ZW5kb3JzID0gdmVuZG9ycztcclxuICB9XHJcblxyXG5cclxuICBnZXRMYXN0VXNlZFN5c3RlbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExBU1RfVVNFRF9TWVNURU1fTE9DQUxfU1RPUkFHRV9LRVkpIGFzIHN0cmluZztcclxuICB9XHJcblxyXG4gIGdldFVuaXF1ZUxhbmd1YWdlcyhsaXN0OiBMYW5nTGlzdEl0ZW1bXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghbGlzdCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aXRsZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGlzdC5mb3JFYWNoKChsYW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhbmdUaXRsZSA9IGxhbmcubGFuZztcclxuICAgICAgY29uc3QgaXggPSB0aXRsZXMuaW5kZXhPZihsYW5nVGl0bGUgYXMgc3RyaW5nKTtcclxuICAgICAgaWYgKGl4ID09IC0xKSB7XHJcbiAgICAgICAgdGl0bGVzLnB1c2gobGFuZ1RpdGxlIGFzIHN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aXRsZXM7XHJcbiAgfVxyXG5cclxuICBpbml0KGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRTeXN0ZW1MaXN0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogU3lzdGVtW10pID0+IHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSByZXM7XHJcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRTeXN0ZW1zU3ViamVjdC5uZXh0KHJlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3lzdGVtRXhpc3RzKGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkLCB0aGlzLnN5c3RlbXMpICYmIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkICE9PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICAgIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID0gdGhpcy5zeXN0ZW1zWzBdPy5sYW5ndWFnZUlkO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZlbmRvciA9IHN5c3RlbS52ZW5kb3I7XHJcbiAgICAgICAgICAgIGlmICh2ZW5kb3IgPT09IHRoaXMuZGVmYXVsdFZlbmRvcikge1xyXG4gICAgICAgICAgICAgIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID0gc3lzdGVtLmxhbmd1YWdlSWQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gdGhpcy5kZWZhdWx0VGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVJlY2VudFN5c3RlbUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VMYW5nTGlzdCA9IHRoaXMuY3JlYXRlTGFuZ0xpc3QodGhpcy5zeXN0ZW1zKTtcclxuICAgICAgICB0aGlzLmNoYW5nZVN5c3RlbShkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCk7XHJcbiAgICAgICAgdGhpcy53aWRnZXRJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zeXNMaXN0Lm5leHQodGhpcy5zeXN0ZW1zKTtcclxuICAgICAgICB0aGlzLm5vU3lzdGVtc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZUxhbmd1YWdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub1N5c3RlbXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbGVydC5lcnJvcih0aGlzLmRlZmF1bHRFcnJvclRyYW5zbGF0aW9uS2V5LCBlcnJvcik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExvYWRlZFN5c3RlbXMoKTogT2JzZXJ2YWJsZTxTeXN0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkU3lzdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0VXNlZFN5c3RlbShzeXN0ZW1JZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oTEFTVF9VU0VEX1NZU1RFTV9MT0NBTF9TVE9SQUdFX0tFWSwgc3lzdGVtSWQpO1xyXG4gIH1cclxuXHJcbiAgc3dhcFN5c3RlbUxhbmd1YWdlcygpIHtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy50YXJnZXRMYW5ndWFnZSwgdGhpcy5zb3VyY2VMYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTeXN0ZW0obGFuZ3VhZ2VJZDogc3RyaW5nLCByZXRyYW5zbGF0ZSA9IHRydWUsIGlzUmVjZW50U3lzdGVtPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlU3lzdGVtPy5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRTeXN0ZW0hOiBTeXN0ZW07XHJcblxyXG4gICAgaWYgKCFsYW5ndWFnZUlkPy5pbmNsdWRlcyhBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICAgIGlmIChzeXN0ZW0ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRTeXN0ZW0gPSBzeXN0ZW07XHJcblxyXG4gICAgICAgICAgaWYgKCFpc1JlY2VudFN5c3RlbSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID0gdGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UgPz8gbnVsbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkU3lzdGVtID0gdGhpcy5jcmVhdGVTeXN0ZW0oJycsIGxhbmd1YWdlSWQsIGxhbmd1YWdlSWQsIEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSwgdGhpcy50YXJnZXRMYW5ndWFnZSwgJycsIHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID8/IG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ0xpc3QgPSB0aGlzLmNyZWF0ZUxhbmdMaXN0KHRoaXMuc3lzdGVtcywgQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKTtcclxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHRoaXMudGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtID0gc2VsZWN0ZWRTeXN0ZW07XHJcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVmVuZG9yc0FuZERvbWFpbnMoKTtcclxuICAgICAgdGhpcy5vbkFjdGl2ZVN5c3RlbUNoYW5nZShyZXRyYW5zbGF0ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhcmdldExhbmdMaXN0ID0gdGhpcy5jcmVhdGVMYW5nTGlzdCh0aGlzLnN5c3RlbXMsIHNlbGVjdGVkU3lzdGVtPy5zb3VyY2VMYW5ndWFnZSk7XHJcbiAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gc2VsZWN0ZWRTeXN0ZW0/LnRhcmdldExhbmd1YWdlO1xyXG4gICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlICYmICFpc1JlY2VudFN5c3RlbSA/IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSA6IHNlbGVjdGVkU3lzdGVtLnNvdXJjZUxhbmd1YWdlO1xyXG5cclxuICAgIGlmICghaXNSZWNlbnRTeXN0ZW0pIHtcclxuICAgICAgc2VsZWN0ZWRTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID8/IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0gPSBzZWxlY3RlZFN5c3RlbTtcclxuICAgIHRoaXMuZ2V0QWN0aXZlVmVuZG9yc0FuZERvbWFpbnMoKTtcclxuXHJcbiAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKHJldHJhbnNsYXRlKTtcclxuXHJcbiAgICB0aGlzLnNldExhc3RVc2VkU3lzdGVtKHNlbGVjdGVkU3lzdGVtLmxhbmd1YWdlSWQpO1xyXG4gIH1cclxuXHJcbiAgc3lzdGVtRXhpc3RzKGxhbmd1YWdlSWQ6IHN0cmluZywgc3lzdGVtTGlzdDogU3lzdGVtW10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN5c3RlbXMgPSBzeXN0ZW1MaXN0ID8/IHRoaXMuc3lzdGVtcztcclxuICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHN5c3RlbXMpIHtcclxuICAgICAgaWYgKHN5c3RlbS5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1Rlcm1pbm9sb2d5U3VwcG9ydGVkKHN5c3RlbTogU3lzdGVtKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3lzdGVtLmluY2x1ZGVzVGVybWlub2xvZ3kgYXMgYm9vbGVhbjtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoc291cmNlTGFuZ3VhZ2VDb2RlID09PSB0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZSwgdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMYW5ndWFnZShzb3VyY2VMYW5ndWFnZUNvZGUsIHRoaXMuYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVRhcmdldExhbmd1YWdlKHRhcmdldExhbmd1YWdlQ29kZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5zZXREZXRlY3RlZExhbmd1YWdlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXRMYW5ndWFnZUNvZGUgPT09IHRoaXMuYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5hY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UsIHRhcmdldExhbmd1YWdlQ29kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID8gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZIDogdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRhcmdldExhbmd1YWdlQ29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVJlY2VudFN5c3RlbUFycmF5KCkge1xyXG4gICAgbGV0IHN5c3RlbUlkQXJyYXk6IHN0cmluZ1tdO1xyXG4gICAgY29uc3QgcmVjZW50U3lzdGVtQXJyYXk6IFN5c3RlbVtdID0gW107XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgc3lzdGVtSWRBcnJheSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5yZWNlbnRTeXN0ZW1LZXkpID8/IFwiW11cIik7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN5c3RlbUlkQXJyYXkuZm9yRWFjaCgobGFuZ3VhZ2VJZCkgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ1N5c3RlbSA9IHRoaXMuc3lzdGVtcy5maW5kKHN5c3RlbSA9PiBzeXN0ZW0ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCk7XHJcbiAgICAgIGlmIChleGlzdGluZ1N5c3RlbSAmJiAhdGhpcy5yZWNlbnRTeXN0ZW1zLmluY2x1ZGVzKGV4aXN0aW5nU3lzdGVtKSkge1xyXG4gICAgICAgIHJlY2VudFN5c3RlbUFycmF5LnB1c2goZXhpc3RpbmdTeXN0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlY2VudFN5c3RlbXMgPSByZWNlbnRTeXN0ZW1BcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9SZWNlbnRTeXN0ZW1BcnJheShzeXN0ZW06IFN5c3RlbSkge1xyXG4gICAgY29uc3QgZXhpc3RpbmdTeXN0ZW0gPSB0aGlzLnJlY2VudFN5c3RlbXMuZmluZChleGlzdGluZyA9PiBleGlzdGluZy5sYW5ndWFnZUlkID09PSBzeXN0ZW0ubGFuZ3VhZ2VJZCk7XHJcbiAgICAvLyBpZiBzeXN0ZW0gYWxyZWFkeSBpbiBsaXN0LCBwdXQgaXQgdG8gZmlyc3QgcG9zaXRpb24uIElmIGl4IDAsIG5vIGFjdGlvbiByZXF1aXJlZCBzaW5jZSBsYXRlc3Qgc3lzdGVtIGlzIGFscmVhZHkgZmlyc3QuXHJcbiAgICBpZiAoZXhpc3RpbmdTeXN0ZW0pIHtcclxuICAgICAgY29uc3Qgc3lzdGVtSXhJblJlY2VudExpc3QgPSB0aGlzLnJlY2VudFN5c3RlbXMuaW5kZXhPZihleGlzdGluZ1N5c3RlbSk7XHJcbiAgICAgIGlmIChzeXN0ZW1JeEluUmVjZW50TGlzdCA+IDApIHtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMuc3BsaWNlKHN5c3RlbUl4SW5SZWNlbnRMaXN0LCAxKTtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMuc3BsaWNlKDAsIDAsIHN5c3RlbSk7XHJcbiAgICAgICAgLy8gcmVzZXRpbmcgZGV0ZWN0ZWRMYW5ndWFnZSwgc28gKC0gRGV0ZWN0ZWQpIGxhYmVsIGRvZXNudCBhcHBlYXJzIGlmIHdlIHNlbGVjdCBsYW5ndWFnZSBkaXJlY3Rpb24gZnJvbSByZWNlbnQgc3lzdGVtIGxpc3RcclxuICAgICAgICBzeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgbGlzdCB0b28gbG9uZywgcmVtb3ZlIGxhc3QgKG9sZGVzdCBlbGVtZW50KVxyXG4gICAgICB3aGlsZSAodGhpcy5yZWNlbnRTeXN0ZW1zLmxlbmd0aCA+PSB0aGlzLnJlY2VudFN5c3RlbXNNYXhDb3VudCkge1xyXG4gICAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5wb3AoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZWNlbnRTeXN0ZW1zLnNwbGljZSgwLCAwLCBzeXN0ZW0pO1xyXG4gICAgfVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5yZWNlbnRTeXN0ZW1LZXksIEpTT04uc3RyaW5naWZ5KHRoaXMucmVjZW50U3lzdGVtcy5tYXAoc3lzdGVtID0+IHN5c3RlbS5sYW5ndWFnZUlkKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5Td2FwU3lzdGVtTGFuZ3VhZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGxhbmdTd2FwQWN0aXZlID0gZmFsc2U7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IHN5c3RlbSA9IGVsZW1lbnQ7XHJcbiAgICAgIGlmIChzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT0gdGhpcy50YXJnZXRMYW5ndWFnZSAmJiBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT0gdGhpcy5zb3VyY2VMYW5ndWFnZSkge1xyXG4gICAgICAgIGxhbmdTd2FwQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYW5Td2FwTGFuZ3VhZ2VzID0gbGFuZ1N3YXBBY3RpdmU7XHJcbiAgICByZXR1cm4gbGFuZ1N3YXBBY3RpdmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxhbmdMaXN0KHN5c3RlbXM6IFN5c3RlbVtdLCBzcmNMYW5nQ29kZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgbGFuZ0xpc3RJdGVtQXJyYXk6IExhbmdMaXN0SXRlbVtdID0gW107XHJcbiAgICBzeXN0ZW1zLmZvckVhY2goKHN5c3RlbSkgPT4ge1xyXG4gICAgICBpZiAoIXNyY0xhbmdDb2RlIHx8IHNyY0xhbmdDb2RlID09PSBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgfHwgc3JjTGFuZ0NvZGUgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICAgIGxhbmdMaXN0SXRlbUFycmF5LnB1c2goXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRvbWFpbjogc3lzdGVtLmRvbWFpbiBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGxhbmc6IHNyY0xhbmdDb2RlID8gc3lzdGVtLnRhcmdldExhbmd1YWdlIDogc3lzdGVtLnNvdXJjZUxhbmd1YWdlLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgICAgICAgdmVuZG9yOiBzeXN0ZW0udmVuZG9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBsYW5nTGlzdEl0ZW1BcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENvcnJlY3RTeXN0ZW0oc291cmNlTGFuZ3VhZ2U6IHN0cmluZywgdGFyZ2V0TGFuZ3VhZ2U6IHN0cmluZywgZG9tYWluPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN5c3RlbXMgPSB0aGlzLnN5c3RlbXM7XHJcbiAgICBcclxuICAgIGlmIChzb3VyY2VMYW5ndWFnZSA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPSB0YXJnZXRMYW5ndWFnZTtcclxuICAgICAgdGhpcy5hY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPSB0YXJnZXRMYW5ndWFnZTtcclxuICAgICAgcmV0dXJuIGAke0FVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWX0tJHt0YXJnZXRMYW5ndWFnZX1gXHJcbiAgICB9IFxyXG5cclxuICAgIGNvbnN0IHN5c3RlbXNGb3JMYW5ndWFnZVBhaXIgPSBzeXN0ZW1zLmZpbHRlcihzeXN0ZW0gPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBzb3VyY2VMYW5ndWFnZSAmJiB0YXJnZXRMYW5ndWFnZSA9PT0gc3lzdGVtLnRhcmdldExhbmd1YWdlKTtcclxuICAgIC8vIElkZWFsbHkgdGhpcyBjYXNlIHNob3VsZCBub3QgaGFwcGVuLCBidXQgaXQgaXMgcG9zc2libGUuXHJcbiAgICBpZiAoc3lzdGVtc0Zvckxhbmd1YWdlUGFpci5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtcy5maW5kKHN5c3RlbSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHNvdXJjZUxhbmd1YWdlKT8ubGFuZ3VhZ2VJZCBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN5c3RlbXNXaXRoRGVmYXVsdFZlbmRvciA9IHN5c3RlbXNGb3JMYW5ndWFnZVBhaXIuZmlsdGVyKHN5c3RlbSA9PiAoc3lzdGVtLnZlbmRvciB8fCB0aGlzLmRlZmF1bHRWZW5kb3IpID09PSB0aGlzLmRlZmF1bHRWZW5kb3IpO1xyXG4gICAgaWYgKHN5c3RlbXNXaXRoRGVmYXVsdFZlbmRvci5sZW5ndGggPT09IDApIHtcclxuICAgICAgc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yID0gc3lzdGVtc0Zvckxhbmd1YWdlUGFpcjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtc1dpdGhEZWZhdWx0RG9tYWluID0gc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yLmZpbHRlcihzeXN0ZW0gPT4gZG9tYWluID8gc3lzdGVtLmRvbWFpbiA9PT0gZG9tYWluIDogdGhpcy5kZWZhdWx0RG9tYWlucy5pbmNsdWRlcyhzeXN0ZW0uZG9tYWluIGFzIHN0cmluZykpO1xyXG4gICAgaWYgKHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgc3lzdGVtc1dpdGhEZWZhdWx0RG9tYWluID0gc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yO1xyXG4gICAgfVxyXG4gICAgU29ydEhlbHBlci5zb3J0QnlBcnJheShzeXN0ZW1zV2l0aERlZmF1bHREb21haW4sIHRoaXMuZGVmYXVsdERvbWFpbnMsIFwiZG9tYWluXCIpO1xyXG5cclxuICAgIHJldHVybiBzeXN0ZW1zV2l0aERlZmF1bHREb21haW5bMF0ubGFuZ3VhZ2VJZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BY3RpdmVTeXN0ZW1DaGFuZ2UocmV0cmFuc2xhdGUgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzeXN0ZW06IFN5c3RlbSA9IHRoaXMuYWN0aXZlU3lzdGVtO1xyXG4gICAgY29uc3QgdmVuZG9yID0gdGhpcy5hY3RpdmVTeXN0ZW0udmVuZG9yO1xyXG5cclxuICAgIGlmICh0aGlzLnNvdXJjZUxhbmd1YWdlICE9PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgJiYgIXN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZSAmJiBzeXN0ZW0uZG9tYWluPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hZGRUb1JlY2VudFN5c3RlbUFycmF5KHN5c3RlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3RpdmUubmV4dCh7XHJcbiAgICAgIHNvdXJjZUxhbmc6IHtcclxuICAgICAgICBsYW5nOiB0aGlzLnNvdXJjZUxhbmd1YWdlLFxyXG4gICAgICAgIGRvbWFpbjogc3lzdGVtLmRvbWFpbixcclxuICAgICAgICB2ZW5kb3I6IHZlbmRvcixcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgfSxcclxuICAgICAgc291cmNlTGFuZ0xpc3Q6IHRoaXMuc291cmNlTGFuZ0xpc3QsXHJcbiAgICAgIHN5c3RlbUlkOiBzeXN0ZW0uaWQsXHJcbiAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICB0YXJnZXRMYW5nOiB7XHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluID8/IHRoaXMuYWN0aXZlRG9tYWluLnRpdGxlLFxyXG4gICAgICAgIHZlbmRvcjogdmVuZG9yLFxyXG4gICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICAgIGxhbmc6IHRoaXMudGFyZ2V0TGFuZ3VhZ2VcclxuICAgICAgfSxcclxuICAgICAgdGFyZ2V0TGFuZ0xpc3Q6IHRoaXMudGFyZ2V0TGFuZ0xpc3QsXHJcbiAgICAgIHZlbmRvcnM6IHRoaXMudmVuZG9ycyxcclxuICAgICAgZG9tYWluczogeyBhY3RpdmU6IHRoaXMuYWN0aXZlRG9tYWluLCBkb21haW5zOiB0aGlzLmRvbWFpbnMgfSxcclxuICAgICAgc3dhcExhbmdBY3RpdmU6IHRoaXMuY2FuU3dhcFN5c3RlbUxhbmd1YWdlcygpLFxyXG4gICAgICBzeXN0ZW06IHN5c3RlbSxcclxuICAgICAgcmV0cmFuc2xhdGU6IHJldHJhbnNsYXRlLFxyXG4gICAgICByZWNlbnRTeXN0ZW1zOiB0aGlzLnJlY2VudFN5c3RlbXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTeXN0ZW0oZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlSWQ6IHN0cmluZywgc291cmNlTGFuZ3VhZ2U6IHN0cmluZywgdGFyZ2V0TGFuZ3VhZ2U6IHN0cmluZywgdmVuZG9yOiBzdHJpbmcsIGRldGVjdGVkTGFuZ3VhZ2U6IHN0cmluZywgaW5jbHVkZXNUZXJtaW5vbG9neTogYm9vbGVhbik6IFN5c3RlbSB7XHJcbiAgICByZXR1cm4geyBkb21haW4sIGlkLCBsYW5ndWFnZUlkLCBzb3VyY2VMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2UsIHZlbmRvciwgZGV0ZWN0ZWRMYW5ndWFnZSwgaW5jbHVkZXNUZXJtaW5vbG9neSB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|