@ieeesa-npm/groups 0.10.7 → 0.10.9

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.
@@ -71,6 +71,7 @@ export class ViewRosterComponent {
71
71
  this.rosterActions.isDeleteNeeded = this.getManageRosterActionsPermission();
72
72
  }
73
73
  ngOnInit() {
74
+ this.userInfo = this.groupService?.getUserInfo();
74
75
  const groupType = this.groupService.getSelectedGroupInfo()?.groupTypeInfo?.businessRule;
75
76
  this.hasClassification = groupType?.hasClassification ?? false;
76
77
  this.groupRosterType = groupType?.rosterType;
@@ -627,28 +628,34 @@ export class ViewRosterComponent {
627
628
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
628
629
  openUserDeleteConfirmationModal(selectedUsers) {
629
630
  const userIds = selectedUsers.map((user) => user?.userId);
630
- const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();
631
- const confirmationInfo = constants?.deleteUsersGroup?.confirmationInfo;
632
- const deleteUserGroupModalOptions = {
633
- leftButtonLabel: confirmationInfo?.leftButtonLabel,
634
- rightButtonLabel: confirmationInfo?.rightButtonLabel,
635
- promptMessage: `${confirmationInfo?.promptMessagePart1} ${userIds?.length} ${confirmationInfo?.promptMessagePart2} ${selectedGroupInfo?.groupName}?`,
636
- actionButtonAlign: this.alignmentType?.MIDDLE,
637
- };
638
- this.dialogRef = this.dialog.open(ModalConfirmationComponent, {
639
- data: deleteUserGroupModalOptions,
640
- width: 'auto',
641
- autoFocus: 'dialog',
642
- ariaLabel: constants?.ariaLabel?.alert,
643
- });
644
- this.dialogRef
645
- .afterClosed()
646
- .pipe(takeUntil(this.destroy$))
647
- .subscribe((result) => {
648
- if (result) {
649
- this.deleteUsersGroup(selectedGroupInfo?.groupId, userIds);
650
- }
651
- });
631
+ if (userIds.includes(this.userInfo?.userId) &&
632
+ this.groupService.isAdminUser()) {
633
+ this.showAlertMessage(`${constants?.errors?.[1039]}`, AlertType.ERROR);
634
+ }
635
+ else {
636
+ const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();
637
+ const confirmationInfo = constants?.deleteUsersGroup?.confirmationInfo;
638
+ const deleteUserGroupModalOptions = {
639
+ leftButtonLabel: confirmationInfo?.leftButtonLabel,
640
+ rightButtonLabel: confirmationInfo?.rightButtonLabel,
641
+ promptMessage: `${confirmationInfo?.promptMessagePart1} ${userIds?.length} ${confirmationInfo?.promptMessagePart2} ${selectedGroupInfo?.groupName}?`,
642
+ actionButtonAlign: this.alignmentType?.MIDDLE,
643
+ };
644
+ this.dialogRef = this.dialog.open(ModalConfirmationComponent, {
645
+ data: deleteUserGroupModalOptions,
646
+ width: 'auto',
647
+ autoFocus: 'dialog',
648
+ ariaLabel: constants?.ariaLabel?.alert,
649
+ });
650
+ this.dialogRef
651
+ .afterClosed()
652
+ .pipe(takeUntil(this.destroy$))
653
+ .subscribe((result) => {
654
+ if (result) {
655
+ this.deleteUsersGroup(selectedGroupInfo?.groupId, userIds);
656
+ }
657
+ });
658
+ }
652
659
  }
653
660
  /**
654
661
  * Send API request to delete the selected user(s) from the selected group and handles the success and error response.
@@ -700,6 +707,7 @@ export class ViewRosterComponent {
700
707
  name: selectedUserInfo[0]?.name,
701
708
  role: selectedUserInfo[0]?.role,
702
709
  userId: selectedUserInfo[0]?.userId,
710
+ canDelete: selectedUserInfo[0]?.canDelete,
703
711
  });
704
712
  this.groupService?.openModalNotifier?.next(GroupFunctionType.EDIT_ROSTER_USER_ROLE);
705
713
  }
@@ -740,4 +748,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
740
748
  type: Component,
741
749
  args: [{ selector: 'ieeesa-view-roster', standalone: true, imports: [CommonModule, DataTableComponent, MatDialogModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n></ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal-title{padding-bottom:1.25em}.ieeesa-data-table__content{height:500px}.ieeesa-data-table__no-table-data{height:auto}.ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-data-table .ieeesa-filter__filter-options .mdc-form-field>label{padding-left:0;padding-right:10px}.ieeesa-data-table .ieeesa-filter__filter-options .mat-mdc-checkbox{margin-bottom:4px}.ieeesa-data-table .ieeesa-filter__filter-options .ieeesa-checkbox-field__label-top{margin-top:8px}.ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}\n"] }]
742
750
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.GroupsService }, { type: i3.AlertsService }, { type: i0.ChangeDetectorRef }, { type: i3.GlobalErrorHandlerService }]; } });
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxlQUFlLEVBRWYsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsMEJBQTBCLEVBSTFCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEdBR1YsTUFBTSxxQkFBcUIsQ0FBQztBQU83QixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FB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QkFBa0Isa3VCQUFFLGVBQWU7OzRGQU1oRCxtQkFBbUI7a0JBVC9CLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxlQUFlLENBQUMsaUJBRzdDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG4gIFRhYmxlQWN0aW9ucyxcclxuICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgQ2hpcHNUeXBlLFxyXG4gIEFsaWduVHlwZSxcclxuICBNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcclxuICBDaGlwT3B0aW9uLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0VHlwZSxcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBVc2VyLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZVVzZXJHcm91cFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGVsZXRlLXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVyRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBVc2VySW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC11c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbHRlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29sdW1uLXNjaGVtYS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGVybWlzc2lvbi10eXBlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBWaWV3Um9zdGVyQ29tcG9uZW50IGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdGllcyB0byBhZGQsIGVkaXQsIGRlbGV0ZSB1c2VyIHRvIGdyb3VwIHJvc3RlciwgYXNzaWduIGFuZCBtb2RpZnkgcm9sZXMocykgdG8gdGhlIGdyb3VwIHVzZXJzLCBhbmQgc2VhcmNoIHVzZXIgZnJvbSByb3N0ZXIuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXZpZXctcm9zdGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERhdGFUYWJsZUNvbXBvbmVudCwgTWF0RGlhbG9nTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1yb3N0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgdmlld1Jvc3RlckNvbnN0YW50cyA9IHRoaXMuY29uc3RhbnRzPy52aWV3Um9zdGVyO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZGlhbG9nUmVmOiBhbnk7XHJcbiAgYWxpZ25tZW50VHlwZSA9IEFsaWduVHlwZTtcclxuICBmaWx0ZXJzITogQ2hpcE9wdGlvbltdO1xyXG4gIGNvbHVtblNjaGVtYSE6IFRhYmxlQ29sdW1uU2NoZW1hW107XHJcbiAgdGFibGVEYXRhITogVXNlcltdO1xyXG4gIHNlbGVjdGVkUm9sZUlkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZE1lbWJlclR5cGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hQbGFjZWhvbGRlclRleHQhOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSb2xlczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICBzZWxlY3RlZE1lbWJlclR5cGVzOiBGaWx0ZXJzQW5kT3B0aW9ucyA9IHt9O1xyXG4gIHNlbGVjdGVkQ2xhc3NpZmljYXRpb25zOiBGaWx0ZXJzQW5kT3B0aW9ucyA9IHt9O1xyXG4gIHJvbGVzOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgZmlsdGVyT3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIG1lbWJlclR5cGVzOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgY2xhc3NpZmljYXRpb25zOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgcm9zdGVyQWN0aW9uczogVGFibGVBY3Rpb25zID0ge1xyXG4gICAgaXNTZWFyY2hOZWVkZWQ6IHRydWUsXHJcbiAgICBpc0ZpbHRlck5lZWRlZDogdHJ1ZSxcclxuICAgIGlzQWRkTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRGVsZXRlTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRWRpdE5lZWRlZDogZmFsc2UsXHJcbiAgfTtcclxuICBkZWZhdWx0U29ydGVkQ29sdW1uITogc3RyaW5nO1xyXG4gIGRhdGFUYWJsZUNsYXNzTmFtZSE6IHN0cmluZztcclxuICBoYXNDbGFzc2lmaWNhdGlvbiA9IGZhbHNlO1xyXG4gIHNlYXJjaFRlcm0hOiBzdHJpbmc7XHJcbiAgZ3JvdXBSb3N0ZXJUeXBlITogR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIGRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uID0gdHJ1ZTtcclxuICB0YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8udGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbDtcclxuICB0YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2VycyA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzO1xyXG4gIGVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnkgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0FkZE5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0VkaXROZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNEZWxldGVOZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID1cclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlO1xyXG4gICAgdGhpcy5oYXNDbGFzc2lmaWNhdGlvbiA9IGdyb3VwVHlwZT8uaGFzQ2xhc3NpZmljYXRpb24gPz8gZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBSb3N0ZXJUeXBlKVxyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5FUjEwMDEsXHJcbiAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuV0FSTklORyxcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuY29uZmlndXJlVGFibGVJbmZvKCk7XHJcbiAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNob3cgYWRkIG5ldyB1c2VyIHN1Y2Nlc3MgbWVzc2FnZSB3aGVuIGNhblNob3dNZXNzYWdlIGlzIHNldCB0cnVlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2U/LmNhblNob3dNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmNhblNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZT8ucm9zdGVyRnVuY3Rpb25UeXBlID09PVxyXG4gICAgICAgIFJvc3RlckZ1bmN0aW9uVHlwZT8uQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5hZGRVc2VyUm9zdGVyPy5tZXNzYWdlPy5zdWNjZXNzPy5zdWJtaXNzaW9uLFxyXG4gICAgICAgICAgQWxlcnRUeXBlLlNVQ0NFU1NcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5FRElUX1JPU1RFUl9VU0VSX1JPTEVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmVkaXRVc2VyUm9sZXM/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPSBncm91cFR5cGU/LnJvc3RlclR5cGUgYXMgR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWRlcyBvciBzaG93cyByb3N0ZXIgYWRkIHVzZXIsIGVkaXQgdXNlciBhbmQgZGVsZXRlIHVzZXIgYWN0aW9ucyBiYXNlZCBvbiB1c2VyIGdyb3VwIHBlcm1pc3Npb25zLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRNYW5hZ2VSb3N0ZXJBY3Rpb25zUGVybWlzc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMpIHx8XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMpIHx8XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfUk9TVEVSUylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmUgVGFibGUgaW5mb3JtYXRpb24gYmFzZWQgb24gZ3JvdXAgcm9zdGVyIHR5cGVcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZVRhYmxlSW5mbygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgdGhpcy5kYXRhVGFibGVDbGFzc05hbWUgPSAnaWVlZXNhLWluZGl2aWR1YWwtcm9zdGVyJztcclxuICAgICAgdGhpcy5zZWFyY2hQbGFjZWhvbGRlclRleHQgPVxyXG4gICAgICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uc2VhcmNoUGxhY2Vob2xkZXJJbmRpdmlkdWFsO1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IEZpbHRlclR5cGUuTUVNQkVSX1RZUEUsXHJcbiAgICAgICAgICBuYW1lOiBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICAgIHRoaXMuY29sdW1uU2NoZW1hID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAxLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgaGVhZGluZzogJycsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnNlbGVjdH1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk5BTUUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5uYW1lfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNUExPWUVSLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5lbXBsb3llcixcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmVtcGxveWVyID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA0LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5FTUFJTCxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8uZW1haWwsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5lbWFpbCA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTUVNQkVSX1RZUEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5tZW1iZXJTdGF0dXMgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuT1JHQU5JWkFUSU9OLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5vcmdhbml6YXRpb25OYW1lLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQub3JnYW5pemF0aW9uID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA4LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5ST0xFLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5yb2xlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQucm9sZSA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZ2V0Q2xhc3NpZmljYXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5TY2hlbWEuc3BsaWNlKHRoaXMuY29sdW1uU2NoZW1hLmxlbmd0aCAtIDEsIDAsIHtcclxuICAgICAgICAgIGlkOiA3LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5jbGFzc2lmaWNhdGlvbiA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBuYW1lOiBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1zeXN0ZW0tdXNlcnMtcm9zdGVyJztcclxuICAgICAgdGhpcy5zZWFyY2hQbGFjZWhvbGRlclRleHQgPVxyXG4gICAgICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uc2VhcmNoUGxhY2Vob2xkZXJTeXN0ZW1Vc2VycztcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICBuYW1lOiBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuVE9HR0xFLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuY29sdW1uU2NoZW1hID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAxLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgaGVhZGluZzogJycsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnNlbGVjdH1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk5BTUUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5uYW1lLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQubmFtZX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAzLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5FTUFJTCxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM/LmVtYWlsLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuZW1haWx9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNCxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuUk9MRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM/LnJvbGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5yb2xlID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFJvbGVzKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4gPSB0aGlzLmNvbHVtblNjaGVtYVsxXS5jb2x1bW5EZWY7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBVc2VycygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIHRhYmxlRGF0YSB0byBkaXNwbGF5IHRoZSB1c2VycyBpbiBhIGdyaWQuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcclxuICAgIHNvcnREaXJlY3Rpb246IGJvb2xlYW5cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJzKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIHNvcnRDb2x1bW4sXHJcbiAgICAgICAgc29ydERpcmVjdGlvblxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwcyBiYXNlZCBvbiB0aGUgY29sdW1uIG5hbWUgYW5kIHNvcnQgZGlyZWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7U29ydH0gc29ydFxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Tb3J0R3JvdXBVc2Vycyhzb3J0OiBTb3J0KSB7XHJcbiAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4gPSBzb3J0LmFjdGl2ZTtcclxuICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24gPVxyXG4gICAgICBzb3J0LmRpcmVjdGlvbiA9PT0gVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLkFTQ0VORElORztcclxuICAgIGlmIChzb3J0LmRpcmVjdGlvbiA9PT0gVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLk5PX1NPUlQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcy5sZW5ndGgpXHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW3RoaXMuc2VsZWN0ZWRSb2xlc10pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcy5sZW5ndGggfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcy5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzZWxlY3RlZCBncm91cCB0eXBlIHJvbGVzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBUeXBlUm9sZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBhc3NpZ24gcm9sZXMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRSb2xlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVSb2xlcyhcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMucm9sZXMgPSByZXNwb25zZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9uIGJ5IGNhbGxpbmcgZ2V0Q2xhc3NpZmljYXRpb25zKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgY2xhc3NpZmljYXRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3VXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRDbGFzc2lmaWNhdGlvbnMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbklkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbWVtYmVyIHR5cGVzIGJ5IGNhbGxpbmcgZ2V0TWVtYmVyVHlwZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBtZW1iZXIgdHlwZXMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0TWVtYmVyVHlwZXMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbWJlclR5cGVzPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLm1lbWJlclN0YXR1c0lkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5tZW1iZXJTdGF0dXNEZXNjLFxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGZpbHRlciBvcHRpb25zIGZvciBNZW1iZXIgVHlwZSBvciBDbGFzc2lmaWNhdGlvbiBmaWx0ZXIgZGVwZW5kcyBvbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMob3B0aW9uOiBDaGlwT3B0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKG9wdGlvbi5pZCkge1xyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuTUVNQkVSX1RZUEU6IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLm1lbWJlclR5cGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTjoge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuY2xhc3NpZmljYXRpb25zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5ST0xFOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5yb2xlcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIHNlYXJjaEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIC1zZWFyY2hUZXJtIGNhbiBiZSB1c2VyIG5hbWUgb3IgZW1haWwgYW5kIHVzZXIgaXMgc2VhcmNoZWQgYmFzZWQgb24gdGhlIGVtYWlsIG9yIG5hbWUuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblNlYXJjaEdyb3VwVXNlcnMoc2VhcmNoVGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtPy50cmltKCk7XHJcbiAgICBsZXQgcGF5bG9hZCE6IFNlYXJjaFVzZXJzUGF5bG9hZDtcclxuICAgIHN3aXRjaCAodGhpcy5ncm91cFJvc3RlclR5cGUpIHtcclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVI6IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHM/Lmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM/Lmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuc2VhcmNoR3JvdXBVc2VycyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBjb25zdCBub1VzZXJzRm91bmRFcnJvckNvZGVzID0gWycxMDI5JywgJzEwMzAnLCAnMTAzMScsICcxMDMyJ107XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlcyAmJiBub1VzZXJzRm91bmRFcnJvckNvZGVzLmluY2x1ZGVzKGVycm9yQ29kZXNbMF0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIG9wdGlvbnMgb2YgZmlsdGVycyBhbmQgcmV0dXJucyBpZCBvZiBzZWxlY3RlZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc1tdfSBzZWxlY3RlZE9wdGlvbnNcclxuICAgKiBAcGFyYW0ge0ZpbHRlclR5cGV9IGZpbHRlclR5cGVcclxuICAgKiBAcGFyYW0ge0ZpbHRlcnNBbmRPcHRpb25zfSBzZWxlY3RlZEZpbHRlck9wdGlvbnNcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBGaWx0ZXJzQW5kT3B0aW9uc1tdLFxyXG4gICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcclxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMsXHJcbiAgICBzZWxlY3RlZEZpbHRlcklkczogc3RyaW5nW11cclxuICApIHtcclxuICAgIHNlbGVjdGVkT3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRPcHRpb24pKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gZmlsdGVyVHlwZSkge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdDogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgdmFsdWU/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlcklkcy5wdXNoKG9wdGlvbi5pZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0LnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW2tleV0gPSBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbltdIHwgfCBDaGVja2JveE9wdGlvbltdfSByb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25GaWx0ZXJHcm91cFVzZXJzKHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMgPSB7fTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyA9IHt9O1xyXG4gICAgbGV0IHBheWxvYWQhOiBGaWx0ZXJVc2Vyc1BheWxvYWQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZXMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZUlkc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaEdyb3VwVXNlcnModGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2hHcm91cFVzZXJzKHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVXNlcnNCeVJvbGVzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgcmV0cmlldmluZyBncm91cHMgdXNlcnMsIHJvbGVzLCBzZWFyY2ggdXNlcnMsIGZpbHRlciB1c2VyIGJ5IHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3JcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShlcnJvck1lc3NhZ2UsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBtb2RhbCB0byBnZXQgdXNlciBjb25maXJtYXRpb24gdG8gZGVsZXRlIHRoZSB1c2VycyBmcm9tIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbChzZWxlY3RlZFVzZXJzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJJZHMgPSBzZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogVXNlcikgPT4gdXNlcj8udXNlcklkKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmZvID0gdGhpcy5ncm91cFNlcnZpY2U/LmdldFNlbGVjdGVkR3JvdXBJbmZvKCk7XHJcbiAgICBjb25zdCBjb25maXJtYXRpb25JbmZvID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwPy5jb25maXJtYXRpb25JbmZvO1xyXG4gICAgY29uc3QgZGVsZXRlVXNlckdyb3VwTW9kYWxPcHRpb25zID0ge1xyXG4gICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgcmlnaHRCdXR0b25MYWJlbDogY29uZmlybWF0aW9uSW5mbz8ucmlnaHRCdXR0b25MYWJlbCxcclxuICAgICAgcHJvbXB0TWVzc2FnZTogYCR7Y29uZmlybWF0aW9uSW5mbz8ucHJvbXB0TWVzc2FnZVBhcnQxfSAke3VzZXJJZHM/Lmxlbmd0aH0gJHtjb25maXJtYXRpb25JbmZvPy5wcm9tcHRNZXNzYWdlUGFydDJ9ICR7c2VsZWN0ZWRHcm91cEluZm8/Lmdyb3VwTmFtZX0/YCxcclxuICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZT8uTUlERExFLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiBkZWxldGVVc2VyR3JvdXBNb2RhbE9wdGlvbnMsXHJcbiAgICAgIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgIGF1dG9Gb2N1czogJ2RpYWxvZycsXHJcbiAgICAgIGFyaWFMYWJlbDogY29uc3RhbnRzPy5hcmlhTGFiZWw/LmFsZXJ0LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZlxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlVXNlcnNHcm91cChzZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsIHVzZXJJZHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbmQgQVBJIHJlcXVlc3QgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCBoYW5kbGVzIHRoZSBzdWNjZXNzIGFuZCBlcnJvciByZXNwb25zZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZVVzZXJzR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCB1c2VySWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZGVsZXRlVXNlcnNHcm91cFRleHRzID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwO1xyXG4gICAgY29uc3QgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIFtncm91cElkXTogdXNlcklkcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZGVsZXRlVXNlcnNHcm91cChkZWxldGVVc2VyR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIGAke3Jlcy5ib2R5fSAke2RlbGV0ZVVzZXJzR3JvdXBUZXh0cz8ubWVzc2FnZT8uc3VjY2Vzcz8ucmVtb3ZlZH1gLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIHVzZXIgaW5mbyBhbmQgZW1pdHMgZXZlbnQgb3Blbk1vZGFsTm90aWZpZXIgd2l0aCBFRElUX1JPU1RFUl9VU0VSX1JPTEUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvW119IHNlbGVjdGVkVXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRWRpdFVzZXJSb2xlcyhzZWxlY3RlZFVzZXJJbmZvOiBHcm91cFVzZXJJbmZvW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFNlbGVjdGVkVXNlckluZm8oe1xyXG4gICAgICAgIGVtYWlsOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5lbWFpbCxcclxuICAgICAgICBuYW1lOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5uYW1lLFxyXG4gICAgICAgIHJvbGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnJvbGUsXHJcbiAgICAgICAgdXNlcklkOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy51c2VySWQsXHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IHNlbGVjdGVkVXNlckluZm9bMF0/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogc2VsZWN0ZWRVc2VySW5mb1swXT8ub3JnYW5pemF0aW9uLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogc2VsZWN0ZWRVc2VySW5mb1swXT8ubWVtYmVyU3RhdHVzLFxyXG4gICAgICB9KTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2Uuc2V0U2VsZWN0ZWRVc2VySW5mbyh7XHJcbiAgICAgICAgZW1haWw6IHNlbGVjdGVkVXNlckluZm9bMF0/LmVtYWlsLFxyXG4gICAgICAgIG5hbWU6IHNlbGVjdGVkVXNlckluZm9bMF0/Lm5hbWUsXHJcbiAgICAgICAgcm9sZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ucm9sZSxcclxuICAgICAgICB1c2VySWQ6IHNlbGVjdGVkVXNlckluZm9bMF0/LnVzZXJJZCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5FRElUX1JPU1RFUl9VU0VSX1JPTEVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBvcGVuTW9kYWxOb3RpZmllciBldmVudCB3aXRoIEdyb3VwRnVuY3Rpb25UeXBlIHZhbHVlIGFzIEFERF9VU0VSX1RPX1JPU1RFUlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGROZXdVc2VyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGFsZXJ0cyBmb3Igc3VjY2VzcywgZXJyb3IsIHdhcm5pbmcuXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBtZXNzYWdlIC1lcnJvciBvciB3YXJuaW5nIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gYWxlcnRUeXBlXHJcbiAgICogQHJldHVybiAtcmV0dXJucyBub3RoaW5nXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzaG93QWxlcnRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCBhbGVydFR5cGU6IEFsZXJ0VHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2U/LnNob3dNZXNzYWdlKHtcclxuICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgYWxlcnRUeXBlOiBhbGVydFR5cGUsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8aWVlZXNhLWRhdGEtdGFibGVcclxuICBbdGFibGVEYXRhSW5mb109XCJ0YWJsZURhdGFcIlxyXG4gIFtjb2x1bW5TY2hlbWFJbmZvXT1cImNvbHVtblNjaGVtYVwiXHJcbiAgW3NlYXJjaFBsYWNlSG9sZGVyVGV4dF09XCJzZWFyY2hQbGFjZWhvbGRlclRleHRcIlxyXG4gIFt0YWJsZUFjdGlvbnNdPVwicm9zdGVyQWN0aW9uc1wiXHJcbiAgW2lzQ2VsbFRleHRPdmVyZmxvd0VsbGlwc2lzXT1cInRydWVcIlxyXG4gIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gIFtjbGFzc05hbWVdPVwiZGF0YVRhYmxlQ2xhc3NOYW1lXCJcclxuICBbc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXT1cImZpbHRlck9wdGlvbnNcIlxyXG4gIFtkZWZhdWx0U29ydGVkQ29sdW1uXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gIChzZWxlY3RlZEZpbHRlcik9XCJzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgKHJlbW92ZUZpbHRlcmVkT3B0aW9uKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoZmlsdGVyZWRPcHRpb25zKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoc2VhcmNoZWRWYWx1ZSk9XCJvblNlYXJjaEdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKHNlbGVjdGVkUm93VG9FZGl0KT1cIm9uRWRpdFVzZXJSb2xlcygkZXZlbnQpXCJcclxuICAoc2VsZWN0ZWRSb3dzVG9EZWxldGUpPVwib3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbCgkZXZlbnQpXCJcclxuICAoc29ydENoYW5nZSk9XCJvblNvcnRHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChhZGRSb3cpPVwib25BZGROZXdVc2VyKClcIlxyXG4+PC9pZWVlc2EtZGF0YS10YWJsZT5cclxuIl19
751
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxlQUFlLEVBRWYsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsMEJBQTBCLEVBSTFCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEdBR1YsTUFBTSxxQkFBcUIsQ0FBQztBQVE3QixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FB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QUUsU0FBb0I7UUFDL0QsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7WUFDN0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBdnlCVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4RUNoRWhDLHUxQkFtQkEsb3hURHVDWSxZQUFZLCtCQUFFLGtCQUFrQixrdUJBQUUsZUFBZTs7NEZBTWhELG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxpQkFHN0MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtcclxuICBUYWJsZUNvbHVtblNjaGVtYSxcclxuICBUYWJsZUNvbHVtblR5cGUsXHJcbiAgVGFibGVBY3Rpb25zLFxyXG4gIFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbixcclxuICBDaGlwc1R5cGUsXHJcbiAgQWxpZ25UeXBlLFxyXG4gIE1vZGFsQ29uZmlybWF0aW9uQ29tcG9uZW50LFxyXG4gIENoaXBPcHRpb24sXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgRmlsdGVyc0FuZE9wdGlvbnMsXHJcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7XHJcbiAgQWxlcnRUeXBlLFxyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIFVzZXIsXHJcbiAgTG9nZ2VkSW5Vc2VySW5mbyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWNvbHVtbi1zY2hlbWEtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogVmlld1Jvc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFsaXRpZXMgdG8gYWRkLCBlZGl0LCBkZWxldGUgdXNlciB0byBncm91cCByb3N0ZXIsIGFzc2lnbiBhbmQgbW9kaWZ5IHJvbGVzKHMpIHRvIHRoZSBncm91cCB1c2VycywgYW5kIHNlYXJjaCB1c2VyIGZyb20gcm9zdGVyLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkRlc3Ryb3l9XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS12aWV3LXJvc3RlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEYXRhVGFibGVDb21wb25lbnQsIE1hdERpYWxvZ01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92aWV3LXJvc3Rlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3Um9zdGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHZpZXdSb3N0ZXJDb25zdGFudHMgPSB0aGlzLmNvbnN0YW50cz8udmlld1Jvc3RlcjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRpYWxvZ1JlZjogYW55O1xyXG4gIGFsaWdubWVudFR5cGUgPSBBbGlnblR5cGU7XHJcbiAgZmlsdGVycyE6IENoaXBPcHRpb25bXTtcclxuICBjb2x1bW5TY2hlbWEhOiBUYWJsZUNvbHVtblNjaGVtYVtdO1xyXG4gIHRhYmxlRGF0YSE6IFVzZXJbXTtcclxuICBzZWxlY3RlZFJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VhcmNoUGxhY2Vob2xkZXJUZXh0ITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUm9sZXM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICBzZWxlY3RlZENsYXNzaWZpY2F0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICByb2xlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGZpbHRlck9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIHJvc3RlckFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzU2VhcmNoTmVlZGVkOiB0cnVlLFxyXG4gICAgaXNGaWx0ZXJOZWVkZWQ6IHRydWUsXHJcbiAgICBpc0FkZE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0VkaXROZWVkZWQ6IGZhbHNlLFxyXG4gIH07XHJcbiAgZGVmYXVsdFNvcnRlZENvbHVtbiE6IHN0cmluZztcclxuICBkYXRhVGFibGVDbGFzc05hbWUhOiBzdHJpbmc7XHJcbiAgaGFzQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcclxuICBzZWFyY2hUZXJtITogc3RyaW5nO1xyXG4gIGdyb3VwUm9zdGVyVHlwZSE6IEdyb3VwUm9zdGVyVHlwZTtcclxuICBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbiA9IHRydWU7XHJcbiAgdGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbCA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw7XHJcbiAgdGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnMgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2VycztcclxuICBlbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5ID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5yb3N0ZXJBY3Rpb25zLmlzQWRkTmVlZGVkID0gdGhpcy5nZXRNYW5hZ2VSb3N0ZXJBY3Rpb25zUGVybWlzc2lvbigpO1xyXG4gICAgdGhpcy5yb3N0ZXJBY3Rpb25zLmlzRWRpdE5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0RlbGV0ZU5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5ncm91cFNlcnZpY2U/LmdldFVzZXJJbmZvKCk7XHJcbiAgICBjb25zdCBncm91cFR5cGUgPVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU7XHJcbiAgICB0aGlzLmhhc0NsYXNzaWZpY2F0aW9uID0gZ3JvdXBUeXBlPy5oYXNDbGFzc2lmaWNhdGlvbiA/PyBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID0gZ3JvdXBUeXBlPy5yb3N0ZXJUeXBlIGFzIEdyb3VwUm9zdGVyVHlwZTtcclxuICAgIGlmICghdGhpcy5ncm91cFJvc3RlclR5cGUpXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSxcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5XQVJOSU5HLFxyXG4gICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWd1cmVUYWJsZUluZm8oKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZGQgbmV3IHVzZXIgc3VjY2VzcyBtZXNzYWdlIHdoZW4gY2FuU2hvd01lc3NhZ2UgaXMgc2V0IHRydWVcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZT8uY2FuU2hvd01lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuY2FuU2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LnJvc3RlckZ1bmN0aW9uVHlwZSA9PT1cclxuICAgICAgICBSb3N0ZXJGdW5jdGlvblR5cGU/LkVESVRfUk9TVEVSX1VTRVJfUk9MRVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZWRpdFVzZXJSb2xlcz8ubWVzc2FnZT8uc3VjY2Vzcz8uc3VibWlzc2lvbixcclxuICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZGVzIG9yIHNob3dzIHJvc3RlciBhZGQgdXNlciwgZWRpdCB1c2VyIGFuZCBkZWxldGUgdXNlciBhY3Rpb25zIGJhc2VkIG9uIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX09GRklDRVJTKSB8fFxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9ST1NURVJTKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlIFRhYmxlIGluZm9ybWF0aW9uIGJhc2VkIG9uIGdyb3VwIHJvc3RlciB0eXBlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjb25maWd1cmVUYWJsZUluZm8oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1pbmRpdmlkdWFsLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVySW5kaXZpZHVhbDtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGhlYWRpbmc6ICcnLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5zZWxlY3R9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAyLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5OQU1FLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5uYW1lLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQubmFtZX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAzLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5FTVBMT1lFUixcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8uZW1wbG95ZXIsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5lbXBsb3llciA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNCxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1BSUwsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmVtYWlsLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuZW1haWwgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDUsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5tZW1iZXJUeXBlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQubWVtYmVyU3RhdHVzID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDYsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk9SR0FOSVpBVElPTixcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ub3JnYW5pemF0aW9uTmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50Lm9yZ2FuaXphdGlvbiA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogOCxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuUk9MRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ucm9sZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LnJvbGUgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKHRoaXMuaGFzQ2xhc3NpZmljYXRpb24pIHtcclxuICAgICAgICB0aGlzLmdldENsYXNzaWZpY2F0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uU2NoZW1hLnNwbGljZSh0aGlzLmNvbHVtblNjaGVtYS5sZW5ndGggLSAxLCAwLCB7XHJcbiAgICAgICAgICBpZDogNyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuY2xhc3NpZmljYXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICB0aGlzLmRhdGFUYWJsZUNsYXNzTmFtZSA9ICdpZWVlc2Etc3lzdGVtLXVzZXJzLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVyU3lzdGVtVXNlcnM7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGhlYWRpbmc6ICcnLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5zZWxlY3R9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAyLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5OQU1FLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2Vycz8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1BSUwsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LmVtYWlsfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5yb2xlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQucm9sZSA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gdGhpcy5jb2x1bW5TY2hlbWFbMV0uY29sdW1uRGVmO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIGdldEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBib29sZWFuXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2VycyhcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICBzb3J0Q29sdW1uLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb25cclxuICAgICAgKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjYnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cHMgYmFzZWQgb24gdGhlIGNvbHVtbiBuYW1lIGFuZCBzb3J0IGRpcmVjdGlvbi5cclxuICAgKiBAcGFyYW0ge1NvcnR9IHNvcnRcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU29ydEdyb3VwVXNlcnMoc29ydDogU29ydCkge1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gc29ydC5hY3RpdmU7XHJcbiAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uID1cclxuICAgICAgc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5BU0NFTkRJTkc7XHJcbiAgICBpZiAoc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5OT19TT1JUKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvbGVJZHMubGVuZ3RoKVxyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMubGVuZ3RoIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZ3JvdXAgdHlwZSByb2xlcyBieSBjYWxsaW5nIGdldEdyb3VwVHlwZVJvbGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgYXNzaWduIHJvbGVzLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Um9sZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBUeXBlUm9sZXMoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBUeXBlIGFzIHN0cmluZ1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvbGVzID0gcmVzcG9uc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjbGFzc2lmaWNhdGlvbiBieSBjYWxsaW5nIGdldENsYXNzaWZpY2F0aW9ucygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIGNsYXNzaWZpY2F0aW9ucy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1VzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0Q2xhc3NpZmljYXRpb25zKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uY2xhc3NpZmljYXRpb25JZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uY2xhc3NpZmljYXRpb25OYW1lLFxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1lbWJlciB0eXBlcyBieSBjYWxsaW5nIGdldE1lbWJlclR5cGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3VXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldE1lbWJlclR5cGVzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tZW1iZXJUeXBlcz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5tZW1iZXJTdGF0dXNJZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ubWVtYmVyU3RhdHVzRGVzYyxcclxuICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBmaWx0ZXIgb3B0aW9ucyBmb3IgTWVtYmVyIFR5cGUgb3IgQ2xhc3NpZmljYXRpb24gZmlsdGVyIGRlcGVuZHMgb24gdGhlIHNlbGVjdGlvbi5cclxuICAgKiBAcGFyYW0ge0NoaXBPcHRpb259IG9wdGlvblxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zKG9wdGlvbjogQ2hpcE9wdGlvbikge1xyXG4gICAgc3dpdGNoIChvcHRpb24uaWQpIHtcclxuICAgICAgY2FzZSBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5tZW1iZXJUeXBlcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT046IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLmNsYXNzaWZpY2F0aW9ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuUk9MRToge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMucm9sZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYnkgY2FsbGluZyBzZWFyY2hHcm91cFVzZXJzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgdGFibGVEYXRhIHRvIGRpc3BsYXkgdGhlIHVzZXJzIGluIGEgZ3JpZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSAtc2VhcmNoVGVybSBjYW4gYmUgdXNlciBuYW1lIG9yIGVtYWlsIGFuZCB1c2VyIGlzIHNlYXJjaGVkIGJhc2VkIG9uIHRoZSBlbWFpbCBvciBuYW1lLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWFyY2hHcm91cFVzZXJzKHNlYXJjaFRlcm06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hUZXJtID0gc2VhcmNoVGVybT8udHJpbSgpO1xyXG4gICAgbGV0IHBheWxvYWQhOiBTZWFyY2hVc2Vyc1BheWxvYWQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSOiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcz8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyR3JvdXBVc2VycyhbdGhpcy5zZWxlY3RlZFJvbGVzXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIHNlYXJjaEJ5TmFtZU9yRW1haWxPclJlcE9yZzogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogdGhpcy5zZWxlY3RlZFJvbGVJZHMsXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDoge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzPy5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzPy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIHNlYXJjaEJ5TmFtZU9yRW1haWxPclJlcE9yZzogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyxcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLnNlYXJjaEdyb3VwVXNlcnMocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID1cclxuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UudHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgY29uc3Qgbm9Vc2Vyc0ZvdW5kRXJyb3JDb2RlcyA9IFsnMTAyOScsICcxMDMwJywgJzEwMzEnLCAnMTAzMiddO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXMgJiYgbm9Vc2Vyc0ZvdW5kRXJyb3JDb2Rlcy5pbmNsdWRlcyhlcnJvckNvZGVzWzBdKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBvcHRpb25zIG9mIGZpbHRlcnMgYW5kIHJldHVybnMgaWQgb2Ygc2VsZWN0ZWQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7RmlsdGVyc0FuZE9wdGlvbnNbXX0gc2VsZWN0ZWRPcHRpb25zXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJUeXBlfSBmaWx0ZXJUeXBlXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc30gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgIHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSxcclxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXHJcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gICAgc2VsZWN0ZWRGaWx0ZXJJZHM6IHN0cmluZ1tdXHJcbiAgKSB7XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdGVkT3B0aW9uKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkT3B0aW9uKSkge1xyXG4gICAgICAgIGlmIChrZXkgPT09IGZpbHRlclR5cGUpIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3Q6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJJZHMucHVzaChvcHRpb24uaWQgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdC5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1trZXldID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIGdldEdyb3VwVXNlcnNCeVJvbGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgdGFibGVEYXRhIHRvIGRpc3BsYXkgdGhlIHVzZXJzIGluIGEgZ3JpZC5cclxuICAgKiBAcGFyYW0ge0NoaXBPcHRpb25bXSB8IHwgQ2hlY2tib3hPcHRpb25bXX0gcm9sZXNcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRmlsdGVyR3JvdXBVc2VycyhzZWxlY3RlZE9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zW10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb2xlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zID0ge307XHJcbiAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMgPSB7fTtcclxuICAgIGxldCBwYXlsb2FkITogRmlsdGVyVXNlcnNQYXlsb2FkO1xyXG4gICAgc3dpdGNoICh0aGlzLmdyb3VwUm9zdGVyVHlwZSkge1xyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUjoge1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvbGVzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvbGVJZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2hHcm91cFVzZXJzKHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogdGhpcy5zZWxlY3RlZFJvbGVJZHMsXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDoge1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyxcclxuICAgICAgICAgIEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zPy5sZW5ndGggPT09IDAgJiYgIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoR3JvdXBVc2Vycyh0aGlzLnNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlQ2xhc3NpZmljYXRpb25NZW1iZXJTdGF0dXNJZHM6IFtcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyxcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJzQnlSb2xlcyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjcnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjdXN0b20gZXJyb3JzIHdoaWxlIHJldHJpZXZpbmcgZ3JvdXBzIHVzZXJzLCByb2xlcywgc2VhcmNoIHVzZXJzLCBmaWx0ZXIgdXNlciBieSByb2xlcy5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGhhbmRsZUVycm9ycyhlcnJvcjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykgJiYgIWVycm9yPy5lcnJvcj8uc3RhdHVzKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoZXJyb3JNZXNzYWdlLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9wZW5zIHRoZSBjb25maXJtYXRpb24gbW9kYWwgdG8gZ2V0IHVzZXIgY29uZmlybWF0aW9uIHRvIGRlbGV0ZSB0aGUgdXNlcnMgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9wZW5Vc2VyRGVsZXRlQ29uZmlybWF0aW9uTW9kYWwoc2VsZWN0ZWRVc2VyczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VySWRzID0gc2VsZWN0ZWRVc2Vycy5tYXAoKHVzZXI6IFVzZXIpID0+IHVzZXI/LnVzZXJJZCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHVzZXJJZHMuaW5jbHVkZXModGhpcy51c2VySW5mbz8udXNlcklkKSAmJlxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5pc0FkbWluVXNlcigpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKGAke2NvbnN0YW50cz8uZXJyb3JzPy5bMTAzOV19YCwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmZvID0gdGhpcy5ncm91cFNlcnZpY2U/LmdldFNlbGVjdGVkR3JvdXBJbmZvKCk7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkluZm8gPSBjb25zdGFudHM/LmRlbGV0ZVVzZXJzR3JvdXA/LmNvbmZpcm1hdGlvbkluZm87XHJcbiAgICAgIGNvbnN0IGRlbGV0ZVVzZXJHcm91cE1vZGFsT3B0aW9ucyA9IHtcclxuICAgICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgICByaWdodEJ1dHRvbkxhYmVsOiBjb25maXJtYXRpb25JbmZvPy5yaWdodEJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIHByb21wdE1lc3NhZ2U6IGAke2NvbmZpcm1hdGlvbkluZm8/LnByb21wdE1lc3NhZ2VQYXJ0MX0gJHt1c2VySWRzPy5sZW5ndGh9ICR7Y29uZmlybWF0aW9uSW5mbz8ucHJvbXB0TWVzc2FnZVBhcnQyfSAke3NlbGVjdGVkR3JvdXBJbmZvPy5ncm91cE5hbWV9P2AsXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZT8uTUlERExFLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiBkZWxldGVVc2VyR3JvdXBNb2RhbE9wdGlvbnMsXHJcbiAgICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgICBhdXRvRm9jdXM6ICdkaWFsb2cnLFxyXG4gICAgICAgIGFyaWFMYWJlbDogY29uc3RhbnRzPy5hcmlhTGFiZWw/LmFsZXJ0LFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWZcclxuICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgICB1c2VySWRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbmQgQVBJIHJlcXVlc3QgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCBoYW5kbGVzIHRoZSBzdWNjZXNzIGFuZCBlcnJvciByZXNwb25zZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZVVzZXJzR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCB1c2VySWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZGVsZXRlVXNlcnNHcm91cFRleHRzID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwO1xyXG4gICAgY29uc3QgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIFtncm91cElkXTogdXNlcklkcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZGVsZXRlVXNlcnNHcm91cChkZWxldGVVc2VyR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIGAke3Jlcy5ib2R5fSAke2RlbGV0ZVVzZXJzR3JvdXBUZXh0cz8ubWVzc2FnZT8uc3VjY2Vzcz8ucmVtb3ZlZH1gLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIHVzZXIgaW5mbyBhbmQgZW1pdHMgZXZlbnQgb3Blbk1vZGFsTm90aWZpZXIgd2l0aCBFRElUX1JPU1RFUl9VU0VSX1JPTEUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvW119IHNlbGVjdGVkVXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRWRpdFVzZXJSb2xlcyhzZWxlY3RlZFVzZXJJbmZvOiBHcm91cFVzZXJJbmZvW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFNlbGVjdGVkVXNlckluZm8oe1xyXG4gICAgICAgIGVtYWlsOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5lbWFpbCxcclxuICAgICAgICBuYW1lOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5uYW1lLFxyXG4gICAgICAgIHJvbGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnJvbGUsXHJcbiAgICAgICAgdXNlcklkOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy51c2VySWQsXHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IHNlbGVjdGVkVXNlckluZm9bMF0/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogc2VsZWN0ZWRVc2VySW5mb1swXT8ub3JnYW5pemF0aW9uLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogc2VsZWN0ZWRVc2VySW5mb1swXT8ubWVtYmVyU3RhdHVzLFxyXG4gICAgICB9KTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2Uuc2V0U2VsZWN0ZWRVc2VySW5mbyh7XHJcbiAgICAgICAgZW1haWw6IHNlbGVjdGVkVXNlckluZm9bMF0/LmVtYWlsLFxyXG4gICAgICAgIG5hbWU6IHNlbGVjdGVkVXNlckluZm9bMF0/Lm5hbWUsXHJcbiAgICAgICAgcm9sZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ucm9sZSxcclxuICAgICAgICB1c2VySWQ6IHNlbGVjdGVkVXNlckluZm9bMF0/LnVzZXJJZCxcclxuICAgICAgICBjYW5EZWxldGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LmNhbkRlbGV0ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5FRElUX1JPU1RFUl9VU0VSX1JPTEVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBvcGVuTW9kYWxOb3RpZmllciBldmVudCB3aXRoIEdyb3VwRnVuY3Rpb25UeXBlIHZhbHVlIGFzIEFERF9VU0VSX1RPX1JPU1RFUlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGROZXdVc2VyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGFsZXJ0cyBmb3Igc3VjY2VzcywgZXJyb3IsIHdhcm5pbmcuXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBtZXNzYWdlIC1lcnJvciBvciB3YXJuaW5nIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gYWxlcnRUeXBlXHJcbiAgICogQHJldHVybiAtcmV0dXJucyBub3RoaW5nXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzaG93QWxlcnRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCBhbGVydFR5cGU6IEFsZXJ0VHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2U/LnNob3dNZXNzYWdlKHtcclxuICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgYWxlcnRUeXBlOiBhbGVydFR5cGUsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8aWVlZXNhLWRhdGEtdGFibGVcclxuICBbdGFibGVEYXRhSW5mb109XCJ0YWJsZURhdGFcIlxyXG4gIFtjb2x1bW5TY2hlbWFJbmZvXT1cImNvbHVtblNjaGVtYVwiXHJcbiAgW3NlYXJjaFBsYWNlSG9sZGVyVGV4dF09XCJzZWFyY2hQbGFjZWhvbGRlclRleHRcIlxyXG4gIFt0YWJsZUFjdGlvbnNdPVwicm9zdGVyQWN0aW9uc1wiXHJcbiAgW2lzQ2VsbFRleHRPdmVyZmxvd0VsbGlwc2lzXT1cInRydWVcIlxyXG4gIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gIFtjbGFzc05hbWVdPVwiZGF0YVRhYmxlQ2xhc3NOYW1lXCJcclxuICBbc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXT1cImZpbHRlck9wdGlvbnNcIlxyXG4gIFtkZWZhdWx0U29ydGVkQ29sdW1uXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gIChzZWxlY3RlZEZpbHRlcik9XCJzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgKHJlbW92ZUZpbHRlcmVkT3B0aW9uKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoZmlsdGVyZWRPcHRpb25zKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoc2VhcmNoZWRWYWx1ZSk9XCJvblNlYXJjaEdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKHNlbGVjdGVkUm93VG9FZGl0KT1cIm9uRWRpdFVzZXJSb2xlcygkZXZlbnQpXCJcclxuICAoc2VsZWN0ZWRSb3dzVG9EZWxldGUpPVwib3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbCgkZXZlbnQpXCJcclxuICAoc29ydENoYW5nZSk9XCJvblNvcnRHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChhZGRSb3cpPVwib25BZGROZXdVc2VyKClcIlxyXG4+PC9pZWVlc2EtZGF0YS10YWJsZT5cclxuIl19