@arsedizioni/ars-utils 18.2.145 → 18.2.147

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.
@@ -207,6 +207,7 @@ export class ClipperService {
207
207
  this.setToken(r.value.token);
208
208
  const loginInfo = {
209
209
  context: r.value.context,
210
+ userSettings: r.value.settings,
210
211
  OAUTH: oauth
211
212
  };
212
213
  if (!oauth) {
@@ -491,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
491
492
  providedIn: 'root',
492
493
  }]
493
494
  }], ctorParameters: () => [] });
494
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUdMLGdCQUFnQixFQUVZLFdBQVcsRUFDeEMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBNEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBaU8sMEJBQTBCLEVBQWlGLG1CQUFtQixFQUEwSCxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBY3pCLElBQUksU0FBUztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFxQixDQUFDO2dCQUM5RCxDQUFDO2dCQUFDLE1BQU0s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RyxxQkFBcUIsRUFDeEMsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLEVBQzFDLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs4R0Fub0JVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBcGlSZXN1bHQsXHJcbiAgQnJvYWRjYXN0TWVzc2FnZUluZm8sXHJcbiAgQnJvYWRjYXN0U2VydmljZSxcclxuICBGb2xkZXJUcmVlLFxyXG4gIExvZ2luUmVzdWx0LCBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgTG9naW5PQXV0aFR5cGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLm9hdXRoJztcclxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHRocm93RXJyb3IsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlckRvY3VtZW50U3RydWN0dXJlLCBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcywgQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcywgQ2xpcHBlckxvZ2luSW5mbywgQ2xpcHBlckxvZ2luUmVzdWx0LCBDbGlwcGVyT1RQSW5mbywgQ2xpcHBlclF1ZXJ5QXJzRXZlbnRzUGFyYW1zLCBDbGlwcGVyUXVlcnlBcnNFdmVudHNSZXN1bHQsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdCwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaFJlc3VsdCwgQ2xpcHBlclNlbmREb2N1bWVudHNCeUVtYWlsUGFyYW1zLCBDbGlwcGVyVGF4b25vbXlQYXJhbXMsIENsaXBwZXJVc2VySW5mbywgQ2xpcHBlclVzZXJMaW5rLCBDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudCB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgQ2xpcHBlck1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX0lOVEVSVkFMID0gNjAwMDAgKiA1MDsgLy81MCBtaW5cclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWZyZXNoaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlblJlZnJlc2hJbnRlcnZhbDogbnVtYmVyID0gdGhpcy5SRUZSRVNIX0lOVEVSVkFMO1xyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoVGltZXI/OiBPYnNlcnZhYmxlPG51bWJlciB8IHZvaWQ+IHwgbnVsbDtcclxuICBwcml2YXRlIHRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbDtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9sb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gPSBudWxsO1xyXG4gIGdldCBsb2dpbkluZm8oKTogQ2xpcHBlckxvZ2luSW5mbyB7XHJcbiAgICBpZiAoIXRoaXMuX2xvZ2luSW5mbykge1xyXG4gICAgICBjb25zdCBsb2dpbkluZm8gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICBpZiAobG9naW5JbmZvKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IEpTT04ucGFyc2UobG9naW5JbmZvKSBhcyBDbGlwcGVyTG9naW5JbmZvO1xyXG4gICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9sb2dpbkluZm87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZlcmVuY2VzU25hcHNob3Q6IENsaXBwZXJTZWFyY2hSZXN1bHQgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gIGdldCByZWZlcmVuY2VzU25hcHNob3QoKTogQ2xpcHBlclNlYXJjaFJlc3VsdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVmZXJlbmNlc1NuYXBzaG90O1xyXG4gIH1cclxuICBzZXQgcmVmZXJlbmNlc1NuYXBzaG90KHZhbHVlOiBDbGlwcGVyU2VhcmNoUmVzdWx0KSB7XHJcbiAgICB0aGlzLl9yZWZlcmVuY2VzU25hcHNob3QgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc25hcHNob3Q6IENsaXBwZXJTZWFyY2hSZXN1bHQgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gIGdldCBzbmFwc2hvdCgpOiBDbGlwcGVyU2VhcmNoUmVzdWx0IHtcclxuICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdDtcclxuICB9XHJcbiAgc2V0IHNuYXBzaG90KHZhbHVlOiBDbGlwcGVyU2VhcmNoUmVzdWx0KSB7XHJcbiAgICB0aGlzLl9zbmFwc2hvdCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYmFnOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10gPSBbXTtcclxuICBnZXQgYmFnKCk6IENsaXBwZXJEb2N1bWVudEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVVyaTogc3RyaW5nID0gXCJodHRwczovL2NsaXBwZXIuYXJzZWRpemlvbmkuaXRcIlxyXG4gIGdldCBzZXJ2aWNlVXJpKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVVyaTtcclxuICB9XHJcbiAgc2V0IHNlcnZpY2VVcmkodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VydmljZVVyaSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVByZWZpeDogc3RyaW5nID0gXCJcIlxyXG4gIGdldCBzZXJ2aWNlUHJlZml4KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByZWZpeDtcclxuICB9XHJcbiAgc2V0IHNlcnZpY2VQcmVmaXgodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VydmljZVByZWZpeCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbG9nZ2VkSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGxvZ2dpbmdJbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgc3VwcG9ydHNSUyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgdmlzaWJsZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIENsZWFuLXVwXHJcbiAgICBpZiAodGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHNlcnZpY2VVcmkgOiB0aGUgc2VydmljZSB1cmlcclxuICAgKiBAcGFyYW0gc2VydmljZVByZWZpeCA6IHRoZSBzZXJ2aWNlIHByZWZpeCB1c2VkIHRvIG1hbmFnZSBsb2NhbCBzdG9yYWdlIFxyXG4gICAqIEBwYXJhbSB0b2tlblJlZnJlc2hJbnRlcnZhbCA6IHRoZSB0b2tlbiByZWZyZXNoIGludGVydmFsXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZShcclxuICAgIHNlcnZpY2VVcmk6IHN0cmluZ3wgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBzZXJ2aWNlUHJlZml4OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHRva2VuUmVmcmVzaEludGVydmFsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gdGhpcy5SRUZSRVNIX0lOVEVSVkFMKSB7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHVuaXF1ZSBjbGllbnQgaWRcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NsaXBwZXJfY2xpZW50X2lkJykpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfY2xpZW50X2lkJywgU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemVcclxuICAgIHRoaXMuX3NlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xyXG4gICAgdGhpcy5fc2VydmljZVByZWZpeCA9IHNlcnZpY2VQcmVmaXg7XHJcbiAgICB0aGlzLnRva2VuUmVmcmVzaEludGVydmFsID0gdG9rZW5SZWZyZXNoSW50ZXJ2YWw7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIGlmICghdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKChtZXNzYWdlOiBCcm9hZGNhc3RNZXNzYWdlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ0hBTkdFRCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW4oXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5wYXNzd29yZCxcclxuICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5vYXV0aCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGhBY2Nlc3NUb2tlbikuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgICAgICAgICAgLy8gTG9hZCBiYWdcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmFnKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR09VVF9DT01QTEVURUQgfHxcclxuICAgICAgICAgIG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5MT0dJTl9ESVNDT05ORUNURUQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dlZEluKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIjxwPlwiICsgci5tZXNzYWdlICsgXCI8L3A+PGJyPjxicj48aHI+PHAgY2xhc3M9J3NtYWxsJz48aT5QZXIgZWxpbWluYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIENsaXBwZXIgYWNjZWRlcmUgYTo8YnI+PGI+bWVudSA+IHBlcnNvbmFsaXp6YSA+IGNvbGxlZ2FtZW50aTwvYj48L2k+PC9wPlwiLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBiYWdcclxuICAgICAgICAgICAgICAgIHRoaXMuX2JhZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV2ZWx1YXRlIGN1cnJlbnQgc2Vzc2lvbiBzdG9yYWdlIGluIGNhc2Ugb2YgcGFnZSByZWZyZXNoIChGNSlcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpICYmIHRoaXMuZ2V0VG9rZW4oKSkge1xyXG4gICAgICAvLyBBdXRvIGxvZ2luXHJcbiAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG4gICAgICAvLyBTdGFydCByZWZyZXNoIHRpbWVyXHJcbiAgICAgIHRoaXMuZW5hYmxlVG9rZW5SZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgSldUIHRva2VuXHJcbiAgICogQHBhcmFtIHRva2VuIDogdG9rZW5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFRva2VuKHRva2VuOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKCBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkgKyBcIiAtIHRva2VuOlwiICsgdG9rZW4uc3Vic3RyaW5nKHRva2VuLmxlbmd0aCAtIDE1KSk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2p3dCcsIHRva2VuKTtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICB0aGlzLmVuYWJsZVRva2VuUmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEVuYWJsZSBKV1QgdG9rZW4gYXV0byByZWZyZXNoXHJcbiAqL1xyXG4gIHByaXZhdGUgZW5hYmxlVG9rZW5SZWZyZXNoKCkge1xyXG4gICAgaWYgKCF0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXIgPVxyXG4gICAgICAgIHRpbWVyKHRoaXMudG9rZW5SZWZyZXNoSW50ZXJ2YWwsIHRoaXMudG9rZW5SZWZyZXNoSW50ZXJ2YWwpXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoaW5nIHx8ICF0aGlzLmxvZ2dlZEluKCkpIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgdGhpcy5yZWZyZXNoaW5nID0gZmFsc2U7IH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IHRoaXMucmVmcmVzaGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSk7XHJcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRva2VuUmVmcmVzaFRpbWVyLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqL1xyXG4gIGdldFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2p3dCcpO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuWzBdID09PSAnXCInKSB7XHJcbiAgICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4gPz8gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dpbiAgIFxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvYW5sIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICAgKiBAcmV0dXJuczogdGhlIGxvZ2luIHJlc3VsdFxyXG4gICAqL1xyXG4gIGxvZ2luKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgdGhpcy5sb2dnaW5nSW4uc2V0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbG9naW4nLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVzZXI6IG9hdXRoID8gbnVsbCA6IGVtYWlsLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IG9hdXRoID8gbnVsbCA6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9jbGllbnRfaWRcIiksXHJcbiAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6XHJcbiAgICAgICAgICAgICFvYXV0aFxyXG4gICAgICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSBhY2Nlc3MgdG9rZW5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlLnRva2VuKTtcclxuICAgICAgICAgICAgY29uc3QgbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvID0ge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHIudmFsdWUuY29udGV4dCxcclxuICAgICAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW9hdXRoKSB7XHJcbiAgICAgICAgICAgICAgbG9naW5JbmZvLnVzZXJDcmVkZW50aWFscyA9XHJcbiAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5jaXBoZXIoXHJcbiAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBlbWFpbDogZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbWVtYmVyOiByZW1lbWJlcixcclxuICAgICAgICAgICAgICAgICAgfSksIGxvZ2luSW5mby5jb250ZXh0LnVzZXJJZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGluZm9cclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgJ2NsaXBwZXJfbG9naW4nLFxyXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGxvZ2luSW5mbylcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IGxvZ2luSW5mbztcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dvdXQnLCB7fSkucGlwZShcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm4gclxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2luIHN0YXRlXHJcbiAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgc3Vic2NyaXB0aW9uc1xyXG4gICAgaWYgKHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXIgPSBudWxsO1xyXG5cclxuICAgIC8vIENsZWFyIGxvZ2luIGluZm9cclxuICAgIHRoaXMuX2xvZ2luSW5mbyA9IG51bGw7XHJcblxyXG4gICAgLy8gTG9nZ2VkIG91dFxyXG4gICAgdGhpcy5sb2dnZWRJbi5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgbG9naW4gZGF0YVxyXG4gICAqL1xyXG4gIGNsZWFyKCkge1xyXG4gICAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9qd3QnKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfb2F1dGgnKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcblxyXG4gICAgLy8gUmVzZXQgbG9naW5cclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gdG9rZW4gcmVmcmVzaFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVmcmVzaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8TG9naW5SZXN1bHQ8Q2xpcHBlclVzZXJJbmZvPj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9yZWZyZXNoJywge31cclxuICAgICkucGlwZShtYXAoKHI6IEFwaVJlc3VsdDxMb2dpblJlc3VsdDxDbGlwcGVyVXNlckluZm8+PikgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgdG9rZW5cclxuICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlLnRva2VuKTsgICAgICBcclxuXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogR2V0IGEgbmV3IG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAqIEBwYXJhbSBpZDogdGhlIG9wdGlvbmFsIHJlcG9zaXRvcnkgaWQgXHJcbiAqL1xyXG4gIG5ld09UUChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlck9UUEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvb3RwL25ldy8/aWQ9JyArIGlkLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgQXJzIGV2ZW50cyBjYWxlbmRhclxyXG4gICAqL1xyXG4gIGV2ZW50cyhwYXJhbXM6IENsaXBwZXJRdWVyeUFyc0V2ZW50c1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyUXVlcnlBcnNFdmVudHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJzL2V2ZW50cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudHNcclxuICAgKi9cclxuICBxdWVyeShwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzIGZvciBhIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlGYWNldHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2ZhY2V0cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiogVXBkYXRlIGRvY3VtZW50IHN0YXRlXHJcbiovXHJcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0YXRlL3VwZGF0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnRQZGYoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBFeHBvcnQgZG9jdW1lbnQgbGlzdCAocXVlcnkgb3Igc2VsZWN0ZWQgaXRlbXMpIG9yIGV4cG9ydCBkZWFkbGluZXMgYXMgaWNzXHJcbiAqL1xyXG4gIGV4cG9ydChwYXJhbXM6IENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2V4cG9ydCcsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudHMgbGluayBieSBlbWFpbFxyXG4gICAqL1xyXG4gIHNlbmRUbyhwYXJhbXM6IENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlbmQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgcGFnZSB0aGUgZnVsbCBkb2N1bWVudCByZXBvcnRcclxuICAgKi9cclxuICByZXBvcnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZXBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgY29tbWVudFxyXG4gICAqL1xyXG4gIGNvbW1lbnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PHN0cmluZz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY29tbWVudC8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgaW5mb1xyXG4gICAqL1xyXG4gIGluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEb2N1bWVudEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2luZm8vJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IHN0cnVjdHVyZVxyXG4gICAqL1xyXG4gIGluZGV4KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0cnVjdHVyZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgbGFzdCB1cGRhdGVcclxuICAgKi9cclxuICBsYXN0VXBkYXRlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2xhc3QtdXBkYXRlLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgKi9cclxuICByZWZlcmVuY2VzKHBhcmFtczogQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIGxldCBtb2RlID0gcGFyYW1zLm1vZGU7XHJcbiAgICBpZiAoIW1vZGUpIG1vZGUgPSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlc0ZhY2V0cyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlID8/IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzT3V0OlxyXG4gICAgICAgIHBhcmFtcy5tb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZWZlcmVuY2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGp1cmlzIGFydGljbGVzXHJcbiAgICovXHJcbiAganVyaXNBcnRpY2xlcyhwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvYXJ0aWNsZXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGhlIHRheG9ub215XHJcbiAgICovXHJcbiAgZ2V0VGF4b25vbXkocGFyYW1zOiBDbGlwcGVyVGF4b25vbXlQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXJUcmVlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RheG9ub215JyxcclxuICAgICAgcGFyYW1zID8/IHsgbW9kZWw6IDAsIGNvdW50SXRlbXM6IGZhbHNlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0b3BpY3NcclxuICAgKi9cclxuICBnZXRUb3BpY3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgYmFnXHJcbiAgICovXHJcbiAgbG9hZEJhZygpIHtcclxuICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcnXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9iYWcgPSBbXTtcclxuICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2JhZy5wdXNoKEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBvbmUgb3IgbW9yZSBkb2N1bWVudHMgdG8gdGhlIGJhZ1xyXG4gICAqIEBwYXJhbSBpZHMgdGhlIGRvY3VtZW50IGlkcyB0byBhZGRcclxuICAgKi9cclxuICBhZGRUb0JhZyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvYWRkJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBpZHMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChyID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2JhZy5wdXNoKEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBmcm9tIGJhZ1xyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqL1xyXG4gIHJlbW92ZUZyb21CYWcoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvZGVsZXRlJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBbaWRdIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHAgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRJbmRleEJ5S2V5KFxyXG4gICAgICAgICAgICAgIHRoaXMuX2JhZyxcclxuICAgICAgICAgICAgICAnRG9jdW1lbnRJZCcsXHJcbiAgICAgICAgICAgICAgaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYmFnLnNwbGljZShwLCAxKTtcclxuICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTYXZlIGEgdXNlciBsaW5rXHJcbiAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAqL1xyXG4gIHNhdmVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3Mvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYSB1c2VyIGxpbmtcclxuICAgKiBAcGFyYW0gaXRlbTogdGhlIHVzZXIgbGlua1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxpbmsoaXRlbTogQ2xpcHBlclVzZXJMaW5rKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9saW5rcy9kZWxldGUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUdMLGdCQUFnQixFQUVZLFdBQVcsRUFDeEMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBNEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBaU8sMEJBQTBCLEVBQWlGLG1CQUFtQixFQUEwSCxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBY3pCLElBQUksU0FBUztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFxQixDQUFDO2dCQUM5RCxDQUFDO2dCQUFDLE1BQU0s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QUMsVUFBVSxDQUFDLElBQUksQ0FDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsRUFDeEMsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLEVBQzFDLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs4R0Fwb0JVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBcGlSZXN1bHQsXHJcbiAgQnJvYWRjYXN0TWVzc2FnZUluZm8sXHJcbiAgQnJvYWRjYXN0U2VydmljZSxcclxuICBGb2xkZXJUcmVlLFxyXG4gIExvZ2luUmVzdWx0LCBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgTG9naW5PQXV0aFR5cGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLm9hdXRoJztcclxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHRocm93RXJyb3IsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlckRvY3VtZW50U3RydWN0dXJlLCBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcywgQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcywgQ2xpcHBlckxvZ2luSW5mbywgQ2xpcHBlckxvZ2luUmVzdWx0LCBDbGlwcGVyT1RQSW5mbywgQ2xpcHBlclF1ZXJ5QXJzRXZlbnRzUGFyYW1zLCBDbGlwcGVyUXVlcnlBcnNFdmVudHNSZXN1bHQsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdCwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaFJlc3VsdCwgQ2xpcHBlclNlbmREb2N1bWVudHNCeUVtYWlsUGFyYW1zLCBDbGlwcGVyVGF4b25vbXlQYXJhbXMsIENsaXBwZXJVc2VySW5mbywgQ2xpcHBlclVzZXJMaW5rLCBDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudCB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgQ2xpcHBlck1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgXHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX0lOVEVSVkFMID0gNjAwMDAgKiA1MDsgLy81MCBtaW5cclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWZyZXNoaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlblJlZnJlc2hJbnRlcnZhbDogbnVtYmVyID0gdGhpcy5SRUZSRVNIX0lOVEVSVkFMO1xyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoVGltZXI/OiBPYnNlcnZhYmxlPG51bWJlciB8IHZvaWQ+IHwgbnVsbDtcclxuICBwcml2YXRlIHRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbDtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9sb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gPSBudWxsO1xyXG4gIGdldCBsb2dpbkluZm8oKTogQ2xpcHBlckxvZ2luSW5mbyB7XHJcbiAgICBpZiAoIXRoaXMuX2xvZ2luSW5mbykge1xyXG4gICAgICBjb25zdCBsb2dpbkluZm8gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICBpZiAobG9naW5JbmZvKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IEpTT04ucGFyc2UobG9naW5JbmZvKSBhcyBDbGlwcGVyTG9naW5JbmZvO1xyXG4gICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9sb2dpbkluZm87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZlcmVuY2VzU25hcHNob3Q6IENsaXBwZXJTZWFyY2hSZXN1bHQgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gIGdldCByZWZlcmVuY2VzU25hcHNob3QoKTogQ2xpcHBlclNlYXJjaFJlc3VsdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVmZXJlbmNlc1NuYXBzaG90O1xyXG4gIH1cclxuICBzZXQgcmVmZXJlbmNlc1NuYXBzaG90KHZhbHVlOiBDbGlwcGVyU2VhcmNoUmVzdWx0KSB7XHJcbiAgICB0aGlzLl9yZWZlcmVuY2VzU25hcHNob3QgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc25hcHNob3Q6IENsaXBwZXJTZWFyY2hSZXN1bHQgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gIGdldCBzbmFwc2hvdCgpOiBDbGlwcGVyU2VhcmNoUmVzdWx0IHtcclxuICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdDtcclxuICB9XHJcbiAgc2V0IHNuYXBzaG90KHZhbHVlOiBDbGlwcGVyU2VhcmNoUmVzdWx0KSB7XHJcbiAgICB0aGlzLl9zbmFwc2hvdCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYmFnOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10gPSBbXTtcclxuICBnZXQgYmFnKCk6IENsaXBwZXJEb2N1bWVudEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVVyaTogc3RyaW5nID0gXCJodHRwczovL2NsaXBwZXIuYXJzZWRpemlvbmkuaXRcIlxyXG4gIGdldCBzZXJ2aWNlVXJpKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVVyaTtcclxuICB9XHJcbiAgc2V0IHNlcnZpY2VVcmkodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VydmljZVVyaSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVByZWZpeDogc3RyaW5nID0gXCJcIlxyXG4gIGdldCBzZXJ2aWNlUHJlZml4KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByZWZpeDtcclxuICB9XHJcbiAgc2V0IHNlcnZpY2VQcmVmaXgodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VydmljZVByZWZpeCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbG9nZ2VkSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGxvZ2dpbmdJbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgc3VwcG9ydHNSUyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgdmlzaWJsZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIENsZWFuLXVwXHJcbiAgICBpZiAodGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHNlcnZpY2VVcmkgOiB0aGUgc2VydmljZSB1cmlcclxuICAgKiBAcGFyYW0gc2VydmljZVByZWZpeCA6IHRoZSBzZXJ2aWNlIHByZWZpeCB1c2VkIHRvIG1hbmFnZSBsb2NhbCBzdG9yYWdlIFxyXG4gICAqIEBwYXJhbSB0b2tlblJlZnJlc2hJbnRlcnZhbCA6IHRoZSB0b2tlbiByZWZyZXNoIGludGVydmFsXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZShcclxuICAgIHNlcnZpY2VVcmk6IHN0cmluZ3wgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBzZXJ2aWNlUHJlZml4OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHRva2VuUmVmcmVzaEludGVydmFsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gdGhpcy5SRUZSRVNIX0lOVEVSVkFMKSB7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHVuaXF1ZSBjbGllbnQgaWRcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NsaXBwZXJfY2xpZW50X2lkJykpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfY2xpZW50X2lkJywgU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemVcclxuICAgIHRoaXMuX3NlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xyXG4gICAgdGhpcy5fc2VydmljZVByZWZpeCA9IHNlcnZpY2VQcmVmaXg7XHJcbiAgICB0aGlzLnRva2VuUmVmcmVzaEludGVydmFsID0gdG9rZW5SZWZyZXNoSW50ZXJ2YWw7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIGlmICghdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKChtZXNzYWdlOiBCcm9hZGNhc3RNZXNzYWdlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ0hBTkdFRCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW4oXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5wYXNzd29yZCxcclxuICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5vYXV0aCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGhBY2Nlc3NUb2tlbikuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgICAgICAgICAgLy8gTG9hZCBiYWdcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmFnKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR09VVF9DT01QTEVURUQgfHxcclxuICAgICAgICAgIG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5MT0dJTl9ESVNDT05ORUNURUQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dlZEluKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIjxwPlwiICsgci5tZXNzYWdlICsgXCI8L3A+PGJyPjxicj48aHI+PHAgY2xhc3M9J3NtYWxsJz48aT5QZXIgZWxpbWluYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIENsaXBwZXIgYWNjZWRlcmUgYTo8YnI+PGI+bWVudSA+IHBlcnNvbmFsaXp6YSA+IGNvbGxlZ2FtZW50aTwvYj48L2k+PC9wPlwiLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBiYWdcclxuICAgICAgICAgICAgICAgIHRoaXMuX2JhZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV2ZWx1YXRlIGN1cnJlbnQgc2Vzc2lvbiBzdG9yYWdlIGluIGNhc2Ugb2YgcGFnZSByZWZyZXNoIChGNSlcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpICYmIHRoaXMuZ2V0VG9rZW4oKSkge1xyXG4gICAgICAvLyBBdXRvIGxvZ2luXHJcbiAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG4gICAgICAvLyBTdGFydCByZWZyZXNoIHRpbWVyXHJcbiAgICAgIHRoaXMuZW5hYmxlVG9rZW5SZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgSldUIHRva2VuXHJcbiAgICogQHBhcmFtIHRva2VuIDogdG9rZW5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFRva2VuKHRva2VuOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKCBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkgKyBcIiAtIHRva2VuOlwiICsgdG9rZW4uc3Vic3RyaW5nKHRva2VuLmxlbmd0aCAtIDE1KSk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2p3dCcsIHRva2VuKTtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICB0aGlzLmVuYWJsZVRva2VuUmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEVuYWJsZSBKV1QgdG9rZW4gYXV0byByZWZyZXNoXHJcbiAqL1xyXG4gIHByaXZhdGUgZW5hYmxlVG9rZW5SZWZyZXNoKCkge1xyXG4gICAgaWYgKCF0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXIgPVxyXG4gICAgICAgIHRpbWVyKHRoaXMudG9rZW5SZWZyZXNoSW50ZXJ2YWwsIHRoaXMudG9rZW5SZWZyZXNoSW50ZXJ2YWwpXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoaW5nIHx8ICF0aGlzLmxvZ2dlZEluKCkpIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgdGhpcy5yZWZyZXNoaW5nID0gZmFsc2U7IH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IHRoaXMucmVmcmVzaGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSk7XHJcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRva2VuUmVmcmVzaFRpbWVyLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqL1xyXG4gIGdldFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2p3dCcpO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuWzBdID09PSAnXCInKSB7XHJcbiAgICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4gPz8gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dpbiAgIFxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvYW5sIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICAgKiBAcmV0dXJuczogdGhlIGxvZ2luIHJlc3VsdFxyXG4gICAqL1xyXG4gIGxvZ2luKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgdGhpcy5sb2dnaW5nSW4uc2V0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbG9naW4nLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVzZXI6IG9hdXRoID8gbnVsbCA6IGVtYWlsLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IG9hdXRoID8gbnVsbCA6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9jbGllbnRfaWRcIiksXHJcbiAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6XHJcbiAgICAgICAgICAgICFvYXV0aFxyXG4gICAgICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSBhY2Nlc3MgdG9rZW5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlLnRva2VuKTtcclxuICAgICAgICAgICAgY29uc3QgbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvID0ge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHIudmFsdWUuY29udGV4dCxcclxuICAgICAgICAgICAgICB1c2VyU2V0dGluZ3M6IHIudmFsdWUuc2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFvYXV0aCkge1xyXG4gICAgICAgICAgICAgIGxvZ2luSW5mby51c2VyQ3JlZGVudGlhbHMgPVxyXG4gICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuY2lwaGVyKFxyXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgICAgICByZW1lbWJlcjogcmVtZW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIH0pLCBsb2dpbkluZm8uY29udGV4dC51c2VySWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBpbmZvXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICdjbGlwcGVyX2xvZ2luJyxcclxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShsb2dpbkluZm8pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9sb2dpbkluZm8gPSBsb2dpbkluZm87XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gbG9nb3V0XHJcbiAgICovXHJcbiAgbG9nb3V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5fc2VydmljZVVyaSArICcvbG9nb3V0Jywge30pLnBpcGUoXHJcbiAgICAgIG1hcChyID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKF9lKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXNldCBsb2dpbiByZWZyZXNoIHRpbWVyIGFuZCBsb2dpbiBzdGF0ZVxyXG4gKi9cclxuICByZXNldCgpIHtcclxuICAgIC8vIENsZWFyIHN1YnNjcmlwdGlvbnNcclxuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyID0gbnVsbDtcclxuXHJcbiAgICAvLyBDbGVhciBsb2dpbiBpbmZvXHJcbiAgICB0aGlzLl9sb2dpbkluZm8gPSBudWxsO1xyXG5cclxuICAgIC8vIExvZ2dlZCBvdXRcclxuICAgIHRoaXMubG9nZ2VkSW4uc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGxvZ2luIGRhdGFcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX29hdXRoJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG5cclxuICAgIC8vIFJlc2V0IGxvZ2luXHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIHRva2VuIHJlZnJlc2hcclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PExvZ2luUmVzdWx0PENsaXBwZXJVc2VySW5mbz4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvcmVmcmVzaCcsIHt9XHJcbiAgICApLnBpcGUobWFwKChyOiBBcGlSZXN1bHQ8TG9naW5SZXN1bHQ8Q2xpcHBlclVzZXJJbmZvPj4pID0+IHtcclxuICAgICAgLy8gVXBkYXRlIHRva2VuXHJcbiAgICAgIHRoaXMuc2V0VG9rZW4oci52YWx1ZS50b2tlbik7ICAgICAgXHJcblxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEdldCBhIG5ldyBvbmUgdGltZSBwYXNzd29yZFxyXG4gKiBAcGFyYW0gaWQ6IHRoZSBvcHRpb25hbCByZXBvc2l0b3J5IGlkIFxyXG4gKi9cclxuICBuZXdPVFAoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJPVFBJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL290cC9uZXcvP2lkPScgKyBpZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIEFycyBldmVudHMgY2FsZW5kYXJcclxuICAgKi9cclxuICBldmVudHMocGFyYW1zOiBDbGlwcGVyUXVlcnlBcnNFdmVudHNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclF1ZXJ5QXJzRXZlbnRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2Fycy9ldmVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgcXVlcnkocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBxdWVyeVxyXG4gICAqL1xyXG4gIHF1ZXJ5RmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9mYWNldHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4qIFVwZGF0ZSBkb2N1bWVudCBzdGF0ZVxyXG4qL1xyXG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogQ2xpcHBlckRvY3VtZW50VXBkYXRlU3RhdGVQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdGF0ZS91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAgICovXHJcbiAgZXhwb3J0UGRmKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvZXhwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICogRXhwb3J0IGRvY3VtZW50IGxpc3QgKHF1ZXJ5IG9yIHNlbGVjdGVkIGl0ZW1zKSBvciBleHBvcnQgZGVhZGxpbmVzIGFzIGljc1xyXG4gKi9cclxuICBleHBvcnQocGFyYW1zOiBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQnLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgZG9jdW1lbnRzIGxpbmsgYnkgZW1haWxcclxuICAgKi9cclxuICBzZW5kVG8ocGFyYW1zOiBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZW5kJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIHBhZ2UgdGhlIGZ1bGwgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICovXHJcbiAgcmVwb3J0KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGNvbW1lbnRcclxuICAgKi9cclxuICBjb21tZW50KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NvbW1lbnQvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGluZm9cclxuICAgKi9cclxuICBpbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9pbmZvLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBzdHJ1Y3R1cmVcclxuICAgKi9cclxuICBpbmRleChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRvY3VtZW50U3RydWN0dXJlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdHJ1Y3R1cmUvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGxhc3QgdXBkYXRlXHJcbiAgICovXHJcbiAgbGFzdFVwZGF0ZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8c3RyaW5nPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9sYXN0LXVwZGF0ZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlcyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlO1xyXG4gICAgaWYgKCFtb2RlKSBtb2RlID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luOlxyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgcGFyYW1zLm1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3JlZmVyZW5jZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmYWNldHMgZm9yIGEgZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gICAqL1xyXG4gIHJlZmVyZW5jZXNGYWNldHMocGFyYW1zOiBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcykge1xyXG4gICAgbGV0IG1vZGUgPSBwYXJhbXMubW9kZSA/PyBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcy9mYWNldHMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkp1cmlzOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBqdXJpcyBhcnRpY2xlc1xyXG4gICAqL1xyXG4gIGp1cmlzQXJ0aWNsZXMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2FydGljbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRoZSB0YXhvbm9teVxyXG4gICAqL1xyXG4gIGdldFRheG9ub215KHBhcmFtczogQ2xpcHBlclRheG9ub215UGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Rm9sZGVyVHJlZT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YXhvbm9teScsXHJcbiAgICAgIHBhcmFtcyA/PyB7IG1vZGVsOiAwLCBjb3VudEl0ZW1zOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdG9waWNzXHJcbiAgICovXHJcbiAgZ2V0VG9waWNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RvcGljcydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGJhZ1xyXG4gICAqL1xyXG4gIGxvYWRCYWcoKSB7XHJcbiAgICB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nJ1xyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYmFnID0gW107XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9iYWcucHVzaChKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb25lIG9yIG1vcmUgZG9jdW1lbnRzIHRvIHRoZSBiYWdcclxuICAgKiBAcGFyYW0gaWRzIHRoZSBkb2N1bWVudCBpZHMgdG8gYWRkXHJcbiAgICovXHJcbiAgYWRkVG9CYWcoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2FkZCcsXHJcbiAgICAgICAgeyBkb2N1bWVudElkczogaWRzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICByLnZhbHVlLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iYWcucHVzaChKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgZnJvbSBiYWdcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICByZW1vdmVGcm9tQmFnKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkb2N1bWVudElkczogW2lkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kSW5kZXhCeUtleShcclxuICAgICAgICAgICAgICB0aGlzLl9iYWcsXHJcbiAgICAgICAgICAgICAgJ0RvY3VtZW50SWQnLFxyXG4gICAgICAgICAgICAgIGlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChwICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2JhZy5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2F2ZSBhIHVzZXIgbGlua1xyXG4gKiBAcGFyYW0gaXRlbTogdGhlIHVzZXIgbGlua1xyXG4gKi9cclxuICBzYXZlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgdXNlciBsaW5rXHJcbiAgICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAgKi9cclxuICBkZWxldGVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3MvZGVsZXRlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -441,4 +441,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
441
441
  standalone: true,
