@ieeesa-npm/groups 0.15.17 → 0.15.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +27 -1
- package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +8 -10
- package/esm2022/lib/components/create-group/create-group.component.mjs +2 -2
- package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +7 -55
- package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +3 -3
- package/esm2022/lib/components/interest-responses/interest-responses.component.mjs +119 -0
- package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +370 -15
- package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +106 -8
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +2 -2
- package/esm2022/lib/groups.component.mjs +58 -9
- package/esm2022/lib/models/interest-response.model.mjs +18 -0
- package/esm2022/lib/models/roster-import.model.mjs +1 -1
- package/esm2022/lib/services/groups.service.mjs +91 -7
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ieeesa-npm-groups.mjs +819 -210
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +0 -10
- package/lib/components/interest-responses/interest-responses.component.d.ts +80 -0
- package/lib/components/interested-rosters/interested-rosters.component.d.ts +143 -9
- package/lib/components/roster-import-history/roster-import-history.component.d.ts +42 -4
- package/lib/groups.component.d.ts +9 -4
- package/lib/models/interest-response.model.d.ts +209 -0
- package/lib/models/roster-import.model.d.ts +12 -0
- package/lib/services/groups.service.d.ts +66 -10
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/esm2022/lib/assets/country-calling-codes.mjs +0 -83
- package/lib/assets/country-calling-codes.d.ts +0 -14
|
@@ -853,7 +853,7 @@ export class ViewRosterComponent {
|
|
|
853
853
|
this.destroy$.unsubscribe();
|
|
854
854
|
}
|
|
855
855
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, deps: [{ token: i1.MatDialog }, { token: i2.GroupsService }, { token: i3.AlertsService }, { token: i0.ChangeDetectorRef }, { token: i3.GlobalErrorHandlerService }, { token: i4.RosterExportService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
856
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", host: { listeners: { "window:resize": "closeAddMenuOnViewportChange()", "window:scroll": "closeAddMenuOnViewportChange()" } }, viewQueries: [{ propertyName: "addMenuTrigger", first: true, predicate: ["addMenuTrigger"], descendants: true }, { propertyName: "addMenuAnchor", first: true, predicate: ["addMenuTrigger"], descendants: true, read: ElementRef }], ngImport: i0, 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)=\"onAddIconClick()\"\r\n>\r\n <!-- Export Roster action \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__actions-slot\">\r\n <div class=\"ieeesa-view-roster__export-anchor\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"!tableData?.length || (rosterExportService.isExportInProgress$ | async)\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n\r\n <!-- View History action \u2014 opens the import-history popup (mock data). -->\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__history-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterImportHistory?.ariaLabel\"\r\n (click)=\"onViewHistory()\"\r\n >\r\n {{ constants?.rosterImportHistory?.buttonLabel }}\r\n </button>\r\n\r\n <!-- Invisible anchor for the \"Add\" menu (Add Manually / Bulk Import).\r\n The add-user icon lives inside the data-table and only emits (addRow);\r\n onAddIconClick() opens this menu programmatically, anchored here so it\r\n appears just under the add icon. -->\r\n <span\r\n #addMenuTrigger=\"matMenuTrigger\"\r\n [matMenuTriggerFor]=\"addMenu\"\r\n class=\"ieeesa-view-roster__add-menu-anchor\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <mat-menu\r\n #addMenu=\"matMenu\"\r\n class=\"ieeesa-view-roster__add-menu\"\r\n xPosition=\"before\"\r\n yPosition=\"below\"\r\n >\r\n <button\r\n mat-menu-item\r\n type=\"button\"\r\n class=\"ieeesa-view-roster__add-menu-item\"\r\n (click)=\"onAddManually()\"\r\n >\r\n <span class=\"ieeesa-view-roster__add-menu-item-title\">\r\n {{ constants?.addRosterMenu?.addManually?.title ?? 'Add Manually' }}\r\n </span>\r\n <span class=\"ieeesa-view-roster__add-menu-item-subtitle\">\r\n {{ constants?.addRosterMenu?.addManually?.subtitle ?? 'Search by email, fill details' }}\r\n </span>\r\n </button>\r\n <button\r\n mat-menu-item\r\n type=\"button\"\r\n class=\"ieeesa-view-roster__add-menu-item\"\r\n (click)=\"onImportRoster()\"\r\n >\r\n <span class=\"ieeesa-view-roster__add-menu-item-title\">\r\n {{ constants?.addRosterMenu?.bulkImport?.title ?? 'Bulk Import' }}\r\n </span>\r\n <span class=\"ieeesa-view-roster__add-menu-item-subtitle\">\r\n {{ constants?.addRosterMenu?.bulkImport?.subtitle ?? 'Upload CSV or XLS file' }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\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-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;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:focus{background:#1f75a7}.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:focus{background:#f0f5f9}.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:focus{background-color:#f0f5f9}.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-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.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-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions{align-items:center;justify-content:space-between;flex-wrap:wrap;row-gap:.5rem}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions ieeesa-filter.col-md-7,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions ieeesa-filter.col-lg-6{flex:0 1 auto;width:auto;max-width:100%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions>.col-md-5,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions>.col-lg-6{flex:1 1 34rem;width:auto;max-width:100%;min-width:0;flex-wrap:wrap;justify-content:flex-end;gap:.5rem!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions .ieeesa-data-table__search-wrapper{width:12rem!important;min-width:11rem;flex:0 1 12rem}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .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}}.ieeesa-view-roster__actions-slot{display:contents}.ieeesa-view-roster__export-anchor{position:relative;display:inline-flex;align-items:center}.ieeesa-view-roster__add-menu-anchor{position:fixed;width:0;height:0;overflow:hidden;pointer-events:none}.mat-mdc-menu-panel.ieeesa-view-roster__add-menu{min-width:232px;max-width:320px;font-family:Calibri Regular,sans-serif;border-radius:8px;border:1px solid #eceef1;box-shadow:0 8px 24px #00000029;background:#fff;overflow:hidden}.mat-mdc-menu-panel.ieeesa-view-roster__add-menu .mat-mdc-menu-content{padding:0}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;line-height:1.3;padding:12px 16px;min-height:0;height:auto}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item:hover:not([disabled]),.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item.cdk-keyboard-focused:not([disabled]),.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item.cdk-program-focused:not([disabled]){background-color:#f4f9fc}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item+.ieeesa-view-roster__add-menu-item{border-top:1px solid #eceef1}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item .mdc-list-item__primary-text{display:flex;flex-direction:column;gap:2px;white-space:normal;overflow:visible;text-overflow:clip}.ieeesa-view-roster__add-menu-item-title{display:block;width:100%;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;line-height:1.35;color:#1f2937}.ieeesa-view-roster__add-menu-item-subtitle{display:block;width:100%;margin-top:2px;font-family:Calibri Regular,sans-serif;font-size:12px;font-weight:400;line-height:1.35;color:#6f7782}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}.ieeesa-view-roster__history-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: ExportFormatPopoverComponent, selector: "ieeesa-export-format-popover", inputs: ["formatOptions", "origin", "isOpen", "popoverTitle", "formatSubtitles"], outputs: ["formatSelected", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
856
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", host: { listeners: { "window:resize": "closeAddMenuOnViewportChange()", "window:scroll": "closeAddMenuOnViewportChange()" } }, viewQueries: [{ propertyName: "addMenuTrigger", first: true, predicate: ["addMenuTrigger"], descendants: true }, { propertyName: "addMenuAnchor", first: true, predicate: ["addMenuTrigger"], descendants: true, read: ElementRef }], ngImport: i0, 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)=\"onAddIconClick()\"\r\n>\r\n <!-- Export Roster action \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__actions-slot\">\r\n <div class=\"ieeesa-view-roster__export-anchor\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"!tableData?.length || (rosterExportService.isExportInProgress$ | async)\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n\r\n <!-- View History action \u2014 opens the import-history popup (mock data). -->\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__history-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterImportHistory?.ariaLabel\"\r\n (click)=\"onViewHistory()\"\r\n >\r\n {{ constants?.rosterImportHistory?.buttonLabel }}\r\n </button>\r\n\r\n <!-- Invisible anchor for the \"Add\" menu (Add Manually / Bulk Import).\r\n The add-user icon lives inside the data-table and only emits (addRow);\r\n onAddIconClick() opens this menu programmatically, anchored here so it\r\n appears just under the add icon. -->\r\n <span\r\n #addMenuTrigger=\"matMenuTrigger\"\r\n [matMenuTriggerFor]=\"addMenu\"\r\n class=\"ieeesa-view-roster__add-menu-anchor\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <mat-menu\r\n #addMenu=\"matMenu\"\r\n class=\"ieeesa-view-roster__add-menu\"\r\n xPosition=\"before\"\r\n yPosition=\"below\"\r\n >\r\n <button\r\n mat-menu-item\r\n type=\"button\"\r\n class=\"ieeesa-view-roster__add-menu-item\"\r\n (click)=\"onAddManually()\"\r\n >\r\n <span class=\"ieeesa-view-roster__add-menu-item-title\">\r\n {{ constants?.addRosterMenu?.addManually?.title ?? 'Add Manually' }}\r\n </span>\r\n <span class=\"ieeesa-view-roster__add-menu-item-subtitle\">\r\n {{ constants?.addRosterMenu?.addManually?.subtitle ?? 'Search by email, fill details' }}\r\n </span>\r\n </button>\r\n <button\r\n mat-menu-item\r\n type=\"button\"\r\n class=\"ieeesa-view-roster__add-menu-item\"\r\n (click)=\"onImportRoster()\"\r\n >\r\n <span class=\"ieeesa-view-roster__add-menu-item-title\">\r\n {{ constants?.addRosterMenu?.bulkImport?.title ?? 'Bulk Import' }}\r\n </span>\r\n <span class=\"ieeesa-view-roster__add-menu-item-subtitle\">\r\n {{ constants?.addRosterMenu?.bulkImport?.subtitle ?? 'Upload CSV or XLS file' }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\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-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;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:focus{background:#1f75a7}.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:focus{background:#f0f5f9}.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:focus{background-color:#f0f5f9}.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-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.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-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions{align-items:center;justify-content:space-between;flex-wrap:wrap;row-gap:.5rem}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions ieeesa-filter.col-md-7,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions ieeesa-filter.col-lg-6{flex:0 1 auto;width:auto;max-width:100%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions>.col-md-5,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions>.col-lg-6{flex:1 1 34rem;width:auto;max-width:100%;min-width:0;flex-wrap:wrap;justify-content:flex-end;gap:.5rem!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__actions .ieeesa-data-table__search-wrapper{width:12rem!important;min-width:11rem;flex:0 1 12rem}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .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}}.ieeesa-view-roster__actions-slot{display:contents}.ieeesa-view-roster__export-anchor{position:relative;display:inline-flex;align-items:center}.ieeesa-view-roster__add-menu-anchor{position:fixed;width:0;height:0;overflow:hidden;pointer-events:none}.mat-mdc-menu-panel.ieeesa-view-roster__add-menu{min-width:232px;max-width:320px;font-family:Calibri Regular,sans-serif;border-radius:8px;border:1px solid #eceef1;box-shadow:0 8px 24px #00000029;background:#fff;overflow:hidden}.mat-mdc-menu-panel.ieeesa-view-roster__add-menu .mat-mdc-menu-content{padding:0}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;line-height:1.3;padding:12px 16px;min-height:0;height:auto}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item:hover:not([disabled]),.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item.cdk-keyboard-focused:not([disabled]),.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item.cdk-program-focused:not([disabled]){background-color:#f4f9fc}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item+.ieeesa-view-roster__add-menu-item{border-top:1px solid #eceef1}.ieeesa-view-roster__add-menu-item.mat-mdc-menu-item .mdc-list-item__primary-text{display:flex;flex-direction:column;gap:2px;white-space:normal;overflow:visible;text-overflow:clip}.ieeesa-view-roster__add-menu-item-title{display:block;width:100%;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;line-height:1.35;color:#1f2937}.ieeesa-view-roster__add-menu-item-subtitle{display:block;width:100%;margin-top:2px;font-family:Calibri Regular,sans-serif;font-size:12px;font-weight:400;line-height:1.35;color:#6f7782}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}.ieeesa-view-roster__history-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle", "rowDropdownChange"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: ExportFormatPopoverComponent, selector: "ieeesa-export-format-popover", inputs: ["formatOptions", "origin", "isOpen", "popoverTitle", "formatSubtitles"], outputs: ["formatSelected", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
857
857
|
}
|
|
858
858
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, decorators: [{
|
|
859
859
|
type: Component,
|
|
@@ -878,4 +878,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
878
878
|
type: HostListener,
|
|
879
879
|
args: ['window:scroll']
|
|
880
880
|
}] } });
|
|
881
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBR1osU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxlQUFlLEVBRWYsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxTQUFTLEVBSVQsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUUxQiw0QkFBNEIsR0FDN0IsTUFBTSwwQkFBMEIsQ0FBQztBQUtsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFRL0MsT0FBTyxLQUFLLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFP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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXg2QlUsbUJBQW1CO21HQUFuQixtQkFBbUIsNFlBS08sVUFBVSw2QkNwRmpELDh5SUFzR0EsNDJiRG5DSSxZQUFZLG9GQUNaLGtCQUFrQix1aERBQ2xCLGVBQWUsOEJBQ2YsZUFBZSwyUUFDZixhQUFhLGdaQUNiLDRCQUE0Qjs7NEZBT25CLG1CQUFtQjtrQkFoQi9CLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsNEJBQTRCO3FCQUM3QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO2tRQUtsQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHM0IsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFxeUJqRCw0QkFBNEI7c0JBRjNCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG4gIFRhYmxlQWN0aW9ucyxcclxuICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgQ2hpcHNUeXBlLFxyXG4gIEFsaWduVHlwZSxcclxuICBDaGlwT3B0aW9uLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcclxuICBNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcclxuICBFeHBvcnRGb3JtYXQsXHJcbiAgRXhwb3J0Rm9ybWF0UG9wb3ZlckNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgQWxlcnRUeXBlIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIFVzZXIsXHJcbiAgTG9nZ2VkSW5Vc2VySW5mbyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWNvbHVtbi1zY2hlbWEtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3N0ZXItZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCwgZWRpdCwgZGVsZXRlIHVzZXIgdG8gZ3JvdXAgcm9zdGVyLCBhc3NpZ24gYW5kIG1vZGlmeSByb2xlcyhzKSB0byB0aGUgZ3JvdXAgdXNlcnMsIGFuZCBzZWFyY2ggdXNlciBmcm9tIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2Etdmlldy1yb3N0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIEV4cG9ydEZvcm1hdFBvcG92ZXJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1yb3N0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8qKiBUcmlnZ2VyIGZvciB0aGUgXCJBZGRcIiBtZW51IChBZGQgTWFudWFsbHkgLyBCdWxrIEltcG9ydCkuICovXHJcbiAgQFZpZXdDaGlsZCgnYWRkTWVudVRyaWdnZXInKSBhZGRNZW51VHJpZ2dlcj86IE1hdE1lbnVUcmlnZ2VyO1xyXG4gIC8qKiBJbnZpc2libGUgYW5jaG9yIGVsZW1lbnQgdGhlIFwiQWRkXCIgbWVudSBhdHRhY2hlcyB0by4gKi9cclxuICBAVmlld0NoaWxkKCdhZGRNZW51VHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIGFkZE1lbnVBbmNob3I/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHZpZXdSb3N0ZXJDb25zdGFudHMgPSB0aGlzLmNvbnN0YW50cz8udmlld1Jvc3RlcjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRpYWxvZ1JlZjogYW55O1xyXG4gIGFsaWdubWVudFR5cGUgPSBBbGlnblR5cGU7XHJcbiAgZmlsdGVycyE6IENoaXBPcHRpb25bXTtcclxuICBjb2x1bW5TY2hlbWEhOiBUYWJsZUNvbHVtblNjaGVtYVtdO1xyXG4gIHRhYmxlRGF0YSE6IFVzZXJbXTtcclxuICBzZWxlY3RlZFJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VhcmNoUGxhY2Vob2xkZXJUZXh0ITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUm9sZXM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICBzZWxlY3RlZENsYXNzaWZpY2F0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICByb2xlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGZpbHRlck9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIHJvc3RlckFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzU2VhcmNoTmVlZGVkOiB0cnVlLFxyXG4gICAgaXNGaWx0ZXJOZWVkZWQ6IHRydWUsXHJcbiAgICBpc0FkZE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0VkaXROZWVkZWQ6IGZhbHNlLFxyXG4gIH07XHJcbiAgZGVmYXVsdFNvcnRlZENvbHVtbiE6IHN0cmluZztcclxuICBkYXRhVGFibGVDbGFzc05hbWUhOiBzdHJpbmc7XHJcbiAgaGFzQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcclxuICBzZWFyY2hUZXJtITogc3RyaW5nO1xyXG4gIGdyb3VwUm9zdGVyVHlwZSE6IEdyb3VwUm9zdGVyVHlwZTtcclxuICBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbiA9IHRydWU7XHJcbiAgdGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbCA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw7XHJcbiAgdGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnMgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2VycztcclxuICBlbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5ID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIHJvc3RlckV4cG9ydFNlcnZpY2U6IFJvc3RlckV4cG9ydFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0FkZE5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0VkaXROZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNEZWxldGVOZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRVc2VySW5mbygpO1xyXG4gICAgdGhpcy5yb3N0ZXJFeHBvcnRTZXJ2aWNlLnNldEFwaUJhc2VVcmwodGhpcy5ncm91cFNlcnZpY2U/LmFwaUJhc2VVcmwpO1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmhhc0NsYXNzaWZpY2F0aW9uID0gZ3JvdXBUeXBlPy5oYXNDbGFzc2lmaWNhdGlvbiA/PyBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID0gZ3JvdXBUeXBlPy5yb3N0ZXJUeXBlIGFzIEdyb3VwUm9zdGVyVHlwZTtcclxuICAgIGlmICghdGhpcy5ncm91cFJvc3RlclR5cGUpXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSxcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5XQVJOSU5HLFxyXG4gICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWd1cmVUYWJsZUluZm8oKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZGQgbmV3IHVzZXIgc3VjY2VzcyBtZXNzYWdlIHdoZW4gY2FuU2hvd01lc3NhZ2UgaXMgc2V0IHRydWVcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZT8uY2FuU2hvd01lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuY2FuU2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LnJvc3RlckZ1bmN0aW9uVHlwZSA9PT1cclxuICAgICAgICBSb3N0ZXJGdW5jdGlvblR5cGU/LkVESVRfUk9TVEVSX1VTRVJfUk9MRVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZWRpdFVzZXJSb2xlcz8ubWVzc2FnZT8uc3VjY2Vzcz8uc3VibWlzc2lvbixcclxuICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZGVzIG9yIHNob3dzIHJvc3RlciBhZGQgdXNlciwgZWRpdCB1c2VyIGFuZCBkZWxldGUgdXNlciBhY3Rpb25zIGJhc2VkIG9uIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX09GRklDRVJTKSB8fFxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9ST1NURVJTKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlIFRhYmxlIGluZm9ybWF0aW9uIGJhc2VkIG9uIGdyb3VwIHJvc3RlciB0eXBlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjb25maWd1cmVUYWJsZUluZm8oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1pbmRpdmlkdWFsLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVySW5kaXZpZHVhbDtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5jb2x1bW5TY2hlbWEgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICBoZWFkaW5nOiAnJyxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuc2VsZWN0fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTkFNRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1QTE9ZRVIsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmVtcGxveWVyLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuZW1wbG95ZXIgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNQUlMLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmVtYWlsID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA1LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubWVtYmVyVHlwZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50Lm1lbWJlclN0YXR1cyA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA2LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5PUkdBTklaQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm9yZ2FuaXphdGlvbk5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5vcmdhbml6YXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDgsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LnJvbGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5yb2xlID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICAvLyBJbnNlcnQgQ2xhc3NpZmljYXRpb24gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBSb2xlIGNvbHVtbiAoaXRzIG9yaWdpbmFsIHBvc2l0aW9uKS5cclxuICAgICAgICBjb25zdCByb2xlQ29sdW1uSW5kZXggPSB0aGlzLmNvbHVtblNjaGVtYS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uY29sdW1uRGVmID09PSBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5ST0xFXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbkluc2VydEluZGV4ID1cclxuICAgICAgICAgIHJvbGVDb2x1bW5JbmRleCA9PT0gLTEgPyB0aGlzLmNvbHVtblNjaGVtYS5sZW5ndGggLSAxIDogcm9sZUNvbHVtbkluZGV4O1xyXG4gICAgICAgIHRoaXMuY29sdW1uU2NoZW1hLnNwbGljZShjbGFzc2lmaWNhdGlvbkluc2VydEluZGV4LCAwLCB7XHJcbiAgICAgICAgICBpZDogNyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuY2xhc3NpZmljYXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICB0aGlzLmRhdGFUYWJsZUNsYXNzTmFtZSA9ICdpZWVlc2Etc3lzdGVtLXVzZXJzLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVyU3lzdGVtVXNlcnM7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGhlYWRpbmc6ICcnLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5zZWxlY3R9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAyLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5OQU1FLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2Vycz8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1BSUwsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LmVtYWlsfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5yb2xlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQucm9sZSA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gdGhpcy5jb2x1bW5TY2hlbWFbMV0uY29sdW1uRGVmO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIGdldEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBib29sZWFuXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2VycyhcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICBzb3J0Q29sdW1uLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb25cclxuICAgICAgKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjYnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cHMgYmFzZWQgb24gdGhlIGNvbHVtbiBuYW1lIGFuZCBzb3J0IGRpcmVjdGlvbi5cclxuICAgKiBAcGFyYW0ge1NvcnR9IHNvcnRcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU29ydEdyb3VwVXNlcnMoc29ydDogU29ydCkge1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gc29ydC5hY3RpdmU7XHJcbiAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uID1cclxuICAgICAgc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5BU0NFTkRJTkc7XHJcbiAgICBpZiAoc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5OT19TT1JUKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvbGVJZHMubGVuZ3RoKVxyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMubGVuZ3RoIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZ3JvdXAgdHlwZSByb2xlcyBieSBjYWxsaW5nIGdldEdyb3VwVHlwZVJvbGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgYXNzaWduIHJvbGVzLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Um9sZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBUeXBlUm9sZXMoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBUeXBlIGFzIHN0cmluZ1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvbGVzID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9uIGJ5IGNhbGxpbmcgZ2V0Q2xhc3NpZmljYXRpb25zKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgY2xhc3NpZmljYXRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3VXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRDbGFzc2lmaWNhdGlvbnMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbklkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbWVtYmVyIHR5cGVzIGJ5IGNhbGxpbmcgZ2V0TWVtYmVyVHlwZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBtZW1iZXIgdHlwZXMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZW1iZXJUeXBlcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICBtZW1iZXJUeXBlcz8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMubWVtYmVyVHlwZXM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBvcHRpb24ucm9sZUlkLFxyXG4gICAgICAgIG5hbWU6IG9wdGlvbi5yb2xlTmFtZSxcclxuICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGZpbHRlciBvcHRpb25zIGZvciBNZW1iZXIgVHlwZSBvciBDbGFzc2lmaWNhdGlvbiBmaWx0ZXIgZGVwZW5kcyBvbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMob3B0aW9uOiBDaGlwT3B0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKG9wdGlvbi5pZCkge1xyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuTUVNQkVSX1RZUEU6IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLm1lbWJlclR5cGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTjoge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuY2xhc3NpZmljYXRpb25zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5ST0xFOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5yb2xlcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIHNlYXJjaEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIC1zZWFyY2hUZXJtIGNhbiBiZSB1c2VyIG5hbWUgb3IgZW1haWwgYW5kIHVzZXIgaXMgc2VhcmNoZWQgYmFzZWQgb24gdGhlIGVtYWlsIG9yIG5hbWUuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblNlYXJjaEdyb3VwVXNlcnMoc2VhcmNoVGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtPy50cmltKCk7XHJcbiAgICBsZXQgcGF5bG9hZCE6IFNlYXJjaFVzZXJzUGF5bG9hZDtcclxuICAgIHN3aXRjaCAodGhpcy5ncm91cFJvc3RlclR5cGUpIHtcclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVI6IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHM/Lmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM/Lmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuc2VhcmNoR3JvdXBVc2VycyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBjb25zdCBub1VzZXJzRm91bmRFcnJvckNvZGVzID0gWycxMDI5JywgJzEwMzAnLCAnMTAzMScsICcxMDMyJ107XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlcyAmJiBub1VzZXJzRm91bmRFcnJvckNvZGVzLmluY2x1ZGVzKGVycm9yQ29kZXNbMF0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIG9wdGlvbnMgb2YgZmlsdGVycyBhbmQgcmV0dXJucyBpZCBvZiBzZWxlY3RlZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc1tdfSBzZWxlY3RlZE9wdGlvbnNcclxuICAgKiBAcGFyYW0ge0ZpbHRlclR5cGV9IGZpbHRlclR5cGVcclxuICAgKiBAcGFyYW0ge0ZpbHRlcnNBbmRPcHRpb25zfSBzZWxlY3RlZEZpbHRlck9wdGlvbnNcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBGaWx0ZXJzQW5kT3B0aW9uc1tdLFxyXG4gICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcclxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMsXHJcbiAgICBzZWxlY3RlZEZpbHRlcklkczogc3RyaW5nW11cclxuICApIHtcclxuICAgIHNlbGVjdGVkT3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRPcHRpb24pKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gZmlsdGVyVHlwZSkge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdDogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgdmFsdWU/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlcklkcy5wdXNoKG9wdGlvbi5pZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0LnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW2tleV0gPSBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbltdIHwgfCBDaGVja2JveE9wdGlvbltdfSByb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25GaWx0ZXJHcm91cFVzZXJzKHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMgPSB7fTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyA9IHt9O1xyXG4gICAgbGV0IHBheWxvYWQhOiBGaWx0ZXJVc2Vyc1BheWxvYWQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZXMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZUlkc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaEdyb3VwVXNlcnModGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2hHcm91cFVzZXJzKHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVXNlcnNCeVJvbGVzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgcmV0cmlldmluZyBncm91cHMgdXNlcnMsIHJvbGVzLCBzZWFyY2ggdXNlcnMsIGZpbHRlciB1c2VyIGJ5IHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3JcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShlcnJvck1lc3NhZ2UsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBtb2RhbCB0byBnZXQgdXNlciBjb25maXJtYXRpb24gdG8gZGVsZXRlIHRoZSB1c2VycyBmcm9tIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbChzZWxlY3RlZFVzZXJzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJJZHMgPSBzZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogVXNlcikgPT4gdXNlcj8udXNlcklkKTtcclxuICAgIGlmIChcclxuICAgICAgdXNlcklkcy5pbmNsdWRlcyh0aGlzLnVzZXJJbmZvPy51c2VySWQpICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQWRtaW5Vc2VyKCkgJiZcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKGAke2NvbnN0YW50cz8uZXJyb3JzPy5bMTAzOV19YCwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmZvID0gdGhpcy5ncm91cFNlcnZpY2U/LmdldFNlbGVjdGVkR3JvdXBJbmZvKCk7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkluZm8gPSBjb25zdGFudHM/LmRlbGV0ZVVzZXJzR3JvdXA/LmNvbmZpcm1hdGlvbkluZm87XHJcbiAgICAgIGNvbnN0IGRlbGV0ZVVzZXJHcm91cE1vZGFsT3B0aW9ucyA9IHtcclxuICAgICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgICByaWdodEJ1dHRvbkxhYmVsOiBjb25maXJtYXRpb25JbmZvPy5yaWdodEJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIHByb21wdE1lc3NhZ2U6IGAke2NvbmZpcm1hdGlvbkluZm8/LnByb21wdE1lc3NhZ2VQYXJ0MX0gJHt1c2VySWRzPy5sZW5ndGh9ICR7Y29uZmlybWF0aW9uSW5mbz8ucHJvbXB0TWVzc2FnZVBhcnQyfSAke3NlbGVjdGVkR3JvdXBJbmZvPy5ncm91cE5hbWV9P2AsXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZT8uTUlERExFLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiBkZWxldGVVc2VyR3JvdXBNb2RhbE9wdGlvbnMsXHJcbiAgICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgICBhdXRvRm9jdXM6ICdkaWFsb2cnLFxyXG4gICAgICAgIGFyaWFMYWJlbDogY29uc3RhbnRzPy5hcmlhTGFiZWw/LmFsZXJ0LFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWZcclxuICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgICB1c2VySWRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbmQgQVBJIHJlcXVlc3QgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCBoYW5kbGVzIHRoZSBzdWNjZXNzIGFuZCBlcnJvciByZXNwb25zZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZVVzZXJzR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCB1c2VySWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZGVsZXRlVXNlcnNHcm91cFRleHRzID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwO1xyXG4gICAgY29uc3QgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIFtncm91cElkXTogdXNlcklkcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZGVsZXRlVXNlcnNHcm91cChkZWxldGVVc2VyR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIGAke3Jlcy5ib2R5fSAke2RlbGV0ZVVzZXJzR3JvdXBUZXh0cz8ubWVzc2FnZT8uc3VjY2Vzcz8ucmVtb3ZlZH1gLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIHVzZXIgaW5mbyBhbmQgZW1pdHMgZXZlbnQgb3Blbk1vZGFsTm90aWZpZXIgd2l0aCBFRElUX1JPU1RFUl9VU0VSX1JPTEUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvW119IHNlbGVjdGVkVXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRWRpdFVzZXJSb2xlcyhzZWxlY3RlZFVzZXJJbmZvOiBHcm91cFVzZXJJbmZvW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFNlbGVjdGVkVXNlckluZm8oe1xyXG4gICAgICAgIGVtYWlsOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5lbWFpbCxcclxuICAgICAgICBuYW1lOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5uYW1lLFxyXG4gICAgICAgIHJvbGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnJvbGUsXHJcbiAgICAgICAgdXNlcklkOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy51c2VySWQsXHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IHNlbGVjdGVkVXNlckluZm9bMF0/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogc2VsZWN0ZWRVc2VySW5mb1swXT8ub3JnYW5pemF0aW9uLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogc2VsZWN0ZWRVc2VySW5mb1swXT8ubWVtYmVyU3RhdHVzLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2FuRGVsZXRlLFxyXG4gICAgICAgIHBob25lQ291bnRyeUNvZGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lQ291bnRyeUNvZGUsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lTnVtYmVyLFxyXG4gICAgICAgIGFkZHJlc3M6IHNlbGVjdGVkVXNlckluZm9bMF0/LmFkZHJlc3MsXHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5zZXRTZWxlY3RlZFVzZXJJbmZvKHtcclxuICAgICAgICBlbWFpbDogc2VsZWN0ZWRVc2VySW5mb1swXT8uZW1haWwsXHJcbiAgICAgICAgbmFtZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ubmFtZSxcclxuICAgICAgICByb2xlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5yb2xlLFxyXG4gICAgICAgIHVzZXJJZDogc2VsZWN0ZWRVc2VySW5mb1swXT8udXNlcklkLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2FuRGVsZXRlLFxyXG4gICAgICAgIHBob25lQ291bnRyeUNvZGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lQ291bnRyeUNvZGUsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lTnVtYmVyLFxyXG4gICAgICAgIGFkZHJlc3M6IHNlbGVjdGVkVXNlckluZm9bMF0/LmFkZHJlc3MsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuRURJVF9ST1NURVJfVVNFUl9ST0xFXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhIGNsaWNrIG9uIHRoZSBkYXRhLXRhYmxlJ3MgYWRkLXVzZXIgaWNvbi4gVGhlIGFkZCBpY29uIGxpdmVzIGluc2lkZVxyXG4gICAqIHRoZSBzaGFyZWQgRGF0YVRhYmxlQ29tcG9uZW50IGFuZCBvbmx5IGVtaXRzIChhZGRSb3cpLCBzbyB3ZSBjYW4ndCBhdHRhY2ggYVxyXG4gICAqIG1lbnUgdHJpZ2dlciB0byBpdCBkaXJlY3RseS4gSW5zdGVhZCB3ZSBwb3NpdGlvbiBhbiBpbnZpc2libGUsIGZpeGVkLXBvc2l0aW9uXHJcbiAgICogYW5jaG9yIGF0IHRoZSBhZGQgaWNvbidzIG9uLXNjcmVlbiBsb2NhdGlvbiwgdGhlbiBvcGVuIHRoZSBtZW51IGZyb20gdGhhdFxyXG4gICAqIGFuY2hvciDigJQgc28gdGhlIG1lbnUgYXBwZWFycyBkaXJlY3RseSBiZW5lYXRoIHRoZSBhZGQgaWNvbiAobWF0Y2hpbmcgdGhlXHJcbiAgICogRmlnbWEpIHJhdGhlciB0aGFuIGF0IHRoZSBmYXItcmlnaHQgZXhwb3J0IGFyZWEuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkFkZEljb25DbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMucG9zaXRpb25BZGRNZW51QW5jaG9yQXRBZGRJY29uKCk7XHJcbiAgICB0aGlzLmFkZE1lbnVUcmlnZ2VyPy5vcGVuTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBcIkFkZFwiIG1lbnUgb24gd2luZG93IHJlc2l6ZS9zY3JvbGwuIFRoZSBtZW51IGlzIGFuY2hvcmVkIHRvIGFcclxuICAgKiBwb2ludCBtZWFzdXJlZCBhdCBvcGVuIHRpbWUsIHNvIGEgbGF5b3V0IGNoYW5nZSAocmVzaXplL3Njcm9sbCkgd291bGQgbGVhdmVcclxuICAgKiBpdCBkZXRhY2hlZCBmcm9tIHRoZSBhZGQgaWNvbjsgY2xvc2luZyBpdCBhdm9pZHMgc2hvd2luZyBpdCBpbiBhIHN0YWxlIHNwb3QuXHJcbiAgICogVGhlIHVzZXIgY2FuIHNpbXBseSBjbGljayB0aGUgYWRkIGljb24gYWdhaW4uXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcclxuICBjbG9zZUFkZE1lbnVPblZpZXdwb3J0Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWRkTWVudVRyaWdnZXI/Lm1lbnVPcGVuKSB7XHJcbiAgICAgIHRoaXMuYWRkTWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGFjZXMgdGhlIGFkZC1tZW51IGFuY2hvciBhdCB0aGUgYWRkLXVzZXIgaWNvbidzIGJvdHRvbSBlZGdlLiBMb2NhdGVzIHRoZVxyXG4gICAqIGljb24gYnkgZmluZGluZyB0aGUgYWRkLXVzZXIgc3ByaXRlIChpY29uLWFkZC11c2VyKSB3aXRoaW4gdGhlIHJvc3RlcidzXHJcbiAgICogZGF0YS10YWJsZSBhY3Rpb24gcm93LlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwb3NpdGlvbkFkZE1lbnVBbmNob3JBdEFkZEljb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFkZE1lbnVBbmNob3I/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWFuY2hvcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY29wZSA9XHJcbiAgICAgIChhbmNob3IuY2xvc2VzdCgnLmllZWVzYS1tb2RhbCwgLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50KSA/P1xyXG4gICAgICBkb2N1bWVudC5ib2R5O1xyXG4gICAgLy8gVGhlIGFkZC11c2VyIGljb24gaXMgdGhlIGRhdGEtdGFibGUgYWN0aW9uIGJ1dHRvbiB3aXRoIGFyaWEtbGFiZWxcclxuICAgIC8vIFwiQWRkIHVzZXIocylcIiAoZGF0YVRhYmxlLmJ1dHRvbnNbMl0sIGlkIDMg4oaSIGNsYXNzIGllZWVzYS1pY29uLWJ1dHRvbl9fMykuXHJcbiAgICAvLyBUYXJnZXQgaXQgd2l0aGluIHRoZSBhY3Rpb25zIHJvdyBzcGVjaWZpY2FsbHkgc28gd2UgZG9uJ3QgbWF0Y2ggYSByb3ctbGV2ZWxcclxuICAgIC8vIGFjdGlvbiBidXR0b24gZWxzZXdoZXJlIGluIHRoZSB0YWJsZS5cclxuICAgIGNvbnN0IGFkZEljb24gPSAoc2NvcGU/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICcuaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMgLmllZWVzYS1pY29uLWJ1dHRvbl9fMydcclxuICAgICkgPz9cclxuICAgICAgc2NvcGU/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJy5pZWVlc2EtZGF0YS10YWJsZV9fYWN0aW9ucyBidXR0b25bYXJpYS1sYWJlbD1cIkFkZCB1c2VyKHMpXCJdJ1xyXG4gICAgICApKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICBpZiAoIWFkZEljb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVjdCA9IGFkZEljb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAvLyBBbmNob3IgaXMgYSB6ZXJvLXNpemUgcG9pbnQgYXQgdGhlIGFkZCBpY29uJ3MgYm90dG9tLVJJR0hUIGNvcm5lci4gV2l0aCB0aGVcclxuICAgIC8vIG1lbnUncyB4UG9zaXRpb249XCJiZWZvcmVcIiB0aGUgbWVudSdzIHJpZ2h0IGVkZ2UgYWxpZ25zIHRvIHRoaXMgcG9pbnQsIHNvIHRoZVxyXG4gICAgLy8gbWVudSBvcGVucyBsZWZ0d2FyZCBmcm9tIHRoZSBhZGQgaWNvbiAobWF0Y2hpbmcgdGhlIEZpZ21hLCB3aGVyZSB0aGUgaWNvblxyXG4gICAgLy8gc2l0cyBhYm92ZSB0aGUgcmlnaHQgcG9ydGlvbiBvZiB0aGUgcG9wb3ZlcikuXHJcbiAgICBhbmNob3Iuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgYW5jaG9yLnN0eWxlLnRvcCA9IGAke3JlY3QuYm90dG9tfXB4YDtcclxuICAgIGFuY2hvci5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5yaWdodH1weGA7XHJcbiAgICBhbmNob3Iuc3R5bGUud2lkdGggPSAnMCc7XHJcbiAgICBhbmNob3Iuc3R5bGUuaGVpZ2h0ID0gJzAnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJBZGQgTWFudWFsbHlcIiBtZW51IG9wdGlvbiDigJQgb3BlbnMgdGhlIGV4aXN0aW5nIGFkZC11c2VyLXRvLXJvc3RlciBmbG93LlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRNYW51YWxseSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJCdWxrIEltcG9ydFwiIG1lbnUgb3B0aW9uIOKAlCBvcGVucyB0aGUgYnVsayByb3N0ZXIgaW1wb3J0IGRpYWxvZy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uSW1wb3J0Um9zdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5JTVBPUlRfUk9TVEVSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJWaWV3IEhpc3RvcnlcIiBhY3Rpb24g4oCUIG9wZW5zIHRoZSByb3N0ZXIgaW1wb3J0LWhpc3RvcnkgcG9wdXAuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblZpZXdIaXN0b3J5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5WSUVXX0lNUE9SVF9ISVNUT1JZXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIHN1Y2Nlc3MsIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0FsZXJ0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWxlcnRUeXBlOiBBbGVydFR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgIGFsZXJ0VHlwZTogYWxlcnRUeXBlLFxyXG4gICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIHRoZSBleHBvcnQgZm9ybWF0IHBvcG92ZXIg4oCUIGRlbGVnYXRlcyB0byBSb3N0ZXJFeHBvcnRTZXJ2aWNlLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25FeHBvcnRDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRXhwb3J0U2VydmljZS50b2dnbGVQb3BvdmVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGV4cG9ydCBmb3JtYXQgc2VsZWN0aW9uIOKAlCBkZWxlZ2F0ZXMgdG8gUm9zdGVyRXhwb3J0U2VydmljZSB1c2luZyB0aGVcclxuICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgZ3JvdXAncyBpZCBhbmQgbmFtZS5cclxuICAgKiBAcGFyYW0ge0V4cG9ydEZvcm1hdH0gZm9ybWF0XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkV4cG9ydEZvcm1hdFNlbGVjdGVkKGZvcm1hdDogRXhwb3J0Rm9ybWF0KTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwSW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpO1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9IHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZztcclxuICAgIC8vIFdpdGhvdXQgYSBncm91cCBpZCB0aGUgZXhwb3J0IFVSTCB3b3VsZCBiZSBtYWxmb3JtZWQsIHNvIGd1YXJkIGhlcmVcclxuICAgIC8vIGluc3RlYWQgb2YgZmlyaW5nIGEgYmFkIHJlcXVlc3QuXHJcbiAgICBpZiAoIWdyb3VwSWQpIHtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LmRlZmF1bHQsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cE5hbWUgPz8gJyc7XHJcbiAgICB0aGlzLnJvc3RlckV4cG9ydFNlcnZpY2Uub25Gb3JtYXRTZWxlY3RlZChmb3JtYXQsIGdyb3VwSWQsIGdyb3VwTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRXhwb3J0U2VydmljZS5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZGF0YS10YWJsZVxyXG4gIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgW2NvbHVtblNjaGVtYUluZm9dPVwiY29sdW1uU2NoZW1hXCJcclxuICBbc2VhcmNoUGxhY2VIb2xkZXJUZXh0XT1cInNlYXJjaFBsYWNlaG9sZGVyVGV4dFwiXHJcbiAgW3RhYmxlQWN0aW9uc109XCJyb3N0ZXJBY3Rpb25zXCJcclxuICBbaXNDZWxsVGV4dE92ZXJmbG93RWxsaXBzaXNdPVwidHJ1ZVwiXHJcbiAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgW2NsYXNzTmFtZV09XCJkYXRhVGFibGVDbGFzc05hbWVcIlxyXG4gIFtzZWxlY3RlZEZpbHRlck9wdGlvbnNdPVwiZmlsdGVyT3B0aW9uc1wiXHJcbiAgW2RlZmF1bHRTb3J0ZWRDb2x1bW5dPVwiZGVmYXVsdFNvcnRlZENvbHVtblwiXHJcbiAgKHNlbGVjdGVkRmlsdGVyKT1cInNldFNlbGVjdGVkRmlsdGVyT3B0aW9ucygkZXZlbnQpXCJcclxuICAocmVtb3ZlRmlsdGVyZWRPcHRpb24pPVwib25GaWx0ZXJHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChmaWx0ZXJlZE9wdGlvbnMpPVwib25GaWx0ZXJHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChzZWFyY2hlZFZhbHVlKT1cIm9uU2VhcmNoR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoc2VsZWN0ZWRSb3dUb0VkaXQpPVwib25FZGl0VXNlclJvbGVzKCRldmVudClcIlxyXG4gIChzZWxlY3RlZFJvd3NUb0RlbGV0ZSk9XCJvcGVuVXNlckRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsKCRldmVudClcIlxyXG4gIChzb3J0Q2hhbmdlKT1cIm9uU29ydEdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKGFkZFJvdyk9XCJvbkFkZEljb25DbGljaygpXCJcclxuPlxyXG4gIDwhLS0gRXhwb3J0IFJvc3RlciBhY3Rpb24g4oCUIHByb2plY3RlZCBpbnRvIHRoZSBkYXRhLXRhYmxlIGFjdGlvbiByb3csXHJcbiAgICAgICBpbmxpbmUgYWZ0ZXIgdGhlIGRlbGV0ZSBpY29uLiAtLT5cclxuICA8ZGl2IGRhdGFUYWJsZUFjdGlvbnMgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FjdGlvbnMtc2xvdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fZXhwb3J0LWFuY2hvclwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibWF0LXRlcnRpYXJ5LWJ1dHRvbiBpZWVlc2Etdmlldy1yb3N0ZXJfX2V4cG9ydC1idG5cIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LnJvc3RlckV4cG9ydD8uYXJpYUxhYmVsXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiF0YWJsZURhdGE/Lmxlbmd0aCB8fCAocm9zdGVyRXhwb3J0U2VydmljZS5pc0V4cG9ydEluUHJvZ3Jlc3MkIHwgYXN5bmMpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRXhwb3J0Q2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmcgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2V4cG9ydC1idG4taWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cG9ydFwiPjwvdXNlPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAge3sgY29uc3RhbnRzPy5yb3N0ZXJFeHBvcnQ/LmJ1dHRvbkxhYmVsIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxpZWVlc2EtZXhwb3J0LWZvcm1hdC1wb3BvdmVyXHJcbiAgICAgIFtmb3JtYXRPcHRpb25zXT1cInJvc3RlckV4cG9ydFNlcnZpY2UuZXhwb3J0Rm9ybWF0T3B0aW9uc1wiXHJcbiAgICAgIFtpc09wZW5dPVwiKHJvc3RlckV4cG9ydFNlcnZpY2UuaXNQb3BvdmVyT3BlbiQgfCBhc3luYykgPz8gZmFsc2VcIlxyXG4gICAgICBbcG9wb3ZlclRpdGxlXT1cInJvc3RlckV4cG9ydFNlcnZpY2UucG9wb3ZlclRpdGxlXCJcclxuICAgICAgW2Zvcm1hdFN1YnRpdGxlc109XCJyb3N0ZXJFeHBvcnRTZXJ2aWNlLmV4cG9ydEZvcm1hdFN1YnRpdGxlc1wiXHJcbiAgICAgIChmb3JtYXRTZWxlY3RlZCk9XCJvbkV4cG9ydEZvcm1hdFNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAoY2xvc2VkKT1cInJvc3RlckV4cG9ydFNlcnZpY2UuY2xvc2VQb3BvdmVyKClcIlxyXG4gICAgPjwvaWVlZXNhLWV4cG9ydC1mb3JtYXQtcG9wb3Zlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVmlldyBIaXN0b3J5IGFjdGlvbiDigJQgb3BlbnMgdGhlIGltcG9ydC1oaXN0b3J5IHBvcHVwIChtb2NrIGRhdGEpLiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm1hdC10ZXJ0aWFyeS1idXR0b24gaWVlZXNhLXZpZXctcm9zdGVyX19oaXN0b3J5LWJ0blwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbnN0YW50cz8ucm9zdGVySW1wb3J0SGlzdG9yeT8uYXJpYUxhYmVsXCJcclxuICAgICAgKGNsaWNrKT1cIm9uVmlld0hpc3RvcnkoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGNvbnN0YW50cz8ucm9zdGVySW1wb3J0SGlzdG9yeT8uYnV0dG9uTGFiZWwgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gSW52aXNpYmxlIGFuY2hvciBmb3IgdGhlIFwiQWRkXCIgbWVudSAoQWRkIE1hbnVhbGx5IC8gQnVsayBJbXBvcnQpLlxyXG4gICAgICAgICBUaGUgYWRkLXVzZXIgaWNvbiBsaXZlcyBpbnNpZGUgdGhlIGRhdGEtdGFibGUgYW5kIG9ubHkgZW1pdHMgKGFkZFJvdyk7XHJcbiAgICAgICAgIG9uQWRkSWNvbkNsaWNrKCkgb3BlbnMgdGhpcyBtZW51IHByb2dyYW1tYXRpY2FsbHksIGFuY2hvcmVkIGhlcmUgc28gaXRcclxuICAgICAgICAgYXBwZWFycyBqdXN0IHVuZGVyIHRoZSBhZGQgaWNvbi4gLS0+XHJcbiAgICA8c3BhblxyXG4gICAgICAjYWRkTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRNZW51XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FkZC1tZW51LWFuY2hvclwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICA+PC9zcGFuPlxyXG4gICAgPG1hdC1tZW51XHJcbiAgICAgICNhZGRNZW51PVwibWF0TWVudVwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudVwiXHJcbiAgICAgIHhQb3NpdGlvbj1cImJlZm9yZVwiXHJcbiAgICAgIHlQb3NpdGlvbj1cImJlbG93XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWRkTWFudWFsbHkoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgY29uc3RhbnRzPy5hZGRSb3N0ZXJNZW51Py5hZGRNYW51YWxseT8udGl0bGUgPz8gJ0FkZCBNYW51YWxseScgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FkZC1tZW51LWl0ZW0tc3VidGl0bGVcIj5cclxuICAgICAgICAgIHt7IGNvbnN0YW50cz8uYWRkUm9zdGVyTWVudT8uYWRkTWFudWFsbHk/LnN1YnRpdGxlID8/ICdTZWFyY2ggYnkgZW1haWwsIGZpbGwgZGV0YWlscycgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JbXBvcnRSb3N0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgY29uc3RhbnRzPy5hZGRSb3N0ZXJNZW51Py5idWxrSW1wb3J0Py50aXRsZSA/PyAnQnVsayBJbXBvcnQnIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudS1pdGVtLXN1YnRpdGxlXCI+XHJcbiAgICAgICAgICB7eyBjb25zdGFudHM/LmFkZFJvc3Rlck1lbnU/LmJ1bGtJbXBvcnQ/LnN1YnRpdGxlID8/ICdVcGxvYWQgQ1NWIG9yIFhMUyBmaWxlJyB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L2llZWVzYS1kYXRhLXRhYmxlPlxyXG4iXX0=
|
|
881
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBR1osU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxlQUFlLEVBRWYsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxTQUFTLEVBSVQsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUUxQiw0QkFBNEIsR0FDN0IsTUFBTSwwQkFBMEIsQ0FBQztBQUtsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFRL0MsT0FBTyxLQUFLLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFP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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXg2QlUsbUJBQW1CO21HQUFuQixtQkFBbUIsNFlBS08sVUFBVSw2QkNwRmpELDh5SUFzR0EsNDJiRG5DSSxZQUFZLG9GQUNaLGtCQUFrQiw0aURBQ2xCLGVBQWUsOEJBQ2YsZUFBZSwyUUFDZixhQUFhLGdaQUNiLDRCQUE0Qjs7NEZBT25CLG1CQUFtQjtrQkFoQi9CLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsNEJBQTRCO3FCQUM3QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO2tRQUtsQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHM0IsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFxeUJqRCw0QkFBNEI7c0JBRjNCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG4gIFRhYmxlQWN0aW9ucyxcclxuICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgQ2hpcHNUeXBlLFxyXG4gIEFsaWduVHlwZSxcclxuICBDaGlwT3B0aW9uLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcclxuICBNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcclxuICBFeHBvcnRGb3JtYXQsXHJcbiAgRXhwb3J0Rm9ybWF0UG9wb3ZlckNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgQWxlcnRUeXBlIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIFVzZXIsXHJcbiAgTG9nZ2VkSW5Vc2VySW5mbyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWNvbHVtbi1zY2hlbWEtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3N0ZXItZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCwgZWRpdCwgZGVsZXRlIHVzZXIgdG8gZ3JvdXAgcm9zdGVyLCBhc3NpZ24gYW5kIG1vZGlmeSByb2xlcyhzKSB0byB0aGUgZ3JvdXAgdXNlcnMsIGFuZCBzZWFyY2ggdXNlciBmcm9tIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2Etdmlldy1yb3N0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIEV4cG9ydEZvcm1hdFBvcG92ZXJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1yb3N0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8qKiBUcmlnZ2VyIGZvciB0aGUgXCJBZGRcIiBtZW51IChBZGQgTWFudWFsbHkgLyBCdWxrIEltcG9ydCkuICovXHJcbiAgQFZpZXdDaGlsZCgnYWRkTWVudVRyaWdnZXInKSBhZGRNZW51VHJpZ2dlcj86IE1hdE1lbnVUcmlnZ2VyO1xyXG4gIC8qKiBJbnZpc2libGUgYW5jaG9yIGVsZW1lbnQgdGhlIFwiQWRkXCIgbWVudSBhdHRhY2hlcyB0by4gKi9cclxuICBAVmlld0NoaWxkKCdhZGRNZW51VHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIGFkZE1lbnVBbmNob3I/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHZpZXdSb3N0ZXJDb25zdGFudHMgPSB0aGlzLmNvbnN0YW50cz8udmlld1Jvc3RlcjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRpYWxvZ1JlZjogYW55O1xyXG4gIGFsaWdubWVudFR5cGUgPSBBbGlnblR5cGU7XHJcbiAgZmlsdGVycyE6IENoaXBPcHRpb25bXTtcclxuICBjb2x1bW5TY2hlbWEhOiBUYWJsZUNvbHVtblNjaGVtYVtdO1xyXG4gIHRhYmxlRGF0YSE6IFVzZXJbXTtcclxuICBzZWxlY3RlZFJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VhcmNoUGxhY2Vob2xkZXJUZXh0ITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUm9sZXM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgc2VsZWN0ZWRNZW1iZXJUeXBlczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICBzZWxlY3RlZENsYXNzaWZpY2F0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMgPSB7fTtcclxuICByb2xlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGZpbHRlck9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIHJvc3RlckFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzU2VhcmNoTmVlZGVkOiB0cnVlLFxyXG4gICAgaXNGaWx0ZXJOZWVkZWQ6IHRydWUsXHJcbiAgICBpc0FkZE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0VkaXROZWVkZWQ6IGZhbHNlLFxyXG4gIH07XHJcbiAgZGVmYXVsdFNvcnRlZENvbHVtbiE6IHN0cmluZztcclxuICBkYXRhVGFibGVDbGFzc05hbWUhOiBzdHJpbmc7XHJcbiAgaGFzQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcclxuICBzZWFyY2hUZXJtITogc3RyaW5nO1xyXG4gIGdyb3VwUm9zdGVyVHlwZSE6IEdyb3VwUm9zdGVyVHlwZTtcclxuICBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbiA9IHRydWU7XHJcbiAgdGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbCA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw7XHJcbiAgdGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnMgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2VycztcclxuICBlbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5ID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIHJvc3RlckV4cG9ydFNlcnZpY2U6IFJvc3RlckV4cG9ydFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0FkZE5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0VkaXROZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNEZWxldGVOZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRVc2VySW5mbygpO1xyXG4gICAgdGhpcy5yb3N0ZXJFeHBvcnRTZXJ2aWNlLnNldEFwaUJhc2VVcmwodGhpcy5ncm91cFNlcnZpY2U/LmFwaUJhc2VVcmwpO1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmhhc0NsYXNzaWZpY2F0aW9uID0gZ3JvdXBUeXBlPy5oYXNDbGFzc2lmaWNhdGlvbiA/PyBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID0gZ3JvdXBUeXBlPy5yb3N0ZXJUeXBlIGFzIEdyb3VwUm9zdGVyVHlwZTtcclxuICAgIGlmICghdGhpcy5ncm91cFJvc3RlclR5cGUpXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSxcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5XQVJOSU5HLFxyXG4gICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWd1cmVUYWJsZUluZm8oKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZGQgbmV3IHVzZXIgc3VjY2VzcyBtZXNzYWdlIHdoZW4gY2FuU2hvd01lc3NhZ2UgaXMgc2V0IHRydWVcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZT8uY2FuU2hvd01lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuY2FuU2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LnJvc3RlckZ1bmN0aW9uVHlwZSA9PT1cclxuICAgICAgICBSb3N0ZXJGdW5jdGlvblR5cGU/LkVESVRfUk9TVEVSX1VTRVJfUk9MRVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZWRpdFVzZXJSb2xlcz8ubWVzc2FnZT8uc3VjY2Vzcz8uc3VibWlzc2lvbixcclxuICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZGVzIG9yIHNob3dzIHJvc3RlciBhZGQgdXNlciwgZWRpdCB1c2VyIGFuZCBkZWxldGUgdXNlciBhY3Rpb25zIGJhc2VkIG9uIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX09GRklDRVJTKSB8fFxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9ST1NURVJTKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlIFRhYmxlIGluZm9ybWF0aW9uIGJhc2VkIG9uIGdyb3VwIHJvc3RlciB0eXBlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjb25maWd1cmVUYWJsZUluZm8oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1pbmRpdmlkdWFsLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVySW5kaXZpZHVhbDtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5jb2x1bW5TY2hlbWEgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICBoZWFkaW5nOiAnJyxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuc2VsZWN0fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTkFNRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1QTE9ZRVIsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmVtcGxveWVyLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuZW1wbG95ZXIgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNQUlMLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmVtYWlsID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA1LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubWVtYmVyVHlwZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50Lm1lbWJlclN0YXR1cyA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA2LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5PUkdBTklaQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm9yZ2FuaXphdGlvbk5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5vcmdhbml6YXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDgsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LnJvbGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5yb2xlID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICAvLyBJbnNlcnQgQ2xhc3NpZmljYXRpb24gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBSb2xlIGNvbHVtbiAoaXRzIG9yaWdpbmFsIHBvc2l0aW9uKS5cclxuICAgICAgICBjb25zdCByb2xlQ29sdW1uSW5kZXggPSB0aGlzLmNvbHVtblNjaGVtYS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uY29sdW1uRGVmID09PSBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5ST0xFXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbkluc2VydEluZGV4ID1cclxuICAgICAgICAgIHJvbGVDb2x1bW5JbmRleCA9PT0gLTEgPyB0aGlzLmNvbHVtblNjaGVtYS5sZW5ndGggLSAxIDogcm9sZUNvbHVtbkluZGV4O1xyXG4gICAgICAgIHRoaXMuY29sdW1uU2NoZW1hLnNwbGljZShjbGFzc2lmaWNhdGlvbkluc2VydEluZGV4LCAwLCB7XHJcbiAgICAgICAgICBpZDogNyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuY2xhc3NpZmljYXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICB0aGlzLmRhdGFUYWJsZUNsYXNzTmFtZSA9ICdpZWVlc2Etc3lzdGVtLXVzZXJzLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVyU3lzdGVtVXNlcnM7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGhlYWRpbmc6ICcnLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlNFTEVDVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5zZWxlY3R9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAyLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5OQU1FLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2Vycz8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1BSUwsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LmVtYWlsfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5yb2xlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQucm9sZSA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gdGhpcy5jb2x1bW5TY2hlbWFbMV0uY29sdW1uRGVmO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIGdldEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBib29sZWFuXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2VycyhcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICBzb3J0Q29sdW1uLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb25cclxuICAgICAgKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjYnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cHMgYmFzZWQgb24gdGhlIGNvbHVtbiBuYW1lIGFuZCBzb3J0IGRpcmVjdGlvbi5cclxuICAgKiBAcGFyYW0ge1NvcnR9IHNvcnRcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU29ydEdyb3VwVXNlcnMoc29ydDogU29ydCkge1xyXG4gICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uID0gc29ydC5hY3RpdmU7XHJcbiAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uID1cclxuICAgICAgc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5BU0NFTkRJTkc7XHJcbiAgICBpZiAoc29ydC5kaXJlY3Rpb24gPT09IFRhYmxlQ29sdW1uU29ydERpcmVjdGlvbi5OT19TT1JUKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvbGVJZHMubGVuZ3RoKVxyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMubGVuZ3RoIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZ3JvdXAgdHlwZSByb2xlcyBieSBjYWxsaW5nIGdldEdyb3VwVHlwZVJvbGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgYXNzaWduIHJvbGVzLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Um9sZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBUeXBlUm9sZXMoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBUeXBlIGFzIHN0cmluZ1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvbGVzID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9uIGJ5IGNhbGxpbmcgZ2V0Q2xhc3NpZmljYXRpb25zKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgY2xhc3NpZmljYXRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3VXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRDbGFzc2lmaWNhdGlvbnMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbklkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5jbGFzc2lmaWNhdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbWVtYmVyIHR5cGVzIGJ5IGNhbGxpbmcgZ2V0TWVtYmVyVHlwZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBtZW1iZXIgdHlwZXMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZW1iZXJUeXBlcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICBtZW1iZXJUeXBlcz8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMubWVtYmVyVHlwZXM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBvcHRpb24ucm9sZUlkLFxyXG4gICAgICAgIG5hbWU6IG9wdGlvbi5yb2xlTmFtZSxcclxuICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGZpbHRlciBvcHRpb25zIGZvciBNZW1iZXIgVHlwZSBvciBDbGFzc2lmaWNhdGlvbiBmaWx0ZXIgZGVwZW5kcyBvbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMob3B0aW9uOiBDaGlwT3B0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKG9wdGlvbi5pZCkge1xyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuTUVNQkVSX1RZUEU6IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLm1lbWJlclR5cGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTjoge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuY2xhc3NpZmljYXRpb25zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5ST0xFOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5yb2xlcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIHNlYXJjaEdyb3VwVXNlcnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIC1zZWFyY2hUZXJtIGNhbiBiZSB1c2VyIG5hbWUgb3IgZW1haWwgYW5kIHVzZXIgaXMgc2VhcmNoZWQgYmFzZWQgb24gdGhlIGVtYWlsIG9yIG5hbWUuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblNlYXJjaEdyb3VwVXNlcnMoc2VhcmNoVGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtPy50cmltKCk7XHJcbiAgICBsZXQgcGF5bG9hZCE6IFNlYXJjaFVzZXJzUGF5bG9hZDtcclxuICAgIHN3aXRjaCAodGhpcy5ncm91cFJvc3RlclR5cGUpIHtcclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVI6IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFt0aGlzLnNlbGVjdGVkUm9sZXNdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHM/Lmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM/Lmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbE9yUmVwT3JnOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuc2VhcmNoR3JvdXBVc2VycyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBjb25zdCBub1VzZXJzRm91bmRFcnJvckNvZGVzID0gWycxMDI5JywgJzEwMzAnLCAnMTAzMScsICcxMDMyJ107XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlcyAmJiBub1VzZXJzRm91bmRFcnJvckNvZGVzLmluY2x1ZGVzKGVycm9yQ29kZXNbMF0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIG9wdGlvbnMgb2YgZmlsdGVycyBhbmQgcmV0dXJucyBpZCBvZiBzZWxlY3RlZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc1tdfSBzZWxlY3RlZE9wdGlvbnNcclxuICAgKiBAcGFyYW0ge0ZpbHRlclR5cGV9IGZpbHRlclR5cGVcclxuICAgKiBAcGFyYW0ge0ZpbHRlcnNBbmRPcHRpb25zfSBzZWxlY3RlZEZpbHRlck9wdGlvbnNcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBGaWx0ZXJzQW5kT3B0aW9uc1tdLFxyXG4gICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcclxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnMsXHJcbiAgICBzZWxlY3RlZEZpbHRlcklkczogc3RyaW5nW11cclxuICApIHtcclxuICAgIHNlbGVjdGVkT3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRPcHRpb24pKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gZmlsdGVyVHlwZSkge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdDogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgdmFsdWU/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlcklkcy5wdXNoKG9wdGlvbi5pZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0LnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW2tleV0gPSBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyB0YWJsZURhdGEgdG8gZGlzcGxheSB0aGUgdXNlcnMgaW4gYSBncmlkLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbltdIHwgfCBDaGVja2JveE9wdGlvbltdfSByb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25GaWx0ZXJHcm91cFVzZXJzKHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMgPSB7fTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyA9IHt9O1xyXG4gICAgbGV0IHBheWxvYWQhOiBGaWx0ZXJVc2Vyc1BheWxvYWQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZXMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZUlkc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaEdyb3VwVXNlcnModGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiB0aGlzLnNlbGVjdGVkUm9sZUlkcyxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMOiB7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2hHcm91cFVzZXJzKHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLFxyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVXNlcnNCeVJvbGVzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgcmV0cmlldmluZyBncm91cHMgdXNlcnMsIHJvbGVzLCBzZWFyY2ggdXNlcnMsIGZpbHRlciB1c2VyIGJ5IHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3JcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShlcnJvck1lc3NhZ2UsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBtb2RhbCB0byBnZXQgdXNlciBjb25maXJtYXRpb24gdG8gZGVsZXRlIHRoZSB1c2VycyBmcm9tIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbChzZWxlY3RlZFVzZXJzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJJZHMgPSBzZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogVXNlcikgPT4gdXNlcj8udXNlcklkKTtcclxuICAgIGlmIChcclxuICAgICAgdXNlcklkcy5pbmNsdWRlcyh0aGlzLnVzZXJJbmZvPy51c2VySWQpICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQWRtaW5Vc2VyKCkgJiZcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKGAke2NvbnN0YW50cz8uZXJyb3JzPy5bMTAzOV19YCwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmZvID0gdGhpcy5ncm91cFNlcnZpY2U/LmdldFNlbGVjdGVkR3JvdXBJbmZvKCk7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkluZm8gPSBjb25zdGFudHM/LmRlbGV0ZVVzZXJzR3JvdXA/LmNvbmZpcm1hdGlvbkluZm87XHJcbiAgICAgIGNvbnN0IGRlbGV0ZVVzZXJHcm91cE1vZGFsT3B0aW9ucyA9IHtcclxuICAgICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgICByaWdodEJ1dHRvbkxhYmVsOiBjb25maXJtYXRpb25JbmZvPy5yaWdodEJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIHByb21wdE1lc3NhZ2U6IGAke2NvbmZpcm1hdGlvbkluZm8/LnByb21wdE1lc3NhZ2VQYXJ0MX0gJHt1c2VySWRzPy5sZW5ndGh9ICR7Y29uZmlybWF0aW9uSW5mbz8ucHJvbXB0TWVzc2FnZVBhcnQyfSAke3NlbGVjdGVkR3JvdXBJbmZvPy5ncm91cE5hbWV9P2AsXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZT8uTUlERExFLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiBkZWxldGVVc2VyR3JvdXBNb2RhbE9wdGlvbnMsXHJcbiAgICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgICBhdXRvRm9jdXM6ICdkaWFsb2cnLFxyXG4gICAgICAgIGFyaWFMYWJlbDogY29uc3RhbnRzPy5hcmlhTGFiZWw/LmFsZXJ0LFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWZcclxuICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgICB1c2VySWRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbmQgQVBJIHJlcXVlc3QgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCBoYW5kbGVzIHRoZSBzdWNjZXNzIGFuZCBlcnJvciByZXNwb25zZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZVVzZXJzR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCB1c2VySWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZGVsZXRlVXNlcnNHcm91cFRleHRzID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwO1xyXG4gICAgY29uc3QgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIFtncm91cElkXTogdXNlcklkcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZGVsZXRlVXNlcnNHcm91cChkZWxldGVVc2VyR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIGAke3Jlcy5ib2R5fSAke2RlbGV0ZVVzZXJzR3JvdXBUZXh0cz8ubWVzc2FnZT8uc3VjY2Vzcz8ucmVtb3ZlZH1gLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGVkIHVzZXIgaW5mbyBhbmQgZW1pdHMgZXZlbnQgb3Blbk1vZGFsTm90aWZpZXIgd2l0aCBFRElUX1JPU1RFUl9VU0VSX1JPTEUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvW119IHNlbGVjdGVkVXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRWRpdFVzZXJSb2xlcyhzZWxlY3RlZFVzZXJJbmZvOiBHcm91cFVzZXJJbmZvW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFNlbGVjdGVkVXNlckluZm8oe1xyXG4gICAgICAgIGVtYWlsOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5lbWFpbCxcclxuICAgICAgICBuYW1lOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5uYW1lLFxyXG4gICAgICAgIHJvbGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnJvbGUsXHJcbiAgICAgICAgdXNlcklkOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy51c2VySWQsXHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IHNlbGVjdGVkVXNlckluZm9bMF0/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogc2VsZWN0ZWRVc2VySW5mb1swXT8ub3JnYW5pemF0aW9uLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogc2VsZWN0ZWRVc2VySW5mb1swXT8ubWVtYmVyU3RhdHVzLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2FuRGVsZXRlLFxyXG4gICAgICAgIHBob25lQ291bnRyeUNvZGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lQ291bnRyeUNvZGUsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lTnVtYmVyLFxyXG4gICAgICAgIGFkZHJlc3M6IHNlbGVjdGVkVXNlckluZm9bMF0/LmFkZHJlc3MsXHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5zZXRTZWxlY3RlZFVzZXJJbmZvKHtcclxuICAgICAgICBlbWFpbDogc2VsZWN0ZWRVc2VySW5mb1swXT8uZW1haWwsXHJcbiAgICAgICAgbmFtZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ubmFtZSxcclxuICAgICAgICByb2xlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5yb2xlLFxyXG4gICAgICAgIHVzZXJJZDogc2VsZWN0ZWRVc2VySW5mb1swXT8udXNlcklkLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2FuRGVsZXRlLFxyXG4gICAgICAgIHBob25lQ291bnRyeUNvZGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lQ291bnRyeUNvZGUsXHJcbiAgICAgICAgcGhvbmVOdW1iZXI6IHNlbGVjdGVkVXNlckluZm9bMF0/LnBob25lTnVtYmVyLFxyXG4gICAgICAgIGFkZHJlc3M6IHNlbGVjdGVkVXNlckluZm9bMF0/LmFkZHJlc3MsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuRURJVF9ST1NURVJfVVNFUl9ST0xFXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhIGNsaWNrIG9uIHRoZSBkYXRhLXRhYmxlJ3MgYWRkLXVzZXIgaWNvbi4gVGhlIGFkZCBpY29uIGxpdmVzIGluc2lkZVxyXG4gICAqIHRoZSBzaGFyZWQgRGF0YVRhYmxlQ29tcG9uZW50IGFuZCBvbmx5IGVtaXRzIChhZGRSb3cpLCBzbyB3ZSBjYW4ndCBhdHRhY2ggYVxyXG4gICAqIG1lbnUgdHJpZ2dlciB0byBpdCBkaXJlY3RseS4gSW5zdGVhZCB3ZSBwb3NpdGlvbiBhbiBpbnZpc2libGUsIGZpeGVkLXBvc2l0aW9uXHJcbiAgICogYW5jaG9yIGF0IHRoZSBhZGQgaWNvbidzIG9uLXNjcmVlbiBsb2NhdGlvbiwgdGhlbiBvcGVuIHRoZSBtZW51IGZyb20gdGhhdFxyXG4gICAqIGFuY2hvciDigJQgc28gdGhlIG1lbnUgYXBwZWFycyBkaXJlY3RseSBiZW5lYXRoIHRoZSBhZGQgaWNvbiAobWF0Y2hpbmcgdGhlXHJcbiAgICogRmlnbWEpIHJhdGhlciB0aGFuIGF0IHRoZSBmYXItcmlnaHQgZXhwb3J0IGFyZWEuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkFkZEljb25DbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMucG9zaXRpb25BZGRNZW51QW5jaG9yQXRBZGRJY29uKCk7XHJcbiAgICB0aGlzLmFkZE1lbnVUcmlnZ2VyPy5vcGVuTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBcIkFkZFwiIG1lbnUgb24gd2luZG93IHJlc2l6ZS9zY3JvbGwuIFRoZSBtZW51IGlzIGFuY2hvcmVkIHRvIGFcclxuICAgKiBwb2ludCBtZWFzdXJlZCBhdCBvcGVuIHRpbWUsIHNvIGEgbGF5b3V0IGNoYW5nZSAocmVzaXplL3Njcm9sbCkgd291bGQgbGVhdmVcclxuICAgKiBpdCBkZXRhY2hlZCBmcm9tIHRoZSBhZGQgaWNvbjsgY2xvc2luZyBpdCBhdm9pZHMgc2hvd2luZyBpdCBpbiBhIHN0YWxlIHNwb3QuXHJcbiAgICogVGhlIHVzZXIgY2FuIHNpbXBseSBjbGljayB0aGUgYWRkIGljb24gYWdhaW4uXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcclxuICBjbG9zZUFkZE1lbnVPblZpZXdwb3J0Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWRkTWVudVRyaWdnZXI/Lm1lbnVPcGVuKSB7XHJcbiAgICAgIHRoaXMuYWRkTWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGFjZXMgdGhlIGFkZC1tZW51IGFuY2hvciBhdCB0aGUgYWRkLXVzZXIgaWNvbidzIGJvdHRvbSBlZGdlLiBMb2NhdGVzIHRoZVxyXG4gICAqIGljb24gYnkgZmluZGluZyB0aGUgYWRkLXVzZXIgc3ByaXRlIChpY29uLWFkZC11c2VyKSB3aXRoaW4gdGhlIHJvc3RlcidzXHJcbiAgICogZGF0YS10YWJsZSBhY3Rpb24gcm93LlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwb3NpdGlvbkFkZE1lbnVBbmNob3JBdEFkZEljb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFkZE1lbnVBbmNob3I/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWFuY2hvcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY29wZSA9XHJcbiAgICAgIChhbmNob3IuY2xvc2VzdCgnLmllZWVzYS1tb2RhbCwgLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50KSA/P1xyXG4gICAgICBkb2N1bWVudC5ib2R5O1xyXG4gICAgLy8gVGhlIGFkZC11c2VyIGljb24gaXMgdGhlIGRhdGEtdGFibGUgYWN0aW9uIGJ1dHRvbiB3aXRoIGFyaWEtbGFiZWxcclxuICAgIC8vIFwiQWRkIHVzZXIocylcIiAoZGF0YVRhYmxlLmJ1dHRvbnNbMl0sIGlkIDMg4oaSIGNsYXNzIGllZWVzYS1pY29uLWJ1dHRvbl9fMykuXHJcbiAgICAvLyBUYXJnZXQgaXQgd2l0aGluIHRoZSBhY3Rpb25zIHJvdyBzcGVjaWZpY2FsbHkgc28gd2UgZG9uJ3QgbWF0Y2ggYSByb3ctbGV2ZWxcclxuICAgIC8vIGFjdGlvbiBidXR0b24gZWxzZXdoZXJlIGluIHRoZSB0YWJsZS5cclxuICAgIGNvbnN0IGFkZEljb24gPSAoc2NvcGU/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICcuaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMgLmllZWVzYS1pY29uLWJ1dHRvbl9fMydcclxuICAgICkgPz9cclxuICAgICAgc2NvcGU/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJy5pZWVlc2EtZGF0YS10YWJsZV9fYWN0aW9ucyBidXR0b25bYXJpYS1sYWJlbD1cIkFkZCB1c2VyKHMpXCJdJ1xyXG4gICAgICApKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICBpZiAoIWFkZEljb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVjdCA9IGFkZEljb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAvLyBBbmNob3IgaXMgYSB6ZXJvLXNpemUgcG9pbnQgYXQgdGhlIGFkZCBpY29uJ3MgYm90dG9tLVJJR0hUIGNvcm5lci4gV2l0aCB0aGVcclxuICAgIC8vIG1lbnUncyB4UG9zaXRpb249XCJiZWZvcmVcIiB0aGUgbWVudSdzIHJpZ2h0IGVkZ2UgYWxpZ25zIHRvIHRoaXMgcG9pbnQsIHNvIHRoZVxyXG4gICAgLy8gbWVudSBvcGVucyBsZWZ0d2FyZCBmcm9tIHRoZSBhZGQgaWNvbiAobWF0Y2hpbmcgdGhlIEZpZ21hLCB3aGVyZSB0aGUgaWNvblxyXG4gICAgLy8gc2l0cyBhYm92ZSB0aGUgcmlnaHQgcG9ydGlvbiBvZiB0aGUgcG9wb3ZlcikuXHJcbiAgICBhbmNob3Iuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgYW5jaG9yLnN0eWxlLnRvcCA9IGAke3JlY3QuYm90dG9tfXB4YDtcclxuICAgIGFuY2hvci5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5yaWdodH1weGA7XHJcbiAgICBhbmNob3Iuc3R5bGUud2lkdGggPSAnMCc7XHJcbiAgICBhbmNob3Iuc3R5bGUuaGVpZ2h0ID0gJzAnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJBZGQgTWFudWFsbHlcIiBtZW51IG9wdGlvbiDigJQgb3BlbnMgdGhlIGV4aXN0aW5nIGFkZC11c2VyLXRvLXJvc3RlciBmbG93LlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRNYW51YWxseSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJCdWxrIEltcG9ydFwiIG1lbnUgb3B0aW9uIOKAlCBvcGVucyB0aGUgYnVsayByb3N0ZXIgaW1wb3J0IGRpYWxvZy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uSW1wb3J0Um9zdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5JTVBPUlRfUk9TVEVSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJWaWV3IEhpc3RvcnlcIiBhY3Rpb24g4oCUIG9wZW5zIHRoZSByb3N0ZXIgaW1wb3J0LWhpc3RvcnkgcG9wdXAuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblZpZXdIaXN0b3J5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2U/Lm9wZW5Nb2RhbE5vdGlmaWVyPy5uZXh0KFxyXG4gICAgICBHcm91cEZ1bmN0aW9uVHlwZS5WSUVXX0lNUE9SVF9ISVNUT1JZXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIHN1Y2Nlc3MsIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0FsZXJ0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWxlcnRUeXBlOiBBbGVydFR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgIGFsZXJ0VHlwZTogYWxlcnRUeXBlLFxyXG4gICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIHRoZSBleHBvcnQgZm9ybWF0IHBvcG92ZXIg4oCUIGRlbGVnYXRlcyB0byBSb3N0ZXJFeHBvcnRTZXJ2aWNlLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25FeHBvcnRDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRXhwb3J0U2VydmljZS50b2dnbGVQb3BvdmVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGV4cG9ydCBmb3JtYXQgc2VsZWN0aW9uIOKAlCBkZWxlZ2F0ZXMgdG8gUm9zdGVyRXhwb3J0U2VydmljZSB1c2luZyB0aGVcclxuICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgZ3JvdXAncyBpZCBhbmQgbmFtZS5cclxuICAgKiBAcGFyYW0ge0V4cG9ydEZvcm1hdH0gZm9ybWF0XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkV4cG9ydEZvcm1hdFNlbGVjdGVkKGZvcm1hdDogRXhwb3J0Rm9ybWF0KTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwSW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpO1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9IHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZztcclxuICAgIC8vIFdpdGhvdXQgYSBncm91cCBpZCB0aGUgZXhwb3J0IFVSTCB3b3VsZCBiZSBtYWxmb3JtZWQsIHNvIGd1YXJkIGhlcmVcclxuICAgIC8vIGluc3RlYWQgb2YgZmlyaW5nIGEgYmFkIHJlcXVlc3QuXHJcbiAgICBpZiAoIWdyb3VwSWQpIHtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LmRlZmF1bHQsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cE5hbWUgPz8gJyc7XHJcbiAgICB0aGlzLnJvc3RlckV4cG9ydFNlcnZpY2Uub25Gb3JtYXRTZWxlY3RlZChmb3JtYXQsIGdyb3VwSWQsIGdyb3VwTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRXhwb3J0U2VydmljZS5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZGF0YS10YWJsZVxyXG4gIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgW2NvbHVtblNjaGVtYUluZm9dPVwiY29sdW1uU2NoZW1hXCJcclxuICBbc2VhcmNoUGxhY2VIb2xkZXJUZXh0XT1cInNlYXJjaFBsYWNlaG9sZGVyVGV4dFwiXHJcbiAgW3RhYmxlQWN0aW9uc109XCJyb3N0ZXJBY3Rpb25zXCJcclxuICBbaXNDZWxsVGV4dE92ZXJmbG93RWxsaXBzaXNdPVwidHJ1ZVwiXHJcbiAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgW2NsYXNzTmFtZV09XCJkYXRhVGFibGVDbGFzc05hbWVcIlxyXG4gIFtzZWxlY3RlZEZpbHRlck9wdGlvbnNdPVwiZmlsdGVyT3B0aW9uc1wiXHJcbiAgW2RlZmF1bHRTb3J0ZWRDb2x1bW5dPVwiZGVmYXVsdFNvcnRlZENvbHVtblwiXHJcbiAgKHNlbGVjdGVkRmlsdGVyKT1cInNldFNlbGVjdGVkRmlsdGVyT3B0aW9ucygkZXZlbnQpXCJcclxuICAocmVtb3ZlRmlsdGVyZWRPcHRpb24pPVwib25GaWx0ZXJHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChmaWx0ZXJlZE9wdGlvbnMpPVwib25GaWx0ZXJHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChzZWFyY2hlZFZhbHVlKT1cIm9uU2VhcmNoR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoc2VsZWN0ZWRSb3dUb0VkaXQpPVwib25FZGl0VXNlclJvbGVzKCRldmVudClcIlxyXG4gIChzZWxlY3RlZFJvd3NUb0RlbGV0ZSk9XCJvcGVuVXNlckRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsKCRldmVudClcIlxyXG4gIChzb3J0Q2hhbmdlKT1cIm9uU29ydEdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKGFkZFJvdyk9XCJvbkFkZEljb25DbGljaygpXCJcclxuPlxyXG4gIDwhLS0gRXhwb3J0IFJvc3RlciBhY3Rpb24g4oCUIHByb2plY3RlZCBpbnRvIHRoZSBkYXRhLXRhYmxlIGFjdGlvbiByb3csXHJcbiAgICAgICBpbmxpbmUgYWZ0ZXIgdGhlIGRlbGV0ZSBpY29uLiAtLT5cclxuICA8ZGl2IGRhdGFUYWJsZUFjdGlvbnMgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FjdGlvbnMtc2xvdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fZXhwb3J0LWFuY2hvclwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibWF0LXRlcnRpYXJ5LWJ1dHRvbiBpZWVlc2Etdmlldy1yb3N0ZXJfX2V4cG9ydC1idG5cIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LnJvc3RlckV4cG9ydD8uYXJpYUxhYmVsXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiF0YWJsZURhdGE/Lmxlbmd0aCB8fCAocm9zdGVyRXhwb3J0U2VydmljZS5pc0V4cG9ydEluUHJvZ3Jlc3MkIHwgYXN5bmMpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRXhwb3J0Q2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmcgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2V4cG9ydC1idG4taWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cG9ydFwiPjwvdXNlPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAge3sgY29uc3RhbnRzPy5yb3N0ZXJFeHBvcnQ/LmJ1dHRvbkxhYmVsIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxpZWVlc2EtZXhwb3J0LWZvcm1hdC1wb3BvdmVyXHJcbiAgICAgIFtmb3JtYXRPcHRpb25zXT1cInJvc3RlckV4cG9ydFNlcnZpY2UuZXhwb3J0Rm9ybWF0T3B0aW9uc1wiXHJcbiAgICAgIFtpc09wZW5dPVwiKHJvc3RlckV4cG9ydFNlcnZpY2UuaXNQb3BvdmVyT3BlbiQgfCBhc3luYykgPz8gZmFsc2VcIlxyXG4gICAgICBbcG9wb3ZlclRpdGxlXT1cInJvc3RlckV4cG9ydFNlcnZpY2UucG9wb3ZlclRpdGxlXCJcclxuICAgICAgW2Zvcm1hdFN1YnRpdGxlc109XCJyb3N0ZXJFeHBvcnRTZXJ2aWNlLmV4cG9ydEZvcm1hdFN1YnRpdGxlc1wiXHJcbiAgICAgIChmb3JtYXRTZWxlY3RlZCk9XCJvbkV4cG9ydEZvcm1hdFNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAoY2xvc2VkKT1cInJvc3RlckV4cG9ydFNlcnZpY2UuY2xvc2VQb3BvdmVyKClcIlxyXG4gICAgPjwvaWVlZXNhLWV4cG9ydC1mb3JtYXQtcG9wb3Zlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVmlldyBIaXN0b3J5IGFjdGlvbiDigJQgb3BlbnMgdGhlIGltcG9ydC1oaXN0b3J5IHBvcHVwIChtb2NrIGRhdGEpLiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm1hdC10ZXJ0aWFyeS1idXR0b24gaWVlZXNhLXZpZXctcm9zdGVyX19oaXN0b3J5LWJ0blwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbnN0YW50cz8ucm9zdGVySW1wb3J0SGlzdG9yeT8uYXJpYUxhYmVsXCJcclxuICAgICAgKGNsaWNrKT1cIm9uVmlld0hpc3RvcnkoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGNvbnN0YW50cz8ucm9zdGVySW1wb3J0SGlzdG9yeT8uYnV0dG9uTGFiZWwgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gSW52aXNpYmxlIGFuY2hvciBmb3IgdGhlIFwiQWRkXCIgbWVudSAoQWRkIE1hbnVhbGx5IC8gQnVsayBJbXBvcnQpLlxyXG4gICAgICAgICBUaGUgYWRkLXVzZXIgaWNvbiBsaXZlcyBpbnNpZGUgdGhlIGRhdGEtdGFibGUgYW5kIG9ubHkgZW1pdHMgKGFkZFJvdyk7XHJcbiAgICAgICAgIG9uQWRkSWNvbkNsaWNrKCkgb3BlbnMgdGhpcyBtZW51IHByb2dyYW1tYXRpY2FsbHksIGFuY2hvcmVkIGhlcmUgc28gaXRcclxuICAgICAgICAgYXBwZWFycyBqdXN0IHVuZGVyIHRoZSBhZGQgaWNvbi4gLS0+XHJcbiAgICA8c3BhblxyXG4gICAgICAjYWRkTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRNZW51XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FkZC1tZW51LWFuY2hvclwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICA+PC9zcGFuPlxyXG4gICAgPG1hdC1tZW51XHJcbiAgICAgICNhZGRNZW51PVwibWF0TWVudVwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudVwiXHJcbiAgICAgIHhQb3NpdGlvbj1cImJlZm9yZVwiXHJcbiAgICAgIHlQb3NpdGlvbj1cImJlbG93XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWRkTWFudWFsbHkoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgY29uc3RhbnRzPy5hZGRSb3N0ZXJNZW51Py5hZGRNYW51YWxseT8udGl0bGUgPz8gJ0FkZCBNYW51YWxseScgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2FkZC1tZW51LWl0ZW0tc3VidGl0bGVcIj5cclxuICAgICAgICAgIHt7IGNvbnN0YW50cz8uYWRkUm9zdGVyTWVudT8uYWRkTWFudWFsbHk/LnN1YnRpdGxlID8/ICdTZWFyY2ggYnkgZW1haWwsIGZpbGwgZGV0YWlscycgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JbXBvcnRSb3N0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fYWRkLW1lbnUtaXRlbS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgY29uc3RhbnRzPy5hZGRSb3N0ZXJNZW51Py5idWxrSW1wb3J0Py50aXRsZSA/PyAnQnVsayBJbXBvcnQnIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXZpZXctcm9zdGVyX19hZGQtbWVudS1pdGVtLXN1YnRpdGxlXCI+XHJcbiAgICAgICAgICB7eyBjb25zdGFudHM/LmFkZFJvc3Rlck1lbnU/LmJ1bGtJbXBvcnQ/LnN1YnRpdGxlID8/ICdVcGxvYWQgQ1NWIG9yIFhMUyBmaWxlJyB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L2llZWVzYS1kYXRhLXRhYmxlPlxyXG4iXX0=
|