@tilde-nlp/ngx-translate 5.0.20 → 5.0.22

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.
@@ -60,6 +60,9 @@ export class TldTranslateSystemManagementService {
60
60
  * Also, when language was detected and we want to clear source text, this method also is being called.
61
61
  */
62
62
  setDetectedLanguage(langCode, domain) {
63
+ if (!this.activeSystem.detectedLanguage && this.sourceLanguage !== AUTO_LANGUAGE_DETECTION_KEY) {
64
+ return;
65
+ }
63
66
  const isSourceLangCodeSameAfterDetection = this.activeSystem?.detectedLanguage === this.sourceLanguage;
64
67
  // Here we need to clear out detected language, but keep the detection enabled.
65
68
  if (!langCode && isSourceLangCodeSameAfterDetection) {
@@ -271,6 +274,8 @@ export class TldTranslateSystemManagementService {
271
274
  if (systemIxInRecentList > 0) {
272
275
  this.recentSystems.splice(systemIxInRecentList, 1);
273
276
  this.recentSystems.splice(0, 0, system);
277
+ // reseting detectedLanguage, so (- Detected) label doesnt appears if we select language direction from recent system list
278
+ system.detectedLanguage = undefined;
274
279
  }
275
280
  }
276
281
  else {
@@ -375,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
375
380
  providedIn: 'root'
376
381
  }]
377
382
  }], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i2.TldTranslateConfigService }, { type: i1.SystemService }]; } });
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1zeXN0ZW0tbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXN5c3RlbS1tYW5hZ2VtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9DLGtDQUFrQyxFQUFnQixVQUFVLEVBQWlDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEssT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBTTFGLE1BQU0sT0FBTyxtQ0FBbUM7SUE4QzNCO0lBQ0E7SUFDQTtJQS9DbkIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFVO0lBQ3RCLGdCQUFnQixDQUFXO0lBRTNCLDBCQUEwQixHQUFHLHVDQUF1QyxDQUFDO0lBRTdELG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFFdkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hC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QU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLFdBQVc7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUN6SCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWMsRUFBRSxFQUFVLEVBQUUsVUFBa0IsRUFBRSxjQUFzQixFQUFFLGNBQXNCLEVBQUUsTUFBYyxFQUFFLGdCQUF3QixFQUFFLG1CQUE0QjtRQUN6TCxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQTtJQUNsSCxDQUFDO3dHQTFhVSxtQ0FBbUM7NEdBQW5DLG1DQUFtQyxjQUZsQyxNQUFNOzs0RkFFUCxtQ0FBbUM7a0JBSC9DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmVEYXRhLCBBbGVydFNlcnZpY2UsIERvbWFpbiwgTEFTVF9VU0VEX1NZU1RFTV9MT0NBTF9TVE9SQUdFX0tFWSwgTGFuZ0xpc3RJdGVtLCBTb3J0SGVscGVyLCBTeXN0ZW0sIFN5c3RlbVNlcnZpY2UsIFZlbmRvciB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfSBmcm9tICcuLi9tb2RlbHMvYXV0by1sYW5ndWFnZS1kZXRlY3Rpb24ta2V5LmNvbnN0JztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vdGxkLXRyYW5zbGF0ZS1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSB7XHJcbiAgbm9TeXN0ZW1zRXJyb3IgPSBmYWxzZTtcclxuICBzeXN0ZW1zOiBTeXN0ZW1bXSA9IFtdO1xyXG4gIHdpZGdldEluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgc3lzTGlzdCA9IG5ldyBSZXBsYXlTdWJqZWN0PFN5c3RlbVtdPigxKTtcclxuICBhY3RpdmVEb21haW4hOiBEb21haW47XHJcbiAgY2FuU3dhcExhbmd1YWdlcyE6IGJvb2xlYW47XHJcblxyXG4gIGRlZmF1bHRFcnJvclRyYW5zbGF0aW9uS2V5ID0gJ1RMRF9UUkFOU0xBVEUuRVJST1JfTk9fU1lTVEVNU19MT0FERUQnO1xyXG5cclxuICBwcml2YXRlIGxvYWRlZFN5c3RlbXNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8U3lzdGVtW10+KCk7XHJcblxyXG4gIGdldCBhY3RpdmVWZW5kb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVTeXN0ZW0udmVuZG9yIHx8IHRoaXMuZGVmYXVsdFZlbmRvcjtcclxuICB9XHJcblxyXG4gIGdldCBkZWZhdWx0VmVuZG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuZGVmYXVsdFZlbmRvcjtcclxuICB9XHJcblxyXG4gIGdldCBkZWZhdWx0RG9tYWlucygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmRlZmF1bHREb21haW5zIGFzIHN0cmluZ1tdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHRUYXJnZXRMYW5ndWFnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmRlZmF1bHRUYXJnZXRMYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWN0aXZlU3lzdGVtITogU3lzdGVtO1xyXG4gIHByaXZhdGUgZG9tYWluczogRG9tYWluW10gPSBbXTtcclxuICBwcml2YXRlIHZlbmRvcnM6IFZlbmRvcltdID0gW107XHJcbiAgcHJpdmF0ZSBzb3VyY2VMYW5ndWFnZSE6IHN0cmluZztcclxuICBwcml2YXRlIHRhcmdldExhbmd1YWdlITogc3RyaW5nO1xyXG4gIHByaXZhdGUgc291cmNlTGFuZ0xpc3Q6IExhbmdMaXN0SXRlbVtdID0gW107XHJcbiAgcHJpdmF0ZSB0YXJnZXRMYW5nTGlzdDogTGFuZ0xpc3RJdGVtW10gPSBbXTtcclxuXHJcbiAgLy8jcmVnaW9uIFJlY2VudCBzeXN0ZW0gdmFyaWFibGVzXHJcbiAgLy8gUG9zc2libHkgZnJvbSBjb25maWdcclxuICBnZXQgcmVjZW50U3lzdGVtc01heENvdW50KCkgeyByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5tYXhSZWNlbnRTeXN0ZW1Db3VudCBhcyBudW1iZXI7IH1cclxuICBwcml2YXRlIHJlY2VudFN5c3RlbXM6IFN5c3RlbVtdID0gW107XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjZW50U3lzdGVtS2V5ID0gXCJyZWNlbnRTeXN0ZW1zXCI7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmU6IEJlaGF2aW9yU3ViamVjdDxBY3RpdmVEYXRhPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWN0aXZlRGF0YT4oPGFueT5udWxsKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0OiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICogVGhpcyBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHdoZW4gYXV0byBsYW5ndWFnZSBkZXRlY3Rpb24gd2FzIGNob3Nlbi5cclxuICAqL1xyXG4gIGVuYWJsZUxhbmd1YWdlRGV0ZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWTtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5zb3VyY2VMYW5ndWFnZSwgdGhpcy50YXJnZXRMYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFRoaXMgbWV0aG9kIGlzIGJlaW5nIHVzZWQgdG8gc2V0IGRldGVjdGVkIGxhbmd1YWdlIHdoZW4gYXBpIHJlc3BvbnNlIGhhcyBpdC5cclxuICAqIEFsc28sIHdoZW4gbGFuZ3VhZ2Ugd2FzIGRldGVjdGVkIGFuZCB3ZSB3YW50IHRvIGNsZWFyIHNvdXJjZSB0ZXh0LCB0aGlzIG1ldGhvZCBhbHNvIGlzIGJlaW5nIGNhbGxlZC5cclxuICAqL1xyXG4gIHNldERldGVjdGVkTGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZywgZG9tYWluPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpc1NvdXJjZUxhbmdDb2RlU2FtZUFmdGVyRGV0ZWN0aW9uID0gdGhpcy5hY3RpdmVTeXN0ZW0/LmRldGVjdGVkTGFuZ3VhZ2UgPT09IHRoaXMuc291cmNlTGFuZ3VhZ2U7XHJcbiAgICAvLyBIZXJlIHdlIG5lZWQgdG8gY2xlYXIgb3V0IGRldGVjdGVkIGxhbmd1YWdlLCBidXQga2VlcCB0aGUgZGV0ZWN0aW9uIGVuYWJsZWQuXHJcbiAgICBpZiAoIWxhbmdDb2RlICYmIGlzU291cmNlTGFuZ0NvZGVTYW1lQWZ0ZXJEZXRlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWTtcclxuICAgICAgdGhpcy5hY3RpdmVTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5zb3VyY2VMYW5ndWFnZSwgdGhpcy50YXJnZXRMYW5ndWFnZSwgZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyBiZWluZyBjYWxsZWQsIHdoZW4gbGFuZ3VhZ2UgaXMgZGV0ZWN0ZWQuXHJcbiAgICB0aGlzLnNvdXJjZUxhbmd1YWdlID0gbGFuZ0NvZGU7XHJcbiAgICB0aGlzLmFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9IGxhbmdDb2RlO1xyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IGxhbmdDb2RlO1xyXG4gICAgdGhpcy5jaGFuZ2VMYW5ndWFnZShsYW5nQ29kZSwgdGhpcy50YXJnZXRMYW5ndWFnZSwgZmFsc2UsIGRvbWFpbik7XHJcbiAgfVxyXG5cclxuICBnZXRTeXN0ZW1zKCk6IFN5c3RlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbXM7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VMYW5ndWFnZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcsIHJldHJhbnNsYXRlPzogYm9vbGVhbiwgZG9tYWluPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzeXN0ZW1JZCA9IHRoaXMuZmluZENvcnJlY3RTeXN0ZW0oc291cmNlLCB0YXJnZXQsIGRvbWFpbik7XHJcbiAgICB0aGlzLmNoYW5nZVN5c3RlbShzeXN0ZW1JZCwgcmV0cmFuc2xhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZS5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZVN5c3RlbU9iaigpOiBTeXN0ZW0ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3lzdGVtO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlVmVuZG9yc0FuZERvbWFpbnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuc291cmNlTGFuZ3VhZ2UgfHwgIXRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmVuZG9yczogVmVuZG9yW10gPSBbXTtcclxuICAgIGNvbnN0IGRvbWFpbnM6IERvbWFpbltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgIGlmICghKHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gdGhpcy5zb3VyY2VMYW5ndWFnZSAmJiBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT09IHRoaXMudGFyZ2V0TGFuZ3VhZ2UpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZG9tYWluOiBEb21haW4gPSB7XHJcbiAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgdGl0bGU6IHN5c3RlbS5kb21haW4gYXMgc3RyaW5nXHJcbiAgICAgIH07XHJcbiAgICAgIGRvbWFpbnMucHVzaChkb21haW4pO1xyXG4gICAgICBjb25zdCB2ZW5kb3I6IFZlbmRvciA9IHtcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgICB0aXRsZTogc3lzdGVtLnZlbmRvclxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXZlbmRvcnMuaW5jbHVkZXModmVuZG9yKSkge1xyXG4gICAgICAgIHZlbmRvcnMucHVzaCh2ZW5kb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZG9tYWluLmxhbmd1YWdlSWQgPT09IHRoaXMuYWN0aXZlU3lzdGVtLmxhbmd1YWdlSWQpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURvbWFpbiA9IGRvbWFpbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG9tYWlucyA9IGRvbWFpbnM7XHJcbiAgICB0aGlzLnZlbmRvcnMgPSB2ZW5kb3JzO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldExhc3RVc2VkU3lzdGVtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTEFTVF9VU0VEX1NZU1RFTV9MT0NBTF9TVE9SQUdFX0tFWSkgYXMgc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0VW5pcXVlTGFuZ3VhZ2VzKGxpc3Q6IExhbmdMaXN0SXRlbVtdKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBsaXN0LmZvckVhY2goKGxhbmcpID0+IHtcclxuICAgICAgY29uc3QgbGFuZ1RpdGxlID0gbGFuZy5sYW5nO1xyXG4gICAgICBjb25zdCBpeCA9IHRpdGxlcy5pbmRleE9mKGxhbmdUaXRsZSBhcyBzdHJpbmcpO1xyXG4gICAgICBpZiAoaXggPT0gLTEpIHtcclxuICAgICAgICB0aXRsZXMucHVzaChsYW5nVGl0bGUgYXMgc3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRpdGxlcztcclxuICB9XHJcblxyXG4gIGluaXQoZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldFN5c3RlbUxpc3QoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBTeXN0ZW1bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHJlcztcclxuICAgICAgICBpZiAocmVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZFN5c3RlbXNTdWJqZWN0Lm5leHQocmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zeXN0ZW1FeGlzdHMoZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQsIHRoaXMuc3lzdGVtcykgJiYgZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQgIT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICAgICAgZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQgPSB0aGlzLnN5c3RlbXNbMF0/Lmxhbmd1YWdlSWQ7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiB0aGlzLnN5c3RlbXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmVuZG9yID0gc3lzdGVtLnZlbmRvcjtcclxuICAgICAgICAgICAgaWYgKHZlbmRvciA9PT0gdGhpcy5kZWZhdWx0VmVuZG9yKSB7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdFN5c3RlbUxhbmd1YWdlSWQgPSBzeXN0ZW0ubGFuZ3VhZ2VJZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPSB0aGlzLmRlZmF1bHRUYXJnZXRMYW5ndWFnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVjZW50U3lzdGVtQXJyYXkoKTtcclxuICAgICAgICB0aGlzLnNvdXJjZUxhbmdMaXN0ID0gdGhpcy5jcmVhdGVMYW5nTGlzdCh0aGlzLnN5c3RlbXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlU3lzdGVtKGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkKTtcclxuICAgICAgICB0aGlzLndpZGdldEluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN5c0xpc3QubmV4dCh0aGlzLnN5c3RlbXMpO1xyXG4gICAgICAgIHRoaXMubm9TeXN0ZW1zRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICAgIHRoaXMuZW5hYmxlTGFuZ3VhZ2VEZXRlY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm5vU3lzdGVtc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFsZXJ0LmVycm9yKHRoaXMuZGVmYXVsdEVycm9yVHJhbnNsYXRpb25LZXksIGVycm9yKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9hZGVkU3lzdGVtcygpOiBPYnNlcnZhYmxlPFN5c3RlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRTeXN0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldExhc3RVc2VkU3lzdGVtKHN5c3RlbUlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMQVNUX1VTRURfU1lTVEVNX0xPQ0FMX1NUT1JBR0VfS0VZLCBzeXN0ZW1JZCk7XHJcbiAgfVxyXG5cclxuICBzd2FwU3lzdGVtTGFuZ3VhZ2VzKCkge1xyXG4gICAgdGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLnRhcmdldExhbmd1YWdlLCB0aGlzLnNvdXJjZUxhbmd1YWdlKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVN5c3RlbShsYW5ndWFnZUlkOiBzdHJpbmcsIHJldHJhbnNsYXRlID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlU3lzdGVtPy5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRTeXN0ZW0hOiBTeXN0ZW07XHJcblxyXG4gICAgaWYgKCFsYW5ndWFnZUlkPy5pbmNsdWRlcyhBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICAgIGlmIChzeXN0ZW0ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRTeXN0ZW0gPSBzeXN0ZW07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkU3lzdGVtID0gdGhpcy5jcmVhdGVTeXN0ZW0oJycsIGxhbmd1YWdlSWQsIGxhbmd1YWdlSWQsIHRoaXMuc291cmNlTGFuZ3VhZ2UsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsICcnLCBudWxsLCBmYWxzZSk7XHJcblxyXG4gICAgICB0aGlzLnRhcmdldExhbmdMaXN0ID0gdGhpcy5jcmVhdGVMYW5nTGlzdCh0aGlzLnN5c3RlbXMsIHRoaXMuc291cmNlTGFuZ3VhZ2UpO1xyXG4gICAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gdGhpcy50YXJnZXRMYW5ndWFnZTtcclxuICAgICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IHRoaXMuc291cmNlTGFuZ3VhZ2U7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtID0gc2VsZWN0ZWRTeXN0ZW07XHJcbiAgICAgIHRoaXMuZG9tYWlucyA9IFtdO1xyXG4gICAgICB0aGlzLnZlbmRvcnMgPSBbXTtcclxuXHJcbiAgICAgIHRoaXMub25BY3RpdmVTeXN0ZW1DaGFuZ2UocmV0cmFuc2xhdGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlO1xyXG5cclxuICAgIHRoaXMudGFyZ2V0TGFuZ0xpc3QgPSB0aGlzLmNyZWF0ZUxhbmdMaXN0KHRoaXMuc3lzdGVtcywgc2VsZWN0ZWRTeXN0ZW0uc291cmNlTGFuZ3VhZ2UpO1xyXG4gICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHNlbGVjdGVkU3lzdGVtLnRhcmdldExhbmd1YWdlO1xyXG4gICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IHNlbGVjdGVkU3lzdGVtLnNvdXJjZUxhbmd1YWdlO1xyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0gPSBzZWxlY3RlZFN5c3RlbTtcclxuICAgIHRoaXMuZ2V0QWN0aXZlVmVuZG9yc0FuZERvbWFpbnMoKTtcclxuXHJcbiAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKHJldHJhbnNsYXRlKTtcclxuXHJcbiAgICB0aGlzLnNldExhc3RVc2VkU3lzdGVtKHNlbGVjdGVkU3lzdGVtLmxhbmd1YWdlSWQpO1xyXG4gIH1cclxuXHJcbiAgc3lzdGVtRXhpc3RzKGxhbmd1YWdlSWQ6IHN0cmluZywgc3lzdGVtTGlzdDogU3lzdGVtW10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN5c3RlbXMgPSBzeXN0ZW1MaXN0ID8/IHRoaXMuc3lzdGVtcztcclxuICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHN5c3RlbXMpIHtcclxuICAgICAgaWYgKHN5c3RlbS5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1Rlcm1pbm9sb2d5U3VwcG9ydGVkKHN5c3RlbTogU3lzdGVtKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3lzdGVtLmluY2x1ZGVzVGVybWlub2xvZ3kgYXMgYm9vbGVhbjtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoc291cmNlTGFuZ3VhZ2VDb2RlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgdGhpcy5lbmFibGVMYW5ndWFnZURldGVjdGlvbigpO1xyXG4gICAgICByZXR1cm47ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoc291cmNlTGFuZ3VhZ2VDb2RlID09PSB0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZSwgdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2Uoc291cmNlTGFuZ3VhZ2VDb2RlLCB0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNoYW5nZVRhcmdldExhbmd1YWdlKHRhcmdldExhbmd1YWdlQ29kZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGFyZ2V0TGFuZ3VhZ2VDb2RlID09PSB0aGlzLmFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlLCB0YXJnZXRMYW5ndWFnZUNvZGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRhcmdldExhbmd1YWdlQ29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVJlY2VudFN5c3RlbUFycmF5KCkge1xyXG4gICAgbGV0IHN5c3RlbUlkQXJyYXk6IHN0cmluZ1tdO1xyXG4gICAgY29uc3QgcmVjZW50U3lzdGVtQXJyYXk6IFN5c3RlbVtdID0gW107XHJcbiAgICB0cnkge1xyXG4gICAgICBzeXN0ZW1JZEFycmF5ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnJlY2VudFN5c3RlbUtleSkgPz8gXCJbXVwiKTtcclxuICAgIH1cclxuICAgIGNhdGNoIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3lzdGVtSWRBcnJheS5mb3JFYWNoKChsYW5ndWFnZUlkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3lzdGVtID0gdGhpcy5zeXN0ZW1zLmZpbmQoc3lzdGVtID0+IHN5c3RlbS5sYW5ndWFnZUlkID09PSBsYW5ndWFnZUlkKTtcclxuICAgICAgaWYgKGV4aXN0aW5nU3lzdGVtICYmICF0aGlzLnJlY2VudFN5c3RlbXMuaW5jbHVkZXMoZXhpc3RpbmdTeXN0ZW0pKSB7XHJcbiAgICAgICAgcmVjZW50U3lzdGVtQXJyYXkucHVzaChleGlzdGluZ1N5c3RlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLnJlY2VudFN5c3RlbXMgPSByZWNlbnRTeXN0ZW1BcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9SZWNlbnRTeXN0ZW1BcnJheShzeXN0ZW06IFN5c3RlbSkge1xyXG4gICAgaWYgKHN5c3RlbS5pZCA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZ1N5c3RlbSA9IHRoaXMucmVjZW50U3lzdGVtcy5maW5kKGV4aXN0aW5nID0+IGV4aXN0aW5nLmxhbmd1YWdlSWQgPT09IHN5c3RlbS5sYW5ndWFnZUlkKTtcclxuICAgIC8vIGlmIHN5c3RlbSBhbHJlYWR5IGluIGxpc3QsIHB1dCBpdCB0byBmaXJzdCBwb3NpdGlvbi4gSWYgaXggMCwgbm8gYWN0aW9uIHJlcXVpcmVkIHNpbmNlIGxhdGVzdCBzeXN0ZW0gaXMgYWxyZWFkeSBmaXJzdC5cclxuICAgIGlmIChleGlzdGluZ1N5c3RlbSkge1xyXG4gICAgICBjb25zdCBzeXN0ZW1JeEluUmVjZW50TGlzdCA9IHRoaXMucmVjZW50U3lzdGVtcy5pbmRleE9mKGV4aXN0aW5nU3lzdGVtKTtcclxuICAgICAgaWYgKHN5c3RlbUl4SW5SZWNlbnRMaXN0ID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2Uoc3lzdGVtSXhJblJlY2VudExpc3QsIDEpO1xyXG4gICAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2UoMCwgMCwgc3lzdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIGlmIGxpc3QgdG9vIGxvbmcsIHJlbW92ZSBsYXN0IChvbGRlc3QgZWxlbWVudClcclxuICAgICAgd2hpbGUgKHRoaXMucmVjZW50U3lzdGVtcy5sZW5ndGggPj0gdGhpcy5yZWNlbnRTeXN0ZW1zTWF4Q291bnQpIHtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMucG9wKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2UoMCwgMCwgc3lzdGVtKTtcclxuICAgIH1cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMucmVjZW50U3lzdGVtS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLnJlY2VudFN5c3RlbXMubWFwKHN5c3RlbSA9PiBzeXN0ZW0ubGFuZ3VhZ2VJZCkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuU3dhcFN5c3RlbUxhbmd1YWdlcygpOiBib29sZWFuIHtcclxuICAgIGxldCBsYW5nU3dhcEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICBjb25zdCBzeXN0ZW0gPSBlbGVtZW50O1xyXG4gICAgICBpZiAoc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09IHRoaXMudGFyZ2V0TGFuZ3VhZ2UgJiYgc3lzdGVtLnRhcmdldExhbmd1YWdlID09IHRoaXMuc291cmNlTGFuZ3VhZ2UpIHtcclxuICAgICAgICBsYW5nU3dhcEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FuU3dhcExhbmd1YWdlcyA9IGxhbmdTd2FwQWN0aXZlO1xyXG4gICAgcmV0dXJuIGxhbmdTd2FwQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMYW5nTGlzdChzeXN0ZW1zOiBTeXN0ZW1bXSwgc3JjTGFuZ0NvZGU/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGxhbmdMaXN0SXRlbUFycmF5OiBMYW5nTGlzdEl0ZW1bXSA9IFtdO1xyXG4gICAgc3lzdGVtcy5mb3JFYWNoKChzeXN0ZW0pID0+IHtcclxuICAgICAgaWYgKCFzcmNMYW5nQ29kZSB8fCBzcmNMYW5nQ29kZSA9PT0gc3lzdGVtLnNvdXJjZUxhbmd1YWdlIHx8IHNyY0xhbmdDb2RlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICBsYW5nTGlzdEl0ZW1BcnJheS5wdXNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkb21haW46IHN5c3RlbS5kb21haW4gYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBsYW5nOiBzcmNMYW5nQ29kZSA/IHN5c3RlbS50YXJnZXRMYW5ndWFnZSA6IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgICAgIHZlbmRvcjogc3lzdGVtLnZlbmRvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gbGFuZ0xpc3RJdGVtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDb3JyZWN0U3lzdGVtKHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsIHRhcmdldExhbmd1YWdlOiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoc291cmNlTGFuZ3VhZ2UgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gdGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlID0gdGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHJldHVybiBgJHtBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVl9LSR7dGFyZ2V0TGFuZ3VhZ2V9YFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN5c3RlbXMgPSB0aGlzLnN5c3RlbXM7XHJcblxyXG4gICAgY29uc3Qgc3lzdGVtc0Zvckxhbmd1YWdlUGFpciA9IHN5c3RlbXMuZmlsdGVyKHN5c3RlbSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHNvdXJjZUxhbmd1YWdlICYmIHRhcmdldExhbmd1YWdlID09PSBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gICAgLy8gSWRlYWxseSB0aGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBpdCBpcyBwb3NzaWJsZS5cclxuICAgIGlmIChzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zeXN0ZW1zLmZpbmQoc3lzdGVtID0+IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gc291cmNlTGFuZ3VhZ2UpPy5sYW5ndWFnZUlkIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yID0gc3lzdGVtc0Zvckxhbmd1YWdlUGFpci5maWx0ZXIoc3lzdGVtID0+IChzeXN0ZW0udmVuZG9yIHx8IHRoaXMuZGVmYXVsdFZlbmRvcikgPT09IHRoaXMuZGVmYXVsdFZlbmRvcik7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IgPSBzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IuZmlsdGVyKHN5c3RlbSA9PiBkb21haW4gPyBzeXN0ZW0uZG9tYWluID09PSBkb21haW4gOiB0aGlzLmRlZmF1bHREb21haW5zLmluY2x1ZGVzKHN5c3RlbS5kb21haW4gYXMgc3RyaW5nKSk7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0RG9tYWluLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3I7XHJcbiAgICB9XHJcbiAgICBTb3J0SGVscGVyLnNvcnRCeUFycmF5KHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpbiwgdGhpcy5kZWZhdWx0RG9tYWlucywgXCJkb21haW5cIik7XHJcblxyXG4gICAgcmV0dXJuIHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpblswXS5sYW5ndWFnZUlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFjdGl2ZVN5c3RlbUNoYW5nZShyZXRyYW5zbGF0ZSA9IHRydWUpIHtcclxuICAgIGNvbnN0IHN5c3RlbTogU3lzdGVtID0gdGhpcy5hY3RpdmVTeXN0ZW07XHJcbiAgICBjb25zdCB2ZW5kb3IgPSB0aGlzLmFjdGl2ZVN5c3RlbS52ZW5kb3I7XHJcblxyXG4gICAgaWYgKHRoaXMuc291cmNlTGFuZ3VhZ2UgIT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICB0aGlzLmFkZFRvUmVjZW50U3lzdGVtQXJyYXkoc3lzdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGl2ZS5uZXh0KHtcclxuICAgICAgc291cmNlTGFuZzoge1xyXG4gICAgICAgIGxhbmc6IHRoaXMuc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZyxcclxuICAgICAgICB2ZW5kb3I6IHZlbmRvcixcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgfSxcclxuICAgICAgc291cmNlTGFuZ0xpc3Q6IHRoaXMuc291cmNlTGFuZ0xpc3QsXHJcbiAgICAgIHN5c3RlbUlkOiBzeXN0ZW0uaWQsXHJcbiAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICB0YXJnZXRMYW5nOiB7XHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZyxcclxuICAgICAgICB2ZW5kb3I6IHZlbmRvcixcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgICBsYW5nOiB0aGlzLnRhcmdldExhbmd1YWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHRhcmdldExhbmdMaXN0OiB0aGlzLnRhcmdldExhbmdMaXN0LFxyXG4gICAgICB2ZW5kb3JzOiB0aGlzLnZlbmRvcnMsXHJcbiAgICAgIGRvbWFpbnM6IHsgYWN0aXZlOiB0aGlzLmFjdGl2ZURvbWFpbiwgZG9tYWluczogdGhpcy5kb21haW5zIH0sXHJcbiAgICAgIHN3YXBMYW5nQWN0aXZlOiB0aGlzLmNhblN3YXBTeXN0ZW1MYW5ndWFnZXMoKSxcclxuICAgICAgc3lzdGVtOiBzeXN0ZW0sXHJcbiAgICAgIHJldHJhbnNsYXRlOiByZXRyYW5zbGF0ZSxcclxuICAgICAgcmVjZW50U3lzdGVtczogdGhpcy5yZWNlbnRTeXN0ZW1zLFxyXG4gICAgICBkZXRlY3RlZExhbmd1YWdlOiB0aGlzLmFjdGl2ZVN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID09PSB0aGlzLnNvdXJjZUxhbmd1YWdlID8gdGhpcy5hY3RpdmVTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA6IG51bGxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTeXN0ZW0oZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlSWQ6IHN0cmluZywgc291cmNlTGFuZ3VhZ2U6IHN0cmluZywgdGFyZ2V0TGFuZ3VhZ2U6IHN0cmluZywgdmVuZG9yOiBzdHJpbmcsIGRldGVjdGVkTGFuZ3VhZ2U6IHN0cmluZywgaW5jbHVkZXNUZXJtaW5vbG9neTogYm9vbGVhbik6IFN5c3RlbSB7XHJcbiAgICByZXR1cm4geyBkb21haW4sIGlkLCBsYW5ndWFnZUlkLCBzb3VyY2VMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2UsIHZlbmRvciwgZGV0ZWN0ZWRMYW5ndWFnZSwgaW5jbHVkZXNUZXJtaW5vbG9neSB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1zeXN0ZW0tbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXN5c3RlbS1tYW5hZ2VtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9DLGtDQUFrQyxFQUFnQixVQUFVLEVBQWlDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEssT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBTTFGLE1BQU0sT0FBTyxtQ0FBbUM7SUE4QzNCO0lBQ0E7SUFDQTtJQS9DbkIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFVO0lBQ3RCLGdCQUFnQixDQUFXO0lBRTNCLDBCQUEwQixHQUFHLHVDQUF1QyxDQUFDO0lBRTdELG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFFdkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hC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LEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDekgsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsRUFBVSxFQUFFLFVBQWtCLEVBQUUsY0FBc0IsRUFBRSxjQUFzQixFQUFFLE1BQWMsRUFBRSxnQkFBd0IsRUFBRSxtQkFBNEI7UUFDekwsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLENBQUE7SUFDbEgsQ0FBQzt3R0FoYlUsbUNBQW1DOzRHQUFuQyxtQ0FBbUMsY0FGbEMsTUFBTTs7NEZBRVAsbUNBQW1DO2tCQUgvQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZlRGF0YSwgQWxlcnRTZXJ2aWNlLCBEb21haW4sIExBU1RfVVNFRF9TWVNURU1fTE9DQUxfU1RPUkFHRV9LRVksIExhbmdMaXN0SXRlbSwgU29ydEhlbHBlciwgU3lzdGVtLCBTeXN0ZW1TZXJ2aWNlLCBWZW5kb3IgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZIH0gZnJvbSAnLi4vbW9kZWxzL2F1dG8tbGFuZ3VhZ2UtZGV0ZWN0aW9uLWtleS5jb25zdCc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3RsZC10cmFuc2xhdGUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uge1xyXG4gIG5vU3lzdGVtc0Vycm9yID0gZmFsc2U7XHJcbiAgc3lzdGVtczogU3lzdGVtW10gPSBbXTtcclxuICB3aWRnZXRJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHN5c0xpc3QgPSBuZXcgUmVwbGF5U3ViamVjdDxTeXN0ZW1bXT4oMSk7XHJcbiAgYWN0aXZlRG9tYWluITogRG9tYWluO1xyXG4gIGNhblN3YXBMYW5ndWFnZXMhOiBib29sZWFuO1xyXG5cclxuICBkZWZhdWx0RXJyb3JUcmFuc2xhdGlvbktleSA9ICdUTERfVFJBTlNMQVRFLkVSUk9SX05PX1NZU1RFTVNfTE9BREVEJztcclxuXHJcbiAgcHJpdmF0ZSBsb2FkZWRTeXN0ZW1zU3ViamVjdCA9IG5ldyBTdWJqZWN0PFN5c3RlbVtdPigpO1xyXG5cclxuICBnZXQgYWN0aXZlVmVuZG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3lzdGVtLnZlbmRvciB8fCB0aGlzLmRlZmF1bHRWZW5kb3I7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdFZlbmRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmRlZmF1bHRWZW5kb3I7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdERvbWFpbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5kZWZhdWx0RG9tYWlucyBhcyBzdHJpbmdbXTtcclxuICB9XHJcblxyXG4gIGdldCBkZWZhdWx0VGFyZ2V0TGFuZ3VhZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5kZWZhdWx0VGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjdGl2ZVN5c3RlbSE6IFN5c3RlbTtcclxuICBwcml2YXRlIGRvbWFpbnM6IERvbWFpbltdID0gW107XHJcbiAgcHJpdmF0ZSB2ZW5kb3JzOiBWZW5kb3JbXSA9IFtdO1xyXG4gIHByaXZhdGUgc291cmNlTGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB0YXJnZXRMYW5ndWFnZSE6IHN0cmluZztcclxuICBwcml2YXRlIHNvdXJjZUxhbmdMaXN0OiBMYW5nTGlzdEl0ZW1bXSA9IFtdO1xyXG4gIHByaXZhdGUgdGFyZ2V0TGFuZ0xpc3Q6IExhbmdMaXN0SXRlbVtdID0gW107XHJcblxyXG4gIC8vI3JlZ2lvbiBSZWNlbnQgc3lzdGVtIHZhcmlhYmxlc1xyXG4gIC8vIFBvc3NpYmx5IGZyb20gY29uZmlnXHJcbiAgZ2V0IHJlY2VudFN5c3RlbXNNYXhDb3VudCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcubWF4UmVjZW50U3lzdGVtQ291bnQgYXMgbnVtYmVyOyB9XHJcbiAgcHJpdmF0ZSByZWNlbnRTeXN0ZW1zOiBTeXN0ZW1bXSA9IFtdO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlY2VudFN5c3RlbUtleSA9IFwicmVjZW50U3lzdGVtc1wiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlOiBCZWhhdmlvclN1YmplY3Q8QWN0aXZlRGF0YT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGl2ZURhdGE+KDxhbnk+bnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydDogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAqIFRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCB3aGVuIGF1dG8gbGFuZ3VhZ2UgZGV0ZWN0aW9uIHdhcyBjaG9zZW4uXHJcbiAgKi9cclxuICBlbmFibGVMYW5ndWFnZURldGVjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcbiAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuc291cmNlTGFuZ3VhZ2UsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBUaGlzIG1ldGhvZCBpcyBiZWluZyB1c2VkIHRvIHNldCBkZXRlY3RlZCBsYW5ndWFnZSB3aGVuIGFwaSByZXNwb25zZSBoYXMgaXQuXHJcbiAgKiBBbHNvLCB3aGVuIGxhbmd1YWdlIHdhcyBkZXRlY3RlZCBhbmQgd2Ugd2FudCB0byBjbGVhciBzb3VyY2UgdGV4dCwgdGhpcyBtZXRob2QgYWxzbyBpcyBiZWluZyBjYWxsZWQuXHJcbiAgKi9cclxuICBzZXREZXRlY3RlZExhbmd1YWdlKGxhbmdDb2RlOiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZVN5c3RlbS5kZXRlY3RlZExhbmd1YWdlICYmIHRoaXMuc291cmNlTGFuZ3VhZ2UgIT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNTb3VyY2VMYW5nQ29kZVNhbWVBZnRlckRldGVjdGlvbiA9IHRoaXMuYWN0aXZlU3lzdGVtPy5kZXRlY3RlZExhbmd1YWdlID09PSB0aGlzLnNvdXJjZUxhbmd1YWdlO1xyXG4gICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGNsZWFyIG91dCBkZXRlY3RlZCBsYW5ndWFnZSwgYnV0IGtlZXAgdGhlIGRldGVjdGlvbiBlbmFibGVkLlxyXG4gICAgaWYgKCFsYW5nQ29kZSAmJiBpc1NvdXJjZUxhbmdDb2RlU2FtZUFmdGVyRGV0ZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBudWxsO1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuc291cmNlTGFuZ3VhZ2UsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgaXMgYmVpbmcgY2FsbGVkLCB3aGVuIGxhbmd1YWdlIGlzIGRldGVjdGVkLlxyXG4gICAgdGhpcy5zb3VyY2VMYW5ndWFnZSA9IGxhbmdDb2RlO1xyXG4gICAgdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBsYW5nQ29kZTtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UobGFuZ0NvZGUsIHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIGZhbHNlLCBkb21haW4pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3lzdGVtcygpOiBTeXN0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1zO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlTGFuZ3VhZ2Uoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nLCByZXRyYW5zbGF0ZT86IGJvb2xlYW4sIGRvbWFpbj86IHN0cmluZykge1xyXG4gICAgY29uc3Qgc3lzdGVtSWQgPSB0aGlzLmZpbmRDb3JyZWN0U3lzdGVtKHNvdXJjZSwgdGFyZ2V0LCBkb21haW4pO1xyXG4gICAgdGhpcy5jaGFuZ2VTeXN0ZW0oc3lzdGVtSWQsIHJldHJhbnNsYXRlKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVTeXN0ZW1PYmooKTogU3lzdGVtIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN5c3RlbTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZVZlbmRvcnNBbmREb21haW5zKCkge1xyXG4gICAgaWYgKCF0aGlzLnNvdXJjZUxhbmd1YWdlIHx8ICF0aGlzLnRhcmdldExhbmd1YWdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHZlbmRvcnM6IFZlbmRvcltdID0gW107XHJcbiAgICBjb25zdCBkb21haW5zOiBEb21haW5bXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICBpZiAoIShzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHRoaXMuc291cmNlTGFuZ3VhZ2UgJiYgc3lzdGVtLnRhcmdldExhbmd1YWdlID09PSB0aGlzLnRhcmdldExhbmd1YWdlKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRvbWFpbjogRG9tYWluID0ge1xyXG4gICAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICAgIHRpdGxlOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZ1xyXG4gICAgICB9O1xyXG4gICAgICBkb21haW5zLnB1c2goZG9tYWluKTtcclxuICAgICAgY29uc3QgdmVuZG9yOiBWZW5kb3IgPSB7XHJcbiAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgdGl0bGU6IHN5c3RlbS52ZW5kb3JcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF2ZW5kb3JzLmluY2x1ZGVzKHZlbmRvcikpIHtcclxuICAgICAgICB2ZW5kb3JzLnB1c2godmVuZG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRvbWFpbi5sYW5ndWFnZUlkID09PSB0aGlzLmFjdGl2ZVN5c3RlbS5sYW5ndWFnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEb21haW4gPSBkb21haW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvbWFpbnMgPSBkb21haW5zO1xyXG4gICAgdGhpcy52ZW5kb3JzID0gdmVuZG9ycztcclxuICB9XHJcblxyXG5cclxuICBnZXRMYXN0VXNlZFN5c3RlbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExBU1RfVVNFRF9TWVNURU1fTE9DQUxfU1RPUkFHRV9LRVkpIGFzIHN0cmluZztcclxuICB9XHJcblxyXG4gIGdldFVuaXF1ZUxhbmd1YWdlcyhsaXN0OiBMYW5nTGlzdEl0ZW1bXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghbGlzdCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aXRsZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGlzdC5mb3JFYWNoKChsYW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhbmdUaXRsZSA9IGxhbmcubGFuZztcclxuICAgICAgY29uc3QgaXggPSB0aXRsZXMuaW5kZXhPZihsYW5nVGl0bGUgYXMgc3RyaW5nKTtcclxuICAgICAgaWYgKGl4ID09IC0xKSB7XHJcbiAgICAgICAgdGl0bGVzLnB1c2gobGFuZ1RpdGxlIGFzIHN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aXRsZXM7XHJcbiAgfVxyXG5cclxuICBpbml0KGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRTeXN0ZW1MaXN0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogU3lzdGVtW10pID0+IHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSByZXM7XHJcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRTeXN0ZW1zU3ViamVjdC5uZXh0KHJlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3lzdGVtRXhpc3RzKGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkLCB0aGlzLnN5c3RlbXMpICYmIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkICE9PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICAgIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID0gdGhpcy5zeXN0ZW1zWzBdPy5sYW5ndWFnZUlkO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgdGhpcy5zeXN0ZW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZlbmRvciA9IHN5c3RlbS52ZW5kb3I7XHJcbiAgICAgICAgICAgIGlmICh2ZW5kb3IgPT09IHRoaXMuZGVmYXVsdFZlbmRvcikge1xyXG4gICAgICAgICAgICAgIGRlZmF1bHRTeXN0ZW1MYW5ndWFnZUlkID0gc3lzdGVtLmxhbmd1YWdlSWQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gdGhpcy5kZWZhdWx0VGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVJlY2VudFN5c3RlbUFycmF5KCk7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VMYW5nTGlzdCA9IHRoaXMuY3JlYXRlTGFuZ0xpc3QodGhpcy5zeXN0ZW1zKTtcclxuICAgICAgICB0aGlzLmNoYW5nZVN5c3RlbShkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCk7XHJcbiAgICAgICAgdGhpcy53aWRnZXRJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zeXNMaXN0Lm5leHQodGhpcy5zeXN0ZW1zKTtcclxuICAgICAgICB0aGlzLm5vU3lzdGVtc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChkZWZhdWx0U3lzdGVtTGFuZ3VhZ2VJZCA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZUxhbmd1YWdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub1N5c3RlbXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbGVydC5lcnJvcih0aGlzLmRlZmF1bHRFcnJvclRyYW5zbGF0aW9uS2V5LCBlcnJvcik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExvYWRlZFN5c3RlbXMoKTogT2JzZXJ2YWJsZTxTeXN0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkU3lzdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0VXNlZFN5c3RlbShzeXN0ZW1JZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oTEFTVF9VU0VEX1NZU1RFTV9MT0NBTF9TVE9SQUdFX0tFWSwgc3lzdGVtSWQpO1xyXG4gIH1cclxuXHJcbiAgc3dhcFN5c3RlbUxhbmd1YWdlcygpIHtcclxuICAgIHRoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy50YXJnZXRMYW5ndWFnZSwgdGhpcy5zb3VyY2VMYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTeXN0ZW0obGFuZ3VhZ2VJZDogc3RyaW5nLCByZXRyYW5zbGF0ZSA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZVN5c3RlbT8ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkU3lzdGVtITogU3lzdGVtO1xyXG5cclxuICAgIGlmICghbGFuZ3VhZ2VJZD8uaW5jbHVkZXMoQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiB0aGlzLnN5c3RlbXMpIHtcclxuICAgICAgICBpZiAoc3lzdGVtLmxhbmd1YWdlSWQgPT09IGxhbmd1YWdlSWQpIHtcclxuICAgICAgICAgIHNlbGVjdGVkU3lzdGVtID0gc3lzdGVtO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFN5c3RlbSA9IHRoaXMuY3JlYXRlU3lzdGVtKCcnLCBsYW5ndWFnZUlkLCBsYW5ndWFnZUlkLCB0aGlzLnNvdXJjZUxhbmd1YWdlLCB0aGlzLnRhcmdldExhbmd1YWdlLCAnJywgbnVsbCwgZmFsc2UpO1xyXG5cclxuICAgICAgdGhpcy50YXJnZXRMYW5nTGlzdCA9IHRoaXMuY3JlYXRlTGFuZ0xpc3QodGhpcy5zeXN0ZW1zLCB0aGlzLnNvdXJjZUxhbmd1YWdlKTtcclxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9IHRoaXMudGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSB0aGlzLnNvdXJjZUxhbmd1YWdlO1xyXG4gICAgICB0aGlzLmFjdGl2ZVN5c3RlbSA9IHNlbGVjdGVkU3lzdGVtO1xyXG4gICAgICB0aGlzLmRvbWFpbnMgPSBbXTtcclxuICAgICAgdGhpcy52ZW5kb3JzID0gW107XHJcblxyXG4gICAgICB0aGlzLm9uQWN0aXZlU3lzdGVtQ2hhbmdlKHJldHJhbnNsYXRlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkU3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLmFjdGl2ZVN5c3RlbT8uZGV0ZWN0ZWRMYW5ndWFnZTtcclxuXHJcbiAgICB0aGlzLnRhcmdldExhbmdMaXN0ID0gdGhpcy5jcmVhdGVMYW5nTGlzdCh0aGlzLnN5c3RlbXMsIHNlbGVjdGVkU3lzdGVtLnNvdXJjZUxhbmd1YWdlKTtcclxuICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPSBzZWxlY3RlZFN5c3RlbS50YXJnZXRMYW5ndWFnZTtcclxuICAgIHRoaXMuc291cmNlTGFuZ3VhZ2UgPSBzZWxlY3RlZFN5c3RlbS5zb3VyY2VMYW5ndWFnZTtcclxuICAgIHRoaXMuYWN0aXZlU3lzdGVtID0gc2VsZWN0ZWRTeXN0ZW07XHJcbiAgICB0aGlzLmdldEFjdGl2ZVZlbmRvcnNBbmREb21haW5zKCk7XHJcblxyXG4gICAgdGhpcy5vbkFjdGl2ZVN5c3RlbUNoYW5nZShyZXRyYW5zbGF0ZSk7XHJcblxyXG4gICAgdGhpcy5zZXRMYXN0VXNlZFN5c3RlbShzZWxlY3RlZFN5c3RlbS5sYW5ndWFnZUlkKTtcclxuICB9XHJcblxyXG4gIHN5c3RlbUV4aXN0cyhsYW5ndWFnZUlkOiBzdHJpbmcsIHN5c3RlbUxpc3Q6IFN5c3RlbVtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzeXN0ZW1zID0gc3lzdGVtTGlzdCA/PyB0aGlzLnN5c3RlbXM7XHJcbiAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiBzeXN0ZW1zKSB7XHJcbiAgICAgIGlmIChzeXN0ZW0ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNUZXJtaW5vbG9neVN1cHBvcnRlZChzeXN0ZW06IFN5c3RlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHN5c3RlbS5pbmNsdWRlc1Rlcm1pbm9sb2d5IGFzIGJvb2xlYW47XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2VMYW5ndWFnZShzb3VyY2VMYW5ndWFnZUNvZGU6IHN0cmluZykge1xyXG4gICAgaWYgKHNvdXJjZUxhbmd1YWdlQ29kZSA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlTGFuZ3VhZ2VEZXRlY3Rpb24oKTtcclxuICAgICAgcmV0dXJuOyAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKHNvdXJjZUxhbmd1YWdlQ29kZSA9PT0gdGhpcy5hY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMYW5ndWFnZShzb3VyY2VMYW5ndWFnZUNvZGUsIHRoaXMuYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHNvdXJjZUxhbmd1YWdlQ29kZSwgdGhpcy5hY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUYXJnZXRMYW5ndWFnZSh0YXJnZXRMYW5ndWFnZUNvZGU6IHN0cmluZykge1xyXG4gICAgaWYgKHRhcmdldExhbmd1YWdlQ29kZSA9PT0gdGhpcy5hY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLmFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2VDb2RlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMuYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlLCB0YXJnZXRMYW5ndWFnZUNvZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZWNlbnRTeXN0ZW1BcnJheSgpIHtcclxuICAgIGxldCBzeXN0ZW1JZEFycmF5OiBzdHJpbmdbXTtcclxuICAgIGNvbnN0IHJlY2VudFN5c3RlbUFycmF5OiBTeXN0ZW1bXSA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgc3lzdGVtSWRBcnJheSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5yZWNlbnRTeXN0ZW1LZXkpID8/IFwiW11cIik7XHJcbiAgICB9XHJcbiAgICBjYXRjaCB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN5c3RlbUlkQXJyYXkuZm9yRWFjaCgobGFuZ3VhZ2VJZCkgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ1N5c3RlbSA9IHRoaXMuc3lzdGVtcy5maW5kKHN5c3RlbSA9PiBzeXN0ZW0ubGFuZ3VhZ2VJZCA9PT0gbGFuZ3VhZ2VJZCk7XHJcbiAgICAgIGlmIChleGlzdGluZ1N5c3RlbSAmJiAhdGhpcy5yZWNlbnRTeXN0ZW1zLmluY2x1ZGVzKGV4aXN0aW5nU3lzdGVtKSkge1xyXG4gICAgICAgIHJlY2VudFN5c3RlbUFycmF5LnB1c2goZXhpc3RpbmdTeXN0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZWNlbnRTeXN0ZW1zID0gcmVjZW50U3lzdGVtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFRvUmVjZW50U3lzdGVtQXJyYXkoc3lzdGVtOiBTeXN0ZW0pIHtcclxuICAgIGlmIChzeXN0ZW0uaWQgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdTeXN0ZW0gPSB0aGlzLnJlY2VudFN5c3RlbXMuZmluZChleGlzdGluZyA9PiBleGlzdGluZy5sYW5ndWFnZUlkID09PSBzeXN0ZW0ubGFuZ3VhZ2VJZCk7XHJcbiAgICAvLyBpZiBzeXN0ZW0gYWxyZWFkeSBpbiBsaXN0LCBwdXQgaXQgdG8gZmlyc3QgcG9zaXRpb24uIElmIGl4IDAsIG5vIGFjdGlvbiByZXF1aXJlZCBzaW5jZSBsYXRlc3Qgc3lzdGVtIGlzIGFscmVhZHkgZmlyc3QuXHJcbiAgICBpZiAoZXhpc3RpbmdTeXN0ZW0pIHtcclxuICAgICAgY29uc3Qgc3lzdGVtSXhJblJlY2VudExpc3QgPSB0aGlzLnJlY2VudFN5c3RlbXMuaW5kZXhPZihleGlzdGluZ1N5c3RlbSk7XHJcbiAgICAgIGlmIChzeXN0ZW1JeEluUmVjZW50TGlzdCA+IDApIHtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMuc3BsaWNlKHN5c3RlbUl4SW5SZWNlbnRMaXN0LCAxKTtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMuc3BsaWNlKDAsIDAsIHN5c3RlbSk7XHJcbiAgICAgICAgLy8gcmVzZXRpbmcgZGV0ZWN0ZWRMYW5ndWFnZSwgc28gKC0gRGV0ZWN0ZWQpIGxhYmVsIGRvZXNudCBhcHBlYXJzIGlmIHdlIHNlbGVjdCBsYW5ndWFnZSBkaXJlY3Rpb24gZnJvbSByZWNlbnQgc3lzdGVtIGxpc3RcclxuICAgICAgICBzeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIGlmIGxpc3QgdG9vIGxvbmcsIHJlbW92ZSBsYXN0IChvbGRlc3QgZWxlbWVudClcclxuICAgICAgd2hpbGUgKHRoaXMucmVjZW50U3lzdGVtcy5sZW5ndGggPj0gdGhpcy5yZWNlbnRTeXN0ZW1zTWF4Q291bnQpIHtcclxuICAgICAgICB0aGlzLnJlY2VudFN5c3RlbXMucG9wKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVjZW50U3lzdGVtcy5zcGxpY2UoMCwgMCwgc3lzdGVtKTtcclxuICAgIH1cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMucmVjZW50U3lzdGVtS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLnJlY2VudFN5c3RlbXMubWFwKHN5c3RlbSA9PiBzeXN0ZW0ubGFuZ3VhZ2VJZCkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuU3dhcFN5c3RlbUxhbmd1YWdlcygpOiBib29sZWFuIHtcclxuICAgIGxldCBsYW5nU3dhcEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuc3lzdGVtcykge1xyXG4gICAgICBjb25zdCBzeXN0ZW0gPSBlbGVtZW50O1xyXG4gICAgICBpZiAoc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09IHRoaXMudGFyZ2V0TGFuZ3VhZ2UgJiYgc3lzdGVtLnRhcmdldExhbmd1YWdlID09IHRoaXMuc291cmNlTGFuZ3VhZ2UpIHtcclxuICAgICAgICBsYW5nU3dhcEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FuU3dhcExhbmd1YWdlcyA9IGxhbmdTd2FwQWN0aXZlO1xyXG4gICAgcmV0dXJuIGxhbmdTd2FwQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMYW5nTGlzdChzeXN0ZW1zOiBTeXN0ZW1bXSwgc3JjTGFuZ0NvZGU/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGxhbmdMaXN0SXRlbUFycmF5OiBMYW5nTGlzdEl0ZW1bXSA9IFtdO1xyXG4gICAgc3lzdGVtcy5mb3JFYWNoKChzeXN0ZW0pID0+IHtcclxuICAgICAgaWYgKCFzcmNMYW5nQ29kZSB8fCBzcmNMYW5nQ29kZSA9PT0gc3lzdGVtLnNvdXJjZUxhbmd1YWdlIHx8IHNyY0xhbmdDb2RlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkpIHtcclxuICAgICAgICBsYW5nTGlzdEl0ZW1BcnJheS5wdXNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkb21haW46IHN5c3RlbS5kb21haW4gYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBsYW5nOiBzcmNMYW5nQ29kZSA/IHN5c3RlbS50YXJnZXRMYW5ndWFnZSA6IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VJZDogc3lzdGVtLmxhbmd1YWdlSWQsXHJcbiAgICAgICAgICAgIHZlbmRvcjogc3lzdGVtLnZlbmRvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gbGFuZ0xpc3RJdGVtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDb3JyZWN0U3lzdGVtKHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsIHRhcmdldExhbmd1YWdlOiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoc291cmNlTGFuZ3VhZ2UgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICB0aGlzLnRhcmdldExhbmd1YWdlID0gdGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlID0gdGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgIHJldHVybiBgJHtBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVl9LSR7dGFyZ2V0TGFuZ3VhZ2V9YFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN5c3RlbXMgPSB0aGlzLnN5c3RlbXM7XHJcblxyXG4gICAgY29uc3Qgc3lzdGVtc0Zvckxhbmd1YWdlUGFpciA9IHN5c3RlbXMuZmlsdGVyKHN5c3RlbSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHNvdXJjZUxhbmd1YWdlICYmIHRhcmdldExhbmd1YWdlID09PSBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG4gICAgLy8gSWRlYWxseSB0aGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBpdCBpcyBwb3NzaWJsZS5cclxuICAgIGlmIChzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zeXN0ZW1zLmZpbmQoc3lzdGVtID0+IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gc291cmNlTGFuZ3VhZ2UpPy5sYW5ndWFnZUlkIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yID0gc3lzdGVtc0Zvckxhbmd1YWdlUGFpci5maWx0ZXIoc3lzdGVtID0+IChzeXN0ZW0udmVuZG9yIHx8IHRoaXMuZGVmYXVsdFZlbmRvcikgPT09IHRoaXMuZGVmYXVsdFZlbmRvcik7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0VmVuZG9yLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IgPSBzeXN0ZW1zRm9yTGFuZ3VhZ2VQYWlyO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3IuZmlsdGVyKHN5c3RlbSA9PiBkb21haW4gPyBzeXN0ZW0uZG9tYWluID09PSBkb21haW4gOiB0aGlzLmRlZmF1bHREb21haW5zLmluY2x1ZGVzKHN5c3RlbS5kb21haW4gYXMgc3RyaW5nKSk7XHJcbiAgICBpZiAoc3lzdGVtc1dpdGhEZWZhdWx0RG9tYWluLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzeXN0ZW1zV2l0aERlZmF1bHREb21haW4gPSBzeXN0ZW1zV2l0aERlZmF1bHRWZW5kb3I7XHJcbiAgICB9XHJcbiAgICBTb3J0SGVscGVyLnNvcnRCeUFycmF5KHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpbiwgdGhpcy5kZWZhdWx0RG9tYWlucywgXCJkb21haW5cIik7XHJcblxyXG4gICAgcmV0dXJuIHN5c3RlbXNXaXRoRGVmYXVsdERvbWFpblswXS5sYW5ndWFnZUlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFjdGl2ZVN5c3RlbUNoYW5nZShyZXRyYW5zbGF0ZSA9IHRydWUpIHtcclxuICAgIGNvbnN0IHN5c3RlbTogU3lzdGVtID0gdGhpcy5hY3RpdmVTeXN0ZW07XHJcbiAgICBjb25zdCB2ZW5kb3IgPSB0aGlzLmFjdGl2ZVN5c3RlbS52ZW5kb3I7XHJcblxyXG4gICAgaWYgKHRoaXMuc291cmNlTGFuZ3VhZ2UgIT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSkge1xyXG4gICAgICB0aGlzLmFkZFRvUmVjZW50U3lzdGVtQXJyYXkoc3lzdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGl2ZS5uZXh0KHtcclxuICAgICAgc291cmNlTGFuZzoge1xyXG4gICAgICAgIGxhbmc6IHRoaXMuc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZyxcclxuICAgICAgICB2ZW5kb3I6IHZlbmRvcixcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgfSxcclxuICAgICAgc291cmNlTGFuZ0xpc3Q6IHRoaXMuc291cmNlTGFuZ0xpc3QsXHJcbiAgICAgIHN5c3RlbUlkOiBzeXN0ZW0uaWQsXHJcbiAgICAgIGxhbmd1YWdlSWQ6IHN5c3RlbS5sYW5ndWFnZUlkLFxyXG4gICAgICB0YXJnZXRMYW5nOiB7XHJcbiAgICAgICAgZG9tYWluOiBzeXN0ZW0uZG9tYWluIGFzIHN0cmluZyxcclxuICAgICAgICB2ZW5kb3I6IHZlbmRvcixcclxuICAgICAgICBsYW5ndWFnZUlkOiBzeXN0ZW0ubGFuZ3VhZ2VJZCxcclxuICAgICAgICBsYW5nOiB0aGlzLnRhcmdldExhbmd1YWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHRhcmdldExhbmdMaXN0OiB0aGlzLnRhcmdldExhbmdMaXN0LFxyXG4gICAgICB2ZW5kb3JzOiB0aGlzLnZlbmRvcnMsXHJcbiAgICAgIGRvbWFpbnM6IHsgYWN0aXZlOiB0aGlzLmFjdGl2ZURvbWFpbiwgZG9tYWluczogdGhpcy5kb21haW5zIH0sXHJcbiAgICAgIHN3YXBMYW5nQWN0aXZlOiB0aGlzLmNhblN3YXBTeXN0ZW1MYW5ndWFnZXMoKSxcclxuICAgICAgc3lzdGVtOiBzeXN0ZW0sXHJcbiAgICAgIHJldHJhbnNsYXRlOiByZXRyYW5zbGF0ZSxcclxuICAgICAgcmVjZW50U3lzdGVtczogdGhpcy5yZWNlbnRTeXN0ZW1zLFxyXG4gICAgICBkZXRlY3RlZExhbmd1YWdlOiB0aGlzLmFjdGl2ZVN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID09PSB0aGlzLnNvdXJjZUxhbmd1YWdlID8gdGhpcy5hY3RpdmVTeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSA6IG51bGxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTeXN0ZW0oZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlSWQ6IHN0cmluZywgc291cmNlTGFuZ3VhZ2U6IHN0cmluZywgdGFyZ2V0TGFuZ3VhZ2U6IHN0cmluZywgdmVuZG9yOiBzdHJpbmcsIGRldGVjdGVkTGFuZ3VhZ2U6IHN0cmluZywgaW5jbHVkZXNUZXJtaW5vbG9neTogYm9vbGVhbik6IFN5c3RlbSB7XHJcbiAgICByZXR1cm4geyBkb21haW4sIGlkLCBsYW5ndWFnZUlkLCBzb3VyY2VMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2UsIHZlbmRvciwgZGV0ZWN0ZWRMYW5ndWFnZSwgaW5jbHVkZXNUZXJtaW5vbG9neSB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -149,7 +149,7 @@ export class TldTranslateTextService {
149
149
  }
