@hmcts/ccd-case-ui-toolkit 7.2.11 → 7.2.12-2744-rc2

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.
@@ -852,9 +852,13 @@ export class CaseEditPageComponent {
852
852
  */
853
853
  getFilteredCaseEventData(caseFields, formValue, clearEmpty = false, clearNonCase = false, fromPreviousPage = false) {
854
854
  // Get the data for the fields specified.
855
- const formFields = this.formValueService.filterCurrentPageFields(caseFields, formValue);
855
+ let formFields = this.formValueService.filterCurrentPageFields(caseFields, formValue);
856
856
  // Sort out the dynamic lists.
857
857
  this.formValueService.sanitiseDynamicLists(caseFields, formFields);
858
+ // we only want to ensure this when the field_type is a collection of complex fields
859
+ if (caseFields.some((field) => field.field_type?.type === 'Collection' && field.field_type?.collection_field_type?.type === 'Complex')) {
860
+ formFields = this.formValueService.checkValuesSetInCollection(formFields, caseFields);
861
+ }
858
862
  // Get hold of the CaseEventData.
859
863
  const caseEventData = this.formValueService.sanitise(formFields);
860
864
  // delete fields which are not part of the case event journey wizard pages case fields
@@ -926,4 +930,4 @@ export class CaseEditPageComponent {
926
930
  args: [{ selector: 'ccd-case-edit-page', template: "<ng-container *ngIf=\"currentPage\">\n <h1 *ngIf=\"!currentPage.label\" class=\"govuk-heading-l\">{{eventTrigger.name | rpxTranslate}}</h1>\n <ng-container *ngIf=\"currentPage.label\">\n <span class=\"govuk-caption-l\">{{ eventTrigger.name | rpxTranslate}}</span>\n <h1 class=\"govuk-heading-l\">{{currentPage.label | rpxTranslate}}</h1>\n </ng-container>\n</ng-container>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data']\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<!-- Error message summary -->\n<div *ngIf=\"validationErrors.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{'There is a problem' | rpxTranslate}}\n </h2>\n <div *ngFor=\"let validationError of validationErrors\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(validationError.id)\" (keyup.enter)=\"navigateToErrorElement(validationError.id)\" tabindex=\"0\" class=\"validation-error\">\n {{ validationError.message | rpxTranslate: getRpxTranslatePipeArgs(validationError.label | rpxTranslate): null }}\n </a>\n </li>\n </ul>\n </div>\n</div>\n\n<ccd-case-edit-generic-errors [error]=\"caseEdit.error\"></ccd-case-edit-generic-errors>\n\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"caseEdit.callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<div class=\"width-50\">\n <form *ngIf=\"currentPage\" class=\"form\" [formGroup]=\"editForm\" (submit)=\"nextStep()\">\n <fieldset id=\"fieldset-case-data\">\n <legend style=\"display: none;\"></legend>\n <!-- single column -->\n <ccd-case-edit-form id='caseEditForm' *ngIf=\"!currentPage.isMultiColumn()\" [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"\n [pageChangeSubject]=\"pageChangeSubject\"\n (valuesChanged)=\"applyValuesChanged($event)\"></ccd-case-edit-form>\n <!-- two columns -->\n <div *ngIf=\"currentPage.isMultiColumn()\" class=\"grid-row\">\n <div class=\"column-two-thirds rightBorderSeparator\">\n <ccd-case-edit-form id='caseEditForm1' [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n <div class=\"column-one-third\">\n <ccd-case-edit-form id='caseEditForm2' [fields]=\"currentPage.getCol2Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n </div>\n </fieldset>\n\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"toPreviousPage()\" *ngIf=\"!isAtStart()\" [disabled]=\"isDisabled()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText | rpxTranslate}}</button>\n </div>\n\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\">{{getCancelText() | rpxTranslate}}</a></p>\n </form>\n</div>\n\n<ccd-case-event-completion *ngIf=\"caseEdit.isEventCompletionChecksRequired\"\n [eventCompletionParams]=\"caseEdit.eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n</ccd-case-event-completion>\n", styles: [".rightBorderSeparator{border-right-width:4px;border-right-color:#ffcc02;border-right-style:solid}.validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
927
931
  }], () => [{ type: i1.CaseEditComponent }, { type: i2.ActivatedRoute }, { type: i3.FormValueService }, { type: i4.FormErrorService }, { type: i0.ChangeDetectorRef }, { type: i5.PageValidationService }, { type: i6.MatLegacyDialog }, { type: i7.CaseFieldService }, { type: i8.CaseEditDataService }, { type: i9.LoadingService }, { type: i10.ValidPageListCaseFieldsService }, { type: i9.MultipageComponentStateService }, { type: i9.AddressesService }, { type: i11.LinkedCasesService }, { type: i12.CaseFlagStateService }], null); })();
928
932
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditPageComponent, { className: "CaseEditPageComponent", filePath: "lib/shared/components/case-editor/case-edit-page/case-edit-page.component.ts", lineNumber: 34 }); })();
929
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2Nhc2UtZWRpdC1wYWdlL2Nhc2UtZWRpdC1wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtcGFnZS9jYXNlLWVkaXQtcGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsZUFBZSxJQUFJLFNBQVMsRUFBMkMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQTJCLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7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QUF0Qix5Q0FBc0IsMkJBQWlCLHlCQUFZO1lBU25ELGVBQWlDO1lBQWpDLHNEQUFpQztZQWVULGNBQXdCO1lBQXhCLDBDQUF3QjtZQUdwRCxjQUF3QztZQUV4QyxBQURBLEFBREEsMERBQXdDLG9EQUNPLDZEQUNTO1lBSWpELGVBQWlCO1lBQWpCLHNDQUFpQjtZQWdDRSxjQUE4QztZQUE5QyxtRUFBOEM7OztpRkR6QzdELHFCQUFxQjtjQUxqQyxTQUFTOzJCQUNFLG9CQUFvQjs7a0ZBSW5CLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0TGVnYWN5RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlLCBDYXNlRWRpdFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvY2FzZS1lZGl0LWRhdGEnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50RGF0YSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLWV2ZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS1ldmVudC10cmlnZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uJztcbmltcG9ydCB7IERSQUZUX1BSRUZJWCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kcmFmdC5tb2RlbCc7XG5pbXBvcnQgeyBBZGRyZXNzZXNTZXJ2aWNlLCBMb2FkaW5nU2VydmljZSwgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Nhc2UtZmllbGRzL2Nhc2UtZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS9mb3JtLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVZhbHVlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS12YWx1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNhdmVPckRpc2NhcmREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL3NhdmUtb3ItZGlzY2FyZC1kaWFsb2cnO1xuaW1wb3J0IHsgQ2FsbGJhY2tFcnJvcnNDb250ZXh0IH0gZnJvbSAnLi4vLi4vZXJyb3IvZG9tYWluL2Vycm9yLWNvbnRleHQnO1xuaW1wb3J0IHsgaW5pdERpYWxvZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgQ2FzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vZG9tYWluL3dpemFyZC1wYWdlLm1vZGVsJztcbmltcG9ydCB7IFdpemFyZCB9IGZyb20gJy4uL2RvbWFpbi93aXphcmQubW9kZWwnO1xuaW1wb3J0IHsgUGFnZVZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnZS12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWQtcGFnZS1saXN0LWNhc2VGaWVsZHMuc2VydmljZSc7XG5pbXBvcnQgeyBKb3VybmV5SW5zdGlnYXRvciB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9qb3VybmV5JztcbmltcG9ydCB7IExpbmtlZENhc2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3BhbGV0dGUvbGlua2VkLWNhc2VzL3NlcnZpY2VzL2xpbmtlZC1jYXNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtY2FzZS1lZGl0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC1wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXNlLWVkaXQtcGFnZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUVkaXRQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIEpvdXJuZXlJbnN0aWdhdG9yIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRVNVTUVEX0ZPUk1fRElTQ0FSRCA9ICdSRVNVTUVEX0ZPUk1fRElTQ0FSRCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVXX0ZPUk1fRElTQ0FSRCA9ICdORVdfRk9STV9ESVNDQVJEJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVdfRk9STV9TQVZFID0gJ05FV19GT1JNX0NIQU5HRURfU0FWRSc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTVU1FRF9GT1JNX1NBVkUgPSAnUkVTVU1FRF9GT1JNX1NBVkUnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRSSUdHRVJfVEVYVF9TVEFSVCA9ICdDb250aW51ZSc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFJJR0dFUl9URVhUX1NBVkUgPSAnU2F2ZSBhbmQgY29udGludWUnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRSSUdHRVJfVEVYVF9DT05USU5VRSA9ICdJZ25vcmUgV2FybmluZyBhbmQgQ29udGludWUnO1xuXG4gIHB1YmxpYyBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXI7XG4gIHB1YmxpYyBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgd2l6YXJkOiBXaXphcmQ7XG4gIHB1YmxpYyBjdXJyZW50UGFnZTogV2l6YXJkUGFnZTtcbiAgcHVibGljIGRpYWxvZ0NvbmZpZzogTWF0RGlhbG9nQ29uZmlnO1xuICBwdWJsaWMgdHJpZ2dlclRleHRTdGFydCA9IENhc2VFZGl0UGFnZUNvbXBvbmVudC5UUklHR0VSX1RFWFRfU1RBUlQ7XG4gIHB1YmxpYyB0cmlnZ2VyVGV4dElnbm9yZVdhcm5pbmdzID0gQ2FzZUVkaXRQYWdlQ29tcG9uZW50LlRSSUdHRVJfVEVYVF9DT05USU5VRTtcbiAgcHVibGljIHRyaWdnZXJUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtVmFsdWVzQ2hhbmdlZCA9IGZhbHNlO1xuICBwdWJsaWMgcGFnZUNoYW5nZVN1YmplY3Q6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgY2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG4gIHB1YmxpYyBmYWlsaW5nQ2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG4gIHB1YmxpYyB2YWxpZGF0aW9uRXJyb3JzOiBDYXNlRWRpdFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIHB1YmxpYyBoYXNQcmV2aW91c1BhZ2UkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGNhbGxiYWNrRXJyb3JzU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIGlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXA6IGJvb2xlYW47XG4gIHB1YmxpYyByb3V0ZVBhcmFtc1N1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2FzZUVkaXRGb3JtU3ViOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjYXNlSXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcFN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2FzZVRyaWdnZXJTdWJtaXRFdmVudFN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgdmFsaWRhdGVTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGRpYWxvZ1JlZkFmdGVyQ2xvc2VkU3ViOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzYXZlRHJhZnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VGb3JtVmFsaWRhdGlvbkVycm9yc1N1YjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEZvY3VzVG9Ub3AoKSB7XG4gICAgY29uc3QgdG9wQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcCcpO1xuICAgIGlmICh0b3BDb250YWluZXIpIHtcbiAgICAgIHRvcENvbnRhaW5lci5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjYXNlRWRpdDogQ2FzZUVkaXRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtVmFsdWVTZXJ2aWNlOiBGb3JtVmFsdWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUVycm9yU2VydmljZTogRm9ybUVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VWYWxpZGF0aW9uU2VydmljZTogUGFnZVZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmllbGRTZXJ2aWNlOiBDYXNlRmllbGRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXREYXRhU2VydmljZTogQ2FzZUVkaXREYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkUGFnZUxpc3RDYXNlRmllbGRzU2VydmljZTogVmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRyZXNzU2VydmljZTogQWRkcmVzc2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtlZENhc2VzU2VydmljZTogTGlua2VkQ2FzZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZsYWdTdGF0ZVNlcnZpY2U6IENhc2VGbGFnU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLnNldEluc3RpZ2F0b3IodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgb25GaW5hbE5leHQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbmFsUHJldmlvdXMoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWdlTnVtYmVyKCl7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlDb2xsZWN0aW9uKClbMF0/LmxpbmtlZENhc2VzUGFnZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8ubGlua2VkQ2FzZXNQYWdlIDogdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8uZmllbGRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0F0U3RhcnQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFnZU51bWJlclRvVXNlID0gdGhpcy5nZXRQYWdlTnVtYmVyKCk7XG4gICAgaWYgKHBhZ2VOdW1iZXJUb1VzZSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VOdW1iZXJUb1VzZSA9PT0gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8uam91cm5leVN0YXJ0UGFnZU51bWJlcjtcbiAgfVxuXG4gIHB1YmxpYyBpc0F0RW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5Q29sbGVjdGlvbigpWzBdPy5maWVsZFN0YXRlID09PSB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5Q29sbGVjdGlvbigpWzBdPy5qb3VybmV5RW5kUGFnZU51bWJlcjtcbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmdldFBhZ2VOdW1iZXIoKSA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIHJldHVybiAhdGhpcy5oYXNQcmV2aW91c1BhZ2UkLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc0F0U3RhcnQoKTtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IHRoZSBuZXh0IGJ1dHRvbiBpbiB0aGUgYXBwIGNvbXBvbmVudFxuICBwdWJsaWMgbmV4dFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UubmV4dCgpO1xuICB9XG5cbiAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgdGhlIHByZXZpb3VzIGJ1dHRvbiBpbiB0aGUgYXBwIGNvbXBvbmVudFxuICBwdWJsaWMgcHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLnByZXZpb3VzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaW5pdERpYWxvZygpO1xuICAgIHRoaXMuZXZlbnRUcmlnZ2VyID0gdGhpcy5jYXNlRWRpdC5ldmVudFRyaWdnZXI7XG4gICAgdGhpcy5lZGl0Rm9ybSA9IHRoaXMuY2FzZUVkaXQuZm9ybTtcbiAgICB0aGlzLndpemFyZCA9IHRoaXMuY2FzZUVkaXQud2l6YXJkO1xuICAgIHRoaXMuY2FzZUZpZWxkcyA9IHRoaXMuZ2V0Q2FzZUZpZWxkcygpO1xuXG4gICAgdGhpcy5zeW5jQ2FzZUVkaXREYXRhU2VydmljZSgpO1xuXG4gICAgdGhpcy5yb3V0ZVBhcmFtc1N1YiA9IHRoaXMucm91dGUucGFyYW1zXG4gICAgICAuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhcmFtc1sncGFnZSddO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UgfHwgcGFnZUlkICE9PSB0aGlzLmN1cnJlbnRQYWdlPy5pZCkge1xuICAgICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmNhc2VFZGl0LmdldFBhZ2UocGFnZUlkKTtcbiAgICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGFzUHJldmlvdXNQYWdlJC5uZXh0KHRoaXMuY2FzZUVkaXQuaGFzUHJldmlvdXModGhpcy5jdXJyZW50UGFnZT8uaWQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5nZXRUcmlnZ2VyVGV4dCgpO1xuICAgICAgfSk7XG4gICAgQ2FzZUVkaXRQYWdlQ29tcG9uZW50LnNldEZvY3VzVG9Ub3AoKTtcbiAgICB0aGlzLmNhc2VFZGl0Rm9ybVN1YiA9IHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlRWRpdEZvcm0kLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBlZGl0Rm9ybSA9PiB0aGlzLmVkaXRGb3JtID0gZWRpdEZvcm1cbiAgICB9KTtcbiAgICB0aGlzLmNhc2VJc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwU3ViID1cbiAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlSXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcCQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogaXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcCA9PiB0aGlzLmlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXAgPSBpc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwXG4gICAgICB9KTtcbiAgICB0aGlzLmNhc2VUcmlnZ2VyU3VibWl0RXZlbnRTdWIgPSB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2FzZVRyaWdnZXJTdWJtaXRFdmVudCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlUGFyYW1zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FzZUVkaXRGb3JtU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FzZUlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jYXNlVHJpZ2dlclN1Ym1pdEV2ZW50U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsaWRhdGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kaWFsb2dSZWZBZnRlckNsb3NlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNhdmVEcmFmdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhc2VGb3JtVmFsaWRhdGlvbkVycm9yc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5VmFsdWVzQ2hhbmdlZCh2YWx1ZXNDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZCA9IHZhbHVlc0NoYW5nZWQ7XG4gIH1cblxuICBwdWJsaWMgZmlyc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuZmlyc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50UGFnZUlzTm90VmFsaWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5lZGl0Rm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5mYWlsaW5nQ2FzZUZpZWxkcyA9IHRoaXMucGFnZVZhbGlkYXRpb25TZXJ2aWNlLmdldEludmFsaWRGaWVsZHModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5lZGl0Rm9ybSk7XG4gICAgcmV0dXJuIHRoaXMuZmFpbGluZ0Nhc2VGaWVsZHMubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMuaXNMaW5rZWRDYXNlc0pvdXJuZXkoKSAmJiAhdGhpcy5pc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0xpbmtlZENhc2VzSm91cm5leSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmllbGRzVXRpbHMuY29udGFpbnNMaW5rZWRDYXNlc0Nhc2VGaWVsZCh0aGlzLmN1cnJlbnRQYWdlLmNhc2VfZmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYXNlRXZlbnREYXRhLmV2ZW50X2RhdGEgY29udGFpbnMgYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgcGFnZXMgc28gd2Ugc2V0IGNhc2VFdmVudERhdGEuZGF0YSA9IGNhc2VFdmVudERhdGEuZXZlbnRfZGF0YVxuICAgKiBUaGlzIGJ1aWxkcyB0aGUgZm9ybSB3aXRoIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgcGFnZXNcbiAgICogRVVJLTM3MzIgLSBCcmVhdGhpbmcgc3BhY2UgZGF0YSBub3QgcGVyc2lzdGVkIG9uIFByZXZpb3VzIGJ1dHRvbiBjbGljayB3aXRoIEV4cFVJIERlbW9cbiAgICovXG4gIHB1YmxpYyB0b1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmJ1aWxkQ2FzZUV2ZW50RGF0YSh0cnVlKTtcbiAgICBjYXNlRXZlbnREYXRhLmRhdGEgPSBjYXNlRXZlbnREYXRhLmV2ZW50X2RhdGE7XG4gICAgdGhpcy51cGRhdGVGb3JtRGF0YShjYXNlRXZlbnREYXRhKTtcbiAgICB0aGlzLnByZXZpb3VzKCk7XG4gICAgaWYgKHRoaXMuZ2V0UGFnZU51bWJlcigpICE9PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5wcmV2aW91c1N0ZXAoKTtcbiAgICB9XG4gICAgQ2FzZUVkaXRQYWdlQ29tcG9uZW50LnNldEZvY3VzVG9Ub3AoKTtcbiAgfVxuXG4gIC8vIEFkZGluZyB2YWxpZGF0aW9uIG1lc3NhZ2UgdG8gc2hvdyBpdCBhcyBFcnJvciBTdW1tYXJ5XG4gIHB1YmxpYyBnZW5lcmF0ZUVycm9yTWVzc2FnZShmaWVsZHM6IENhc2VGaWVsZFtdLCBjb250YWluZXI/OiBBYnN0cmFjdENvbnRyb2wsIHBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBncm91cDogQWJzdHJhY3RDb250cm9sID0gY29udGFpbmVyIHx8IHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXTtcbiAgICBsZXQgdmFsaWRFcnJvckZpZWxkRm91bmQgPSBmYWxzZTtcbiAgICBsZXQgdmFsaWRhdGlvbkVycm9yQW1vdW50ID0gdGhpcy52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aDtcbiAgICBjb25zdCBmYWlsaW5nRmllbGRzID0gZmllbGRzLmZpbHRlcihjYXNlZmllbGQgPT4gIXRoaXMuY2FzZUZpZWxkU2VydmljZS5pc1JlYWRPbmx5KGNhc2VmaWVsZCkpXG4gICAgICAuZmlsdGVyKGNhc2VmaWVsZCA9PiAhdGhpcy5wYWdlVmFsaWRhdGlvblNlcnZpY2UuaXNIaWRkZW4oY2FzZWZpZWxkLCB0aGlzLmVkaXRGb3JtLCBwYXRoKSk7XG4gICAgLy8gbm90ZSB0aGF0IHRob3VnbiB0aGVzZSBjaGVja3MgYXJlIG9uIGdldGludmFsaWRmaWVsZHMgdGhleSBhcmUgbmVlZGVkIGZvciBzdWIgZmllbGQgY2hlY2tzXG4gICAgZmFpbGluZ0ZpZWxkc1xuICAgICAgLmZvckVhY2goY2FzZWZpZWxkID0+IHtcbiAgICAgICAgbGV0IGVycm9yUHJlc2VudCA9IHRydWU7XG4gICAgICAgIHZhbGlkRXJyb3JGaWVsZEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmllbGRFbGVtZW50ID0gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZWZpZWxkLCBbJ0p1ZGljaWFsVXNlciddKVxuICAgICAgICAgID8gZ3JvdXAuZ2V0KGAke2Nhc2VmaWVsZC5pZH1fanVkaWNpYWxVc2VyQ29udHJvbGApXG4gICAgICAgICAgOiBncm91cC5nZXQoY2FzZWZpZWxkLmlkKTtcbiAgICAgICAgaWYgKGZpZWxkRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY2FzZWZpZWxkLmxhYmVsIHx8ICdGaWVsZCc7XG4gICAgICAgICAgbGV0IGlkID0gY2FzZWZpZWxkLmlkO1xuICAgICAgICAgIGlmIChmaWVsZEVsZW1lbnRbJ2NvbXBvbmVudCddICYmIGZpZWxkRWxlbWVudFsnY29tcG9uZW50J10ucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoZmllbGRFbGVtZW50Wydjb21wb25lbnQnXS5pZFByZWZpeC5pbmRleE9mKGBfJHtpZH1fYCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGlkID0gYCR7ZmllbGRFbGVtZW50Wydjb21wb25lbnQnXS5pZFByZWZpeH0ke2lkfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZCA9IGAke2ZpZWxkRWxlbWVudFsnY29tcG9uZW50J10uaWRQcmVmaXh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkRWxlbWVudC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgaWYgKGNhc2VmaWVsZC5pZCA9PT0gJ0FkZHJlc3NMaW5lMScpIHtcbiAgICAgICAgICAgICAgLy8gRVVJLTEwNjcgLSBEaXNwbGF5IG1vcmUgcmVsZXZhbnQgZXJyb3IgbWVzc2FnZSB0byB1c2VyIGFuZCBjb3JyZWN0bHkgbmF2aWdhdGUgdG8gdGhlIGZpZWxkXG4gICAgICAgICAgICAgIHRoaXMuYWRkcmVzc1NlcnZpY2Uuc2V0TWFuZGF0b3J5RXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5hZGRGb3JtVmFsaWRhdGlvbkVycm9yKHsgaWQ6IGAke3BhdGh9XyR7cGF0aH1gLCBtZXNzYWdlOiBgQW4gYWRkcmVzcyBpcyByZXF1aXJlZGAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuYWRkRm9ybVZhbGlkYXRpb25FcnJvcih7IGlkLCBtZXNzYWdlOiBgJUZJRUxETEFCRUwlIGlzIHJlcXVpcmVkYCwgbGFiZWwgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZEVsZW1lbnQubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIC8vIEZvciB0aGUgSnVkaWNpYWxVc2VyIGZpZWxkIHR5cGUsIGFuIGVycm9yIG5lZWRzIHRvIGJlIHNldCBvbiB0aGUgY29tcG9uZW50IHNvIHRoYXQgYW4gZXJyb3IgbWVzc2FnZVxuICAgICAgICAgICAgLy8gY2FuIGJlIGRpc3BsYXllZCBhdCBmaWVsZCBsZXZlbFxuICAgICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VmaWVsZCwgWydKdWRpY2lhbFVzZXInXSkpIHtcbiAgICAgICAgICAgICAgZmllbGRFbGVtZW50Wydjb21wb25lbnQnXS5lcnJvcnMgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVsZW1lbnQuaGFzRXJyb3IoJ3BhdHRlcm4nKSkge1xuICAgICAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmFkZEZvcm1WYWxpZGF0aW9uRXJyb3IoeyBpZCwgbWVzc2FnZTogYCVGSUVMRExBQkVMJSBpcyBub3QgdmFsaWRgLCBsYWJlbCB9KTtcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRFbGVtZW50Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmFkZEZvcm1WYWxpZGF0aW9uRXJyb3IoeyBpZCwgbWVzc2FnZTogYCVGSUVMRExBQkVMJSBpcyBiZWxvdyB0aGUgbWluaW11bSBsZW5ndGhgLCBsYWJlbCB9KTtcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRFbGVtZW50Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmFkZEZvcm1WYWxpZGF0aW9uRXJyb3IoeyBpZCwgbWVzc2FnZTogYCVGSUVMRExBQkVMJSBleGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aGAsIGxhYmVsIH0pO1xuICAgICAgICAgICAgZmllbGRFbGVtZW50Lm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVsZW1lbnQuaW52YWxpZCkge1xuICAgICAgICAgICAgaWYgKGNhc2VmaWVsZC5pc0NvbXBsZXgoKSkge1xuICAgICAgICAgICAgICBlcnJvclByZXNlbnQgPSB0aGlzLmdlbmVyYXRlRXJyb3JNZXNzYWdlKGNhc2VmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBmaWVsZEVsZW1lbnQsIGlkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FzZWZpZWxkLmlzQ29sbGVjdGlvbigpICYmIGNhc2VmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGRBcnJheSA9IGZpZWxkRWxlbWVudCBhcyBGb3JtQXJyYXk7XG4gICAgICAgICAgICAgIGlmIChmaWVsZEFycmF5Wydjb21wb25lbnQnXSAmJiBmaWVsZEFycmF5Wydjb21wb25lbnQnXVsnY29sbEl0ZW1zJ10gJiYgZmllbGRBcnJheVsnY29tcG9uZW50J11bJ2NvbGxJdGVtcyddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZCA9IGAke2ZpZWxkQXJyYXlbJ2NvbXBvbmVudCddWydjb2xsSXRlbXMnXVswXS5wcmVmaXh9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmaWVsZEFycmF5LmNvbnRyb2xzLmZvckVhY2goKGM6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkUHJlZml4ID0gYy5nZXQoJ3ZhbHVlJylbJ2NvbXBvbmVudCddLmlkUHJlZml4O1xuICAgICAgICAgICAgICAgIGlkID0gaWRQcmVmaXggIT09IGlkID8gaWRQcmVmaXggOiBpZDtcbiAgICAgICAgICAgICAgICBlcnJvclByZXNlbnQgPSB0aGlzLmdlbmVyYXRlRXJyb3JNZXNzYWdlKGNhc2VmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgYy5nZXQoJ3ZhbHVlJyksIGlkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VmaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IEZpZWxkc1V0aWxzLmdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VGb3JGbGFnTGF1bmNoZXJDYXNlRmllbGQoY2FzZWZpZWxkKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsgaWQsIG1lc3NhZ2U6IGBTZWxlY3Qgb3IgZmlsbCB0aGUgcmVxdWlyZWQgJHtjYXNlZmllbGQubGFiZWx9IGZpZWxkYCB9KTtcbiAgICAgICAgICAgICAgZmllbGRFbGVtZW50Lm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkRXJyb3JGaWVsZEZvdW5kID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcnJvclByZXNlbnQgJiYgdGhpcy52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA9PT0gdmFsaWRhdGlvbkVycm9yQW1vdW50KSB7XG4gICAgICAgICAgLy8gaWYgbm8gZXJyb3IgbWVzc2FnZXMgaGF2ZSBiZWVuIGFkZGVkIGluIGludGVybmFsIGZpZWxkIGRlc3BpdGUgcGFyZW50IGZpZWxkIGZhaWxpbmdcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkOiBjYXNlZmllbGQuaWQsIG1lc3NhZ2U6IGBBIGZpZWxkIHRoYXQgaXMgY2F1c2luZyBhbiBlcnJvciBpcyAke2Nhc2VmaWVsZC5pZH0gYnV0IGl0IGlzIG5vdCBwcm9kdWNpbmcgYSB2YWxpZCBlcnJvciBtZXNzYWdlLiBQbGVhc2UgZW5zdXJlIGFsbCBkZXRhaWxzIGFyZSBjb3JyZWN0YCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKCF2YWxpZEVycm9yRmllbGRGb3VuZCkge1xuICAgICAgcGF0aCA/IHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsgaWQ6IHBhdGgsIG1lc3NhZ2U6IGBUaGVyZSBpcyBhbiBpbnRlcm5hbCBpc3N1ZSB3aXRoICR7cGF0aH0gZmllbGRzLiBUaGUgZmllbGQgdGhhdCBpcyBjYXVzaW5nIHRoZSBlcnJvciBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBidXQgdGhlcmUgaXMgYW4gZXJyb3IgcHJlc2VudGAgfSlcbiAgICAgICAgOiB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkOiBudWxsLCBtZXNzYWdlOiBgVGhlIGZpZWxkIHRoYXQgaXMgY2F1c2luZyB0aGUgZXJyb3IgY2Fubm90IGJlIGRldGVybWluZWQgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHByZXNlbnRgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA9PT0gdmFsaWRhdGlvbkVycm9yQW1vdW50KSB7XG4gICAgICAvLyBpZiBubyBlcnJvciBtZXNzYWdlcyBoYXZlIGJlZW4gZ2VuZXJhdGVkXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkOiBudWxsLCBtZXNzYWdlOiBgVGhlIGZpZWxkIHRoYXQgaXMgY2F1c2luZyB0aGUgZXJyb3IgY2Fubm90IGJlIGRldGVybWluZWQgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHByZXNlbnQuIFBsZWFzZSBmaWxsIGluIG1vcmUgb2YgdGhlIGZvcm1gIH0pXG4gICAgICB9XG4gICAgfVxuICAgIENhc2VFZGl0UGFnZUNvbXBvbmVudC5zY3JvbGxUb1RvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hlY2tGb3JTdGFnZXNDb21wbGV0ZWQoKSB7XG4gICAgY29uc3QgZGF0YUNvbnRyb2xzID0gdGhpcy5lZGl0Rm9ybS5jb250cm9sc1snZGF0YSddO1xuICAgIGlmIChkYXRhQ29udHJvbHMpIHtcbiAgICAgIGNvbnN0IGZsYWdMYXVuY2hlciA9IGRhdGFDb250cm9scy5nZXQoJ2ZsYWdMYXVuY2hlckludGVybmFsJyk7XG4gICAgICBpZiAoZmxhZ0xhdW5jaGVyKSB7XG4gICAgICAgIGlmIChmbGFnTGF1bmNoZXIuaGFzRXJyb3IoJ25vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkJykgJiYgdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgICAgICBmbGFnTGF1bmNoZXIuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICAvLyBpbiBzb21lIHNjZW5hcmlvcyB0aGUgZmllbGRzdGF0ZSBjYW4gYmUgc2V0IHRvIDAgZXZlbiB0aG91Z2ggdGhlIHVzZXIgaXMgYXQgdGhlIGVuZCBvZiBhIGpvdXJuZXksIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kIHNldCB2YXJzXG4gICAgY29uc3Qgam91cm5leVBhZ2VOdW1iZXIgPSB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5Q29sbGVjdGlvbigpWzBdPy5qb3VybmV5UGFnZU51bWJlcjtcbiAgICBjb25zdCBmaWVsZFN0YXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZT8uZmllbGRTdGF0ZVRvTmF2aWdhdGU7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmlkID09PSAnYzEwME1hbmFnZUZsYWdzJykge1xuICAgICAgaWYgKChmaWVsZFN0YXRlID09PSAwIHx8IGZpZWxkU3RhdGUgPT09IHVuZGVmaW5lZCB8fCBqb3VybmV5UGFnZU51bWJlciA+IGZpZWxkU3RhdGUpICYmIGZpZWxkU3RhdGUgIT09IGpvdXJuZXlQYWdlTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSBqb3VybmV5UGFnZU51bWJlcjtcbiAgICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5sYXN0UGFnZUZpZWxkU3RhdGUgPSBqb3VybmV5UGFnZU51bWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCghdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuaXNMaW5rZWRDYXNlc0V2ZW50VHJpZ2dlcikgJiYgKHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VzVG9VbmxpbmsubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vIGVuc3VyZSBjZnYgaXMgc2V0IGNvcnJlY3RseVxuICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlRmllbGRWYWx1ZS5maWx0ZXIoXG4gICAgICAgIChjYXNlRmllbGRWYWx1ZSkgPT4gIXRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VzVG9Vbmxpbmsuc29tZSgobGluaykgPT4gY2FzZUZpZWxkVmFsdWUuaWQgPT09IGxpbmspXG4gICAgICApO1xuICAgICAgLy9lbnN1cmUgdGhhdCB0aGUgdmFsdWVzIGFyZSBub3QgbG9zdCB3aGVuIG5hdmlnYXRpbmcgYmFja1xuICAgICAgaWYgKHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YVsnY29udHJvbHMnXS5jYXNlTGlua3MuY29udHJvbHMpe1xuICAgICAgICB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUuY2FzZUxpbmtzID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWU7XG4gICAgICB9XG4gICAgICAvLyB0aGVzZSBnZXQgYWRkZWQgc29tZWhvdyBzb21ld2hlcmUsIGJ1dCBpZiB3ZSBhcmUgdW5saW5raW5nIHdlIGRvbnQgd2FudCB0aGVtLCByZW1vdmUgdGhlbVxuICAgICAgaWYgKCdjYXNlTmFtZUhtY3RzSW50ZXJuYWwnIGluIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlLmNhc2VOYW1lSG1jdHNJbnRlcm5hbDtcbiAgICAgICAgKHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ2Nhc2VOYW1lSG1jdHNJbnRlcm5hbCcpO1xuICAgICAgfVxuICAgICAgaWYgKCdtYWludGFpbkNhc2VMaW5rc0ZsYWcnIGluIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlLm1haW50YWluQ2FzZUxpbmtzRmxhZztcbiAgICAgICAgKHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ21haW50YWluQ2FzZUxpbmtzRmxhZycpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuaXNMaW5rZWRDYXNlc0V2ZW50VHJpZ2dlciAmJiB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5saW5rZWRDYXNlcy5sZW5ndGggPiAwKXtcbiAgICAgIC8vIHRoZXNlIGdldCBhZGRlZCBzb21laG93IHNvbWV3aGVyZSwgcmVtb3ZlIHRoZW1cbiAgICAgIGlmICgnY2FzZU5hbWVIbWN0c0ludGVybmFsJyBpbiB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUgJiYgKHRoaXMuZWRpdEZvcm0/LmNvbnRyb2xzPy5kYXRhPy52YWx1ZT8uY2FzZU5hbWVIbWN0c0ludGVybmFsID09PSBudWxsKSkge1xuICAgICAgICAoKHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXApKS5yZW1vdmVDb250cm9sKCdjYXNlTmFtZUhtY3RzSW50ZXJuYWwnKTtcbiAgICAgIH1cbiAgICAgIGlmICgnY2FzZUxpbmtzRmxhZycgaW4gdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlICYmICh0aGlzLmVkaXRGb3JtPy5jb250cm9scz8uZGF0YT8udmFsdWU/LmNhc2VMaW5rc0ZsYWcgPT09IG51bGwpKSB7XG4gICAgICAgICgodGhpcy5lZGl0Rm9ybS5jb250cm9sc1snZGF0YSddIGFzIEZvcm1Hcm91cCkpLnJlbW92ZUNvbnRyb2woJ2Nhc2VMaW5rc0ZsYWcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIHRoaXMuY2hlY2tGb3JTdGFnZXNDb21wbGV0ZWQoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUlzTm90VmFsaWQoKSkge1xuICAgICAgLy8gVGhlIGdlbmVyYXRlRXJyb3JNZXNzYWdlIG1ldGhvZCBmaWx0ZXJzIG91dCB0aGUgaGlkZGVuIGZpZWxkcy5cbiAgICAgIC8vIFRoZSBlcnJvciBtZXNzYWdlIGZvciBMaW5rZWRDYXNlcyBqb3VybmV5IHdpbGwgbmV2ZXIgZ2V0IGRpc3BsYXllZCBiZWNhdXNlIHRoZVxuICAgICAgLy8gTGlua2VkQ2FzZXMgaXMgY29uZmlndXJlZCB3aXRoIENvbXBvbmVudExhdW5jaGVyIGZpZWxkIGFzIHZpc2libGUgYW5kIGNhc2VMaW5rcyBmaWVsZCBhcyBoaWRkZW4uXG4gICAgICBpZiAodGhpcy5pc0xpbmtlZENhc2VzSm91cm5leSgpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsgaWQ6ICduZXh0LWJ1dHRvbicsIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IE5leHQgdG8gZ28gdG8gdGhlIG5leHQgcGFnZScgfSk7XG4gICAgICAgIENhc2VFZGl0UGFnZUNvbXBvbmVudC5zY3JvbGxUb1RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUVycm9yTWVzc2FnZSh0aGlzLmZhaWxpbmdDYXNlRmllbGRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nICYmICF0aGlzLmN1cnJlbnRQYWdlSXNOb3RWYWxpZCgpKSB7XG4gICAgICB0aGlzLmFkZHJlc3NTZXJ2aWNlLnNldE1hbmRhdG9yeUVycm9yKGZhbHNlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdDYXNlIEVkaXQgRXJyb3InLCB0aGlzLmNhc2VFZGl0LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLmNhc2VFZGl0LnZhbGlkUGFnZUxpc3QuZmluZEluZGV4KHBhZ2U9PiBwYWdlLmlkID09PSB0aGlzLmN1cnJlbnRQYWdlLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5jYXNlRWRpdC52YWxpZFBhZ2VMaXN0LnB1c2godGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhc2VFZGl0LmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNhc2VFZGl0LmVycm9yID0gbnVsbDtcbiAgICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmJ1aWxkQ2FzZUV2ZW50RGF0YSgpO1xuICAgICAgY29uc3QgbG9hZGluZ1NwaW5uZXJUb2tlbiA9IHRoaXMubG9hZGluZ1NlcnZpY2UucmVnaXN0ZXIoKTtcbiAgICAgIHRoaXMudmFsaWRhdGVTdWIgPSB0aGlzLmNhc2VFZGl0LnZhbGlkYXRlKGNhc2VFdmVudERhdGEsIHRoaXMuY3VycmVudFBhZ2UuaWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nU3Bpbm5lclRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChqc29uRGF0YSkgPT4ge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGpzb25EYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKGpzb25EYXRhIGFzIENhc2VFdmVudERhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNhdmVEcmFmdCgpO1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgQ2FzZUVkaXRQYWdlQ29tcG9uZW50LnNjcm9sbFRvVG9wKCk7XG4gICAgICAvLyBSZW1vdmUgYWxsIEp1ZGljaWFsVXNlciBGb3JtQ29udHJvbHMgd2l0aCB0aGUgSUQgc3VmZml4IFwiX2p1ZGljaWFsVXNlckNvbnRyb2xcIiBiZWNhdXNlIHRoZXNlIGFyZSBub3RcbiAgICAgIC8vIGludGVuZGVkIHRvIGJlIHByZXNlbnQgaW4gdGhlIENhc2UgRXZlbnQgZGF0YSAodGhleSBhcmUgYWRkZWQgb25seSBmb3IgdmFsdWUgc2VsZWN0aW9uIGFuZCB2YWxpZGF0aW9uXG4gICAgICAvLyBwdXJwb3NlcylcbiAgICAgIHRoaXMucmVtb3ZlQWxsSnVkaWNpYWxVc2VyRm9ybUNvbnRyb2xzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuZWRpdEZvcm0pO1xuICAgIH1cbiAgICBDYXNlRWRpdFBhZ2VDb21wb25lbnQuc2V0Rm9jdXNUb1RvcCgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZvcm1EYXRhKGpzb25EYXRhOiBDYXNlRXZlbnREYXRhKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjYXNlRmllbGRJZCBvZiBPYmplY3Qua2V5cyhqc29uRGF0YS5kYXRhKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLnBhZ2VXaXRoRmllbGRFeGlzdHMoY2FzZUZpZWxkSWQpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRXZlbnRUcmlnZ2VyQ2FzZUZpZWxkcyhjYXNlRmllbGRJZCwganNvbkRhdGEsIHRoaXMuY2FzZUVkaXQuZXZlbnRUcmlnZ2VyKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbHNWYWx1ZSh0aGlzLmVkaXRGb3JtLCBjYXNlRmllbGRJZCwganNvbkRhdGEuZGF0YVtjYXNlRmllbGRJZF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHdlIGRvIHRoZSBjaGVjaywgYmVjYXN1ZSB0aGUgZGF0YSBjb21lcyBmcm9tIHRoZSBleHRlcm5hbCBzb3VyY2VcbiAgcHVibGljIHBhZ2VXaXRoRmllbGRFeGlzdHMoY2FzZUZpZWxkSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLndpemFyZC5maW5kV2l6YXJkUGFnZShjYXNlRmllbGRJZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRXZlbnRUcmlnZ2VyQ2FzZUZpZWxkcyhjYXNlRmllbGRJZDogc3RyaW5nLCBqc29uRGF0YTogQ2FzZUV2ZW50RGF0YSwgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZXZlbnRUcmlnZ2VyPy5jYXNlX2ZpZWxkcykge1xuICAgICAgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzXG4gICAgICAgIC5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBjYXNlRmllbGRJZClcbiAgICAgICAgLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNBbk9iamVjdChlbGVtZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEpzb25EYXRhT2JqZWN0ID0gdGhpcy51cGRhdGVKc29uRGF0YU9iamVjdChjYXNlRmllbGRJZCwganNvbkRhdGEsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBlbGVtZW50LnZhbHVlID0ge1xuICAgICAgICAgICAgICAuLi5lbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgICAuLi51cGRhdGVkSnNvbkRhdGFPYmplY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnZhbHVlID0ganNvbkRhdGEuZGF0YVtjYXNlRmllbGRJZF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUpzb25EYXRhT2JqZWN0KGNhc2VGaWVsZElkOiBzdHJpbmcsIGpzb25EYXRhOiBDYXNlRXZlbnREYXRhLCBlbGVtZW50OiBDYXNlRmllbGQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb25EYXRhLmRhdGFbY2FzZUZpZWxkSWRdKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50LnZhbHVlW2tleV07XG4gICAgICBjb25zdCBqc29uRGF0YVZhbHVlID0ganNvbkRhdGEuZGF0YVtjYXNlRmllbGRJZF1ba2V5XTtcbiAgICAgIGNvbnN0IGhhc0VsZW1lbnRHb3RWYWx1ZVByb3BlcnR5ID0gdGhpcy5pc0FuT2JqZWN0KGVsZW1lbnRWYWx1ZSkgJiYgZWxlbWVudFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBqc29uRGF0YU9yRWxlbWVudFZhbHVlID0ganNvbkRhdGFWYWx1ZT8udmFsdWUgIT09IG51bGwgJiYganNvbkRhdGFWYWx1ZT8udmFsdWUgIT09IHVuZGVmaW5lZCA/IGpzb25EYXRhVmFsdWUgOiBlbGVtZW50VmFsdWU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2Ake2tleX1gXTogaGFzRWxlbWVudEdvdFZhbHVlUHJvcGVydHkgPyBqc29uRGF0YU9yRWxlbWVudFZhbHVlIDoganNvbkRhdGFWYWx1ZVxuICAgICAgfTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGlzQW5PYmplY3QocHJvcGVydHk6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BlcnR5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT09IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9ybUNvbnRyb2xzVmFsdWUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNhc2VGaWVsZElkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB0aGVDb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzWydkYXRhJ10uZ2V0KGNhc2VGaWVsZElkKTtcbiAgICBpZiAodGhlQ29udHJvbCAmJiB0aGVDb250cm9sWydzdGF0dXMnXSAhPT0gJ0RJU0FCTEVEJykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhlQ29udHJvbC52YWx1ZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgJiYgdGhlQ29udHJvbC52YWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggJiYgdGhlQ29udHJvbFsnY2FzZUZpZWxkJ11cbiAgICAgICAgJiYgdGhlQ29udHJvbFsnY2FzZUZpZWxkJ11bJ2Rpc3BsYXlfY29udGV4dCddICYmIHRoZUNvbnRyb2xbJ2Nhc2VGaWVsZCddWydkaXNwbGF5X2NvbnRleHQnXSA9PT0gJ09QVElPTkFMJ1xuICAgICAgICAmJiB0aGVDb250cm9sWydjYXNlRmllbGQnXVsnZmllbGRfdHlwZSddICYmIHRoZUNvbnRyb2xbJ2Nhc2VGaWVsZCddWydmaWVsZF90eXBlJ11bJ3R5cGUnXSA9PT0gJ0NvbGxlY3Rpb24nKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoZUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbGxiYWNrRXJyb3JzTm90aWZ5KGVycm9yQ29udGV4dDogQ2FsbGJhY2tFcnJvcnNDb250ZXh0KSB7XG4gICAgdGhpcy5jYXNlRWRpdC5pZ25vcmVXYXJuaW5nID0gZXJyb3JDb250ZXh0Lmlnbm9yZVdhcm5pbmc7XG4gICAgdGhpcy50cmlnZ2VyVGV4dCA9IGVycm9yQ29udGV4dC50cmlnZ2VyVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlVG9TdW1tYXJ5UGFnZSgpKSB7XG4gICAgICB0aGlzLmNhc2VFZGl0LmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0RXJyb3JzKCk7XG4gICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHRoaXMucGFnZUNoYW5nZVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5uZXh0KHRoaXMuY3VycmVudFBhZ2UuaWQpO1xuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzZXRFcnJvcnMoKTtcbiAgICB0aGlzLnNhdmVEcmFmdCgpO1xuICAgIHRoaXMuZm9ybVZhbHVlc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQucHJldmlvdXModGhpcy5jdXJyZW50UGFnZS5pZCk7XG4gIH1cblxuICBwdWJsaWMgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuaGFzUHJldmlvdXModGhpcy5jdXJyZW50UGFnZS5pZCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTGlua2VkQ2FzZXNKb3VybmV5KCkpIHtcbiAgICAgIHRoaXMucmVzZXRMaW5rZWRDYXNlSm91cm5leSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZU9yRGlzY2FyZERpYWxvZ0NvbXBvbmVudCwgdGhpcy5kaWFsb2dDb25maWcpO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZkFmdGVyQ2xvc2VkU3ViID0gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ0Rpc2NhcmQnKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2NhcmQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gJ1NhdmUnKSB7XG4gICAgICAgICAgICBjb25zdCBkcmFmdENhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2UodGhpcy5lZGl0Rm9ybS52YWx1ZSkgYXMgQ2FzZUV2ZW50RGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KENhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTSkgPT09ICd2aWV3RHJhZnQnKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoeyBzdGF0dXM6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5SRVNVTUVEX0ZPUk1fU0FWRSwgZGF0YTogZHJhZnRDYXNlRXZlbnREYXRhIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCh7IHN0YXR1czogQ2FzZUVkaXRQYWdlQ29tcG9uZW50Lk5FV19GT1JNX1NBVkUsIGRhdGE6IGRyYWZ0Q2FzZUV2ZW50RGF0YSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNjYXJkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRMaW5rZWRDYXNlSm91cm5leSgpOiB2b2lkIHtcbiAgICAvLyBpZiB0aGUgdXNlciBjYW5jZWxzIHRoZSBqb3VybmV5IHdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIGRhdGFcbiAgICBjb25zdCBsaW5rZWRDYXNlc1RhYiA9IHRoaXMuY2FzZUVkaXQ/LmNhc2VEZXRhaWxzPy50YWJzPy5maW5kKCh0YWIpID0+XG4gICAgICB0YWI/LmZpZWxkcz8uc29tZSgoZmllbGQpID0+IGZpZWxkLmlkID09PSAnY2FzZUxpbmtzJylcbiAgICApPy5maWVsZHM/LlswXSA/PyBudWxsO1xuICAgIGNvbnN0IGluaXRhbExpbmtzID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuaW5pdGlhbENhc2VMaW5rUmVmcztcbiAgICBpZiAobGlua2VkQ2FzZXNUYWIgJiYgbGlua2VkQ2FzZXNUYWI/LnZhbHVlPy5sZW5ndGggIT09IGluaXRhbExpbmtzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxDYXNlUmVmcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmluaXRpYWxDYXNlTGlua1JlZnM7XG4gICAgICBsaW5rZWRDYXNlc1RhYi52YWx1ZSA9IGxpbmtlZENhc2VzVGFiLnZhbHVlPy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGluaXRpYWxDYXNlUmVmcz8uaW5jbHVkZXMoaXRlbS52YWx1ZS5DYXNlUmVmZXJlbmNlKVxuICAgICAgKTtcbiAgICAgIGxpbmtlZENhc2VzVGFiLmZvcm1hdHRlZF92YWx1ZSA9IGxpbmtlZENhc2VzVGFiLmZvcm1hdHRlZF92YWx1ZT8uZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBpbml0aWFsQ2FzZVJlZnM/LmluY2x1ZGVzKGl0ZW0udmFsdWU/LkNhc2VSZWZlcmVuY2UpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobGlua2VkQ2FzZXNUYWIgJiYgKGxpbmtlZENhc2VzVGFiPy5mb3JtYXR0ZWRfdmFsdWU/Lmxlbmd0aCAhPT0gaW5pdGFsTGlua3M/Lmxlbmd0aCkpIHtcbiAgICAgIGxpbmtlZENhc2VzVGFiLnZhbHVlID0gbGlua2VkQ2FzZXNUYWIuZm9ybWF0dGVkX3ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5yZXNldExpbmtlZENhc2VEYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0dGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzID8gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5jYXNlX2lkIDogJycpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyAmJiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlICYmXG4gICAgICB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgPyB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgOiAnJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCA/ICdSZXR1cm4gdG8gY2FzZSBsaXN0JyA6ICdDYW5jZWwnO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5OYXZpZ2F0ZVRvU3VtbWFyeVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFBhZ2UgPSB0aGlzLmNhc2VFZGl0LmdldE5leHRQYWdlKHtcbiAgICAgIGN1cnJlbnRQYWdlSWQ6IHRoaXMuY3VycmVudFBhZ2U/LmlkLFxuICAgICAgd2l6YXJkOiB0aGlzLndpemFyZCxcbiAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICBmb3JtOiB0aGlzLmVkaXRGb3JtXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuc2hvd19zdW1tYXJ5IHx8ICEhbmV4dFBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGdldFRyaWdnZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dEJhc2VkT25DYW5TYXZlRHJhZnQgPSB0aGlzLmV2ZW50VHJpZ2dlcj8uY2FuX3NhdmVfZHJhZnRcbiAgICAgID8gQ2FzZUVkaXRQYWdlQ29tcG9uZW50LlRSSUdHRVJfVEVYVF9TQVZFXG4gICAgICA6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5UUklHR0VSX1RFWFRfU1RBUlQ7XG5cbiAgICByZXR1cm4gdGhpcy5jYW5OYXZpZ2F0ZVRvU3VtbWFyeVBhZ2UoKVxuICAgICAgPyB0ZXh0QmFzZWRPbkNhblNhdmVEcmFmdFxuICAgICAgOiAnU3VibWl0JztcbiAgfVxuXG4gIHByaXZhdGUgZGlzY2FyZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pID09PSAndmlld0RyYWZ0Jykge1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCh7IHN0YXR1czogQ2FzZUVkaXRQYWdlQ29tcG9uZW50LlJFU1VNRURfRk9STV9ESVNDQVJEIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KHsgc3RhdHVzOiBDYXNlRWRpdFBhZ2VDb21wb25lbnQuTkVXX0ZPUk1fRElTQ0FSRCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNhc2VFZGl0LmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5jYXNlRWRpdC5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dCh0aGlzLmNhc2VFZGl0LmVycm9yKTtcbiAgICB0aGlzLmNhbGxiYWNrRXJyb3JzU3ViamVjdC5uZXh0KHRoaXMuY2FzZUVkaXQuZXJyb3IpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuZXJyb3IuZGV0YWlscykge1xuICAgICAgdGhpcy5mb3JtRXJyb3JTZXJ2aWNlXG4gICAgICAgIC5tYXBGaWVsZEVycm9ycyh0aGlzLmNhc2VFZGl0LmVycm9yLmRldGFpbHMuZmllbGRfZXJyb3JzLCB0aGlzLmVkaXRGb3JtPy5jb250cm9scz8uWydkYXRhJ10gYXMgRm9ybUdyb3VwLCAndmFsaWRhdGlvbicpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnaGFuZGxlRXJyb3IgJywgZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVycm9ycygpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0LmVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNhc2VFZGl0Lmlnbm9yZVdhcm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5nZXRUcmlnZ2VyVGV4dCgpO1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmNhbGxiYWNrRXJyb3JzU3ViamVjdCkge1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhdmVEcmFmdCgpIHtcbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQpIHtcbiAgICAgIGNvbnN0IGRyYWZ0Q2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSA9IHRoaXMuZm9ybVZhbHVlU2VydmljZS5zYW5pdGlzZSh0aGlzLmVkaXRGb3JtLnZhbHVlKSBhcyBDYXNlRXZlbnREYXRhO1xuICAgICAgZHJhZnRDYXNlRXZlbnREYXRhLmV2ZW50X3Rva2VuID0gdGhpcy5ldmVudFRyaWdnZXIuZXZlbnRfdG9rZW47XG4gICAgICBkcmFmdENhc2VFdmVudERhdGEuaWdub3JlX3dhcm5pbmcgPSB0aGlzLmNhc2VFZGl0Lmlnbm9yZVdhcm5pbmc7XG4gICAgICB0aGlzLnNhdmVEcmFmdFN1YiA9IHRoaXMuY2FzZUVkaXQuc2F2ZURyYWZ0KGRyYWZ0Q2FzZUV2ZW50RGF0YSkuc3Vic2NyaWJlKFxuICAgICAgICAoZHJhZnQpID0+IHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfaWQgPSBEUkFGVF9QUkVGSVggKyBkcmFmdC5pZCwgZXJyb3IgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmdldENhc2VGaWVsZHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzRnJvbUN1cnJlbnRBbmRQcmV2aW91c1BhZ2VzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBjb25zdCByZXN1bHQ6IENhc2VGaWVsZFtdID0gW107XG4gICAgdGhpcy53aXphcmQucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIGlmIChwYWdlLm9yZGVyIDw9IHRoaXMuY3VycmVudFBhZ2Uub3JkZXIpIHtcbiAgICAgICAgcGFnZS5jYXNlX2ZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHJlc3VsdC5wdXNoKGZpZWxkKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZENhc2VFdmVudERhdGEoZnJvbVByZXZpb3VzUGFnZT86IGJvb2xlYW4pOiBDYXNlRXZlbnREYXRhIHtcbiAgICBjb25zdCBmb3JtVmFsdWU6IG9iamVjdCA9IHRoaXMuZWRpdEZvcm0udmFsdWU7XG5cbiAgICAvLyBHZXQgdGhlIENhc2VFdmVudERhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgY29uc3QgcGFnZUZpZWxkczogQ2FzZUZpZWxkW10gPSB0aGlzLmN1cnJlbnRQYWdlLmNhc2VfZmllbGRzO1xuICAgIGNvbnN0IHBhZ2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmdldEZpbHRlcmVkQ2FzZUV2ZW50RGF0YShwYWdlRmllbGRzLCBmb3JtVmFsdWUsIHRydWUpO1xuXG4gICAgLy8gR2V0IHRoZSBDYXNlRXZlbnREYXRhIGZvciB0aGUgZW50aXJlIGZvcm0gKGFsbCBwYWdlcykuXG4gICAgY29uc3QgYWxsQ2FzZUZpZWxkcyA9IHRoaXMuZ2V0Q2FzZUZpZWxkc0Zyb21DdXJyZW50QW5kUHJldmlvdXNQYWdlcygpO1xuICAgIGNvbnN0IGZvcm1FdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmdldEZpbHRlcmVkQ2FzZUV2ZW50RGF0YShhbGxDYXNlRmllbGRzLCBmb3JtVmFsdWUsIGZhbHNlLCB0cnVlLCBmcm9tUHJldmlvdXNQYWdlKTtcblxuICAgIC8vIE5vdyBoZXJlJ3MgdGhlIGtleSB0aGluZyAtIHRoZSBwYWdlRXZlbnREYXRhIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBgZXZlbnRfZGF0YWAgYW5kXG4gICAgLy8gd2UgbmVlZCBUSEFUIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgZW50aXJlIGZvcm06IGBmb3JtRXZlbnREYXRhLmRhdGFgLlxuICAgIHBhZ2VFdmVudERhdGEuZXZlbnRfZGF0YSA9IGZvcm1FdmVudERhdGEuZGF0YTtcblxuICAgIC8vIEZpbmFsaXNlIHRoZSBDYXNlRXZlbnREYXRhIG9iamVjdC5cbiAgICBwYWdlRXZlbnREYXRhLmV2ZW50X3Rva2VuID0gdGhpcy5ldmVudFRyaWdnZXIuZXZlbnRfdG9rZW47XG4gICAgcGFnZUV2ZW50RGF0YS5pZ25vcmVfd2FybmluZyA9IHRoaXMuY2FzZUVkaXQuaWdub3JlV2FybmluZztcblxuICAgIC8vIEZpbmFsbHksIHRyeSB0byBzZXQgdXAgdGhlIGNhc2VfcmVmZXJlbmNlLlxuICAgIGlmICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzKSB7XG4gICAgICBwYWdlRXZlbnREYXRhLmNhc2VfcmVmZXJlbmNlID0gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5jYXNlX2lkO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGUgbm93IGhvcGVmdWxseSBzYW5lIENhc2VFdmVudERhdGEuXG4gICAgcmV0dXJuIHBhZ2VFdmVudERhdGE7XG4gIH1cblxuICAvKipcbiAgICogQWJzdHJhY3RlZCB0aGlzIG1ldGhvZCBmcm9tIGJ1aWxkQ2FzZUV2ZW50RGF0YSB0byByZW1vdmUgZHVwbGljYXRpb24uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBmaWVsZHMgdG8gZmlsdGVyIHRoZSBkYXRhIGJ5LlxuICAgKiBAcGFyYW0gZm9ybVZhbHVlIFRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZm9ybS5cbiAgICogQHBhcmFtIGNsZWFyRW1wdHkgV2hldGhlciBvciBub3QgdG8gY2xlYXIgb3V0IGVtcHR5IHZhbHVlcy5cbiAgICogQHBhcmFtIGNsZWFyTm9uQ2FzZSBXaGV0aGVyIG9yIG5vdCB0byBjbGVhciBvdXQgZmllbGRzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjYXNlLlxuICAgKiBAcmV0dXJucyBDYXNlRXZlbnREYXRhIGZvciB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGdldEZpbHRlcmVkQ2FzZUV2ZW50RGF0YShjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZm9ybVZhbHVlOiBvYmplY3QsIGNsZWFyRW1wdHkgPSBmYWxzZSxcbiAgICBjbGVhck5vbkNhc2UgPSBmYWxzZSwgZnJvbVByZXZpb3VzUGFnZSA9IGZhbHNlKTogQ2FzZUV2ZW50RGF0YSB7XG4gICAgLy8gR2V0IHRoZSBkYXRhIGZvciB0aGUgZmllbGRzIHNwZWNpZmllZC5cbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLmZpbHRlckN1cnJlbnRQYWdlRmllbGRzKGNhc2VGaWVsZHMsIGZvcm1WYWx1ZSk7XG5cbiAgICAvLyBTb3J0IG91dCB0aGUgZHluYW1pYyBsaXN0cy5cbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2VEeW5hbWljTGlzdHMoY2FzZUZpZWxkcywgZm9ybUZpZWxkcyk7XG5cbiAgICAvLyBHZXQgaG9sZCBvZiB0aGUgQ2FzZUV2ZW50RGF0YS5cbiAgICBjb25zdCBjYXNlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnNhbml0aXNlKGZvcm1GaWVsZHMpIGFzIENhc2VFdmVudERhdGE7XG5cbiAgICAvLyBkZWxldGUgZmllbGRzIHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgY2FzZSBldmVudCBqb3VybmV5IHdpemFyZCBwYWdlcyBjYXNlIGZpZWxkc1xuICAgIHRoaXMudmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlLmRlbGV0ZU5vblZhbGlkYXRlZEZpZWxkcyh0aGlzLmNhc2VFZGl0LnZhbGlkUGFnZUxpc3QsIGNhc2VFdmVudERhdGEuZGF0YSwgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMsIGZyb21QcmV2aW91c1BhZ2UsIHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXS52YWx1ZSk7XG5cbiAgICAvLyBUaWR5IGl0IHVwIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGNhc2VFdmVudERhdGEuZGF0YSwgY2FzZUZpZWxkcywgY2xlYXJFbXB0eSwgY2xlYXJOb25DYXNlLFxuICAgICAgZnJvbVByZXZpb3VzUGFnZSwgdGhpcy5jdXJyZW50UGFnZS5jYXNlX2ZpZWxkcyk7XG5cbiAgICByZXR1cm4gY2FzZUV2ZW50RGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0Nhc2VFZGl0RGF0YVNlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldENhc2VEZXRhaWxzKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpO1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5zZXRDYXNlRXZlbnRUcmlnZ2VyTmFtZSh0aGlzLmV2ZW50VHJpZ2dlci5uYW1lKTtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0Q2FzZVRpdGxlKHRoaXMuZ2V0Q2FzZVRpdGxlKCkpO1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5zZXRDYXNlRWRpdEZvcm0odGhpcy5lZGl0Rm9ybSk7XG4gICAgdGhpcy5jYXNlRm9ybVZhbGlkYXRpb25FcnJvcnNTdWIgPSB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2FzZUZvcm1WYWxpZGF0aW9uRXJyb3JzJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHZhbGlkYXRpb25FcnJvcnMpID0+IHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRpb25FcnJvcnNcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRScHhUcmFuc2xhdGVQaXBlQXJncyhmaWVsZExhYmVsOiBzdHJpbmcpOiB7IEZJRUxETEFCRUw6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIGZpZWxkTGFiZWwgPyAoeyBGSUVMRExBQkVMOiBmaWVsZExhYmVsIH0pIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoZXZlbnRDYW5CZUNvbXBsZXRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQub25FdmVudENhbkJlQ29tcGxldGVkKHtcbiAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICBldmVudENhbkJlQ29tcGxldGVkLFxuICAgICAgY2FzZURldGFpbHM6IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMsXG4gICAgICBmb3JtOiB0aGlzLmVkaXRGb3JtLFxuICAgICAgc3VibWl0OiB0aGlzLmNhc2VFZGl0LnN1Ym1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQWxsSnVkaWNpYWxVc2VyRm9ybUNvbnRyb2xzKHBhZ2U6IFdpemFyZFBhZ2UsIGVkaXRGb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICBwYWdlLmNhc2VfZmllbGRzLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgIGlmIChGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnSnVkaWNpYWxVc2VyJ10pKSB7XG4gICAgICAgIChlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddIGFzIEZvcm1Hcm91cCkucmVtb3ZlQ29udHJvbChgJHtjYXNlRmllbGQuaWR9X2p1ZGljaWFsVXNlckNvbnRyb2xgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRQYWdlXCI+XG4gIDxoMSAqbmdJZj1cIiFjdXJyZW50UGFnZS5sYWJlbFwiIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+e3tldmVudFRyaWdnZXIubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9oMT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRQYWdlLmxhYmVsXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIj57eyBldmVudFRyaWdnZXIubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9zcGFuPlxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPnt7Y3VycmVudFBhZ2UubGFiZWwgfCBycHhUcmFuc2xhdGV9fTwvaDE+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS1DYXNlIElEIG9yIFRpdGxlIC0tPlxuPGRpdiAqbmdJZj1cImdldENhc2VUaXRsZSgpOyB0aGVuIHRpdGxlQmxvY2s7IGVsc2UgaWRCbG9ja1wiPjwvZGl2PlxuPG5nLXRlbXBsYXRlICN0aXRsZUJsb2NrPlxuICA8Y2NkLW1hcmtkb3duIFtjb250ZW50XT1cImdldENhc2VUaXRsZSgpIHwgY2NkQ2FzZVRpdGxlOiBjYXNlRmllbGRzIDogZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiPjwvY2NkLW1hcmtkb3duPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaWRCbG9jaz5cbiAgPGgyICpuZ0lmPVwiZ2V0Q2FzZUlkKClcIiBjbGFzcz1cImhlYWRpbmctaDJcIj4je3sgZ2V0Q2FzZUlkKCkgfCBjY2RDYXNlUmVmZXJlbmNlIH19PC9oMj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRXJyb3IgbWVzc2FnZSBzdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIiB0YWJpbmRleD1cIi0xXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAge3snVGhlcmUgaXMgYSBwcm9ibGVtJyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvaDI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHZhbGlkYXRpb25FcnJvciBvZiB2YWxpZGF0aW9uRXJyb3JzXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIChjbGljayk9XCJuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KHZhbGlkYXRpb25FcnJvci5pZClcIiAoa2V5dXAuZW50ZXIpPVwibmF2aWdhdGVUb0Vycm9yRWxlbWVudCh2YWxpZGF0aW9uRXJyb3IuaWQpXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+XG4gICAgICAgICAge3sgdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2UgfCBycHhUcmFuc2xhdGU6IGdldFJweFRyYW5zbGF0ZVBpcGVBcmdzKHZhbGlkYXRpb25FcnJvci5sYWJlbCB8IHJweFRyYW5zbGF0ZSk6IG51bGwgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Y2NkLWNhc2UtZWRpdC1nZW5lcmljLWVycm9ycyBbZXJyb3JdPVwiY2FzZUVkaXQuZXJyb3JcIj48L2NjZC1jYXNlLWVkaXQtZ2VuZXJpYy1lcnJvcnM+XG5cbjxjY2QtY2FsbGJhY2stZXJyb3JzXG4gIFt0cmlnZ2VyVGV4dENvbnRpbnVlXT1cInRyaWdnZXJUZXh0U3RhcnRcIlxuICBbdHJpZ2dlclRleHRJZ25vcmVdPVwidHJpZ2dlclRleHRJZ25vcmVXYXJuaW5nc1wiXG4gIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FzZUVkaXQuY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCJcbiAgKGNhbGxiYWNrRXJyb3JzQ29udGV4dCk9XCJjYWxsYmFja0Vycm9yc05vdGlmeSgkZXZlbnQpXCI+XG48L2NjZC1jYWxsYmFjay1lcnJvcnM+XG48ZGl2IGNsYXNzPVwid2lkdGgtNTBcIj5cbiAgPGZvcm0gKm5nSWY9XCJjdXJyZW50UGFnZVwiIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm1cIiAoc3VibWl0KT1cIm5leHRTdGVwKClcIj5cbiAgICA8ZmllbGRzZXQgaWQ9XCJmaWVsZHNldC1jYXNlLWRhdGFcIj5cbiAgICAgIDxsZWdlbmQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvbGVnZW5kPlxuICAgICAgPCEtLSBzaW5nbGUgY29sdW1uIC0tPlxuICAgICAgPGNjZC1jYXNlLWVkaXQtZm9ybSBpZD0nY2FzZUVkaXRGb3JtJyAqbmdJZj1cIiFjdXJyZW50UGFnZS5pc011bHRpQ29sdW1uKClcIiBbZmllbGRzXT1cImN1cnJlbnRQYWdlLmdldENvbDFGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjYXNlRmllbGRzXT1cImNhc2VGaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUNoYW5nZVN1YmplY3RdPVwicGFnZUNoYW5nZVN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVzQ2hhbmdlZCk9XCJhcHBseVZhbHVlc0NoYW5nZWQoJGV2ZW50KVwiPjwvY2NkLWNhc2UtZWRpdC1mb3JtPlxuICAgICAgPCEtLSB0d28gY29sdW1ucyAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50UGFnZS5pc011bHRpQ29sdW1uKClcIiBjbGFzcz1cImdyaWQtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tdHdvLXRoaXJkcyByaWdodEJvcmRlclNlcGFyYXRvclwiPlxuICAgICAgICAgIDxjY2QtY2FzZS1lZGl0LWZvcm0gaWQ9J2Nhc2VFZGl0Rm9ybTEnIFtmaWVsZHNdPVwiY3VycmVudFBhZ2UuZ2V0Q29sMUZpZWxkcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjYXNlRmllbGRzXT1cImNhc2VGaWVsZHNcIj48L2NjZC1jYXNlLWVkaXQtZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tb25lLXRoaXJkXCI+XG4gICAgICAgICAgPGNjZC1jYXNlLWVkaXQtZm9ybSBpZD0nY2FzZUVkaXRGb3JtMicgW2ZpZWxkc109XCJjdXJyZW50UGFnZS5nZXRDb2wyRmllbGRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZHNdPVwiY2FzZUZpZWxkc1wiPjwvY2NkLWNhc2UtZWRpdC1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmb3JtLWdyb3VwLXJlbGF0ZWRcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9QcmV2aW91c1BhZ2UoKVwiICpuZ0lmPVwiIWlzQXRTdGFydCgpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiPlxuICAgICAgICB7eydQcmV2aW91cycgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJzdWJtaXR0aW5nKClcIj57e3RyaWdnZXJUZXh0IHwgcnB4VHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwIGNsYXNzPVwiY2FuY2VsXCI+PGEgKGNsaWNrKT1cImNhbmNlbCgpXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPnt7Z2V0Q2FuY2VsVGV4dCgpIHwgcnB4VHJhbnNsYXRlfX08L2E+PC9wPlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuPGNjZC1jYXNlLWV2ZW50LWNvbXBsZXRpb24gKm5nSWY9XCJjYXNlRWRpdC5pc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCJcbiAgW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJjYXNlRWRpdC5ldmVudENvbXBsZXRpb25QYXJhbXNcIlxuICAoZXZlbnRDYW5CZUNvbXBsZXRlZCk9XCJvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoJGV2ZW50KVwiPlxuPC9jY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uPlxuIl19
933
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2Nhc2UtZWRpdC1wYWdlL2Nhc2UtZWRpdC1wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtcGFnZS9jYXNlLWVkaXQtcGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsZUFBZSxJQUFJLFNBQVMsRUFBMkMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQTJCLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7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QUNMLENBQUM7K0dBenVCVSxxQkFBcUI7NkRBQXJCLHFCQUFxQjs7WUNmbEMsQUFMQSxBQUhBLEFBREEsQUFUQSx3RkFBa0MseURBU3lCLDBHQUNsQywwR0FHSCx5REFLa0o7WUFleEssa0RBQXNGO1lBRXRGLDhDQUl5RDtZQUF2RCwyTEFBeUIsZ0NBQTRCLEtBQUM7WUFDeEQsaUJBQXNCO1lBQ3RCLDhCQUFzQjtZQUNwQiw0RUFBb0Y7WUE4QnRGLGlCQUFNO1lBRU4sb0hBRXdEOzs7O1lBNUV6QyxzQ0FBaUI7WUFTMUIsY0FBc0I7WUFBaUIsQUFBakIsQUFBdEIseUNBQXNCLDJCQUFpQix5QkFBWTtZQVNuRCxlQUFpQztZQUFqQyxzREFBaUM7WUFlVCxjQUF3QjtZQUF4QiwwQ0FBd0I7WUFHcEQsY0FBd0M7WUFFeEMsQUFEQSxBQURBLDBEQUF3QyxvREFDTyw2REFDUztZQUlqRCxlQUFpQjtZQUFqQixzQ0FBaUI7WUFnQ0UsY0FBOEM7WUFBOUMsbUVBQThDOzs7aUZEekM3RCxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxvQkFBb0I7O2tGQUluQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2csIE1hdExlZ2FjeURpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FzZUVkaXREYXRhU2VydmljZSwgQ2FzZUVkaXRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhJztcbmltcG9ydCB7IENhc2VFdmVudERhdGEgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS1ldmVudC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IENhc2VFdmVudFRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS12aWV3L2Nhc2UtZXZlbnQtdHJpZ2dlci5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBEUkFGVF9QUkVGSVggfSBmcm9tICcuLi8uLi8uLi9kb21haW4vZHJhZnQubW9kZWwnO1xuaW1wb3J0IHsgQWRkcmVzc2VzU2VydmljZSwgTG9hZGluZ1NlcnZpY2UsIE11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENhc2VGaWVsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXNlLWZpZWxkcy9jYXNlLWZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgRm9ybUVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1WYWx1ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlT3JEaXNjYXJkRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9zYXZlLW9yLWRpc2NhcmQtZGlhbG9nJztcbmltcG9ydCB7IENhbGxiYWNrRXJyb3JzQ29udGV4dCB9IGZyb20gJy4uLy4uL2Vycm9yL2RvbWFpbi9lcnJvci1jb250ZXh0JztcbmltcG9ydCB7IGluaXREaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IENhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1lZGl0L2Nhc2UtZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbi93aXphcmQtcGFnZS5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmQgfSBmcm9tICcuLi9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhZ2UtdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkUGFnZUxpc3RDYXNlRmllbGRzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ZhbGlkLXBhZ2UtbGlzdC1jYXNlRmllbGRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSm91cm5leUluc3RpZ2F0b3IgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vam91cm5leSc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wYWxldHRlL2xpbmtlZC1jYXNlcy9zZXJ2aWNlcy9saW5rZWQtY2FzZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Nhc2UtZmxhZy1zdGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICdjYXNlLWVkaXQtcGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FzZS1lZGl0LXBhZ2Uuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhc2VFZGl0UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBKb3VybmV5SW5zdGlnYXRvciB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTVU1FRF9GT1JNX0RJU0NBUkQgPSAnUkVTVU1FRF9GT1JNX0RJU0NBUkQnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FV19GT1JNX0RJU0NBUkQgPSAnTkVXX0ZPUk1fRElTQ0FSRCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVXX0ZPUk1fU0FWRSA9ICdORVdfRk9STV9DSEFOR0VEX1NBVkUnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFU1VNRURfRk9STV9TQVZFID0gJ1JFU1VNRURfRk9STV9TQVZFJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUklHR0VSX1RFWFRfU1RBUlQgPSAnQ29udGludWUnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRSSUdHRVJfVEVYVF9TQVZFID0gJ1NhdmUgYW5kIGNvbnRpbnVlJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUklHR0VSX1RFWFRfQ09OVElOVUUgPSAnSWdub3JlIFdhcm5pbmcgYW5kIENvbnRpbnVlJztcblxuICBwdWJsaWMgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyO1xuICBwdWJsaWMgZWRpdEZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIHdpemFyZDogV2l6YXJkO1xuICBwdWJsaWMgY3VycmVudFBhZ2U6IFdpemFyZFBhZ2U7XG4gIHB1YmxpYyBkaWFsb2dDb25maWc6IE1hdERpYWxvZ0NvbmZpZztcbiAgcHVibGljIHRyaWdnZXJUZXh0U3RhcnQgPSBDYXNlRWRpdFBhZ2VDb21wb25lbnQuVFJJR0dFUl9URVhUX1NUQVJUO1xuICBwdWJsaWMgdHJpZ2dlclRleHRJZ25vcmVXYXJuaW5ncyA9IENhc2VFZGl0UGFnZUNvbXBvbmVudC5UUklHR0VSX1RFWFRfQ09OVElOVUU7XG4gIHB1YmxpYyB0cmlnZ2VyVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgZm9ybVZhbHVlc0NoYW5nZWQgPSBmYWxzZTtcbiAgcHVibGljIHBhZ2VDaGFuZ2VTdWJqZWN0OiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgZmFpbGluZ0Nhc2VGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgdmFsaWRhdGlvbkVycm9yczogQ2FzZUVkaXRWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBwdWJsaWMgaGFzUHJldmlvdXNQYWdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc1N1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHB1YmxpYyBpc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwOiBib29sZWFuO1xuICBwdWJsaWMgcm91dGVQYXJhbXNTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VFZGl0Rm9ybVN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2FzZUlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXBTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VUcmlnZ2VyU3VibWl0RXZlbnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHZhbGlkYXRlU3ViOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBkaWFsb2dSZWZBZnRlckNsb3NlZFN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgc2F2ZURyYWZ0U3ViOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjYXNlRm9ybVZhbGlkYXRpb25FcnJvcnNTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHN0YXRpYyBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXRGb2N1c1RvVG9wKCkge1xuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3AnKTtcbiAgICBpZiAodG9wQ29udGFpbmVyKSB7XG4gICAgICB0b3BDb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2FzZUVkaXQ6IENhc2VFZGl0Q29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZhbHVlU2VydmljZTogRm9ybVZhbHVlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1FcnJvclNlcnZpY2U6IEZvcm1FcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlVmFsaWRhdGlvblNlcnZpY2U6IFBhZ2VWYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZpZWxkU2VydmljZTogQ2FzZUZpZWxkU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZFBhZ2VMaXN0Q2FzZUZpZWxkc1NlcnZpY2U6IFZhbGlkUGFnZUxpc3RDYXNlRmllbGRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZTogTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3Nlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rZWRDYXNlc1NlcnZpY2U6IExpbmtlZENhc2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5zZXRJbnN0aWdhdG9yKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG9uRmluYWxOZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb25GaW5hbFByZXZpb3VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFnZU51bWJlcigpe1xuICAgIHJldHVybiB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5Q29sbGVjdGlvbigpWzBdPy5saW5rZWRDYXNlc1BhZ2UgIT09IHVuZGVmaW5lZCA/IHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlDb2xsZWN0aW9uKClbMF0/LmxpbmtlZENhc2VzUGFnZSA6IHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlDb2xsZWN0aW9uKClbMF0/LmZpZWxkU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgaXNBdFN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhZ2VOdW1iZXJUb1VzZSA9IHRoaXMuZ2V0UGFnZU51bWJlcigpO1xuICAgIGlmIChwYWdlTnVtYmVyVG9Vc2UgPT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwYWdlTnVtYmVyVG9Vc2UgPT09IHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlDb2xsZWN0aW9uKClbMF0/LmpvdXJuZXlTdGFydFBhZ2VOdW1iZXI7XG4gIH1cblxuICBwdWJsaWMgaXNBdEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8uZmllbGRTdGF0ZSA9PT0gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8uam91cm5leUVuZFBhZ2VOdW1iZXI7XG4gIH1cblxuICBwdWJsaWMgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5nZXRQYWdlTnVtYmVyKCkgPT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gIXRoaXMuaGFzUHJldmlvdXNQYWdlJC52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNBdFN0YXJ0KCk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIHRyaWdnZXJlZCBieSB0aGUgbmV4dCBidXR0b24gaW4gdGhlIGFwcCBjb21wb25lbnRcbiAgcHVibGljIG5leHRTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLm5leHQoKTtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IHRoZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIGFwcCBjb21wb25lbnRcbiAgcHVibGljIHByZXZpb3VzU3RlcCgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5wcmV2aW91cygpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGluaXREaWFsb2coKTtcbiAgICB0aGlzLmV2ZW50VHJpZ2dlciA9IHRoaXMuY2FzZUVkaXQuZXZlbnRUcmlnZ2VyO1xuICAgIHRoaXMuZWRpdEZvcm0gPSB0aGlzLmNhc2VFZGl0LmZvcm07XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLmNhc2VFZGl0LndpemFyZDtcbiAgICB0aGlzLmNhc2VGaWVsZHMgPSB0aGlzLmdldENhc2VGaWVsZHMoKTtcblxuICAgIHRoaXMuc3luY0Nhc2VFZGl0RGF0YVNlcnZpY2UoKTtcblxuICAgIHRoaXMucm91dGVQYXJhbXNTdWIgPSB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBwYXJhbXNbJ3BhZ2UnXTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQYWdlIHx8IHBhZ2VJZCAhPT0gdGhpcy5jdXJyZW50UGFnZT8uaWQpIHtcbiAgICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5jYXNlRWRpdC5nZXRQYWdlKHBhZ2VJZCk7XG4gICAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhhc1ByZXZpb3VzUGFnZSQubmV4dCh0aGlzLmNhc2VFZGl0Lmhhc1ByZXZpb3VzKHRoaXMuY3VycmVudFBhZ2U/LmlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyVGV4dCA9IHRoaXMuZ2V0VHJpZ2dlclRleHQoKTtcbiAgICAgIH0pO1xuICAgIENhc2VFZGl0UGFnZUNvbXBvbmVudC5zZXRGb2N1c1RvVG9wKCk7XG4gICAgdGhpcy5jYXNlRWRpdEZvcm1TdWIgPSB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2FzZUVkaXRGb3JtJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZWRpdEZvcm0gPT4gdGhpcy5lZGl0Rm9ybSA9IGVkaXRGb3JtXG4gICAgfSk7XG4gICAgdGhpcy5jYXNlSXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcFN1YiA9XG4gICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2FzZUlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXAkLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGlzTGlua2VkQ2FzZXNKb3VybmV5QXRGaW5hbFN0ZXAgPT4gdGhpcy5pc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwID0gaXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcFxuICAgICAgfSk7XG4gICAgdGhpcy5jYXNlVHJpZ2dlclN1Ym1pdEV2ZW50U3ViID0gdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUcmlnZ2VyU3VibWl0RXZlbnQkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5zZXRUcmlnZ2VyU3VibWl0RXZlbnQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZVBhcmFtc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhc2VFZGl0Rm9ybVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhc2VJc0xpbmtlZENhc2VzSm91cm5leUF0RmluYWxTdGVwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FzZVRyaWdnZXJTdWJtaXRFdmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnZhbGlkYXRlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGlhbG9nUmVmQWZ0ZXJDbG9zZWRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZlRHJhZnRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jYXNlRm9ybVZhbGlkYXRpb25FcnJvcnNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UucmVzZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVZhbHVlc0NoYW5nZWQodmFsdWVzQ2hhbmdlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZm9ybVZhbHVlc0NoYW5nZWQgPSB2YWx1ZXNDaGFuZ2VkO1xuICB9XG5cbiAgcHVibGljIGZpcnN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmZpcnN0KCk7XG4gIH1cblxuICBwdWJsaWMgY3VycmVudFBhZ2VJc05vdFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuZWRpdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMuZmFpbGluZ0Nhc2VGaWVsZHMgPSB0aGlzLnBhZ2VWYWxpZGF0aW9uU2VydmljZS5nZXRJbnZhbGlkRmllbGRzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuZWRpdEZvcm0pO1xuICAgIHJldHVybiB0aGlzLmZhaWxpbmdDYXNlRmllbGRzLmxlbmd0aCA+IDAgfHxcbiAgICAgICh0aGlzLmlzTGlua2VkQ2FzZXNKb3VybmV5KCkgJiYgIXRoaXMuaXNMaW5rZWRDYXNlc0pvdXJuZXlBdEZpbmFsU3RlcCk7XG4gIH1cblxuICBwdWJsaWMgaXNMaW5rZWRDYXNlc0pvdXJuZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZpZWxkc1V0aWxzLmNvbnRhaW5zTGlua2VkQ2FzZXNDYXNlRmllbGQodGhpcy5jdXJyZW50UGFnZS5jYXNlX2ZpZWxkcyk7XG4gIH1cblxuICAvKipcbiAgICogY2FzZUV2ZW50RGF0YS5ldmVudF9kYXRhIGNvbnRhaW5zIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBhZ2VzIHNvIHdlIHNldCBjYXNlRXZlbnREYXRhLmRhdGEgPSBjYXNlRXZlbnREYXRhLmV2ZW50X2RhdGFcbiAgICogVGhpcyBidWlsZHMgdGhlIGZvcm0gd2l0aCBkYXRhIGZyb20gdGhlIHByZXZpb3VzIHBhZ2VzXG4gICAqIEVVSS0zNzMyIC0gQnJlYXRoaW5nIHNwYWNlIGRhdGEgbm90IHBlcnNpc3RlZCBvbiBQcmV2aW91cyBidXR0b24gY2xpY2sgd2l0aCBFeHBVSSBEZW1vXG4gICAqL1xuICBwdWJsaWMgdG9QcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICBjb25zdCBjYXNlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5idWlsZENhc2VFdmVudERhdGEodHJ1ZSk7XG4gICAgY2FzZUV2ZW50RGF0YS5kYXRhID0gY2FzZUV2ZW50RGF0YS5ldmVudF9kYXRhO1xuICAgIHRoaXMudXBkYXRlRm9ybURhdGEoY2FzZUV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcmV2aW91cygpO1xuICAgIGlmICh0aGlzLmdldFBhZ2VOdW1iZXIoKSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIHRoaXMucHJldmlvdXNTdGVwKCk7XG4gICAgfVxuICAgIENhc2VFZGl0UGFnZUNvbXBvbmVudC5zZXRGb2N1c1RvVG9wKCk7XG4gIH1cblxuICAvLyBBZGRpbmcgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIHNob3cgaXQgYXMgRXJyb3IgU3VtbWFyeVxuICBwdWJsaWMgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoZmllbGRzOiBDYXNlRmllbGRbXSwgY29udGFpbmVyPzogQWJzdHJhY3RDb250cm9sLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3JvdXA6IEFic3RyYWN0Q29udHJvbCA9IGNvbnRhaW5lciB8fCB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ107XG4gICAgbGV0IHZhbGlkRXJyb3JGaWVsZEZvdW5kID0gZmFsc2U7XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvckFtb3VudCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGg7XG4gICAgY29uc3QgZmFpbGluZ0ZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoY2FzZWZpZWxkID0+ICF0aGlzLmNhc2VGaWVsZFNlcnZpY2UuaXNSZWFkT25seShjYXNlZmllbGQpKVxuICAgICAgLmZpbHRlcihjYXNlZmllbGQgPT4gIXRoaXMucGFnZVZhbGlkYXRpb25TZXJ2aWNlLmlzSGlkZGVuKGNhc2VmaWVsZCwgdGhpcy5lZGl0Rm9ybSwgcGF0aCkpO1xuICAgIC8vIG5vdGUgdGhhdCB0aG91Z24gdGhlc2UgY2hlY2tzIGFyZSBvbiBnZXRpbnZhbGlkZmllbGRzIHRoZXkgYXJlIG5lZWRlZCBmb3Igc3ViIGZpZWxkIGNoZWNrc1xuICAgIGZhaWxpbmdGaWVsZHNcbiAgICAgIC5mb3JFYWNoKGNhc2VmaWVsZCA9PiB7XG4gICAgICAgIGxldCBlcnJvclByZXNlbnQgPSB0cnVlO1xuICAgICAgICB2YWxpZEVycm9yRmllbGRGb3VuZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkRWxlbWVudCA9IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VmaWVsZCwgWydKdWRpY2lhbFVzZXInXSlcbiAgICAgICAgICA/IGdyb3VwLmdldChgJHtjYXNlZmllbGQuaWR9X2p1ZGljaWFsVXNlckNvbnRyb2xgKVxuICAgICAgICAgIDogZ3JvdXAuZ2V0KGNhc2VmaWVsZC5pZCk7XG4gICAgICAgIGlmIChmaWVsZEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNhc2VmaWVsZC5sYWJlbCB8fCAnRmllbGQnO1xuICAgICAgICAgIGxldCBpZCA9IGNhc2VmaWVsZC5pZDtcbiAgICAgICAgICBpZiAoZmllbGRFbGVtZW50Wydjb21wb25lbnQnXSAmJiBmaWVsZEVsZW1lbnRbJ2NvbXBvbmVudCddLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkRWxlbWVudFsnY29tcG9uZW50J10uaWRQcmVmaXguaW5kZXhPZihgXyR7aWR9X2ApID09PSAtMSkge1xuICAgICAgICAgICAgICBpZCA9IGAke2ZpZWxkRWxlbWVudFsnY29tcG9uZW50J10uaWRQcmVmaXh9JHtpZH1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWQgPSBgJHtmaWVsZEVsZW1lbnRbJ2NvbXBvbmVudCddLmlkUHJlZml4fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWVsZEVsZW1lbnQuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIGlmIChjYXNlZmllbGQuaWQgPT09ICdBZGRyZXNzTGluZTEnKSB7XG4gICAgICAgICAgICAgIC8vIEVVSS0xMDY3IC0gRGlzcGxheSBtb3JlIHJlbGV2YW50IGVycm9yIG1lc3NhZ2UgdG8gdXNlciBhbmQgY29ycmVjdGx5IG5hdmlnYXRlIHRvIHRoZSBmaWVsZFxuICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NTZXJ2aWNlLnNldE1hbmRhdG9yeUVycm9yKHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuYWRkRm9ybVZhbGlkYXRpb25FcnJvcih7IGlkOiBgJHtwYXRofV8ke3BhdGh9YCwgbWVzc2FnZTogYEFuIGFkZHJlc3MgaXMgcmVxdWlyZWRgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmFkZEZvcm1WYWxpZGF0aW9uRXJyb3IoeyBpZCwgbWVzc2FnZTogYCVGSUVMRExBQkVMJSBpcyByZXF1aXJlZGAsIGxhYmVsIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRFbGVtZW50Lm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAvLyBGb3IgdGhlIEp1ZGljaWFsVXNlciBmaWVsZCB0eXBlLCBhbiBlcnJvciBuZWVkcyB0byBiZSBzZXQgb24gdGhlIGNvbXBvbmVudCBzbyB0aGF0IGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgIC8vIGNhbiBiZSBkaXNwbGF5ZWQgYXQgZmllbGQgbGV2ZWxcbiAgICAgICAgICAgIGlmIChGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlZmllbGQsIFsnSnVkaWNpYWxVc2VyJ10pKSB7XG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudFsnY29tcG9uZW50J10uZXJyb3JzID0geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRFbGVtZW50Lmhhc0Vycm9yKCdwYXR0ZXJuJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5hZGRGb3JtVmFsaWRhdGlvbkVycm9yKHsgaWQsIG1lc3NhZ2U6IGAlRklFTERMQUJFTCUgaXMgbm90IHZhbGlkYCwgbGFiZWwgfSk7XG4gICAgICAgICAgICBmaWVsZEVsZW1lbnQubWFya0FzRGlydHkoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRWxlbWVudC5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5hZGRGb3JtVmFsaWRhdGlvbkVycm9yKHsgaWQsIG1lc3NhZ2U6IGAlRklFTERMQUJFTCUgaXMgYmVsb3cgdGhlIG1pbmltdW0gbGVuZ3RoYCwgbGFiZWwgfSk7XG4gICAgICAgICAgICBmaWVsZEVsZW1lbnQubWFya0FzRGlydHkoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRWxlbWVudC5oYXNFcnJvcignbWF4bGVuZ3RoJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5hZGRGb3JtVmFsaWRhdGlvbkVycm9yKHsgaWQsIG1lc3NhZ2U6IGAlRklFTERMQUJFTCUgZXhjZWVkcyB0aGUgbWF4aW11bSBsZW5ndGhgLCBsYWJlbCB9KTtcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRFbGVtZW50LmludmFsaWQpIHtcbiAgICAgICAgICAgIGlmIChjYXNlZmllbGQuaXNDb21wbGV4KCkpIHtcbiAgICAgICAgICAgICAgZXJyb3JQcmVzZW50ID0gdGhpcy5nZW5lcmF0ZUVycm9yTWVzc2FnZShjYXNlZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZmllbGRFbGVtZW50LCBpZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhc2VmaWVsZC5pc0NvbGxlY3Rpb24oKSAmJiBjYXNlZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkQXJyYXkgPSBmaWVsZEVsZW1lbnQgYXMgRm9ybUFycmF5O1xuICAgICAgICAgICAgICBpZiAoZmllbGRBcnJheVsnY29tcG9uZW50J10gJiYgZmllbGRBcnJheVsnY29tcG9uZW50J11bJ2NvbGxJdGVtcyddICYmIGZpZWxkQXJyYXlbJ2NvbXBvbmVudCddWydjb2xsSXRlbXMnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBgJHtmaWVsZEFycmF5Wydjb21wb25lbnQnXVsnY29sbEl0ZW1zJ11bMF0ucHJlZml4fWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmllbGRBcnJheS5jb250cm9scy5mb3JFYWNoKChjOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFByZWZpeCA9IGMuZ2V0KCd2YWx1ZScpWydjb21wb25lbnQnXS5pZFByZWZpeDtcbiAgICAgICAgICAgICAgICBpZCA9IGlkUHJlZml4ICE9PSBpZCA/IGlkUHJlZml4IDogaWQ7XG4gICAgICAgICAgICAgICAgZXJyb3JQcmVzZW50ID0gdGhpcy5nZW5lcmF0ZUVycm9yTWVzc2FnZShjYXNlZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGMuZ2V0KCd2YWx1ZScpLCBpZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlZmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBGaWVsZHNVdGlscy5nZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlRm9yRmxhZ0xhdW5jaGVyQ2FzZUZpZWxkKGNhc2VmaWVsZClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkLCBtZXNzYWdlOiBgU2VsZWN0IG9yIGZpbGwgdGhlIHJlcXVpcmVkICR7Y2FzZWZpZWxkLmxhYmVsfSBmaWVsZGAgfSk7XG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZEVycm9yRmllbGRGb3VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXJyb3JQcmVzZW50ICYmIHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IHZhbGlkYXRpb25FcnJvckFtb3VudCkge1xuICAgICAgICAgIC8vIGlmIG5vIGVycm9yIG1lc3NhZ2VzIGhhdmUgYmVlbiBhZGRlZCBpbiBpbnRlcm5hbCBmaWVsZCBkZXNwaXRlIHBhcmVudCBmaWVsZCBmYWlsaW5nXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBpZDogY2FzZWZpZWxkLmlkLCBtZXNzYWdlOiBgQSBmaWVsZCB0aGF0IGlzIGNhdXNpbmcgYW4gZXJyb3IgaXMgJHtjYXNlZmllbGQuaWR9IGJ1dCBpdCBpcyBub3QgcHJvZHVjaW5nIGEgdmFsaWQgZXJyb3IgbWVzc2FnZS4gUGxlYXNlIGVuc3VyZSBhbGwgZGV0YWlscyBhcmUgY29ycmVjdGAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdmFsaWRFcnJvckZpZWxkRm91bmQpIHtcbiAgICAgIHBhdGggPyB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkOiBwYXRoLCBtZXNzYWdlOiBgVGhlcmUgaXMgYW4gaW50ZXJuYWwgaXNzdWUgd2l0aCAke3BhdGh9IGZpZWxkcy4gVGhlIGZpZWxkIHRoYXQgaXMgY2F1c2luZyB0aGUgZXJyb3IgY2Fubm90IGJlIGRldGVybWluZWQgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHByZXNlbnRgIH0pXG4gICAgICAgIDogdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBpZDogbnVsbCwgbWVzc2FnZTogYFRoZSBmaWVsZCB0aGF0IGlzIGNhdXNpbmcgdGhlIGVycm9yIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ1dCB0aGVyZSBpcyBhbiBlcnJvciBwcmVzZW50YCB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IHZhbGlkYXRpb25FcnJvckFtb3VudCkge1xuICAgICAgLy8gaWYgbm8gZXJyb3IgbWVzc2FnZXMgaGF2ZSBiZWVuIGdlbmVyYXRlZFxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBpZDogbnVsbCwgbWVzc2FnZTogYFRoZSBmaWVsZCB0aGF0IGlzIGNhdXNpbmcgdGhlIGVycm9yIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ1dCB0aGVyZSBpcyBhbiBlcnJvciBwcmVzZW50LiBQbGVhc2UgZmlsbCBpbiBtb3JlIG9mIHRoZSBmb3JtYCB9KVxuICAgICAgfVxuICAgIH1cbiAgICBDYXNlRWRpdFBhZ2VDb21wb25lbnQuc2Nyb2xsVG9Ub3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIGh0bWxFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgIGh0bWxFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoZWNrRm9yU3RhZ2VzQ29tcGxldGVkKCkge1xuICAgIGNvbnN0IGRhdGFDb250cm9scyA9IHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXTtcbiAgICBpZiAoZGF0YUNvbnRyb2xzKSB7XG4gICAgICBjb25zdCBmbGFnTGF1bmNoZXIgPSBkYXRhQ29udHJvbHMuZ2V0KCdmbGFnTGF1bmNoZXJJbnRlcm5hbCcpO1xuICAgICAgaWYgKGZsYWdMYXVuY2hlcikge1xuICAgICAgICBpZiAoZmxhZ0xhdW5jaGVyLmhhc0Vycm9yKCdub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCcpICYmIHRoaXMuaXNBdEVuZCgpKSB7XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgLy8gaW4gc29tZSBzY2VuYXJpb3MgdGhlIGZpZWxkc3RhdGUgY2FuIGJlIHNldCB0byAwIGV2ZW4gdGhvdWdoIHRoZSB1c2VyIGlzIGF0IHRoZSBlbmQgb2YgYSBqb3VybmV5LCBjaGVjayBmb3IgdGhpcyBjYXNlIGFuZCBzZXQgdmFyc1xuICAgIGNvbnN0IGpvdXJuZXlQYWdlTnVtYmVyID0gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXT8uam91cm5leVBhZ2VOdW1iZXI7XG4gICAgY29uc3QgZmllbGRTdGF0ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2U/LmZpZWxkU3RhdGVUb05hdmlnYXRlO1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5pZCA9PT0gJ2MxMDBNYW5hZ2VGbGFncycpIHtcbiAgICAgIGlmICgoZmllbGRTdGF0ZSA9PT0gMCB8fCBmaWVsZFN0YXRlID09PSB1bmRlZmluZWQgfHwgam91cm5leVBhZ2VOdW1iZXIgPiBmaWVsZFN0YXRlKSAmJiBmaWVsZFN0YXRlICE9PSBqb3VybmV5UGFnZU51bWJlcikge1xuICAgICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gam91cm5leVBhZ2VOdW1iZXI7XG4gICAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UubGFzdFBhZ2VGaWVsZFN0YXRlID0gam91cm5leVBhZ2VOdW1iZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoIXRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmlzTGlua2VkQ2FzZXNFdmVudFRyaWdnZXIpICYmICh0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlc1RvVW5saW5rLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyBlbnN1cmUgY2Z2IGlzIHNldCBjb3JyZWN0bHlcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUuZmlsdGVyKFxuICAgICAgICAoY2FzZUZpZWxkVmFsdWUpID0+ICF0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlc1RvVW5saW5rLnNvbWUoKGxpbmspID0+IGNhc2VGaWVsZFZhbHVlLmlkID09PSBsaW5rKVxuICAgICAgKTtcbiAgICAgIC8vZW5zdXJlIHRoYXQgdGhlIHZhbHVlcyBhcmUgbm90IGxvc3Qgd2hlbiBuYXZpZ2F0aW5nIGJhY2tcbiAgICAgIGlmICh0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGFbJ2NvbnRyb2xzJ10uY2FzZUxpbmtzLmNvbnRyb2xzKXtcbiAgICAgICAgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlLmNhc2VMaW5rcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gdGhlc2UgZ2V0IGFkZGVkIHNvbWVob3cgc29tZXdoZXJlLCBidXQgaWYgd2UgYXJlIHVubGlua2luZyB3ZSBkb250IHdhbnQgdGhlbSwgcmVtb3ZlIHRoZW1cbiAgICAgIGlmICgnY2FzZU5hbWVIbWN0c0ludGVybmFsJyBpbiB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZS5jYXNlTmFtZUhtY3RzSW50ZXJuYWw7XG4gICAgICAgICh0aGlzLmVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdjYXNlTmFtZUhtY3RzSW50ZXJuYWwnKTtcbiAgICAgIH1cbiAgICAgIGlmICgnbWFpbnRhaW5DYXNlTGlua3NGbGFnJyBpbiB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZS5tYWludGFpbkNhc2VMaW5rc0ZsYWc7XG4gICAgICAgICh0aGlzLmVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdtYWludGFpbkNhc2VMaW5rc0ZsYWcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmlzTGlua2VkQ2FzZXNFdmVudFRyaWdnZXIgJiYgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UubGlua2VkQ2FzZXMubGVuZ3RoID4gMCl7XG4gICAgICAvLyB0aGVzZSBnZXQgYWRkZWQgc29tZWhvdyBzb21ld2hlcmUsIHJlbW92ZSB0aGVtXG4gICAgICBpZiAoJ2Nhc2VOYW1lSG1jdHNJbnRlcm5hbCcgaW4gdGhpcy5lZGl0Rm9ybS5jb250cm9scy5kYXRhLnZhbHVlICYmICh0aGlzLmVkaXRGb3JtPy5jb250cm9scz8uZGF0YT8udmFsdWU/LmNhc2VOYW1lSG1jdHNJbnRlcm5hbCA9PT0gbnVsbCkpIHtcbiAgICAgICAgKCh0aGlzLmVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gYXMgRm9ybUdyb3VwKSkucmVtb3ZlQ29udHJvbCgnY2FzZU5hbWVIbWN0c0ludGVybmFsJyk7XG4gICAgICB9XG4gICAgICBpZiAoJ2Nhc2VMaW5rc0ZsYWcnIGluIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZGF0YS52YWx1ZSAmJiAodGhpcy5lZGl0Rm9ybT8uY29udHJvbHM/LmRhdGE/LnZhbHVlPy5jYXNlTGlua3NGbGFnID09PSBudWxsKSkge1xuICAgICAgICAoKHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXApKS5yZW1vdmVDb250cm9sKCdjYXNlTGlua3NGbGFnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICB0aGlzLmNoZWNrRm9yU3RhZ2VzQ29tcGxldGVkKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJc05vdFZhbGlkKCkpIHtcbiAgICAgIC8vIFRoZSBnZW5lcmF0ZUVycm9yTWVzc2FnZSBtZXRob2QgZmlsdGVycyBvdXQgdGhlIGhpZGRlbiBmaWVsZHMuXG4gICAgICAvLyBUaGUgZXJyb3IgbWVzc2FnZSBmb3IgTGlua2VkQ2FzZXMgam91cm5leSB3aWxsIG5ldmVyIGdldCBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVcbiAgICAgIC8vIExpbmtlZENhc2VzIGlzIGNvbmZpZ3VyZWQgd2l0aCBDb21wb25lbnRMYXVuY2hlciBmaWVsZCBhcyB2aXNpYmxlIGFuZCBjYXNlTGlua3MgZmllbGQgYXMgaGlkZGVuLlxuICAgICAgaWYgKHRoaXMuaXNMaW5rZWRDYXNlc0pvdXJuZXkoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGlkOiAnbmV4dC1idXR0b24nLCBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBOZXh0IHRvIGdvIHRvIHRoZSBuZXh0IHBhZ2UnIH0pO1xuICAgICAgICBDYXNlRWRpdFBhZ2VDb21wb25lbnQuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVFcnJvck1lc3NhZ2UodGhpcy5mYWlsaW5nQ2FzZUZpZWxkcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhc2VFZGl0LmlzU3VibWl0dGluZyAmJiAhdGhpcy5jdXJyZW50UGFnZUlzTm90VmFsaWQoKSkge1xuICAgICAgdGhpcy5hZGRyZXNzU2VydmljZS5zZXRNYW5kYXRvcnlFcnJvcihmYWxzZSk7XG4gICAgICBjb25zb2xlLmxvZygnQ2FzZSBFZGl0IEVycm9yJywgdGhpcy5jYXNlRWRpdC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5jYXNlRWRpdC52YWxpZFBhZ2VMaXN0LmZpbmRJbmRleChwYWdlPT4gcGFnZS5pZCA9PT0gdGhpcy5jdXJyZW50UGFnZS5pZCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuY2FzZUVkaXQudmFsaWRQYWdlTGlzdC5wdXNoKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jYXNlRWRpdC5lcnJvciA9IG51bGw7XG4gICAgICBjb25zdCBjYXNlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5idWlsZENhc2VFdmVudERhdGEoKTtcbiAgICAgIGNvbnN0IGxvYWRpbmdTcGlubmVyVG9rZW4gPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnJlZ2lzdGVyKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlU3ViID0gdGhpcy5jYXNlRWRpdC52YWxpZGF0ZShjYXNlRXZlbnREYXRhLCB0aGlzLmN1cnJlbnRQYWdlLmlkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnVucmVnaXN0ZXIobG9hZGluZ1NwaW5uZXJUb2tlbik7XG4gICAgICAgICAgICB0aGlzLmNhc2VFZGl0LmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoanNvbkRhdGEpID0+IHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChqc29uRGF0YSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtRGF0YShqc29uRGF0YSBhcyBDYXNlRXZlbnREYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zYXZlRHJhZnQoKTtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIENhc2VFZGl0UGFnZUNvbXBvbmVudC5zY3JvbGxUb1RvcCgpO1xuICAgICAgLy8gUmVtb3ZlIGFsbCBKdWRpY2lhbFVzZXIgRm9ybUNvbnRyb2xzIHdpdGggdGhlIElEIHN1ZmZpeCBcIl9qdWRpY2lhbFVzZXJDb250cm9sXCIgYmVjYXVzZSB0aGVzZSBhcmUgbm90XG4gICAgICAvLyBpbnRlbmRlZCB0byBiZSBwcmVzZW50IGluIHRoZSBDYXNlIEV2ZW50IGRhdGEgKHRoZXkgYXJlIGFkZGVkIG9ubHkgZm9yIHZhbHVlIHNlbGVjdGlvbiBhbmQgdmFsaWRhdGlvblxuICAgICAgLy8gcHVycG9zZXMpXG4gICAgICB0aGlzLnJlbW92ZUFsbEp1ZGljaWFsVXNlckZvcm1Db250cm9scyh0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLmVkaXRGb3JtKTtcbiAgICB9XG4gICAgQ2FzZUVkaXRQYWdlQ29tcG9uZW50LnNldEZvY3VzVG9Ub3AoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGb3JtRGF0YShqc29uRGF0YTogQ2FzZUV2ZW50RGF0YSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY2FzZUZpZWxkSWQgb2YgT2JqZWN0LmtleXMoanNvbkRhdGEuZGF0YSkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5wYWdlV2l0aEZpZWxkRXhpc3RzKGNhc2VGaWVsZElkKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50VHJpZ2dlckNhc2VGaWVsZHMoY2FzZUZpZWxkSWQsIGpzb25EYXRhLCB0aGlzLmNhc2VFZGl0LmV2ZW50VHJpZ2dlcik7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzVmFsdWUodGhpcy5lZGl0Rm9ybSwgY2FzZUZpZWxkSWQsIGpzb25EYXRhLmRhdGFbY2FzZUZpZWxkSWRdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB3ZSBkbyB0aGUgY2hlY2ssIGJlY2FzdWUgdGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgZXh0ZXJuYWwgc291cmNlXG4gIHB1YmxpYyBwYWdlV2l0aEZpZWxkRXhpc3RzKGNhc2VGaWVsZElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy53aXphcmQuZmluZFdpemFyZFBhZ2UoY2FzZUZpZWxkSWQpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUV2ZW50VHJpZ2dlckNhc2VGaWVsZHMoY2FzZUZpZWxkSWQ6IHN0cmluZywganNvbkRhdGE6IENhc2VFdmVudERhdGEsIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50VHJpZ2dlcj8uY2FzZV9maWVsZHMpIHtcbiAgICAgIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkc1xuICAgICAgICAuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pZCA9PT0gY2FzZUZpZWxkSWQpXG4gICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzQW5PYmplY3QoZWxlbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRKc29uRGF0YU9iamVjdCA9IHRoaXMudXBkYXRlSnNvbkRhdGFPYmplY3QoY2FzZUZpZWxkSWQsIGpzb25EYXRhLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgLi4uZWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgICAgLi4udXBkYXRlZEpzb25EYXRhT2JqZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IGpzb25EYXRhLmRhdGFbY2FzZUZpZWxkSWRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVKc29uRGF0YU9iamVjdChjYXNlRmllbGRJZDogc3RyaW5nLCBqc29uRGF0YTogQ2FzZUV2ZW50RGF0YSwgZWxlbWVudDogQ2FzZUZpZWxkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uRGF0YS5kYXRhW2Nhc2VGaWVsZElkXSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZWxlbWVudC52YWx1ZVtrZXldO1xuICAgICAgY29uc3QganNvbkRhdGFWYWx1ZSA9IGpzb25EYXRhLmRhdGFbY2FzZUZpZWxkSWRdW2tleV07XG4gICAgICBjb25zdCBoYXNFbGVtZW50R290VmFsdWVQcm9wZXJ0eSA9IHRoaXMuaXNBbk9iamVjdChlbGVtZW50VmFsdWUpICYmIGVsZW1lbnRWYWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QganNvbkRhdGFPckVsZW1lbnRWYWx1ZSA9IGpzb25EYXRhVmFsdWU/LnZhbHVlICE9PSBudWxsICYmIGpzb25EYXRhVmFsdWU/LnZhbHVlICE9PSB1bmRlZmluZWQgPyBqc29uRGF0YVZhbHVlIDogZWxlbWVudFZhbHVlO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFtgJHtrZXl9YF06IGhhc0VsZW1lbnRHb3RWYWx1ZVByb3BlcnR5ID8ganNvbkRhdGFPckVsZW1lbnRWYWx1ZSA6IGpzb25EYXRhVmFsdWVcbiAgICAgIH07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FuT2JqZWN0KHByb3BlcnR5OiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSBudWxsO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZvcm1Db250cm9sc1ZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjYXNlRmllbGRJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdGhlQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1snZGF0YSddLmdldChjYXNlRmllbGRJZCk7XG4gICAgaWYgKHRoZUNvbnRyb2wgJiYgdGhlQ29udHJvbFsnc3RhdHVzJ10gIT09ICdESVNBQkxFRCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoZUNvbnRyb2wudmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICYmIHRoZUNvbnRyb2wudmFsdWUubGVuZ3RoID4gdmFsdWUubGVuZ3RoICYmIHRoZUNvbnRyb2xbJ2Nhc2VGaWVsZCddXG4gICAgICAgICYmIHRoZUNvbnRyb2xbJ2Nhc2VGaWVsZCddWydkaXNwbGF5X2NvbnRleHQnXSAmJiB0aGVDb250cm9sWydjYXNlRmllbGQnXVsnZGlzcGxheV9jb250ZXh0J10gPT09ICdPUFRJT05BTCdcbiAgICAgICAgJiYgdGhlQ29udHJvbFsnY2FzZUZpZWxkJ11bJ2ZpZWxkX3R5cGUnXSAmJiB0aGVDb250cm9sWydjYXNlRmllbGQnXVsnZmllbGRfdHlwZSddWyd0eXBlJ10gPT09ICdDb2xsZWN0aW9uJykge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGVDb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc05vdGlmeShlcnJvckNvbnRleHQ6IENhbGxiYWNrRXJyb3JzQ29udGV4dCkge1xuICAgIHRoaXMuY2FzZUVkaXQuaWdub3JlV2FybmluZyA9IGVycm9yQ29udGV4dC5pZ25vcmVXYXJuaW5nO1xuICAgIHRoaXMudHJpZ2dlclRleHQgPSBlcnJvckNvbnRleHQudHJpZ2dlclRleHQ7XG4gIH1cblxuICBwdWJsaWMgbmV4dCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZVRvU3VtbWFyeVBhZ2UoKSkge1xuICAgICAgdGhpcy5jYXNlRWRpdC5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5yZXNldEVycm9ycygpO1xuICAgIHRoaXMuZm9ybVZhbHVlc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQubmV4dCh0aGlzLmN1cnJlbnRQYWdlLmlkKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc2V0RXJyb3JzKCk7XG4gICAgdGhpcy5zYXZlRHJhZnQoKTtcbiAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5wYWdlQ2hhbmdlU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LnByZXZpb3VzKHRoaXMuY3VycmVudFBhZ2UuaWQpO1xuICB9XG5cbiAgcHVibGljIGhhc1ByZXZpb3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0Lmhhc1ByZXZpb3VzKHRoaXMuY3VycmVudFBhZ2UuaWQpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0xpbmtlZENhc2VzSm91cm5leSgpKSB7XG4gICAgICB0aGlzLnJlc2V0TGlua2VkQ2FzZUpvdXJuZXkoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICBpZiAodGhpcy5mb3JtVmFsdWVzQ2hhbmdlZCkge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVPckRpc2NhcmREaWFsb2dDb21wb25lbnQsIHRoaXMuZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZBZnRlckNsb3NlZFN1YiA9IGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdEaXNjYXJkJykge1xuICAgICAgICAgICAgdGhpcy5kaXNjYXJkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICdTYXZlJykge1xuICAgICAgICAgICAgY29uc3QgZHJhZnRDYXNlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnNhbml0aXNlKHRoaXMuZWRpdEZvcm0udmFsdWUpIGFzIENhc2VFdmVudERhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pID09PSAndmlld0RyYWZ0Jykge1xuICAgICAgICAgICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KHsgc3RhdHVzOiBDYXNlRWRpdFBhZ2VDb21wb25lbnQuUkVTVU1FRF9GT1JNX1NBVkUsIGRhdGE6IGRyYWZ0Q2FzZUV2ZW50RGF0YSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoeyBzdGF0dXM6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5ORVdfRk9STV9TQVZFLCBkYXRhOiBkcmFmdENhc2VFdmVudERhdGEgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzY2FyZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0TGlua2VkQ2FzZUpvdXJuZXkoKTogdm9pZCB7XG4gICAgLy8gaWYgdGhlIHVzZXIgY2FuY2VscyB0aGUgam91cm5leSB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBkYXRhXG4gICAgY29uc3QgbGlua2VkQ2FzZXNUYWIgPSB0aGlzLmNhc2VFZGl0Py5jYXNlRGV0YWlscz8udGFicz8uZmluZCgodGFiKSA9PlxuICAgICAgdGFiPy5maWVsZHM/LnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gJ2Nhc2VMaW5rcycpXG4gICAgKT8uZmllbGRzPy5bMF0gPz8gbnVsbDtcbiAgICBjb25zdCBpbml0YWxMaW5rcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmluaXRpYWxDYXNlTGlua1JlZnM7XG4gICAgaWYgKGxpbmtlZENhc2VzVGFiICYmIGxpbmtlZENhc2VzVGFiPy52YWx1ZT8ubGVuZ3RoICE9PSBpbml0YWxMaW5rcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbml0aWFsQ2FzZVJlZnMgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5pbml0aWFsQ2FzZUxpbmtSZWZzO1xuICAgICAgbGlua2VkQ2FzZXNUYWIudmFsdWUgPSBsaW5rZWRDYXNlc1RhYi52YWx1ZT8uZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBpbml0aWFsQ2FzZVJlZnM/LmluY2x1ZGVzKGl0ZW0udmFsdWUuQ2FzZVJlZmVyZW5jZSlcbiAgICAgICk7XG4gICAgICBsaW5rZWRDYXNlc1RhYi5mb3JtYXR0ZWRfdmFsdWUgPSBsaW5rZWRDYXNlc1RhYi5mb3JtYXR0ZWRfdmFsdWU/LmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgaW5pdGlhbENhc2VSZWZzPy5pbmNsdWRlcyhpdGVtLnZhbHVlPy5DYXNlUmVmZXJlbmNlKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGxpbmtlZENhc2VzVGFiICYmIChsaW5rZWRDYXNlc1RhYj8uZm9ybWF0dGVkX3ZhbHVlPy5sZW5ndGggIT09IGluaXRhbExpbmtzPy5sZW5ndGgpKSB7XG4gICAgICBsaW5rZWRDYXNlc1RhYi52YWx1ZSA9IGxpbmtlZENhc2VzVGFiLmZvcm1hdHRlZF92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UucmVzZXRMaW5rZWRDYXNlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyA/IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuY2FzZV9pZCA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMgJiYgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZSAmJlxuICAgICAgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5ID8gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5IDogJycpO1xuICB9XG5cbiAgcHVibGljIGdldENhbmNlbFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQgPyAnUmV0dXJuIHRvIGNhc2UgbGlzdCcgOiAnQ2FuY2VsJztcbiAgfVxuXG4gIHByaXZhdGUgY2FuTmF2aWdhdGVUb1N1bW1hcnlQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5leHRQYWdlID0gdGhpcy5jYXNlRWRpdC5nZXROZXh0UGFnZSh7XG4gICAgICBjdXJyZW50UGFnZUlkOiB0aGlzLmN1cnJlbnRQYWdlPy5pZCxcbiAgICAgIHdpemFyZDogdGhpcy53aXphcmQsXG4gICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgZm9ybTogdGhpcy5lZGl0Rm9ybVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSB8fCAhIW5leHRQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmlnZ2VyVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHRCYXNlZE9uQ2FuU2F2ZURyYWZ0ID0gdGhpcy5ldmVudFRyaWdnZXI/LmNhbl9zYXZlX2RyYWZ0XG4gICAgICA/IENhc2VFZGl0UGFnZUNvbXBvbmVudC5UUklHR0VSX1RFWFRfU0FWRVxuICAgICAgOiBDYXNlRWRpdFBhZ2VDb21wb25lbnQuVFJJR0dFUl9URVhUX1NUQVJUO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FuTmF2aWdhdGVUb1N1bW1hcnlQYWdlKClcbiAgICAgID8gdGV4dEJhc2VkT25DYW5TYXZlRHJhZnRcbiAgICAgIDogJ1N1Ym1pdCc7XG4gIH1cblxuICBwcml2YXRlIGRpc2NhcmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoQ2FzZUVkaXRDb21wb25lbnQuT1JJR0lOX1FVRVJZX1BBUkFNKSA9PT0gJ3ZpZXdEcmFmdCcpIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoeyBzdGF0dXM6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5SRVNVTUVEX0ZPUk1fRElTQ0FSRCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCh7IHN0YXR1czogQ2FzZUVkaXRQYWdlQ29tcG9uZW50Lk5FV19GT1JNX0RJU0NBUkQgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcikge1xuICAgIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jYXNlRWRpdC5lcnJvciA9IGVycm9yO1xuICAgIHRoaXMuY2FzZUVkaXQuY2FsbGJhY2tFcnJvcnNTdWJqZWN0Lm5leHQodGhpcy5jYXNlRWRpdC5lcnJvcik7XG4gICAgdGhpcy5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dCh0aGlzLmNhc2VFZGl0LmVycm9yKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmVycm9yLmRldGFpbHMpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9yU2VydmljZVxuICAgICAgICAubWFwRmllbGRFcnJvcnModGhpcy5jYXNlRWRpdC5lcnJvci5kZXRhaWxzLmZpZWxkX2Vycm9ycywgdGhpcy5lZGl0Rm9ybT8uY29udHJvbHM/LlsnZGF0YSddIGFzIEZvcm1Hcm91cCwgJ3ZhbGlkYXRpb24nKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZUVycm9yICcsIGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFcnJvcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5jYXNlRWRpdC5pZ25vcmVXYXJuaW5nID0gZmFsc2U7XG4gICAgdGhpcy50cmlnZ2VyVGV4dCA9IHRoaXMuZ2V0VHJpZ2dlclRleHQoKTtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYWxsYmFja0Vycm9yc1N1YmplY3QpIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FsbGJhY2tFcnJvcnNTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRHJhZnQoKSB7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICBjb25zdCBkcmFmdENhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2UodGhpcy5lZGl0Rm9ybS52YWx1ZSkgYXMgQ2FzZUV2ZW50RGF0YTtcbiAgICAgIGRyYWZ0Q2FzZUV2ZW50RGF0YS5ldmVudF90b2tlbiA9IHRoaXMuZXZlbnRUcmlnZ2VyLmV2ZW50X3Rva2VuO1xuICAgICAgZHJhZnRDYXNlRXZlbnREYXRhLmlnbm9yZV93YXJuaW5nID0gdGhpcy5jYXNlRWRpdC5pZ25vcmVXYXJuaW5nO1xuICAgICAgdGhpcy5zYXZlRHJhZnRTdWIgPSB0aGlzLmNhc2VFZGl0LnNhdmVEcmFmdChkcmFmdENhc2VFdmVudERhdGEpLnN1YnNjcmliZShcbiAgICAgICAgKGRyYWZ0KSA9PiB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2lkID0gRFJBRlRfUFJFRklYICsgZHJhZnQuaWQsIGVycm9yID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FzZUZpZWxkcygpOiBDYXNlRmllbGRbXSB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpIHtcbiAgICAgIHJldHVybiBGaWVsZHNVdGlscy5nZXRDYXNlRmllbGRzKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FzZUZpZWxkc0Zyb21DdXJyZW50QW5kUHJldmlvdXNQYWdlcygpOiBDYXNlRmllbGRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBDYXNlRmllbGRbXSA9IFtdO1xuICAgIHRoaXMud2l6YXJkLnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XG4gICAgICBpZiAocGFnZS5vcmRlciA8PSB0aGlzLmN1cnJlbnRQYWdlLm9yZGVyKSB7XG4gICAgICAgIHBhZ2UuY2FzZV9maWVsZHMuZm9yRWFjaChmaWVsZCA9PiByZXN1bHQucHVzaChmaWVsZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRDYXNlRXZlbnREYXRhKGZyb21QcmV2aW91c1BhZ2U/OiBib29sZWFuKTogQ2FzZUV2ZW50RGF0YSB7XG4gICAgY29uc3QgZm9ybVZhbHVlOiBvYmplY3QgPSB0aGlzLmVkaXRGb3JtLnZhbHVlO1xuXG4gICAgLy8gR2V0IHRoZSBDYXNlRXZlbnREYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLlxuICAgIGNvbnN0IHBhZ2VGaWVsZHM6IENhc2VGaWVsZFtdID0gdGhpcy5jdXJyZW50UGFnZS5jYXNlX2ZpZWxkcztcbiAgICBjb25zdCBwYWdlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5nZXRGaWx0ZXJlZENhc2VFdmVudERhdGEocGFnZUZpZWxkcywgZm9ybVZhbHVlLCB0cnVlKTtcblxuICAgIC8vIEdldCB0aGUgQ2FzZUV2ZW50RGF0YSBmb3IgdGhlIGVudGlyZSBmb3JtIChhbGwgcGFnZXMpLlxuICAgIGNvbnN0IGFsbENhc2VGaWVsZHMgPSB0aGlzLmdldENhc2VGaWVsZHNGcm9tQ3VycmVudEFuZFByZXZpb3VzUGFnZXMoKTtcbiAgICBjb25zdCBmb3JtRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhID0gdGhpcy5nZXRGaWx0ZXJlZENhc2VFdmVudERhdGEoYWxsQ2FzZUZpZWxkcywgZm9ybVZhbHVlLCBmYWxzZSwgdHJ1ZSwgZnJvbVByZXZpb3VzUGFnZSk7XG5cbiAgICAvLyBOb3cgaGVyZSdzIHRoZSBrZXkgdGhpbmcgLSB0aGUgcGFnZUV2ZW50RGF0YSBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgYGV2ZW50X2RhdGFgIGFuZFxuICAgIC8vIHdlIG5lZWQgVEhBVCB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIGVudGlyZSBmb3JtOiBgZm9ybUV2ZW50RGF0YS5kYXRhYC5cbiAgICBwYWdlRXZlbnREYXRhLmV2ZW50X2RhdGEgPSBmb3JtRXZlbnREYXRhLmRhdGE7XG5cbiAgICAvLyBGaW5hbGlzZSB0aGUgQ2FzZUV2ZW50RGF0YSBvYmplY3QuXG4gICAgcGFnZUV2ZW50RGF0YS5ldmVudF90b2tlbiA9IHRoaXMuZXZlbnRUcmlnZ2VyLmV2ZW50X3Rva2VuO1xuICAgIHBhZ2VFdmVudERhdGEuaWdub3JlX3dhcm5pbmcgPSB0aGlzLmNhc2VFZGl0Lmlnbm9yZVdhcm5pbmc7XG5cbiAgICAvLyBGaW5hbGx5LCB0cnkgdG8gc2V0IHVwIHRoZSBjYXNlX3JlZmVyZW5jZS5cbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcGFnZUV2ZW50RGF0YS5jYXNlX3JlZmVyZW5jZSA9IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuY2FzZV9pZDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIG5vdyBob3BlZnVsbHkgc2FuZSBDYXNlRXZlbnREYXRhLlxuICAgIHJldHVybiBwYWdlRXZlbnREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEFic3RyYWN0ZWQgdGhpcyBtZXRob2QgZnJvbSBidWlsZENhc2VFdmVudERhdGEgdG8gcmVtb3ZlIGR1cGxpY2F0aW9uLlxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgZmllbGRzIHRvIGZpbHRlciB0aGUgZGF0YSBieS5cbiAgICogQHBhcmFtIGZvcm1WYWx1ZSBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGZvcm0uXG4gICAqIEBwYXJhbSBjbGVhckVtcHR5IFdoZXRoZXIgb3Igbm90IHRvIGNsZWFyIG91dCBlbXB0eSB2YWx1ZXMuXG4gICAqIEBwYXJhbSBjbGVhck5vbkNhc2UgV2hldGhlciBvciBub3QgdG8gY2xlYXIgb3V0IGZpZWxkcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgY2FzZS5cbiAgICogQHJldHVybnMgQ2FzZUV2ZW50RGF0YSBmb3IgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJlZENhc2VFdmVudERhdGEoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1WYWx1ZTogb2JqZWN0LCBjbGVhckVtcHR5ID0gZmFsc2UsXG4gICAgY2xlYXJOb25DYXNlID0gZmFsc2UsIGZyb21QcmV2aW91c1BhZ2UgPSBmYWxzZSk6IENhc2VFdmVudERhdGEge1xuICAgIC8vIEdldCB0aGUgZGF0YSBmb3IgdGhlIGZpZWxkcyBzcGVjaWZpZWQuXG4gICAgbGV0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UuZmlsdGVyQ3VycmVudFBhZ2VGaWVsZHMoY2FzZUZpZWxkcywgZm9ybVZhbHVlKTtcblxuICAgIC8vIFNvcnQgb3V0IHRoZSBkeW5hbWljIGxpc3RzLlxuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5zYW5pdGlzZUR5bmFtaWNMaXN0cyhjYXNlRmllbGRzLCBmb3JtRmllbGRzKTtcblxuICAgIC8vIHdlIG9ubHkgd2FudCB0byBlbnN1cmUgdGhpcyB3aGVuIHRoZSBmaWVsZF90eXBlIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IGZpZWxkc1xuICAgIGlmIChjYXNlRmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5maWVsZF90eXBlPy50eXBlID09PSAnQ29sbGVjdGlvbicgJiYgZmllbGQuZmllbGRfdHlwZT8uY29sbGVjdGlvbl9maWVsZF90eXBlPy50eXBlID09PSAnQ29tcGxleCcpKSB7XG4gICAgICBmb3JtRmllbGRzID0gdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLmNoZWNrVmFsdWVzU2V0SW5Db2xsZWN0aW9uKGZvcm1GaWVsZHMsIGNhc2VGaWVsZHMpO1xuICAgIH1cblxuICAgIC8vIEdldCBob2xkIG9mIHRoZSBDYXNlRXZlbnREYXRhLlxuICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2UoZm9ybUZpZWxkcykgYXMgQ2FzZUV2ZW50RGF0YTtcblxuICAgIC8vIGRlbGV0ZSBmaWVsZHMgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSBjYXNlIGV2ZW50IGpvdXJuZXkgd2l6YXJkIHBhZ2VzIGNhc2UgZmllbGRzXG4gICAgdGhpcy52YWxpZFBhZ2VMaXN0Q2FzZUZpZWxkc1NlcnZpY2UuZGVsZXRlTm9uVmFsaWRhdGVkRmllbGRzKHRoaXMuY2FzZUVkaXQudmFsaWRQYWdlTGlzdCwgY2FzZUV2ZW50RGF0YS5kYXRhLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgZnJvbVByZXZpb3VzUGFnZSwgdGhpcy5lZGl0Rm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcblxuICAgIC8vIFRpZHkgaXQgdXAgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCBjYXNlRmllbGRzLCBjbGVhckVtcHR5LCBjbGVhck5vbkNhc2UsXG4gICAgICBmcm9tUHJldmlvdXNQYWdlLCB0aGlzLmN1cnJlbnRQYWdlLmNhc2VfZmllbGRzKTtcblxuICAgIHJldHVybiBjYXNlRXZlbnREYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ2FzZUVkaXREYXRhU2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0Q2FzZURldGFpbHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldENhc2VFdmVudFRyaWdnZXJOYW1lKHRoaXMuZXZlbnRUcmlnZ2VyLm5hbWUpO1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5zZXRDYXNlVGl0bGUodGhpcy5nZXRDYXNlVGl0bGUoKSk7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldENhc2VFZGl0Rm9ybSh0aGlzLmVkaXRGb3JtKTtcbiAgICB0aGlzLmNhc2VGb3JtVmFsaWRhdGlvbkVycm9yc1N1YiA9IHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlRm9ybVZhbGlkYXRpb25FcnJvcnMkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsaWRhdGlvbkVycm9ycykgPT4gdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGlvbkVycm9yc1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJweFRyYW5zbGF0ZVBpcGVBcmdzKGZpZWxkTGFiZWw6IHN0cmluZyk6IHsgRklFTERMQUJFTDogc3RyaW5nIH0gfCBudWxsIHtcbiAgICByZXR1cm4gZmllbGRMYWJlbCA/ICh7IEZJRUxETEFCRUw6IGZpZWxkTGFiZWwgfSkgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZChldmVudENhbkJlQ29tcGxldGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5vbkV2ZW50Q2FuQmVDb21wbGV0ZWQoe1xuICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgIGV2ZW50Q2FuQmVDb21wbGV0ZWQsXG4gICAgICBjYXNlRGV0YWlsczogdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyxcbiAgICAgIGZvcm06IHRoaXMuZWRpdEZvcm0sXG4gICAgICBzdWJtaXQ6IHRoaXMuY2FzZUVkaXQuc3VibWl0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBbGxKdWRpY2lhbFVzZXJGb3JtQ29udHJvbHMocGFnZTogV2l6YXJkUGFnZSwgZWRpdEZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHBhZ2UuY2FzZV9maWVsZHMuZm9yRWFjaChjYXNlRmllbGQgPT4ge1xuICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydKdWRpY2lhbFVzZXInXSkpIHtcbiAgICAgICAgKGVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKGAke2Nhc2VGaWVsZC5pZH1fanVkaWNpYWxVc2VyQ29udHJvbGApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFBhZ2VcIj5cbiAgPGgxICpuZ0lmPVwiIWN1cnJlbnRQYWdlLmxhYmVsXCIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj57e2V2ZW50VHJpZ2dlci5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L2gxPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFBhZ2UubGFiZWxcIj5cbiAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWNhcHRpb24tbFwiPnt7IGV2ZW50VHJpZ2dlci5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+e3tjdXJyZW50UGFnZS5sYWJlbCB8IHJweFRyYW5zbGF0ZX19PC9oMT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLUNhc2UgSUQgb3IgVGl0bGUgLS0+XG48ZGl2ICpuZ0lmPVwiZ2V0Q2FzZVRpdGxlKCk7IHRoZW4gdGl0bGVCbG9jazsgZWxzZSBpZEJsb2NrXCI+PC9kaXY+XG48bmctdGVtcGxhdGUgI3RpdGxlQmxvY2s+XG4gIDxjY2QtbWFya2Rvd24gW2NvbnRlbnRdPVwiZ2V0Q2FzZVRpdGxlKCkgfCBjY2RDYXNlVGl0bGU6IGNhc2VGaWVsZHMgOiBlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCI+PC9jY2QtbWFya2Rvd24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNpZEJsb2NrPlxuICA8aDIgKm5nSWY9XCJnZXRDYXNlSWQoKVwiIGNsYXNzPVwiaGVhZGluZy1oMlwiPiN7eyBnZXRDYXNlSWQoKSB8IGNjZENhc2VSZWZlcmVuY2UgfX08L2gyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICB7eydUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbkVycm9yIG9mIHZhbGlkYXRpb25FcnJvcnNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQodmFsaWRhdGlvbkVycm9yLmlkKVwiIChrZXl1cC5lbnRlcik9XCJuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KHZhbGlkYXRpb25FcnJvci5pZClcIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JcIj5cbiAgICAgICAgICB7eyB2YWxpZGF0aW9uRXJyb3IubWVzc2FnZSB8IHJweFRyYW5zbGF0ZTogZ2V0UnB4VHJhbnNsYXRlUGlwZUFyZ3ModmFsaWRhdGlvbkVycm9yLmxhYmVsIHwgcnB4VHJhbnNsYXRlKTogbnVsbCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjY2QtY2FzZS1lZGl0LWdlbmVyaWMtZXJyb3JzIFtlcnJvcl09XCJjYXNlRWRpdC5lcnJvclwiPjwvY2NkLWNhc2UtZWRpdC1nZW5lcmljLWVycm9ycz5cblxuPGNjZC1jYWxsYmFjay1lcnJvcnNcbiAgW3RyaWdnZXJUZXh0Q29udGludWVdPVwidHJpZ2dlclRleHRTdGFydFwiXG4gIFt0cmlnZ2VyVGV4dElnbm9yZV09XCJ0cmlnZ2VyVGV4dElnbm9yZVdhcm5pbmdzXCJcbiAgW2NhbGxiYWNrRXJyb3JzU3ViamVjdF09XCJjYXNlRWRpdC5jYWxsYmFja0Vycm9yc1N1YmplY3RcIlxuICAoY2FsbGJhY2tFcnJvcnNDb250ZXh0KT1cImNhbGxiYWNrRXJyb3JzTm90aWZ5KCRldmVudClcIj5cbjwvY2NkLWNhbGxiYWNrLWVycm9ycz5cbjxkaXYgY2xhc3M9XCJ3aWR0aC01MFwiPlxuICA8Zm9ybSAqbmdJZj1cImN1cnJlbnRQYWdlXCIgY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybVwiIChzdWJtaXQpPVwibmV4dFN0ZXAoKVwiPlxuICAgIDxmaWVsZHNldCBpZD1cImZpZWxkc2V0LWNhc2UtZGF0YVwiPlxuICAgICAgPGxlZ2VuZCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9sZWdlbmQ+XG4gICAgICA8IS0tIHNpbmdsZSBjb2x1bW4gLS0+XG4gICAgICA8Y2NkLWNhc2UtZWRpdC1mb3JtIGlkPSdjYXNlRWRpdEZvcm0nICpuZ0lmPVwiIWN1cnJlbnRQYWdlLmlzTXVsdGlDb2x1bW4oKVwiIFtmaWVsZHNdPVwiY3VycmVudFBhZ2UuZ2V0Q29sMUZpZWxkcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZHNdPVwiY2FzZUZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlQ2hhbmdlU3ViamVjdF09XCJwYWdlQ2hhbmdlU3ViamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZXNDaGFuZ2VkKT1cImFwcGx5VmFsdWVzQ2hhbmdlZCgkZXZlbnQpXCI+PC9jY2QtY2FzZS1lZGl0LWZvcm0+XG4gICAgICA8IS0tIHR3byBjb2x1bW5zIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRQYWdlLmlzTXVsdGlDb2x1bW4oKVwiIGNsYXNzPVwiZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi10d28tdGhpcmRzIHJpZ2h0Qm9yZGVyU2VwYXJhdG9yXCI+XG4gICAgICAgICAgPGNjZC1jYXNlLWVkaXQtZm9ybSBpZD0nY2FzZUVkaXRGb3JtMScgW2ZpZWxkc109XCJjdXJyZW50UGFnZS5nZXRDb2wxRmllbGRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZHNdPVwiY2FzZUZpZWxkc1wiPjwvY2NkLWNhc2UtZWRpdC1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1vbmUtdGhpcmRcIj5cbiAgICAgICAgICA8Y2NkLWNhc2UtZWRpdC1mb3JtIGlkPSdjYXNlRWRpdEZvcm0yJyBbZmllbGRzXT1cImN1cnJlbnRQYWdlLmdldENvbDJGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkc109XCJjYXNlRmllbGRzXCI+PC9jY2QtY2FzZS1lZGl0LWZvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtcmVsYXRlZFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b1ByZXZpb3VzUGFnZSgpXCIgKm5nSWY9XCIhaXNBdFN0YXJ0KClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCI+XG4gICAgICAgIHt7J1ByZXZpb3VzJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmcoKVwiPnt7dHJpZ2dlclRleHQgfCBycHhUcmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJjYW5jZWxcIj48YSAoY2xpY2spPVwiY2FuY2VsKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+e3tnZXRDYW5jZWxUZXh0KCkgfCBycHhUcmFuc2xhdGV9fTwvYT48L3A+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG48Y2NkLWNhc2UtZXZlbnQtY29tcGxldGlvbiAqbmdJZj1cImNhc2VFZGl0LmlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWRcIlxuICBbZXZlbnRDb21wbGV0aW9uUGFyYW1zXT1cImNhc2VFZGl0LmV2ZW50Q29tcGxldGlvblBhcmFtc1wiXG4gIChldmVudENhbkJlQ29tcGxldGVkKT1cIm9uRXZlbnRDYW5CZUNvbXBsZXRlZCgkZXZlbnQpXCI+XG48L2NjZC1jYXNlLWV2ZW50LWNvbXBsZXRpb24+XG4iXX0=
@@ -80,7 +80,7 @@ export class QueryWriteRespondToQueryComponent {
80
80
  queryItemId;
81
81
  caseDetails;
82
82
  queryResponseStatus;
83
- queryItemDisplay;
83
+ queryListData;
84
84
  hasRespondedToQuery = false;
85
85
  static QUERY_ITEM_RESPOND = '3';
86
86
  static QUERY_ITEM_FOLLOWUP = '4';
@@ -122,22 +122,11 @@ export class QueryWriteRespondToQueryComponent {
122
122
  return;
123
123
  }
124
124
  const queryWithChildren = new QueryListData(this.caseQueriesCollections[0]);
125
- let filteredQuery = [];
126
- if (this.queryItemId === QueryWriteRespondToQueryComponent.QUERY_ITEM_RESPOND) {
127
- if (matchingMessage?.parentId) {
128
- filteredQuery = queryWithChildren.queries.filter((query) => query?.id === matchingMessage.parentId);
129
- }
130
- else {
131
- filteredQuery = queryWithChildren.queries.filter((query) => query?.id === matchingMessage.id);
132
- }
133
- this.queryItemDisplay = new QueryListItem();
134
- Object.assign(this.queryItemDisplay, matchingMessage);
135
- this.queryItem = this.queryItemDisplay;
136
- }
137
- else {
138
- filteredQuery = queryWithChildren.queries.filter((query) => query?.id === matchingMessage.id);
139
- }
140
- this.queryResponseStatus = filteredQuery[0]?.responseStatus;
125
+ const targetId = this.queryItemId === QueryWriteRespondToQueryComponent.QUERY_ITEM_RESPOND
126
+ ? (matchingMessage?.parentId || matchingMessage?.id)
127
+ : matchingMessage?.id;
128
+ this.queryListData = queryWithChildren?.queries.find(query => query?.id === targetId);
129
+ this.queryResponseStatus = this.queryListData?.responseStatus;
141
130
  }