442
442
  }]
443
443
  }] });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFxRCxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDek4sT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQWdDLDBCQUEwQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBTzlHLE1BQU0sT0FBTyxzQkFBc0I7SUFKbkM7UUFNYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0EyYTlEO0lBdmFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLENBQUMsYUFBYTthQUNiLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxhQUFhLENBQUM7YUFDbEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7cUJBQzVCLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDZCxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQzFELENBQUM7b0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFdBQXFCLEVBQUUsZUFBMkMsSUFBSTtRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksS0FBSyxHQUFpQyxFQUFFLEdBQUcsRUFBRSxXQUFXLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM1QixTQUFTLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLENBQUM7U0FDSixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQTRCO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsSUFBeUI7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7R0FHRDtJQUNDLDBCQUEwQixDQUFDLEtBQTRCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O0VBR0Y7SUFDRSxhQUFhLENBQUMsS0FBNEI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUM1QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7Z0JBQ25FLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLElBQXlCO1FBQzdDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDL0QsSUFBSSxJQUFJLEdBQ0osQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJO1lBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksSUFBSSxJQUFJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsSUFBUztRQUNkLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXO1lBQzNCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNO1lBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtZQUNwQixDQUFDLENBQUMsV0FBVztnQkFDYixJQUFJLENBQUMsTUFBTTtnQkFDWCxLQUFLO2dCQUNMLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNOLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsSUFBSSxPQUFPLEdBQ1Asd0ZBQXdGO1lBQ3hGLGtNQUFrTTtZQUNsTSwyREFBMkQ7WUFDM0QsNEJBQTRCO1lBQzVCLHFDQUFxQztZQUNyQyxFQUFFO1lBQ0YsUUFBUTtZQUNSLE1BQU07WUFDTixNQUFNO1lBQ04sbUJBQW1CO1lBQ25CLFFBQVE7WUFDUixNQUFNO1lBQ04sTUFBTSxDQUFBO1FBQ1YsTUFBTSxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEtBQTRCO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3JELFNBQVMsRUFBRSwyQkFBMkI7WUFDdEMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUNBLDJHQUEyRztnQkFDL0csS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNO2FBQ3RCO1lBQ0QsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSTthQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLFNBQVMsQ0FBQztnQkFDUCxJQUFJLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7d0JBQzNELENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxVQUFrQixFQUFFLFFBQXVCLElBQUk7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUM1QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ2pDLFNBQVMsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7Ozs7RUFNRjtJQUNFLElBQUksQ0FDQSxXQUFzQyxFQUN0QyxTQUFvQyxJQUFJLEVBQ3hDLGFBQXNCLEtBQUs7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUF5QjtRQUM1QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQy9GLE9BQU87UUFDWCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLFVBQWtCLEVBQUUsT0FBbUMsMEJBQTBCLENBQUMsWUFBWTtRQUN6RyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDMUQsU0FBUyxFQUFFLGlDQUFpQztZQUM1QyxTQUFTLEVBQUUsS0FBSztZQUNoQixZQUFZLEVBQUUsS0FBSztZQUNuQixZQUFZLEVBQUUsS0FBSztZQUNuQixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM1QyxRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxXQUFXLEVBQUU7YUFDVixTQUFTLENBQUMsQ0FBQyxDQUErQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0gsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDUCxRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsQ0FBQztnQkFDTixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO2FBQzdCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDaEMsS0FBSyxFQUFFLDhCQUE4QjtZQUNyQyxLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSTthQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTTthQUNyQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVFLElBQUksRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQzt3QkFDaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3RDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQ0FDaEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUNyQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7b0NBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dDQUNwQyxPQUFPOzRCQUNYLENBQUM7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDRCxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFRLENBQUM7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7R0FJRDtJQUNDLHFCQUFxQixDQUFDLE1BQXFCO1FBQ3ZDLE9BQU8sTUFBTSxLQUFLLGFBQWEsQ0FBQywrQkFBK0I7WUFDM0QsTUFBTSxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0I7WUFDekMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLEtBQW1CO1FBQ3BDLE9BQU8sS0FBSyxLQUFLLFlBQVksQ0FBQyxzQkFBc0I7WUFDaEQsS0FBSyxLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7WUFDdkMsS0FBSyxLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFFeEMsQ0FBQztJQUVEOzs7O0tBSUM7SUFDRCxZQUFZLENBQUMsS0FBUztRQUNsQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3JCLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxTQUFnQztRQUN2QyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7Z0JBQ25ELENBQUMsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLHNCQUFzQjtnQkFDL0MsQ0FBQyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O0tBR0M7SUFDRCxTQUFTLENBQUMsU0FBZ0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFFBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O0tBR0M7SUFDRCxjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0E3YVEsc0JBQXNCO2tHQUF0QixzQkFBc0Isd0VBSHJCLGFBQWE7OzJGQUdkLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMsIENsaXBwZXJNZXNzYWdlcywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsIFNlbmRUb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgc2F2ZUFzIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nUmVzdWx0LCBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCB9IGZyb20gJy4uL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsaXBib2FyZCA9IGluamVjdChDbGlwYm9hcmQpO1xyXG4gICAgcHVibGljIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlKTtcclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50IHRvIGV4cG9ydFxyXG4gKi9cclxuICAgIGV4cG9ydFBkZihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmNvbmZpcm0oXCJDb25mZXJtaSBsJ2VzcG9ydGF6aW9uZT9cIiwgJ0F0dGVuemlvbmUhJylcclxuICAgICAgICAgICAgLmNvbXBvbmVudEluc3RhbmNlLmNob29zZW4uc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyLnJlc3VsdCA9PT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pZCB8fCBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0VzcG9ydGF6aW9uZSBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0UGRmKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIyLCAoaXRlbS50aXRsZTEgPyBpdGVtLnRpdGxlMSA6IGlkKSArICcucGRmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgY3VycmVudCBkb2N1bWVudCBsaXN0IG9yIGp1c3QgdGhlIHNlbGVjdGVkIGRvY3VtZW50cyBhcyBhIGNzdlxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWRzOiB0aGUgZG9jdW1lbnQgaWQgbGlzdFxyXG4gICAgICogQHBhcmFtIHNlYXJjaFBhcmFtczogdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgZXhwb3J0SXRlbXMoZG9jdW1lbnRJZHM6IHN0cmluZ1tdLCBzZWFyY2hQYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1vZGVsOiBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zID0geyBpZHM6IGRvY3VtZW50SWRzID8/IFtdLCBxdWVyeTogbnVsbCwgZm9ybWF0OiAxIH07XHJcbiAgICAgICAgaWYgKCFtb2RlbC5pZHMgfHwgbW9kZWwuaWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBtb2RlbC5xdWVyeSA9IHNlYXJjaFBhcmFtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1NhbHZhdGFnZ2lvIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnQobW9kZWwpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIsICdlbGVuY28uY3N2Jyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJjaGl2ZSBhIGxpc3Qgb2YgaXRlbXNcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICovXHJcbiAgICBhZGRUb0FyY2hpdmUoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9BUkNISVZFX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGRlYWRsaW5lXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGFkZFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhbGVuZGFyKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQ0FMRU5EQVJfQURELCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogQWRkIGEgbGlzdCBvZiBpdGVtcyB0byB3b3JraW5nIGRvY3VtZW50c1xyXG4gKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiAqL1xyXG4gICAgYWRkSXRlbXNUb1dvcmtpbmdEb2N1bWVudHMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9XT1JLSU5HX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiovXHJcbiAgICBhZGRJdGVtc1RvQmFnKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5hZGRUb0JhZyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBtZXRhZGF0YSB0byBjbGlwYm9hcmRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gY29weVxyXG4gICAgICovXHJcbiAgICBjb3B5TWV0YWRhdGFUb0NsaXBib2FyZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Db29yZGluYW1lbnRvKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1ldGEgPVxyXG4gICAgICAgICAgICAoaXRlbS5pZCA/PyBpdGVtLmRvY3VtZW50SWQpICsgJ1xcdCcgK1xyXG4gICAgICAgICAgICBpdGVtLnRpdGxlMT8ucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIikgKyAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS50aXRsZTIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS50aXRsZTIucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIik7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5udW1iZXIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5udW1iZXI7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5wdWJsaXNoaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLnB1Ymxpc2hpbmdEYXRlID0gbmV3IERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgICAgIG1ldGEgKz0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShpdGVtLnB1Ymxpc2hpbmdEYXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uXHJcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShtZXRhKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoXCJNZXRhZGF0aSBjb3BpYXRpIG5lZ2xpIGFwcHVudGkuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIGRvY3VtZW50IHBlcm1hbGlua1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBzaG93IHRoZSBsaW5rIGZvclxyXG4gICAgICovXHJcbiAgICBzaG93TGluayhpdGVtOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBsZXQgaWQgPSBpdGVtLmlkID8gaXRlbS5pZCA6IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICBsZXQgY2hhbm5lbHMgPSBpdGVtLmNoYW5uZWxOYW1lXHJcbiAgICAgICAgICAgID8gJ0NhbmFsaTogJyArIGl0ZW0uY2hhbm5lbE5hbWUgKyAnPGJyPidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICBsZXQgb3JpZ2luID0gaXRlbS5vcmlnaW5cclxuICAgICAgICAgICAgPyAnT3JpZ2luZTogJyArXHJcbiAgICAgICAgICAgIGl0ZW0ub3JpZ2luICtcclxuICAgICAgICAgICAgJyAtICcgK1xyXG4gICAgICAgICAgICAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbiA/IGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gOiAnJykgK1xyXG4gICAgICAgICAgICAnPGJyPidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICBsZXQgdG9waWNzID0gaXRlbS50b3BpY3MgPyAnQXJnb21lbnRvOiAnICsgaXRlbS50b3BpY3MgKyAnPGJyPicgOiAnJztcclxuICAgICAgICBpZiAoIWlkKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPVxyXG4gICAgICAgICAgICBcIjxwID5JbCBsaW5rIGNoZSB0cm92aSBxdWkgc290dG8gw6ggdW4gcmlmZXJpbWVudG8gZGlyZXR0byBhbCBkb2N1bWVudG8gc2VsZXppb25hdG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8cCA+TG8gcHVvaSB1dGlsaXp6YXJlIG5lbGxhIHR1YSBkb2N1bWVudGF6aW9uZSBvIGludmlhcmxvIHBlciBlbWFpbCBhZCB1biB0dW8gY29sbGVnYS4gTGEgcGVyc29uYSBjaGUgZGVzaWRlcmVyw6AgdmlzdWFsaXp6YXJlIGlsIGRvY3VtZW50byBkb3Zyw6AgbmVjZXNzYXJpYW1lbnRlIGVzc2VyZSB1biB1dGVudGUgYWJib25hdG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8cCA+U2VsZXppb25hIGUgY29waWEgKGZhaSBDVFJMK0MpIGlsIGxpbmsgcXVpIHNvdHRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc21hbGwgYWNjZW50Jz5cIiArXHJcbiAgICAgICAgICAgICdodHRwczovL2NsaXBwZXIuYXJzZWRpemlvbmkuaXQvP2lkPScgK1xyXG4gICAgICAgICAgICBpZCArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxicj4nICtcclxuICAgICAgICAgICAgJzxocj4nICtcclxuICAgICAgICAgICAgJzxwIGNsYXNzPVwic21hbGxcIj4nICtcclxuICAgICAgICAgICAgY2hhbm5lbHMgK1xyXG4gICAgICAgICAgICBvcmlnaW4gK1xyXG4gICAgICAgICAgICB0b3BpY3NcclxuICAgICAgICAnPC9wPic7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKG1lc3NhZ2UsICdDb3BpYSBsaW5rJywgJ0NoaXVkaScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCBkb2N1bWVudHMgbGlua3MgYnkgZW1haWxcclxuICAgICAqIEBwYXJhbSBpdGVtcyA6IHRoZSBkb2N1bWVudCBsaXN0XHJcbiAgICAgKi9cclxuICAgIHNlbmRJdGVtc1RvKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKFNlbmRUb0RpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdpbnZpYSBkb2N1bWVudGkgcGVyIGVtYWlsJyxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBpbmZvOlxyXG4gICAgICAgICAgICAgICAgICAgICdQdW9pIGludmlhcmUgaSBkb2N1bWVudGkgYSBjaGkgdnVvaSBtYSwgcGVyIHBvdGVybGkgdmlzdWFsaXp6YXJlLCDDqCBuZWNlc3NhcmlvIGVzc2VyZSB1biB1dGVudGUgYWJib25hdG8uJyxcclxuICAgICAgICAgICAgICAgIGNvdW50OiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHIuaWRzID0gaXRlbXM/Lm1hcChuID0+IG4uZG9jdW1lbnRJZCA/PyBuLmlkKSA/PyBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdJbnZpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5zZW5kVG8ocilcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcjIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyMi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdJbnZpbyBjb21wbGV0YXRvIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IGEgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHRpdGxlOiB0aGUgZG9jdW1lbnQgc2hvcnQgdGl0bGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlcG9ydChkb2N1bWVudElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudElkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZXBvcnQoZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAodGl0bGUgPyB0aXRsZSA6IGRvY3VtZW50SWQpICsgJy5odG1sJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIE9wZW4gYW4gaXRlbVxyXG4qIFRoaXMgc2hvdWxkIGJlIGFsd2F5cyBvdmVycmlkZGVuXHJcbiogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuKiBAcGFyYW0gcXVlcnkgOiB0aGUgcXVlcnkgZG9jdW1lbnRcclxuKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuKi9cclxuICAgIG9wZW4oXHJcbiAgICAgICAgX2RvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgX3F1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBfbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIHJlcG9ydChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGl0ZW0ubW9kZWwgIT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiYgaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oXCJRdWVzdGEgZnVuemlvbmFsaXTDoCBub24gw6ggZGlzcG9uaWJpbGUgcGVyIHF1ZXN0byB0aXBvIGRpIGRvY3VtZW50by5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5SZXBvcnQoaXRlbS5kb2N1bWVudElkLCBpdGVtLnRpdGxlMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJvd3NlIGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudCBpZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIG1vZGUgOiB0aGUgcmVmZXJlbmNlIG1vZGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlZmVyZW5jZXMoZG9jdW1lbnRJZDogc3RyaW5nLCBtb2RlOiBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbikge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdyaWZlcmltZW50aSBsZWdhdGkgYWwgZG9jdW1lbnRvJyxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7IGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsIG1vZGU6IG1vZGUgfSxcclxuICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc5OSUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiByLmRvY3VtZW50SWQpIHRoaXMub3BlbihyLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hbmFnZSBjbGlwcGVyIGJhZ1xyXG4gICAgICovXHJcbiAgICBvcGVuQmFnKCkge1xyXG4gICAgICAgIGxldCBpdGVtczogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5iYWcuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gbi50aXRsZTEgPz8gbi50aXRsZTI7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgYmFnOiBuLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoQmFnOiB7IG5hbWU6IHRpdGxlIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2VsZWN0KHtcclxuICAgICAgICAgICAgdGl0bGU6ICdHZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvJyxcclxuICAgICAgICAgICAgbXVsdGk6IGZhbHNlLFxyXG4gICAgICAgICAgICBtdXN0U2VsZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgb2tDYXB0aW9uOiAnU0VMRVpJT05BJyxcclxuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLFxyXG4gICAgICAgICAgICBjYW5EZWxldGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhblZpZXc6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS52aWV3XHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSByLmJhZztcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbihpdGVtLmRvY3VtZW50SWQgfHwgaXRlbS5Eb2N1bWVudElkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS5kZWxldGVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHIuc2VsZWN0ZWRJdGVtc1swXS5iYWc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlbW92ZUZyb21CYWcoaXRlbS5kb2N1bWVudElkIHx8IGl0ZW0uRG9jdW1lbnRJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyMi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgci5pdGVtcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLml0ZW1zW3BdLmJhZy5Eb2N1bWVudElkID09PSBpdGVtLkRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5pdGVtcy5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLml0ZW1zLmxlbmd0aCA9PT0gMCkgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnQgY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBwcmludCgpIHtcclxuICAgICAgICBsZXQgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWRvY3VtZW50LWlmcmFtZScpIGFzIGFueTtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgICBmLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ3tcInR5cGVcIjogXCJwcmludFwifScsICcqJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBpbiBjdXJyZW50IGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIGZpbmQoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oJ1BlciBjZXJjYXJlIG5lbCBkb2N1bWVudG8gcHJlbWkgQ1RSTCArIEYuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIENoZWNrcyBpZiBhIG1vZHVsZSBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGUgdG8gY2hlY2tcclxuICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZHVsZSBpcyBzdXBwb3J0ZWRcclxuICovXHJcbiAgICBpc01vZHVsZVN1cHBvcnRlZEJ5UlMobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5TY2FkZW56ZUVTZWduYWxhemlvbmk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBtb2RlbCBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICAqIEBwYXJhbSBtb2RlbCA6IHRoZSBtb2RlbCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZGVsIGlzIHN1cHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBpc01vZGVsU3VwcG9ydGVkQnlSUyhtb2RlbDogQ2xpcHBlck1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFsbCBkb2N1bWVudHMgYXJlIHN1cHBvcnRlZCBieSBSU1xyXG4gICAqIEBwYXJhbSBpdGVtcyA6IHRoZSBsaXN0IG9mIGRvY3VtZW5zXHJcbiAgICogQHJldHVybnM6IHRydWUgaWYgYWxsIGRvY3VtZW50cyBzdXBwb3J0cyBSU1xyXG4gICAqL1xyXG4gICAgY2FuU3VwcG9ydFJTKGl0ZW1zOiBbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBhbGxvdyA9IHRoaXMuaXNNb2RlbFN1cHBvcnRlZEJ5UlMobi5tb2RlbCk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgUlMgaXMgZW5hYmxlZCBmb3IgYWxsIGdpdmVuIGRvY3VtZW50c1xyXG4gICAgICogQHBhcmFtIGRvY3VtZW50cyA6IHRoZSBkb2N1bWVudHMgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYWxsYSBkb2N1bWVudHMgYXIgUlMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBSU19lbmFibGVkKGRvY3VtZW50czogQ2xpcHBlckRvY3VtZW50SW5mb1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudHMgfHwgZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxldCBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgIGRvY3VtZW50cy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICBhbGxvdyA9IG4gJiYgKG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxvdykgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbGxvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBOZXcgbGF3XHJcbiAgICogQHBhcmFtIGRvY3VtZW50czogdGhlIGFycmF5IG9mIGRvY3VtZW50cyB0byBsaW5rIHRvIHRoZSBsYXdcclxuICAgKi9cclxuICAgIFJTX25ld0xhdyhkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0xBVywgZG9jdW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5ldyBhY3Rpdml0eVxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgZG9jdW1lbnQgdG8gbGluayB0byB0aGUgYWN0aXZpdHlcclxuICAgICAqL1xyXG4gICAgUlNfbmV3QWN0aXZpdHkoZG9jdW1lbnQ6IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19ORVdfQUNUSVZJVFksIGRvY3VtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBEb2N1bWVudCB1c2FnZSByZXBvcnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBsYXdcclxuICAgKi9cclxuICAgIFJTX3VzYWdlUmVwb3J0KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfVVNBR0VfUkVQT1JULCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFxRCxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDek4sT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQWdDLDBCQUEwQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBTzlHLE1BQU0sT0FBTyxzQkFBc0I7SUFKbkM7UUFNYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0EyYTlEO0lBdmFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLENBQUMsYUFBYTthQUNiLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxhQUFhLENBQUM7YUFDbEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7cUJBQzVCLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDZCxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQzFELENBQUM7b0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFdBQXdDLEVBQUUsZUFBdUQsSUFBSTtRQUM3RyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksS0FBSyxHQUFpQyxFQUFFLEdBQUcsRUFBRSxXQUFXLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM1QixTQUFTLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLENBQUM7U0FDSixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQTRCO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsSUFBeUI7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7R0FHRDtJQUNDLDBCQUEwQixDQUFDLEtBQTRCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O0VBR0Y7SUFDRSxhQUFhLENBQUMsS0FBNEI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUM1QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7Z0JBQ25FLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLElBQXlCO1FBQzdDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDL0QsSUFBSSxJQUFJLEdBQ0osQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJO1lBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksSUFBSSxJQUFJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsSUFBUztRQUNkLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXO1lBQzNCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNO1lBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtZQUNwQixDQUFDLENBQUMsV0FBVztnQkFDYixJQUFJLENBQUMsTUFBTTtnQkFDWCxLQUFLO2dCQUNMLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNOLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsSUFBSSxPQUFPLEdBQ1Asd0ZBQXdGO1lBQ3hGLGtNQUFrTTtZQUNsTSwyREFBMkQ7WUFDM0QsNEJBQTRCO1lBQzVCLHFDQUFxQztZQUNyQyxFQUFFO1lBQ0YsUUFBUTtZQUNSLE1BQU07WUFDTixNQUFNO1lBQ04sbUJBQW1CO1lBQ25CLFFBQVE7WUFDUixNQUFNO1lBQ04sTUFBTSxDQUFBO1FBQ1YsTUFBTSxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEtBQTRCO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3JELFNBQVMsRUFBRSwyQkFBMkI7WUFDdEMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUNBLDJHQUEyRztnQkFDL0csS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNO2FBQ3RCO1lBQ0QsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSTthQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLFNBQVMsQ0FBQztnQkFDUCxJQUFJLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7d0JBQzNELENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxVQUFrQixFQUFFLFFBQXVCLElBQUk7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUM1QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ2pDLFNBQVMsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7Ozs7RUFNRjtJQUNFLElBQUksQ0FDQSxXQUFzQyxFQUN0QyxTQUFvQyxJQUFJLEVBQ3hDLGFBQXNCLEtBQUs7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUF5QjtRQUM1QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQy9GLE9BQU87UUFDWCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLFVBQWtCLEVBQUUsT0FBbUMsMEJBQTBCLENBQUMsWUFBWTtRQUN6RyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDMUQsU0FBUyxFQUFFLGlDQUFpQztZQUM1QyxTQUFTLEVBQUUsS0FBSztZQUNoQixZQUFZLEVBQUUsS0FBSztZQUNuQixZQUFZLEVBQUUsS0FBSztZQUNuQixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM1QyxRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxXQUFXLEVBQUU7YUFDVixTQUFTLENBQUMsQ0FBQyxDQUErQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0gsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDUCxRQUFRLEVBQUUsS0FBSztnQkFDZixHQUFHLEVBQUUsQ0FBQztnQkFDTixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO2FBQzdCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDaEMsS0FBSyxFQUFFLDhCQUE4QjtZQUNyQyxLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSTthQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTTthQUNyQixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVFLElBQUksRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQzt3QkFDaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3RDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQ0FDaEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUNyQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7b0NBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dDQUNwQyxPQUFPOzRCQUNYLENBQUM7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDRCxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFRLENBQUM7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7R0FJRDtJQUNDLHFCQUFxQixDQUFDLE1BQXFCO1FBQ3ZDLE9BQU8sTUFBTSxLQUFLLGFBQWEsQ0FBQywrQkFBK0I7WUFDM0QsTUFBTSxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0I7WUFDekMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLEtBQW1CO1FBQ3BDLE9BQU8sS0FBSyxLQUFLLFlBQVksQ0FBQyxzQkFBc0I7WUFDaEQsS0FBSyxLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7WUFDdkMsS0FBSyxLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFFeEMsQ0FBQztJQUVEOzs7O0tBSUM7SUFDRCxZQUFZLENBQUMsS0FBUztRQUNsQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3JCLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxTQUFnQztRQUN2QyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7Z0JBQ25ELENBQUMsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLHNCQUFzQjtnQkFDL0MsQ0FBQyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O0tBR0M7SUFDRCxTQUFTLENBQUMsU0FBZ0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFFBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O0tBR0M7SUFDRCxjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0E3YVEsc0JBQXNCO2tHQUF0QixzQkFBc0Isd0VBSHJCLGFBQWE7OzJGQUdkLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMsIENsaXBwZXJNZXNzYWdlcywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsIFNlbmRUb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgc2F2ZUFzIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nUmVzdWx0LCBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCB9IGZyb20gJy4uL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsaXBib2FyZCA9IGluamVjdChDbGlwYm9hcmQpO1xyXG4gICAgcHVibGljIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlKTtcclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50IHRvIGV4cG9ydFxyXG4gKi9cclxuICAgIGV4cG9ydFBkZihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmNvbmZpcm0oXCJDb25mZXJtaSBsJ2VzcG9ydGF6aW9uZT9cIiwgJ0F0dGVuemlvbmUhJylcclxuICAgICAgICAgICAgLmNvbXBvbmVudEluc3RhbmNlLmNob29zZW4uc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyLnJlc3VsdCA9PT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pZCB8fCBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0VzcG9ydGF6aW9uZSBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0UGRmKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIyLCAoaXRlbS50aXRsZTEgPyBpdGVtLnRpdGxlMSA6IGlkKSArICcucGRmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgY3VycmVudCBkb2N1bWVudCBsaXN0IG9yIGp1c3QgdGhlIHNlbGVjdGVkIGRvY3VtZW50cyBhcyBhIGNzdlxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWRzOiB0aGUgZG9jdW1lbnQgaWQgbGlzdFxyXG4gICAgICogQHBhcmFtIHNlYXJjaFBhcmFtczogdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgZXhwb3J0SXRlbXMoZG9jdW1lbnRJZHM6IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2VhcmNoUGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtb2RlbDogQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcyA9IHsgaWRzOiBkb2N1bWVudElkcyA/PyBbXSwgcXVlcnk6IG51bGwsIGZvcm1hdDogMSB9O1xyXG4gICAgICAgIGlmICghbW9kZWwuaWRzIHx8IG1vZGVsLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgbW9kZWwucXVlcnkgPSBzZWFyY2hQYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdTYWx2YXRhZ2dpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0KG1vZGVsKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAnZWxlbmNvLmNzdicpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyY2hpdmUgYSBsaXN0IG9mIGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkVG9BcmNoaXZlKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQVJDSElWRV9BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBkZWFkbGluZVxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWxlbmRhcihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0NBTEVOREFSX0FERCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4gKi9cclxuICAgIGFkZEl0ZW1zVG9Xb3JraW5nRG9jdW1lbnRzKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfV09SS0lOR19BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4qL1xyXG4gICAgYWRkSXRlbXNUb0JhZyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYWRkVG9CYWcoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgbWV0YWRhdGEgdG8gY2xpcGJvYXJkXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bykgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXRhID1cclxuICAgICAgICAgICAgKGl0ZW0uaWQgPz8gaXRlbS5kb2N1bWVudElkKSArICdcXHQnICtcclxuICAgICAgICAgICAgaXRlbS50aXRsZTE/LnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpICsgJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0udGl0bGUyLnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ubnVtYmVyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ubnVtYmVyO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHVibGlzaGluZ0RhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5wdWJsaXNoaW5nRGF0ZSA9IG5ldyBEYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmRhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRlID0gbmV3IERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5vcmlnaW5EZXNjcmlwdGlvblxyXG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkobWV0YSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KFwiTWV0YWRhdGkgY29waWF0aSBuZWdsaSBhcHB1bnRpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkb2N1bWVudCBwZXJtYWxpbmtcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gc2hvdyB0aGUgbGluayBmb3JcclxuICAgICAqL1xyXG4gICAgc2hvd0xpbmsoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSB0aXRsZTogdGhlIGRvY3VtZW50IHNob3J0IHRpdGxlXHJcbiAgICAgKi9cclxuICAgIG9wZW5SZXBvcnQoZG9jdW1lbnRJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVwb3J0KGRvY3VtZW50SWQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzYXZlQXMociwgKHRpdGxlID8gdGl0bGUgOiBkb2N1bWVudElkKSArICcuaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBPcGVuIGFuIGl0ZW1cclxuKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4qIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiogQHBhcmFtIHF1ZXJ5IDogdGhlIHF1ZXJ5IGRvY3VtZW50XHJcbiogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiovXHJcbiAgICBvcGVuKFxyXG4gICAgICAgIF9kb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIF9xdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgX25ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IGEgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICByZXBvcnQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlICYmIGl0ZW0ubW9kZWwgIT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKFwiUXVlc3RhIGZ1bnppb25hbGl0w6Agbm9uIMOoIGRpc3BvbmliaWxlIHBlciBxdWVzdG8gdGlwbyBkaSBkb2N1bWVudG8uXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuUmVwb3J0KGl0ZW0uZG9jdW1lbnRJZCwgaXRlbS50aXRsZTEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJyb3dzZSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQgaWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSBtb2RlIDogdGhlIHJlZmVyZW5jZSBtb2RlXHJcbiAgICAgKi9cclxuICAgIG9wZW5SZWZlcmVuY2VzKGRvY3VtZW50SWQ6IHN0cmluZywgbW9kZTogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgPSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW4pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50SWQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAncmlmZXJpbWVudGkgbGVnYXRpIGFsIGRvY3VtZW50bycsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YTogeyBkb2N1bWVudElkOiBkb2N1bWVudElkLCBtb2RlOiBtb2RlIH0sXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogQ2xpcHBlclJlZmVyZW5jZURpYWxvZ1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgci5kb2N1bWVudElkKSB0aGlzLm9wZW4oci5kb2N1bWVudElkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW5hZ2UgY2xpcHBlciBiYWdcclxuICAgICAqL1xyXG4gICAgb3BlbkJhZygpIHtcclxuICAgICAgICBsZXQgaXRlbXM6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYmFnLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IG4udGl0bGUxID8/IG4udGl0bGUyO1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIGJhZzogbixcclxuICAgICAgICAgICAgICAgIHNlYXJjaEJhZzogeyBuYW1lOiB0aXRsZSB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLnNlbGVjdCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnR2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9ybycsXHJcbiAgICAgICAgICAgIG11bHRpOiBmYWxzZSxcclxuICAgICAgICAgICAgbXVzdFNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgIG9rQ2FwdGlvbjogJ1NFTEVaSU9OQScsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyxcclxuICAgICAgICAgICAgY2FuRGVsZXRlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYW5WaWV3OiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuY29tcG9uZW50SW5zdGFuY2Uudmlld1xyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gci5iYWc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oaXRlbS5kb2N1bWVudElkIHx8IGl0ZW0uRG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZGVsZXRlXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSByLnNlbGVjdGVkSXRlbXNbMF0uYmFnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZW1vdmVGcm9tQmFnKGl0ZW0uZG9jdW1lbnRJZCB8fCBpdGVtLkRvY3VtZW50SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyMi5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHIuaXRlbXMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5pdGVtc1twXS5iYWcuRG9jdW1lbnRJZCA9PT0gaXRlbS5Eb2N1bWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaXRlbXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5pdGVtcy5sZW5ndGggPT09IDApIGQuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaW50IGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpbnQoKSB7XHJcbiAgICAgICAgbGV0IGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1kb2N1bWVudC1pZnJhbWUnKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGYpIHtcclxuICAgICAgICAgICAgZi5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKCd7XCJ0eXBlXCI6IFwicHJpbnRcIn0nLCAnKicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgaW4gY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBmaW5kKCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKCdQZXIgY2VyY2FyZSBuZWwgZG9jdW1lbnRvIHByZW1pIENUUkwgKyBGLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gKiBDaGVja3MgaWYgYSBtb2R1bGUgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAqIEBwYXJhbSBtb2R1bGUgOiB0aGUgbW9kdWxlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2R1bGUgaXMgc3VwcG9ydGVkXHJcbiAqL1xyXG4gICAgaXNNb2R1bGVTdXBwb3J0ZWRCeVJTKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuU2NhZGVuemVFU2VnbmFsYXppb25pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGEgbW9kZWwgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAgKiBAcGFyYW0gbW9kZWwgOiB0aGUgbW9kZWwgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2RlbCBpcyBzdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgaXNNb2RlbFN1cHBvcnRlZEJ5UlMobW9kZWw6IENsaXBwZXJNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkgUlNcclxuICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgbGlzdCBvZiBkb2N1bWVuc1xyXG4gICAqIEByZXR1cm5zOiB0cnVlIGlmIGFsbCBkb2N1bWVudHMgc3VwcG9ydHMgUlNcclxuICAgKi9cclxuICAgIGNhblN1cHBvcnRSUyhpdGVtczogW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSB0aGlzLmlzTW9kZWxTdXBwb3J0ZWRCeVJTKG4ubW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIFJTIGlzIGVuYWJsZWQgZm9yIGFsbCBnaXZlbiBkb2N1bWVudHNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudHMgOiB0aGUgZG9jdW1lbnRzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFsbGEgZG9jdW1lbnRzIGFyIFJTIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgUlNfZW5hYmxlZChkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBkb2N1bWVudHMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSBuICYmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogTmV3IGxhd1xyXG4gICAqIEBwYXJhbSBkb2N1bWVudHM6IHRoZSBhcnJheSBvZiBkb2N1bWVudHMgdG8gbGluayB0byB0aGUgbGF3XHJcbiAgICovXHJcbiAgICBSU19uZXdMYXcoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19MQVcsIGRvY3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXcgYWN0aXZpdHlcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGRvY3VtZW50IHRvIGxpbmsgdG8gdGhlIGFjdGl2aXR5XHJcbiAgICAgKi9cclxuICAgIFJTX25ld0FjdGl2aXR5KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0FDVElWSVRZLCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogRG9jdW1lbnQgdXNhZ2UgcmVwb3J0XHJcbiAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgbGF3XHJcbiAgICovXHJcbiAgICBSU191c2FnZVJlcG9ydChkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX1VTQUdFX1JFUE9SVCwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19