150
150
  clearSource() {
151
151
  this._onClear.next(null);
152
- this.systemManagementService.setDetectedLanguage('');
152
+ this.resetDetectedLanguage();
153
153
  this.changeSource({ phrase: "" });
154
154
  }
155
155
  onClear() {
@@ -230,6 +230,13 @@ export class TldTranslateTextService {
230
230
  this.dictionarySubscription.unsubscribe();
231
231
  }
232
232
  }
233
+ resetDetectedLanguage() {
234
+ // source language is not changed after detection
235
+ const sourceLangIsNotChanged = this.activeData.sourceLanguage === this.activeData.detectedLanguage;
236
+ if (this.configService.textConfig.isAutoLanguageDetectionEnabled && this.activeData.detectedLanguage && sourceLangIsNotChanged) {
237
+ this.systemManagementService.setDetectedLanguage('');
238
+ }
239
+ }
233
240
  recreateParagraphTranslationSubject() {
234
241
  this._firstParagraphTranslated = false;
235
242
  this.paragraphTranslationsSubject = new Subject();
@@ -431,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
431
438
  providedIn: 'root'
432
439
  }]
433
440
  }], ctorParameters: function () { return [{ type: i1.TldTranslateTextApiService }, { type: i2.TldTranslateSystemManagementService }, { type: i3.TldScrollService }, { type: i2.TldTranslateConfigService }, { type: i4.TranslateService }, { type: i2.TldHighlightService }, { type: i5.AlertService }, { type: i5.TerminologyService }]; } });
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLHVCQUF1QixFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQzlHLE9BQU8sRUFBYyxPQUFPLEVBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUk1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU14RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU0xRSxNQUFNLE9BQU8sdUJBQXVCO0lBcUhmO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUExSFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBZ0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNuRSxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxF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Q0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPO2dCQUNMLElBQUk7Z0JBQ0osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsY0FBYzthQUNyRSxDQUFBO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBM2RVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBIdG1sSGVscGVyLCBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSwgVGVybWlub2xvZ3lTZXJ2aWNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2UsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZU1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUZXh0VG9TcGVlY2hTZXR0aW5ncyB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3RleHQtdG8tc3BlZWNoL21vZGVscy90ZXh0LXRvLXNwZWVjaC1zZXR0aW5ncy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9lcnJvcnMvZXJyb3ItY29kZXMuZW51bSc7XHJcbmltcG9ydCB7IFRsZEhpZ2hsaWdodFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsIFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRGljdGlvbmFyeUVudHJ5LCBJU291cmNlQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvZGljdGlvbmFyeS5tb2RlbCc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFRyZWVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBJSGlnaGxpZ2h0VHJlZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IElQYXJhZ3JhcGhJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC5tb2RlbCc7XHJcbmltcG9ydCB7IElSZXRyYW5zbGF0ZVBhcmFtcyB9IGZyb20gJy4uL21vZGVscy9yZXRyYW5zbGF0ZS1wYXJhbXMubW9kZWwnO1xyXG5pbXBvcnQgeyBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdHJhbnNsYXRlLXBhcmFncmFwaC1yZXNwb25zZS5tb2RlbCc7XHJcbmltcG9ydCB7IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGggfSBmcm9tICcuLi9tb2RlbHMvdW50cmFuc2xhdGVkLXBhcmFncmFwaC5tb2RlbCc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRVdGlscyB9IGZyb20gJy4uL3V0aWxzL3RsZC10cmFuc2xhdGUtdGV4dC51dGlscyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkvdGxkLXRyYW5zbGF0ZS10ZXh0LWFwaS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVNjcm9sbDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlU2Nyb2xsKCkgeyByZXR1cm4gdGhpcy5fc291cmNlU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCB0cmFuc2xhdGVCdXR0b25DbGljaygpIHsgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2hhc0RpY3Rpb25hcnk6IGJvb2xlYW47XHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLl9oYXNEaWN0aW9uYXJ5OyB9XHJcbiAgc2V0IGhhc0RpY3Rpb25hcnkodmFsKSB7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gdmFsO1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpY3Rpb25hcnlFbnRyeTogSURpY3Rpb25hcnlFbnRyeVtdO1xyXG4gIGdldCBkaWN0aW9uYXJ5RW50cnkoKSB7IHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBzZXQgZGljdGlvbmFyeUVudHJ5KHZhbCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gdmFsO1xyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeUVudHJ5KSB7XHJcbiAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB0cmFuc2xhdGVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5tYXAobGluZSA9PiBsaW5lLm9yaWdpbmFsVGV4dCkuam9pbihcIlxcblwiKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DbGVhciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgdXJsVG9UcmFuc2xhdGU6IHN0cmluZztcclxuICBwYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgc291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gIHRhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgaXNTeXN0ZW1XYWtpbmdVcCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIFNldCB0aGlzIG9iamVjdCB3aXRoIG5lY2Vzc2FyeSB2YWx1ZXMgdG8gZGlzcGxheSBUVFMgY29tcG9uZW50XHJcbiAgdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3M6IFRleHRUb1NwZWVjaFNldHRpbmdzO1xyXG4gIHRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuXHJcbiAgcHJpdmF0ZSBfZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkOiBib29sZWFuO1xyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9uYXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuICBwcml2YXRlIHBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZXI6IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4oKTtcclxuICBwcml2YXRlIGRlYm91bmNlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIC8qKiBIb3cgbWFueSBwYXJhZ3JhcGhzIGNhbiBiZSB0cmFuc2xhdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBDT05DVVJSRU5UX1VQTE9BRFMgPSA1O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDEwMDA7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieUVuZ2luZU5vdGlmaWNhdGlvbkVycm9yS2V5ID0gJzIxJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dCA9IDMwMDA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVUZXJtQ29sbGVjdGlvbk5vdEZvdW5kRXJyb3JLZXkgPSAnNDA0MjAxJztcclxuXHJcbiAgLyoqIFdoZXRoZXIgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBiZSBzaG93bi4gVGhpcyB2YWx1ZSBtdXN0IGJlIHNldCB0byB0cnVlIG9ubHkgaWYgY29uZmlndXJlZCB0aW1lIGhhcyBwYXNzZWQuICovXHJcbiAgcHJpdmF0ZSBfc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gZmFsc2U7XHJcbiAgZ2V0IHNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcigpIHsgcmV0dXJuIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIC8vTm9kZUpTLlRpbWVvdXRcclxuICBwcml2YXRlIHByb2dyZXNzSW5kaWNhdG9yVGltZW91dDogYW55O1xyXG5cclxuICBwcml2YXRlIF91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgZ2V0IHVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50KCkgeyByZXR1cm4gdGhpcy5fdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQ7IH1cclxuICBzZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSB2YWx1ZTtcclxuICAgIC8vIFdoZW4gdHJhbnNsYXRpb24gZmluaXNoZWQsIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgbm90IGJlIHNob3duLlxyXG4gICAgaWYgKHZhbHVlID09PSAwKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlVGV4dFRvU3BlZWNoKCk7XHJcbiAgICAgIHRoaXMuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUcmFuc2xhdGluZygpIHsgcmV0dXJuIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPiAwIHx8IHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCB9XHJcblxyXG4gIC8vIGdldHRlcnMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbjsgfTtcclxuICBnZXQgYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4OyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXg7IH07XHJcbiAgZ2V0IHVzZURpY3Rpb25hcnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy51c2VEaWN0aW9uYXJ5OyB9O1xyXG4gIGdldCBwcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHM7IH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXQgYWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkge1xyXG4gICAgaWYgKHRoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXggPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVybFRvVHJhbnNsYXRlKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZ30ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHt0aGlzLnVybFRvVHJhbnNsYXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSWYgZGljdGF0dGlvbiBpcyBhY3RpdmUuIEJhc2VkIG9uIHRoaXMsIGV4dGVuc2lvbnMgYXJlIGhpZGRlbi4gKi9cclxuICBpc0RpY3RhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHNTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlcm1pbm9sb2d5U2VydmljZTogVGVybWlub2xvZ3lTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBkaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dDogc3RyaW5nLCBzcmNDb2RlOiBzdHJpbmcsIHRyZ0NvZGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpLmRpY3Rpb25hcnlUcmFuc2xhdGlvbih0ZXh0LCBzcmNDb2RlLCB0cmdDb2RlKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZShldmVudDogSVNvdXJjZUNoYW5nZUV2ZW50KSB7XHJcbiAgICB0aGlzLl9zb3VyY2VUZXh0ID0gZXZlbnQucGhyYXNlO1xyXG4gICAgdGhpcy5fc291cmNlQ2hhbmdlLm5leHQoZXZlbnQpO1xyXG4gICAgdGhpcy5kZWJvdW5jZXIubmV4dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKHRleHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc291cmNlVGV4dEh5cG90aGVzaXMgPSB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgb25Tb3VyY2VTY3JvbGwob2Zmc2V0VG9wOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3NvdXJjZVNjcm9sbC5uZXh0KG9mZnNldFRvcCk7XHJcbiAgfVxyXG5cclxuICBvblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2submV4dChudWxsKVxyXG4gICAgdGhpcy5yZXRyYW5zbGF0ZSh7IGJ1dHRvbkNsaWNrZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNvdXJjZSgpIHtcclxuICAgIHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZSgnJyk7XHJcbiAgICB0aGlzLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogXCJcIiB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9vbkNsZWFyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVHJhbnNsYXRpb24ob3B0aW9uczogc3RyaW5nLCBzeXN0ZW1JRDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaS51cGRhdGVUcmFuc2xhdGlvbihvcHRpb25zLCBzeXN0ZW1JRCwgdGV4dCwgdHJhbnNsYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbiA9IHRoaXMuZGVib3VuY2VyLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91cykgPT4ge1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cy5waHJhc2UgPT0gdGhpcy5zb3VyY2VUZXh0O1xyXG4gICAgICB9KSxcclxuICAgICAgZGVib3VuY2UoZXYgPT4gZXYucGhyYXNlPy5sZW5ndGggPiAwID8gdGltZXIodGhpcy5ERUJPVU5DRV9USU1FKSA6IHRpbWVyKDApKVxyXG4gICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jaGFuZ2VTZWxlY3RlZFRhcmdldFNlbnRlbmNlKG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50LmRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wTGlzdGVuaW5nVG9DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gaWYgbWV0aG9kIGdldHMgY2FsbGVkIGJlY2F1c2Ugb2YgYnV0dG9uIGNsaWNrIGFuZCB1cmwgZW50ZXJlZCAtIGdvIHRvIHdlYiB0cmFuc2xhdGlvblxyXG4gIHJldHJhbnNsYXRlKHBhcmFtcz86IElSZXRyYW5zbGF0ZVBhcmFtcykge1xyXG4gICAgaWYgKCF0aGlzLnNvdXJjZVRleHQgfHwgdGhpcy5zb3VyY2VUZXh0ID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCB8fCBwYXJhbXM/LnN5c3RlbUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbUlkID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5nZXRBY3RpdmVTeXN0ZW1PYmooKS5pZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sbGVjdGlvbiA9IHRoaXMudGVybWlub2xvZ3lTZXJ2aWNlLmVuZ2luZXNbYWN0aXZlU3lzdGVtSWRdPy5zZWxlY3RlZDtcclxuICAgIC8vIGlmIGNvbGxlY3Rpb24gaXMgbm90IGltcG9ydGVkIHdlIHdhbnQgdG8gYXZvaWQgaW5zdGFudCB0cmFuc2xhdGlvblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sbGVjdGlvbiAmJiAhc2VsZWN0ZWRDb2xsZWN0aW9uPy5tdENvbGxlY3Rpb24pIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoe2J1dHRvbkNsaWNrZWQ6IHRydWV9KTtcclxuICAgICAgICB9LCAzMDAwKSAgICAgIFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWF4U291cmNlQ2hhcmFjdGVyRGljdGlvbmFyeSA9IDIwMDtcclxuICAgIGNvbnN0IG1heERpY3Rpb25hcnlXb3JkcyA9IDEyO1xyXG5cclxuICAgIGNvbnN0IHdvcmRzSW5Tb3VyY2UgPSBIdG1sSGVscGVyLmdldFdvcmRDb3VudCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IEh0bWxIZWxwZXIuaXNUZXh0VXJsKHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICBpZiAodGhpcy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbiAmJiB0aGlzLnVybFRvVHJhbnNsYXRlKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBbXTtcclxuICAgICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSB8fCBwYXJhbXM/LmJ1dHRvbkNsaWNrZWQpIHtcclxuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnRyYW5zbGF0ZVVybFJlZGlyZWN0LCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPLiBMZXRvbmlrYSBkaWN0aW9uYXJ5P1xyXG4gICAgaWYgKHRoaXMudXNlRGljdGlvbmFyeSAmJiB0aGlzLnNvdXJjZVRleHQubGVuZ3RoIDwgbWF4U291cmNlQ2hhcmFjdGVyRGljdGlvbmFyeSAmJiB3b3Jkc0luU291cmNlIDw9IG1heERpY3Rpb25hcnlXb3Jkcykge1xyXG4gICAgICB0aGlzLnByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICB9XHJcblxyXG4gIC8qKiBTdG9wcyB0ZXh0IHRyYW5zbGF0aW9uIGlmIGl0IGlzIGFjdGl2ZS4gKi9cclxuICBzdG9wVHJhbnNsYXRpb24oKSB7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdCgpIHtcclxuICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKHVudHJhbnNsYXRlZFBhcmFncmFwaCkgPT4ge1xyXG4gICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVQYXJhZ3JhcGgodW50cmFuc2xhdGVkUGFyYWdyYXBoKS5waXBlKFxyXG4gICAgICAgICAgdGFwKChyZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGFuZGxlIHJlc3BvbnNlIGlmIHNvdXJjZSB0ZXh0IGhhcyBjaGFuZ2VkLlxyXG4gICAgICAgICAgICBpZiAoc291cmNlICE9IHRoaXMuc291cmNlVGV4dCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYW5zbGF0ZWRQYXJhZ3JhcGgocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhcmFncmFwaHModW50cmFuc2xhdGVkUGFyYWdyYXBoLml4LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID09PSAwICYmIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5kZWxldGVNZXNzYWdlKE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLklORk8sICdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIuZXJyb3I7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLnVuaGFuZGVsZWRFcnJvcih7IEVycm9yQ29kZTogRXJyb3JDb2RlLlRSQU5TTEFUSU9OX0ZBSUxFRCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcj8uRXJyb3JDb2RlID09PSB0aGlzLnN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5pbmZvKCdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSgpO1xyXG4gICAgICAgICAgICAgIH0sIHRoaXMuc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0KVxyXG5cclxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LmVycm9yPy5jb2RlID09IHRoaXMuZW5naW5lVGVybUNvbGxlY3Rpb25Ob3RGb3VuZEVycm9yS2V5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmVycm9yKCdFUlJPUlMuRV80MDQyMDEnLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgc3ViamVjdCBpcyBkZXN0cm95ZWQgYW5kIHVuc3Vic2NyaWJlZCwgc28gdGhyb3duIGVycm9yIHdvbnQgaGF2ZSBhbnkgZWZmZWN0LlxyXG4gICAgICAgICAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgfSwgdGhpcy5DT05DVVJSRU5UX1VQTE9BRFMpLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFncmFwaDogSVVudHJhbnNsYXRlZFBhcmFncmFwaCk6IE9ic2VydmFibGU8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zID0ge1xyXG4gICAgICBwYXJhZ3JhcGhJeDogcGFyYWdyYXBoLml4LFxyXG4gICAgICB0ZXh0OiBwYXJhZ3JhcGgubGluZSxcclxuICAgICAgc3lzdGVtOiB0aGlzLmFjdGl2ZURhdGFcclxuICAgIH07XHJcbiAgICBpZiAoIXBhcmFtcy50ZXh0IHx8IHBhcmFtcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2Yoe1xyXG4gICAgICAgIHNvdXJjZVRyZWU6IHsgdGV4dDogXCJcIiwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IFwiXCIgfSxcclxuICAgICAgICB0YXJnZXRUcmVlOiB7IHRleHQ6IFwiXCIsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBcIlwiIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHBhcmFncmFwaDogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSB7XHJcbiAgICAvL2lmIGF1dG8gZG9tYWluIGRldGVjdGlvbiBpcyBvbiwgc3lzdGVtIGFwaSBzZXJ2aWNlIHNldHMgc3lzdGVtIGlkIHRvIGAke3NyY0xhbmd9LSR7dGFyZ2V0TGFuZ31gIHNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgaWYgdGhhdCBpcyB0aGUgY2FzZVxyXG4gICAgaWYgKHBhcmFncmFwaC5zeXN0ZW1JZCAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgIT09IHBhcmFncmFwaC5zeXN0ZW1JZFxyXG4gICAgICAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgPT09IGAke3RoaXMuYWN0aXZlRGF0YS5zb3VyY2VMYW5ndWFnZX0tJHt0aGlzLmFjdGl2ZURhdGEudGFyZ2V0TGFuZ3VhZ2V9YCkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmNoYW5nZVN5c3RlbShwYXJhZ3JhcGguc3lzdGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5lZWRzIHRvIHNjcm9sbCB0byB0b3AgYWZ0ZXIgZmlyc3QgcGFyYWdyYXBoIGlzIHRyYW5zbGF0ZWQuXHJcbiAgICBpZiAoIXRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCkge1xyXG4gICAgICAvLyBpZiBlbXB0eSBwYXJhZ3JhcGggaXMgJ3RyYW5zbGF0ZWQnIGZpcnN0LCBubyBuZWVkIHRvIGRvIGFueSBzY3JvbGxpbmcuIFdhaXQgZm9yIHJlYWwgdGV4dCB0byBiZSB0cmFuc2xhdGVkLlxyXG4gICAgICBpZiAocGFyYWdyYXBoLnRhcmdldFRyZWUudGV4dC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnN5bmNTY3JvbGxiYXJzKG51bGwsIDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhcmFncmFwaHMocGFyYWdyYXBoSXg6IG51bWJlciwgcmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgbGV0IHBhcmFncmFwaDogSVBhcmFncmFwaEluZm8gPSB7XHJcbiAgICAgIGl4OiBwYXJhZ3JhcGhJeCxcclxuICAgICAgdGFyZ2V0OiByZXNwb25zZS50YXJnZXRUcmVlLFxyXG4gICAgICBzb3VyY2U6IHJlc3BvbnNlLnNvdXJjZVRyZWVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcGFyYWdyYXBoKTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnNvdXJjZVRyZWUpO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcmVzcG9uc2UudGFyZ2V0VHJlZSk7XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNvcnQoKGEsIGIpID0+IChhLml4ID4gYi5peCkgPyAxIDogLTEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNvdXJjZVBhcmFtcygpIHtcclxuICAgIHRoaXMuX2RpY3Rpb25hcnlFbnRyeSA9IG51bGw7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtT2JqZWN0ID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSxcclxuICAgICAgYWN0aXZlU3lzdGVtT2JqZWN0LnNvdXJjZUxhbmd1YWdlLCBhY3RpdmVTeXN0ZW1PYmplY3QudGFyZ2V0TGFuZ3VhZ2UpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBJRGljdGlvbmFyeUVudHJ5W10pID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlWzBdIHx8ICFyZXNwb25zZVswXS50cmFuc2xhdGlvbnMgfHwgcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyeSA9IHJlc3BvbnNlO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVUZXh0KHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFyYWdyYXBocyA9IEh0bWxIZWxwZXIuc3BsaXRJblBhcmFncmFwaHModGV4dCk7XHJcbiAgICBjb25zdCBuZXdQYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgICBjb25zdCBuZXdTb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgICBjb25zdCBuZXdUYXJnZXRQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcblxyXG4gICAgLy8gc291cmNlIHRleHQgY2hhbmdlZC4gUHJldmlvdXNseSBtYWRlIG9ic2VydmFibGVzIGFyZW4ndCBuZWNlc3NhcnkgYW55bW9yZTtcclxuICAgIHRoaXMucmVjcmVhdGVQYXJhZ3JhcGhUcmFuc2xhdGlvblN1YmplY3QoKTtcclxuXHJcbiAgICBwYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCwgaXgpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgcGFyYWdyYXBoIHdpdGggc2FtZSB0ZXh0IGV4aXN0cyAoc28geW91IGRvbid0IGhhdmUgdG8gdHJhbnNsYXRlIGl0IGFnYWluKS5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgeW91IGNhbiBjbG9uZSBpdC5cclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGhJbmZvID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmZpbmRFeGlzdGluZ1BhcmFncmFwaChwYXJhZ3JhcGgsIGl4LCB0aGlzLnBhcmFncmFwaHMpO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaCA9IGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaDtcclxuICAgICAgaWYgKGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaCkge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmhhc1NhbWVJeCkge1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jcmVhdGVFbXB0eVBhcmFncmFwaEluZm8oaXgpO1xyXG5cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5uZXh0KHsgaXg6IGl4LCBsaW5lOiBwYXJhZ3JhcGggfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVHJhbnNsYXRpbmcpIHtcclxuICAgICAgdGhpcy5zZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBuZXdQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gbmV3VGFyZ2V0UGFyYWdyYXBocztcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IG5ld1NvdXJjZVBhcmFncmFwaHM7XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyB0aW1lb3V0IHdoaWNoIGVuYWJsZXMgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFmdGVyIGdpdmVuIG1pbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSBzZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gbnVsbCB8fCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclZpc2libGUpIHtcclxuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgICB9LCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgdmlzaWJsZS4gKi9cclxuICBwcml2YXRlIHNob3dQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIGhpZGRlbi4gKi9cclxuICBoaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVUZXh0VG9TcGVlY2goKSB7XHJcbiAgICAvLyBpZiBub3RoaW5nIHRyYW5zbGF0ZWQsIHR0cyBzaG91bGQgbm90IGJlIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnRhcmdldFBhcmFncmFwaHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW0gPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlLCB0aGlzLnRyYW5zbGF0ZWRUZXh0KTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhsYW5ndWFnZUNvZGU6IHN0cmluZywgdGV4dDogc3RyaW5nKTogVGV4dFRvU3BlZWNoU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLmxhbmd1YWdlc1tsYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGV4dCxcclxuICAgICAgICB1cmw6IHNldHRpbmdzLnVybCxcclxuICAgICAgICB2b2ljZTogc2V0dGluZ3Mudm9pY2UsXHJcbiAgICAgICAgbGFuZ0JwYzQ3OiBzZXR0aW5ncy5sYW5nQnBjNDcsXHJcbiAgICAgICAgbWF4Q2hhcnNJblRleHQ6IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubWF4Q2hhcnNJblRleHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLHVCQUF1QixFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQzlHLE9BQU8sRUFBYyxPQUFPLEVBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUk1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU14RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU0xRSxNQUFNLE9BQU8sdUJBQXVCO0lBcUhmO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUExSFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBZ0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNuRSxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxF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QywwQkFBMEIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsWUFBb0IsRUFBRSxJQUFZO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9FLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTztnQkFDTCxJQUFJO2dCQUNKLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7YUFDckUsQ0FBQTtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQW5lVSx1QkFBdUI7NEdBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHRtbEhlbHBlciwgTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsIFRlcm1pbm9sb2d5U2VydmljZSB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC90ZXh0LXRvLXNwZWVjaC9tb2RlbHMvdGV4dC10by1zcGVlY2gtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMvZXJyb3JzL2Vycm9yLWNvZGVzLmVudW0nO1xyXG5pbXBvcnQgeyBUbGRIaWdobGlnaHRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLCBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUbGRTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcy9zY3JvbGwvdGxkLXNjcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURpY3Rpb25hcnlFbnRyeSwgSVNvdXJjZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmV0cmFuc2xhdGVQYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvcmV0cmFuc2xhdGUtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJVW50cmFuc2xhdGVkUGFyYWdyYXBoIH0gZnJvbSAnLi4vbW9kZWxzL3VudHJhbnNsYXRlZC1wYXJhZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0VXRpbHMgfSBmcm9tICcuLi91dGlscy90bGQtdHJhbnNsYXRlLXRleHQudXRpbHMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSB9IGZyb20gJy4vYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUcmFuc2xhdGVUZXh0U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVRleHQ6IHN0cmluZztcclxuICBnZXQgc291cmNlVGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dEh5cG90aGVzaXM6IHN0cmluZztcclxuICBnZXQgc291cmNlVGV4dEh5cG90aGVzaXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc291cmNlVGV4dEh5cG90aGVzaXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VDaGFuZ2U6IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHNvdXJjZUNoYW5nZSgpIHsgcmV0dXJuIHRoaXMuX3NvdXJjZUNoYW5nZS5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VTY3JvbGw6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHNvdXJjZVNjcm9sbCgpIHsgcmV0dXJuIHRoaXMuX3NvdXJjZVNjcm9sbC5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICBwcml2YXRlIF90cmFuc2xhdGVCdXR0b25DbGljazogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgdHJhbnNsYXRlQnV0dG9uQ2xpY2soKSB7IHJldHVybiB0aGlzLl90cmFuc2xhdGVCdXR0b25DbGljay5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9oYXNEaWN0aW9uYXJ5OiBib29sZWFuO1xyXG4gIGdldCBoYXNEaWN0aW9uYXJ5KCkgeyByZXR1cm4gdGhpcy5faGFzRGljdGlvbmFyeTsgfVxyXG4gIHNldCBoYXNEaWN0aW9uYXJ5KHZhbCkge1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IHZhbDtcclxuICAgIGlmICghdmFsKSB7XHJcbiAgICAgIHRoaXMuX2RpY3Rpb25hcnlFbnRyeSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kaWN0aW9uYXJ5RW50cnk6IElEaWN0aW9uYXJ5RW50cnlbXTtcclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy5fZGljdGlvbmFyeUVudHJ5OyB9XHJcbiAgc2V0IGRpY3Rpb25hcnlFbnRyeSh2YWwpIHtcclxuICAgIHRoaXMuX2RpY3Rpb25hcnlFbnRyeSA9IHZhbDtcclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlFbnRyeSkge1xyXG4gICAgICB0aGlzLmhhc0RpY3Rpb25hcnkgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdHJhbnNsYXRlZFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRhcmdldFBhcmFncmFwaHMubWFwKGxpbmUgPT4gbGluZS5vcmlnaW5hbFRleHQpLmpvaW4oXCJcXG5cIilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ2xlYXIgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIHVybFRvVHJhbnNsYXRlOiBzdHJpbmc7XHJcbiAgcGFyYWdyYXBoczogSVBhcmFncmFwaEluZm9bXSA9IFtdO1xyXG4gIHNvdXJjZVBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuICB0YXJnZXRQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcblxyXG4gIGlzU3lzdGVtV2FraW5nVXAhOiBib29sZWFuO1xyXG5cclxuICAvLyBTZXQgdGhpcyBvYmplY3Qgd2l0aCBuZWNlc3NhcnkgdmFsdWVzIHRvIGRpc3BsYXkgVFRTIGNvbXBvbmVudFxyXG4gIHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuICB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcblxyXG4gIHByaXZhdGUgX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDogYm9vbGVhbjtcclxuICBnZXQgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbmFyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgcHJpdmF0ZSBkZWJvdW5jZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvKiogSG93IG1hbnkgcGFyYWdyYXBocyBjYW4gYmUgdHJhbnNsYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OQ1VSUkVOVF9VUExPQURTID0gNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IERFQk9VTkNFX1RJTUUgPSAxMDAwO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSA9ICcyMSc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5U3lzdGVtUmV0cmFuc2xhdGlvblRpbWVvdXQgPSAzMDAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5naW5lVGVybUNvbGxlY3Rpb25Ob3RGb3VuZEVycm9yS2V5ID0gJzQwNDIwMSc7XHJcblxyXG4gIC8qKiBXaGV0aGVyIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgYmUgc2hvd24uIFRoaXMgdmFsdWUgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvbmx5IGlmIGNvbmZpZ3VyZWQgdGltZSBoYXMgcGFzc2VkLiAqL1xyXG4gIHByaXZhdGUgX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIGdldCBzaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3I7IH1cclxuICAvL05vZGVKUy5UaW1lb3V0XHJcbiAgcHJpdmF0ZSBwcm9ncmVzc0luZGljYXRvclRpbWVvdXQ6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gIGdldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCgpIHsgcmV0dXJuIHRoaXMuX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50OyB9XHJcbiAgc2V0IHVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gdmFsdWU7XHJcbiAgICAvLyBXaGVuIHRyYW5zbGF0aW9uIGZpbmlzaGVkLCBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIG5vdCBiZSBzaG93bi5cclxuICAgIGlmICh2YWx1ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLnRvZ2dsZVRleHRUb1NwZWVjaCgpO1xyXG4gICAgICB0aGlzLmhpZGVQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVHJhbnNsYXRpbmcoKSB7IHJldHVybiB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID4gMCB8fCB0aGlzLmlzU3lzdGVtV2FraW5nVXAgfVxyXG5cclxuICAvLyBnZXR0ZXJzIGZyb20gY29uZmlnIHNlcnZpY2UuXHJcbiAgZ2V0IGFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb247IH07XHJcbiAgZ2V0IGF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGU7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeDsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4OyB9O1xyXG4gIGdldCB1c2VEaWN0aW9uYXJ5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcudXNlRGljdGlvbmFyeTsgfTtcclxuICBnZXQgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzOyB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0IGFjdGl2ZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5nZXRBY3RpdmVTeXN0ZW1PYmooKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGVVcmxSZWRpcmVjdCgpIHtcclxuICAgIGlmICh0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4ID09PSAnJykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy51cmxUb1RyYW5zbGF0ZSl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy50cmFuc2xhdGUuY3VycmVudExhbmd9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7dGhpcy51cmxUb1RyYW5zbGF0ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIGRpY3RhdHRpb24gaXMgYWN0aXZlLiBCYXNlZCBvbiB0aGlzLCBleHRlbnNpb25zIGFyZSBoaWRkZW4uICovXHJcbiAgaXNEaWN0YXRpbmc6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGk6IFRsZFRyYW5zbGF0ZVRleHRBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1NYW5hZ2VtZW50U2VydmljZTogVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZTogVGxkSGlnaGxpZ2h0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRzU2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXJtaW5vbG9neVNlcnZpY2U6IFRlcm1pbm9sb2d5U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQ6IHN0cmluZywgc3JjQ29kZTogc3RyaW5nLCB0cmdDb2RlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaS5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dCwgc3JjQ29kZSwgdHJnQ29kZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2UoZXZlbnQ6IElTb3VyY2VDaGFuZ2VFdmVudCkge1xyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0IHx8IHRoaXMuc291cmNlVGV4dCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXM/LmJ1dHRvbkNsaWNrZWQgfHwgcGFyYW1zPy5zeXN0ZW1DaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW1JZCA9IHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2UuZ2V0QWN0aXZlU3lzdGVtT2JqKCkuaWQ7XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbGxlY3Rpb24gPSB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5lbmdpbmVzW2FjdGl2ZVN5c3RlbUlkXT8uc2VsZWN0ZWQ7XHJcbiAgICAvLyBpZiBjb2xsZWN0aW9uIGlzIG5vdCBpbXBvcnRlZCB3ZSB3YW50IHRvIGF2b2lkIGluc3RhbnQgdHJhbnNsYXRpb25cclxuICAgIGlmIChzZWxlY3RlZENvbGxlY3Rpb24gJiYgIXNlbGVjdGVkQ29sbGVjdGlvbj8ubXRDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKHtidXR0b25DbGlja2VkOiB0cnVlfSk7XHJcbiAgICAgICAgfSwgMzAwMCkgICAgICBcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgPSAyMDA7XHJcbiAgICBjb25zdCBtYXhEaWN0aW9uYXJ5V29yZHMgPSAxMjtcclxuXHJcbiAgICBjb25zdCB3b3Jkc0luU291cmNlID0gSHRtbEhlbHBlci5nZXRXb3JkQ291bnQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBIdG1sSGVscGVyLmlzVGV4dFVybCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgaWYgKHRoaXMuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24gJiYgdGhpcy51cmxUb1RyYW5zbGF0ZSkge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaHMgPSBbXTtcclxuICAgICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUgfHwgcGFyYW1zPy5idXR0b25DbGlja2VkKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy50cmFuc2xhdGVVcmxSZWRpcmVjdCwgXCJfYmxhbmtcIik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETy4gTGV0b25pa2EgZGljdGlvbmFyeT9cclxuICAgIGlmICh0aGlzLnVzZURpY3Rpb25hcnkgJiYgdGhpcy5zb3VyY2VUZXh0Lmxlbmd0aCA8IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgJiYgd29yZHNJblNvdXJjZSA8PSBtYXhEaWN0aW9uYXJ5V29yZHMpIHtcclxuICAgICAgdGhpcy5wcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKiogU3RvcHMgdGV4dCB0cmFuc2xhdGlvbiBpZiBpdCBpcyBhY3RpdmUuICovXHJcbiAgc3RvcFRyYW5zbGF0aW9uKCkge1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICBpZiAodGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXREZXRlY3RlZExhbmd1YWdlKCk6IHZvaWQge1xyXG4gICAgLy8gc291cmNlIGxhbmd1YWdlIGlzIG5vdCBjaGFuZ2VkIGFmdGVyIGRldGVjdGlvblxyXG4gICAgY29uc3Qgc291cmNlTGFuZ0lzTm90Q2hhbmdlZCA9IHRoaXMuYWN0aXZlRGF0YS5zb3VyY2VMYW5ndWFnZSA9PT0gdGhpcy5hY3RpdmVEYXRhLmRldGVjdGVkTGFuZ3VhZ2U7XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuaXNBdXRvTGFuZ3VhZ2VEZXRlY3Rpb25FbmFibGVkICYmIHRoaXMuYWN0aXZlRGF0YS5kZXRlY3RlZExhbmd1YWdlICYmIHNvdXJjZUxhbmdJc05vdENoYW5nZWQpIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjcmVhdGVQYXJhZ3JhcGhUcmFuc2xhdGlvblN1YmplY3QoKSB7XHJcbiAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcblxyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2VUZXh0O1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgpID0+IHtcclxuICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlUGFyYWdyYXBoKHVudHJhbnNsYXRlZFBhcmFncmFwaCkucGlwZShcclxuICAgICAgICAgIHRhcCgocmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGhhbmRsZSByZXNwb25zZSBpZiBzb3VyY2UgdGV4dCBoYXMgY2hhbmdlZC5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPSB0aGlzLnNvdXJjZVRleHQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhZ3JhcGhzKHVudHJhbnNsYXRlZFBhcmFncmFwaC5peCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9PT0gMCAmJiB0aGlzLmlzU3lzdGVtV2FraW5nVXApIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuZGVsZXRlTWVzc2FnZShOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5JTkZPLCAnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLmVycm9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IEVycm9yQ29kZS5UUkFOU0xBVElPTl9GQUlMRUQgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LkVycm9yQ29kZSA9PT0gdGhpcy5zdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuaW5mbygnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICAgICAgICB9LCB0aGlzLnN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dClcclxuXHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uY29kZSA9PSB0aGlzLmVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5lcnJvcignRVJST1JTLkVfNDA0MjAxJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHN1YmplY3QgaXMgZGVzdHJveWVkIGFuZCB1bnN1YnNjcmliZWQsIHNvIHRocm93biBlcnJvciB3b250IGhhdmUgYW55IGVmZmVjdC5cclxuICAgICAgICAgICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgIH0sIHRoaXMuQ09OQ1VSUkVOVF9VUExPQURTKSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVBhcmFncmFwaChwYXJhZ3JhcGg6IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGgpOiBPYnNlcnZhYmxlPElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyA9IHtcclxuICAgICAgcGFyYWdyYXBoSXg6IHBhcmFncmFwaC5peCxcclxuICAgICAgdGV4dDogcGFyYWdyYXBoLmxpbmUsXHJcbiAgICAgIHN5c3RlbTogdGhpcy5hY3RpdmVEYXRhXHJcbiAgICB9O1xyXG4gICAgaWYgKCFwYXJhbXMudGV4dCB8fCBwYXJhbXMudGV4dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG9mKHtcclxuICAgICAgICBzb3VyY2VUcmVlOiB7IHRleHQ6IFwiXCIsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBcIlwiIH0sXHJcbiAgICAgICAgdGFyZ2V0VHJlZTogeyB0ZXh0OiBcIlwiLCBwYXJhZ3JhcGhJeDogcGFyYW1zLnBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogXCJcIiB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFwaS50cmFuc2xhdGVQYXJhZ3JhcGgocGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5jaGFuZ2VTeXN0ZW0ocGFyYWdyYXBoLnN5c3RlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWVkcyB0byBzY3JvbGwgdG8gdG9wIGFmdGVyIGZpcnN0IHBhcmFncmFwaCBpcyB0cmFuc2xhdGVkLlxyXG4gICAgaWYgKCF0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuICAgICAgLy8gaWYgZW1wdHkgcGFyYWdyYXBoIGlzICd0cmFuc2xhdGVkJyBmaXJzdCwgbm8gbmVlZCB0byBkbyBhbnkgc2Nyb2xsaW5nLiBXYWl0IGZvciByZWFsIHRleHQgdG8gYmUgdHJhbnNsYXRlZC5cclxuICAgICAgaWYgKHBhcmFncmFwaC50YXJnZXRUcmVlLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zeW5jU2Nyb2xsYmFycyhudWxsLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYXJhZ3JhcGhzKHBhcmFncmFwaEl4OiBudW1iZXIsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIGxldCBwYXJhZ3JhcGg6IElQYXJhZ3JhcGhJbmZvID0ge1xyXG4gICAgICBpeDogcGFyYWdyYXBoSXgsXHJcbiAgICAgIHRhcmdldDogcmVzcG9uc2UudGFyZ2V0VHJlZSxcclxuICAgICAgc291cmNlOiByZXNwb25zZS5zb3VyY2VUcmVlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHBhcmFncmFwaCk7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS5zb3VyY2VUcmVlKTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnRhcmdldFRyZWUpO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zb3J0KChhLCBiKSA9PiAoYS5peCA+IGIuaXgpID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3VyY2VQYXJhbXMoKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcygpIHtcclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbU9iamVjdCA9IHRoaXMuYWN0aXZlRGF0YTtcclxuICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IHRoaXMuZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRoaXMuc291cmNlVGV4dC50cmltKCksXHJcbiAgICAgIGFjdGl2ZVN5c3RlbU9iamVjdC5zb3VyY2VMYW5ndWFnZSwgYWN0aXZlU3lzdGVtT2JqZWN0LnRhcmdldExhbmd1YWdlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogSURpY3Rpb25hcnlFbnRyeVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVswXSB8fCAhcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zIHx8IHJlc3BvbnNlWzBdLnRyYW5zbGF0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICAgICAgICB0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cnkgPSByZXNwb25zZTtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlVGV4dCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcmFncmFwaHMgPSBIdG1sSGVscGVyLnNwbGl0SW5QYXJhZ3JhcGhzKHRleHQpO1xyXG4gICAgY29uc3QgbmV3UGFyYWdyYXBoczogSVBhcmFncmFwaEluZm9bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3VGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICAgIC8vIHNvdXJjZSB0ZXh0IGNoYW5nZWQuIFByZXZpb3VzbHkgbWFkZSBvYnNlcnZhYmxlcyBhcmVuJ3QgbmVjZXNzYXJ5IGFueW1vcmU7XHJcbiAgICB0aGlzLnJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KCk7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHBhcmFncmFwaCB3aXRoIHNhbWUgdGV4dCBleGlzdHMgKHNvIHlvdSBkb24ndCBoYXZlIHRvIHRyYW5zbGF0ZSBpdCBhZ2FpbikuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIHlvdSBjYW4gY2xvbmUgaXQuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoSW5mbyA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5maW5kRXhpc3RpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBpeCwgdGhpcy5wYXJhZ3JhcGhzKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGggPSBleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGg7XHJcbiAgICAgIGlmIChleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGgpIHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nUGFyYWdyYXBoSW5mby5oYXNTYW1lSXgpIHtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY3JlYXRlRW1wdHlQYXJhZ3JhcGhJbmZvKGl4KTtcclxuXHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QubmV4dCh7IGl4OiBpeCwgbGluZTogcGFyYWdyYXBoIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1RyYW5zbGF0aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gbmV3UGFyYWdyYXBocztcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IG5ld1RhcmdldFBhcmFncmFwaHM7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBuZXdTb3VyY2VQYXJhZ3JhcGhzO1xyXG4gIH1cclxuXHJcbiAgLyoqIENyZWF0ZXMgdGltZW91dCB3aGljaCBlbmFibGVzIHByb2dyZXNzIGluZGljYXRvciBhZnRlciBnaXZlbiBtaWxpc2Vjb25kcyAqL1xyXG4gIHByaXZhdGUgc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IG51bGwgfHwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgICAgfSwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZpc2libGUuICovXHJcbiAgcHJpdmF0ZSBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciBoaWRkZW4uICovXHJcbiAgaGlkZVByb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xyXG4gICAgLy8gaWYgbm90aGluZyB0cmFuc2xhdGVkLCB0dHMgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGVcclxuICAgIGlmICghdGhpcy50YXJnZXRQYXJhZ3JhcGhzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlLCB0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MobGFuZ3VhZ2VDb2RlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFRleHRUb1NwZWVjaFNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5sYW5ndWFnZXNbbGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmIChzZXR0aW5ncykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRleHQsXHJcbiAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgdm9pY2U6IHNldHRpbmdzLnZvaWNlLFxyXG4gICAgICAgIGxhbmdCcGM0Nzogc2V0dGluZ3MubGFuZ0JwYzQ3LFxyXG4gICAgICAgIG1heENoYXJzSW5UZXh0OiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLm1heENoYXJzSW5UZXh0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -3192,6 +3192,9 @@ class TldTranslateSystemManagementService {
3192
3192
  * Also, when language was detected and we want to clear source text, this method also is being called.
3193
3193
  */
3194
3194
  setDetectedLanguage(langCode, domain) {
3195
+ if (!this.activeSystem.detectedLanguage && this.sourceLanguage !== AUTO_LANGUAGE_DETECTION_KEY) {
3196
+ return;
3197
+ }
3195
3198
  const isSourceLangCodeSameAfterDetection = this.activeSystem?.detectedLanguage === this.sourceLanguage;
3196
3199
  // Here we need to clear out detected language, but keep the detection enabled.
3197
3200
  if (!langCode && isSourceLangCodeSameAfterDetection) {
@@ -3403,6 +3406,8 @@ class TldTranslateSystemManagementService {
3403
3406
  if (systemIxInRecentList > 0) {
3404
3407
  this.recentSystems.splice(systemIxInRecentList, 1);
3405
3408
  this.recentSystems.splice(0, 0, system);
3409
+ // reseting detectedLanguage, so (- Detected) label doesnt appears if we select language direction from recent system list
3410
+ system.detectedLanguage = undefined;
3406
3411
  }
3407
3412
  }
3408
3413
  else {
@@ -6246,7 +6251,7 @@ class TldTranslateTextService {
6246
6251
  }
6247
6252
  clearSource() {
6248
6253
  this._onClear.next(null);
6249
- this.systemManagementService.setDetectedLanguage('');
6254
+ this.resetDetectedLanguage();
6250
6255
  this.changeSource({ phrase: "" });
6251
6256
  }
6252
6257
  onClear() {
@@ -6327,6 +6332,13 @@ class TldTranslateTextService {
6327
6332
  this.dictionarySubscription.unsubscribe();
6328
6333
  }
6329
6334
  }
6335
+ resetDetectedLanguage() {
6336
+ // source language is not changed after detection
6337
+ const sourceLangIsNotChanged = this.activeData.sourceLanguage === this.activeData.detectedLanguage;
6338
+ if (this.configService.textConfig.isAutoLanguageDetectionEnabled && this.activeData.detectedLanguage && sourceLangIsNotChanged) {
6339
+ this.systemManagementService.setDetectedLanguage('');
6340
+ }
6341
+ }
6330
6342
  recreateParagraphTranslationSubject() {
6331
6343
  this._firstParagraphTranslated = false;
6332
6344
  this.paragraphTranslationsSubject = new Subject();