142
131
  hasResponded(value) {
143
132
  this.hasRespondedToQuery = value;
@@ -168,14 +157,14 @@ export class QueryWriteRespondToQueryComponent {
168
157
  i0.ɵɵadvance(3);
169
158
  i0.ɵɵproperty("caseDetails", ctx.caseDetails);
170
159
  i0.ɵɵadvance(2);
171
- i0.ɵɵproperty("query", ctx.queryItem)("queryResponseStatus", ctx.queryResponseStatus);
160
+ i0.ɵɵproperty("query", ctx.queryListData)("queryResponseStatus", ctx.queryResponseStatus);
172
161
  i0.ɵɵadvance();
173
162
  i0.ɵɵproperty("ngIf", ctx.showForm);
174
163
  } }, styles: [".query-respond[_ngcontent-%COMP%]{width:100%;max-width:720px}"] });
175
164
  }
176
165
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryWriteRespondToQueryComponent, [{
177
166
  type: Component,
178
- args: [{ selector: 'ccd-query-write-respond-to-query', template: "<div class=\"govuk-!-margin-bottom-6\">\n <div class=\"govuk-!-margin-bottom-6\">\n <div class=\"govuk-caption-l\">{{ 'Respond to a query' | rpxTranslate }}</div>\n <h1 class=\"govuk-heading-l govuk-!-margin-bottom-0\">{{ 'Query details' | rpxTranslate }}</h1>\n </div>\n\n <div class=\"govuk-!-margin-bottom-4\">\n <ccd-query-case-details-header [caseDetails]=\"caseDetails\"></ccd-query-case-details-header>\n </div>\n\n <div>\n <ccd-query-details [query]=\"queryItem\"\n [queryResponseStatus]=\"queryResponseStatus\"\n (hasResponded)=\"hasResponded($event)\"></ccd-query-details>\n </div>\n</div>\n<div class=\"query-respond\" *ngIf=\"showForm\">\n <div *ngIf=\"!hasRespondedToQuery\">\n <h1 class=\"govuk-heading-m\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Respond to a query' : 'Ask a follow-up question' | rpxTranslate }}\n </h1>\n\n <div [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group body-textarea\"\n [class.govuk-form-group--error]=\"submitted && formGroup.get('body')?.hasError('required')\">\n <div class=\"govuk-label-wrapper\">\n <label class=\"govuk-label govuk-label--m govuk-!-font-weight-bold\" for=\"body\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Response detail' : 'Query Body' | rpxTranslate }}\n </label>\n </div>\n <p id=\"body-error\" class=\"govuk-error-message\"\n *ngIf=\"submitted && formGroup.get('body')?.hasError('required')\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate }} </span>{{ queryCreateContext === queryCreateContextEnum.RESPOND ? raiseQueryErrorMessages.RESPOND_QUERY_BODY : raiseQueryErrorMessages.QUERY_BODY | rpxTranslate }}\n </p>\n <textarea [formControlName]=\"'body'\" class=\"govuk-textarea\"\n [class.govuk-textarea--error]=\"submitted && formGroup.get('body')?.hasError('required')\" id=\"body\"\n name=\"body\" rows=\"5\" aria-describedby=\"body-hint body-error\">\n </textarea>\n </div>\n </div>\n </div>\n</div>\n", styles: [".query-respond{width:100%;max-width:720px}\n"] }]
167
+ args: [{ selector: 'ccd-query-write-respond-to-query', template: "<div class=\"govuk-!-margin-bottom-6\">\n <div class=\"govuk-!-margin-bottom-6\">\n <div class=\"govuk-caption-l\">{{ 'Respond to a query' | rpxTranslate }}</div>\n <h1 class=\"govuk-heading-l govuk-!-margin-bottom-0\">{{ 'Query details' | rpxTranslate }}</h1>\n </div>\n\n <div class=\"govuk-!-margin-bottom-4\">\n <ccd-query-case-details-header [caseDetails]=\"caseDetails\"></ccd-query-case-details-header>\n </div>\n\n <div>\n <ccd-query-details [query]=\"queryListData\"\n [queryResponseStatus]=\"queryResponseStatus\"\n (hasResponded)=\"hasResponded($event)\"></ccd-query-details>\n </div>\n</div>\n<div class=\"query-respond\" *ngIf=\"showForm\">\n <div *ngIf=\"!hasRespondedToQuery\">\n <h1 class=\"govuk-heading-m\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Respond to a query' : 'Ask a follow-up question' | rpxTranslate }}\n </h1>\n\n <div [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group body-textarea\"\n [class.govuk-form-group--error]=\"submitted && formGroup.get('body')?.hasError('required')\">\n <div class=\"govuk-label-wrapper\">\n <label class=\"govuk-label govuk-label--m govuk-!-font-weight-bold\" for=\"body\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Response detail' : 'Query Body' | rpxTranslate }}\n </label>\n </div>\n <p id=\"body-error\" class=\"govuk-error-message\"\n *ngIf=\"submitted && formGroup.get('body')?.hasError('required')\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate }} </span>{{ queryCreateContext === queryCreateContextEnum.RESPOND ? raiseQueryErrorMessages.RESPOND_QUERY_BODY : raiseQueryErrorMessages.QUERY_BODY | rpxTranslate }}\n </p>\n <textarea [formControlName]=\"'body'\" class=\"govuk-textarea\"\n [class.govuk-textarea--error]=\"submitted && formGroup.get('body')?.hasError('required')\" id=\"body\"\n name=\"body\" rows=\"5\" aria-describedby=\"body-hint body-error\">\n </textarea>\n </div>\n </div>\n </div>\n</div>\n", styles: [".query-respond{width:100%;max-width:720px}\n"] }]
179
168
  }], () => [{ type: i1.CaseNotifier }, { type: i2.ActivatedRoute }], { queryItem: [{
180
169
  type: Input
181
170
  }], formGroup: [{
@@ -192,4 +181,4 @@ export class QueryWriteRespondToQueryComponent {
192
181
  type: Output
193
182
  }] }); })();
194
183
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryWriteRespondToQueryComponent, { className: "QueryWriteRespondToQueryComponent", filePath: "lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.ts", lineNumber: 14 }); })();
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9xdWVyeS1tYW5hZ2VtZW50L2NvbXBvbmVudHMvcXVlcnktd3JpdGUvcXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS9xdWVyeS13cml0ZS1yZXNwb25kLXRvLXF1ZXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS13cml0ZS9xdWVyeS13cml0ZS1yZXNwb25kLXRvLXF1ZXJ5L3F1ZXJ5LXdyaXRlLXJlc3BvbmQtdG8tcXVlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBeUIsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztJQzBCaEcs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Q2xCLGVBQW9DO1lBQXBDLDJEQUFvQztZQUl6RCxlQUEyQjtZQUEzQiw2Q0FBMkI7WUFJdkMsZUFBbUI7WUFDcEMsQUFEaUIscUNBQW1CLGdEQUNPO1lBSXJCLGNBQWM7WUFBZCxtQ0FBYzs7O2lGREg3QixpQ0FBaUM7Y0FON0MsU0FBUzsyQkFDRSxrQ0FBa0M7MEVBTTVCLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1Usa0JBQWtCO2tCQUFqQyxLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLHNCQUFzQjtrQkFBckMsS0FBSztZQUNVLFFBQVE7a0JBQXZCLEtBQUs7WUFDVyx1QkFBdUI7a0JBQXZDLE1BQU07O2tGQVBJLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzJztcbmltcG9ydCB7IFJhaXNlUXVlcnlFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBDYXNlUXVlcmllc0NvbGxlY3Rpb24sIFF1ZXJ5Q3JlYXRlQ29udGV4dCwgUXVlcnlMaXN0RGF0YSwgUXVlcnlMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtcXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS13cml0ZS1yZXNwb25kLXRvLXF1ZXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS5jb21wb25lbnQuc2NzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgUXVlcnlXcml0ZVJlc3BvbmRUb1F1ZXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwdWJsaWMgcXVlcnlJdGVtOiBRdWVyeUxpc3RJdGVtO1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBxdWVyeUNyZWF0ZUNvbnRleHQ6IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgQElucHV0KCkgcHVibGljIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY2FzZVF1ZXJpZXNDb2xsZWN0aW9uczogQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uW107XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93Rm9ybTtcbiAgQE91dHB1dCgpIHB1YmxpYyBoYXNSZXNwb25kZWRUb1F1ZXJ5VGFzazogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtID0gUXVlcnlDcmVhdGVDb250ZXh0O1xuICBwdWJsaWMgcmVhZG9ubHkgcmFpc2VRdWVyeUVycm9yTWVzc2FnZXMgPSBSYWlzZVF1ZXJ5RXJyb3JNZXNzYWdlO1xuICBwdWJsaWMgY2FzZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVyeUl0ZW1JZDogc3RyaW5nO1xuICBwdWJsaWMgY2FzZURldGFpbHM7XG4gIHB1YmxpYyBxdWVyeVJlc3BvbnNlU3RhdHVzOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVyeUl0ZW1EaXNwbGF5OiBRdWVyeUxpc3RJdGVtO1xuXG4gIHB1YmxpYyBoYXNSZXNwb25kZWRUb1F1ZXJ5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUVVFUllfSVRFTV9SRVNQT05EID0gJzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBRVUVSWV9JVEVNX0ZPTExPV1VQID0gJzQnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2FzZU5vdGlmaWVyOiBDYXNlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlJdGVtSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5xaWQ7XG4gICAgdGhpcy5jYXNlTm90aWZpZXIuY2FzZVZpZXcucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNhc2VEZXRhaWxzKSA9PiB7XG4gICAgICAgIHRoaXMuY2FzZUlkID0gY2FzZURldGFpbHM/LmNhc2VfaWQgPz8gJyc7XG4gICAgICAgIHRoaXMuY2FzZURldGFpbHMgPSBjYXNlRGV0YWlscztcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXRyaWV2aW5nIGNhc2UgZGV0YWlsczonLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zIHx8IHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBTaWxlbnQgcmV0dXJuIOKAkyB0aGlzIGlzIG5vdCBhbiBlcnJvci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1swXSkge1xuICAgICAgY29uc29sZS5lcnJvcignY2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1swXSBpcyB1bmRlZmluZWQhJywgdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcz8uZGF0YWlkO1xuICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1lc3NhZ2VJZCBmb3VuZCBpbiByb3V0ZSBwYXJhbXM6JywgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zXG4gICAgICAuZmxhdE1hcCgoY2FzZURhdGEpID0+IGNhc2VEYXRhPy5jYXNlTWVzc2FnZXMgfHwgW10pO1xuXG4gICAgY29uc3QgbWF0Y2hpbmdNZXNzYWdlID0gYWxsTWVzc2FnZXMuZmluZChcbiAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlPy52YWx1ZT8uaWQgPT09IG1lc3NhZ2VJZFxuICAgICk/LnZhbHVlO1xuXG4gICAgaWYgKCFtYXRjaGluZ01lc3NhZ2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0Y2hpbmcgbWVzc2FnZSBmb3VuZCBmb3IgSUQ6JywgbWVzc2FnZUlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVdpdGhDaGlsZHJlbiA9IG5ldyBRdWVyeUxpc3REYXRhKHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1swXSk7XG5cbiAgICBsZXQgZmlsdGVyZWRRdWVyeSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucXVlcnlJdGVtSWQgPT09IFF1ZXJ5V3JpdGVSZXNwb25kVG9RdWVyeUNvbXBvbmVudC5RVUVSWV9JVEVNX1JFU1BPTkQpIHtcbiAgICAgIGlmIChtYXRjaGluZ01lc3NhZ2U/LnBhcmVudElkKSB7XG4gICAgICAgIGZpbHRlcmVkUXVlcnkgPSBxdWVyeVdpdGhDaGlsZHJlbi5xdWVyaWVzLmZpbHRlcihcbiAgICAgICAgICAocXVlcnkpID0+IHF1ZXJ5Py5pZCA9PT0gbWF0Y2hpbmdNZXNzYWdlLnBhcmVudElkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJlZFF1ZXJ5ID0gcXVlcnlXaXRoQ2hpbGRyZW4ucXVlcmllcy5maWx0ZXIoXG4gICAgICAgICAgKHF1ZXJ5KSA9PiBxdWVyeT8uaWQgPT09IG1hdGNoaW5nTWVzc2FnZS5pZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnF1ZXJ5SXRlbURpc3BsYXkgPSBuZXcgUXVlcnlMaXN0SXRlbSgpO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5SXRlbURpc3BsYXksIG1hdGNoaW5nTWVzc2FnZSk7XG4gICAgICB0aGlzLnF1ZXJ5SXRlbSA9IHRoaXMucXVlcnlJdGVtRGlzcGxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyZWRRdWVyeSA9IHF1ZXJ5V2l0aENoaWxkcmVuLnF1ZXJpZXMuZmlsdGVyKFxuICAgICAgICAocXVlcnkpID0+IHF1ZXJ5Py5pZCA9PT0gbWF0Y2hpbmdNZXNzYWdlLmlkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlSZXNwb25zZVN0YXR1cyA9IGZpbHRlcmVkUXVlcnlbMF0/LnJlc3BvbnNlU3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGhhc1Jlc3BvbmRlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaGFzUmVzcG9uZGVkVG9RdWVyeSA9IHZhbHVlO1xuICAgIHRoaXMuaGFzUmVzcG9uZGVkVG9RdWVyeVRhc2suZW1pdCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNlwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstIS1tYXJnaW4tYm90dG9tLTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCI+e3sgJ1Jlc3BvbmQgdG8gYSBxdWVyeScgfCBycHhUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWwgZ292dWstIS1tYXJnaW4tYm90dG9tLTBcIj57eyAnUXVlcnkgZGV0YWlscycgfCBycHhUcmFuc2xhdGUgfX08L2gxPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ292dWstIS1tYXJnaW4tYm90dG9tLTRcIj5cbiAgICA8Y2NkLXF1ZXJ5LWNhc2UtZGV0YWlscy1oZWFkZXIgW2Nhc2VEZXRhaWxzXT1cImNhc2VEZXRhaWxzXCI+PC9jY2QtcXVlcnktY2FzZS1kZXRhaWxzLWhlYWRlcj5cbiAgPC9kaXY+XG5cbiAgPGRpdj5cbiAgICA8Y2NkLXF1ZXJ5LWRldGFpbHMgW3F1ZXJ5XT1cInF1ZXJ5SXRlbVwiXG4gICAgICBbcXVlcnlSZXNwb25zZVN0YXR1c109XCJxdWVyeVJlc3BvbnNlU3RhdHVzXCJcbiAgICAgIChoYXNSZXNwb25kZWQpPVwiaGFzUmVzcG9uZGVkKCRldmVudClcIj48L2NjZC1xdWVyeS1kZXRhaWxzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInF1ZXJ5LXJlc3BvbmRcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gIDxkaXYgKm5nSWY9XCIhaGFzUmVzcG9uZGVkVG9RdWVyeVwiPlxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbVwiPlxuICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyAnUmVzcG9uZCB0byBhIHF1ZXJ5JyA6ICdBc2sgYSBmb2xsb3ctdXAgcXVlc3Rpb24nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgPC9oMT5cblxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwIGJvZHktdGV4dGFyZWFcIlxuICAgICAgICAgICBbY2xhc3MuZ292dWstZm9ybS1ncm91cC0tZXJyb3JdPVwic3VibWl0dGVkICYmIGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWxhYmVsLXdyYXBwZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1sYWJlbC0tbSBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiBmb3I9XCJib2R5XCI+XG4gICAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/ICdSZXNwb25zZSBkZXRhaWwnIDogJ1F1ZXJ5IEJvZHknIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGlkPVwiYm9keS1lcnJvclwiIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPnt7ICdFcnJvcjonIHwgcnB4VHJhbnNsYXRlIH19IDwvc3Bhbj57eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/IHJhaXNlUXVlcnlFcnJvck1lc3NhZ2VzLlJFU1BPTkRfUVVFUllfQk9EWSA6IHJhaXNlUXVlcnlFcnJvck1lc3NhZ2VzLlFVRVJZX0JPRFkgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8dGV4dGFyZWEgW2Zvcm1Db250cm9sTmFtZV09XCInYm9keSdcIiBjbGFzcz1cImdvdnVrLXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5nb3Z1ay10ZXh0YXJlYS0tZXJyb3JdPVwic3VibWl0dGVkICYmIGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBpZD1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImJvZHlcIiByb3dzPVwiNVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJib2R5LWhpbnQgYm9keS1lcnJvclwiPlxuICAgICAgPC90ZXh0YXJlYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9xdWVyeS1tYW5hZ2VtZW50L2NvbXBvbmVudHMvcXVlcnktd3JpdGUvcXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS9xdWVyeS13cml0ZS1yZXNwb25kLXRvLXF1ZXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS13cml0ZS9xdWVyeS13cml0ZS1yZXNwb25kLXRvLXF1ZXJ5L3F1ZXJ5LXdyaXRlLXJlc3BvbmQtdG8tcXVlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBeUIsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztJQzBCaEcs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RyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7MkhBL0VRLGlDQUFpQzs2REFBakMsaUNBQWlDO1lDWDFDLEFBREYsQUFERiw4QkFBcUMsYUFDRSxhQUNOO1lBQUEsWUFBeUM7O1lBQUEsaUJBQU07WUFDNUUsNkJBQW9EO1lBQUEsWUFBb0M7O1lBQzFGLEFBRDBGLGlCQUFLLEVBQ3pGO1lBRU4sOEJBQXFDO1lBQ25DLG1EQUEyRjtZQUM3RixpQkFBTTtZQUdKLEFBREYsNEJBQUssNEJBR3FDO1lBQXRDLDhJQUFnQix3QkFBb0IsSUFBQztZQUUzQyxBQURFLEFBRDBDLGlCQUFvQixFQUN4RCxFQUNGO1lBQ04sb0ZBQTRDOztZQWRYLGVBQXlDO1lBQXpDLGdFQUF5QztZQUNsQixlQUFvQztZQUFwQywyREFBb0M7WUFJekQsZUFBMkI7WUFBM0IsNkNBQTJCO1lBSXZDLGVBQXVCO1lBQ3hDLEFBRGlCLHlDQUF1QixnREFDRztZQUlyQixjQUFjO1lBQWQsbUNBQWM7OztpRkRIN0IsaUNBQWlDO2NBTjdDLFNBQVM7MkJBQ0Usa0NBQWtDOzBFQU01QixTQUFTO2tCQUF4QixLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNVLGtCQUFrQjtrQkFBakMsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxzQkFBc0I7a0JBQXJDLEtBQUs7WUFDVSxRQUFRO2tCQUF2QixLQUFLO1lBQ1csdUJBQXVCO2tCQUF2QyxNQUFNOztrRkFQSSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlTm90aWZpZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSYWlzZVF1ZXJ5RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBRdWVyeUNyZWF0ZUNvbnRleHQsIFF1ZXJ5TGlzdERhdGEsIFF1ZXJ5TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXF1ZXJ5LXdyaXRlLXJlc3BvbmQtdG8tcXVlcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktd3JpdGUtcmVzcG9uZC10by1xdWVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LXdyaXRlLXJlc3BvbmQtdG8tcXVlcnkuY29tcG9uZW50LnNjc3MnXVxufSlcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5V3JpdGVSZXNwb25kVG9RdWVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5SXRlbTogUXVlcnlMaXN0SXRlbTtcbiAgQElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBwdWJsaWMgcXVlcnlDcmVhdGVDb250ZXh0OiBRdWVyeUNyZWF0ZUNvbnRleHQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGNhc2VRdWVyaWVzQ29sbGVjdGlvbnM6IENhc2VRdWVyaWVzQ29sbGVjdGlvbltdO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0Zvcm07XG4gIEBPdXRwdXQoKSBwdWJsaWMgaGFzUmVzcG9uZGVkVG9RdWVyeVRhc2s6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcXVlcnlDcmVhdGVDb250ZXh0RW51bSA9IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgcHVibGljIHJlYWRvbmx5IHJhaXNlUXVlcnlFcnJvck1lc3NhZ2VzID0gUmFpc2VRdWVyeUVycm9yTWVzc2FnZTtcbiAgcHVibGljIGNhc2VJZDogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlJdGVtSWQ6IHN0cmluZztcbiAgcHVibGljIGNhc2VEZXRhaWxzO1xuICBwdWJsaWMgcXVlcnlSZXNwb25zZVN0YXR1czogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlMaXN0RGF0YTogUXVlcnlMaXN0SXRlbSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaGFzUmVzcG9uZGVkVG9RdWVyeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFFVRVJZX0lURU1fUkVTUE9ORCA9ICczJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUVVFUllfSVRFTV9GT0xMT1dVUCA9ICc0JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNhc2VOb3RpZmllcjogQ2FzZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5SXRlbUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucWlkO1xuICAgIHRoaXMuY2FzZU5vdGlmaWVyLmNhc2VWaWV3LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChjYXNlRGV0YWlscykgPT4ge1xuICAgICAgICB0aGlzLmNhc2VJZCA9IGNhc2VEZXRhaWxzPy5jYXNlX2lkID8/ICcnO1xuICAgICAgICB0aGlzLmNhc2VEZXRhaWxzID0gY2FzZURldGFpbHM7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmV0cmlldmluZyBjYXNlIGRldGFpbHM6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucyB8fCB0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gU2lsZW50IHJldHVybiDigJMgdGhpcyBpcyBub3QgYW4gZXJyb3IuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnNbMF0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nhc2VRdWVyaWVzQ29sbGVjdGlvbnNbMF0gaXMgdW5kZWZpbmVkIScsIHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM/LmRhdGFpZDtcbiAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBtZXNzYWdlSWQgZm91bmQgaW4gcm91dGUgcGFyYW1zOicsIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxNZXNzYWdlcyA9IHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1xuICAgICAgLmZsYXRNYXAoKGNhc2VEYXRhKSA9PiBjYXNlRGF0YT8uY2FzZU1lc3NhZ2VzIHx8IFtdKTtcblxuICAgIGNvbnN0IG1hdGNoaW5nTWVzc2FnZSA9IGFsbE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobWVzc2FnZSkgPT4gbWVzc2FnZT8udmFsdWU/LmlkID09PSBtZXNzYWdlSWRcbiAgICApPy52YWx1ZTtcblxuICAgIGlmICghbWF0Y2hpbmdNZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdGNoaW5nIG1lc3NhZ2UgZm91bmQgZm9yIElEOicsIG1lc3NhZ2VJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlXaXRoQ2hpbGRyZW4gPSBuZXcgUXVlcnlMaXN0RGF0YSh0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnNbMF0pO1xuICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5xdWVyeUl0ZW1JZCA9PT0gUXVlcnlXcml0ZVJlc3BvbmRUb1F1ZXJ5Q29tcG9uZW50LlFVRVJZX0lURU1fUkVTUE9ORFxuICAgICAgPyAobWF0Y2hpbmdNZXNzYWdlPy5wYXJlbnRJZCB8fCBtYXRjaGluZ01lc3NhZ2U/LmlkKVxuICAgICAgOiBtYXRjaGluZ01lc3NhZ2U/LmlkO1xuXG4gICAgdGhpcy5xdWVyeUxpc3REYXRhID0gcXVlcnlXaXRoQ2hpbGRyZW4/LnF1ZXJpZXMuZmluZChxdWVyeSA9PiBxdWVyeT8uaWQgPT09IHRhcmdldElkKTtcbiAgICB0aGlzLnF1ZXJ5UmVzcG9uc2VTdGF0dXMgPSB0aGlzLnF1ZXJ5TGlzdERhdGE/LnJlc3BvbnNlU3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNSZXNwb25kZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuaGFzUmVzcG9uZGVkVG9RdWVyeSA9IHZhbHVlO1xuICAgICAgdGhpcy5oYXNSZXNwb25kZWRUb1F1ZXJ5VGFzay5lbWl0KHZhbHVlKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ292dWstIS1tYXJnaW4tYm90dG9tLTZcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLSEtbWFyZ2luLWJvdHRvbS02XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWNhcHRpb24tbFwiPnt7ICdSZXNwb25kIHRvIGEgcXVlcnknIHwgcnB4VHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sIGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+e3sgJ1F1ZXJ5IGRldGFpbHMnIHwgcnB4VHJhbnNsYXRlIH19PC9oMT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLSEtbWFyZ2luLWJvdHRvbS00XCI+XG4gICAgPGNjZC1xdWVyeS1jYXNlLWRldGFpbHMtaGVhZGVyIFtjYXNlRGV0YWlsc109XCJjYXNlRGV0YWlsc1wiPjwvY2NkLXF1ZXJ5LWNhc2UtZGV0YWlscy1oZWFkZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXY+XG4gICAgPGNjZC1xdWVyeS1kZXRhaWxzIFtxdWVyeV09XCJxdWVyeUxpc3REYXRhXCJcbiAgICAgIFtxdWVyeVJlc3BvbnNlU3RhdHVzXT1cInF1ZXJ5UmVzcG9uc2VTdGF0dXNcIlxuICAgICAgKGhhc1Jlc3BvbmRlZCk9XCJoYXNSZXNwb25kZWQoJGV2ZW50KVwiPjwvY2NkLXF1ZXJ5LWRldGFpbHM+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicXVlcnktcmVzcG9uZFwiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgPGRpdiAqbmdJZj1cIiFoYXNSZXNwb25kZWRUb1F1ZXJ5XCI+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+XG4gICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/ICdSZXNwb25kIHRvIGEgcXVlcnknIDogJ0FzayBhIGZvbGxvdy11cCBxdWVzdGlvbicgfCBycHhUcmFuc2xhdGUgfX1cbiAgICA8L2gxPlxuXG4gICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXAgYm9keS10ZXh0YXJlYVwiXG4gICAgICAgICAgIFtjbGFzcy5nb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcl09XCJzdWJtaXR0ZWQgJiYgZm9ybUdyb3VwLmdldCgnYm9keScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstbGFiZWwtd3JhcHBlclwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWxhYmVsLS1tIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiIGZvcj1cImJvZHlcIj5cbiAgICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EID8gJ1Jlc3BvbnNlIGRldGFpbCcgOiAnUXVlcnkgQm9keScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgaWQ9XCJib2R5LWVycm9yXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgZm9ybUdyb3VwLmdldCgnYm9keScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Vycm9yOicgfCBycHhUcmFuc2xhdGUgfX0gPC9zcGFuPnt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EID8gcmFpc2VRdWVyeUVycm9yTWVzc2FnZXMuUkVTUE9ORF9RVUVSWV9CT0RZIDogcmFpc2VRdWVyeUVycm9yTWVzc2FnZXMuUVVFUllfQk9EWSB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDx0ZXh0YXJlYSBbZm9ybUNvbnRyb2xOYW1lXT1cIidib2R5J1wiIGNsYXNzPVwiZ292dWstdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmdvdnVrLXRleHRhcmVhLS1lcnJvcl09XCJzdWJtaXR0ZWQgJiYgZm9ybUdyb3VwLmdldCgnYm9keScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiIGlkPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiIHJvd3M9XCI1XCIgYXJpYS1kZXNjcmliZWRieT1cImJvZHktaGludCBib2R5LWVycm9yXCI+XG4gICAgICA8L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=