@po-ui/ng-templates 18.7.0 → 18.8.0

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.
@@ -258,6 +258,7 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
258
258
  _hideCloseDisclaimers = [];
259
259
  _draggable = false;
260
260
  _spacing = PoTableColumnSpacing.Medium;
261
+ _virtualScroll = true;
261
262
  set defaultPageActions(value) {
262
263
  this._defaultPageActions = value;
263
264
  this.updatePageActions();
@@ -487,6 +488,8 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
487
488
  * o espaço disponível é transferido para a próxima linha em pontos apropriados para uma
488
489
  * leitura clara.
489
490
  *
491
+ * > Incompatível com `virtual-scroll`, que requer altura fixa nas linhas.
492
+ *
490
493
  * @default `false`
491
494
  */
492
495
  textWrap = false;
@@ -504,6 +507,24 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
504
507
  get draggable() {
505
508
  return this._draggable;
506
509
  }
510
+ /**
511
+ * @optional
512
+ *
513
+ * @description
514
+ *
515
+ * Habilita o `virtual-scroll` na tabela para melhorar a performance com grandes volumes de dados.
516
+ * Requer altura (`p-height`) para funcionar corretamente.
517
+ *
518
+ * > Incompatível com `p-text-wrap` e `master-detail`, pois o `virtual-scroll` exige altura fixa nas linhas.
519
+ *
520
+ * @default `true`
521
+ */
522
+ set virtualScroll(value) {
523
+ this._virtualScroll = convertToBoolean(value && this.height > 0);
524
+ }
525
+ get virtualScroll() {
526
+ return this._virtualScroll;
527
+ }
507
528
  constructor(router, activatedRoute, poDialogService, poNotification, poPageDynamicService, poPageCustomizationService, poPageDynamicTableActionsService, languageService) {
508
529
  super();
509
530
  this.router = router;
@@ -1131,7 +1152,7 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
1131
1152
  this.tableActions = newTableActions;
1132
1153
  }
1133
1154
  static ɵfac = function PoPageDynamicTableComponent_Factory(t) { return new (t || PoPageDynamicTableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageCustomizationService), i0.ɵɵdirectiveInject(i5.PoPageDynamicTableActionsService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
1134
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: [0, "p-load", "onLoad"], keepFilters: [2, "p-keep-filters", "keepFilters", convertToBoolean], actionRight: [2, "p-actions-right", "actionRight", convertToBoolean], concatFilters: [2, "p-concat-filters", "concatFilters", convertToBoolean], hideColumnsManager: [2, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], hideRemoveAllDisclaimer: [2, "p-hide-remove-all-disclaimer", "hideRemoveAllDisclaimer", convertToBoolean], infiniteScroll: [2, "p-infinite-scroll", "infiniteScroll", convertToBoolean], actions: [0, "p-actions", "actions"], pageCustomActions: [0, "p-page-custom-actions", "pageCustomActions"], tableCustomActions: [0, "p-table-custom-actions", "tableCustomActions"], quickSearchWidth: [0, "p-quick-search-width", "quickSearchWidth"], height: [0, "p-height", "height"], hideCloseDisclaimers: [0, "p-hide-close-disclaimers", "hideCloseDisclaimers"], quickSearchParam: [0, "p-quick-search-param", "quickSearchParam"], quickSearchValue: [0, "p-quick-search-value", "quickSearchValue"], searchLiterals: [0, "p-literals", "searchLiterals"], spacing: [0, "p-spacing", "spacing"], textWrap: [2, "p-text-wrap", "textWrap", convertToBoolean], draggable: [0, "p-draggable", "draggable"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 24, consts: [[3, "p-advanced-search", "p-change-disclaimers", "p-quick-search", "p-actions", "p-breadcrumb", "p-hide-close-disclaimers", "p-filters", "p-keep-filters", "p-literals", "p-concat-filters", "p-hide-remove-all-disclaimer", "p-quick-search-width", "p-title", "p-quick-search-value"], [3, "p-show-more", "p-sort-by", "p-change-visible-columns", "p-restore-column-manager", "p-sort", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-height", "p-hide-columns-manager", "p-infinite-scroll", "p-show-more-disabled", "p-text-wrap", "p-draggable", "p-spacing"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
1155
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: [0, "p-load", "onLoad"], keepFilters: [2, "p-keep-filters", "keepFilters", convertToBoolean], actionRight: [2, "p-actions-right", "actionRight", convertToBoolean], concatFilters: [2, "p-concat-filters", "concatFilters", convertToBoolean], hideColumnsManager: [2, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], hideRemoveAllDisclaimer: [2, "p-hide-remove-all-disclaimer", "hideRemoveAllDisclaimer", convertToBoolean], infiniteScroll: [2, "p-infinite-scroll", "infiniteScroll", convertToBoolean], actions: [0, "p-actions", "actions"], pageCustomActions: [0, "p-page-custom-actions", "pageCustomActions"], tableCustomActions: [0, "p-table-custom-actions", "tableCustomActions"], quickSearchWidth: [0, "p-quick-search-width", "quickSearchWidth"], height: [0, "p-height", "height"], hideCloseDisclaimers: [0, "p-hide-close-disclaimers", "hideCloseDisclaimers"], quickSearchParam: [0, "p-quick-search-param", "quickSearchParam"], quickSearchValue: [0, "p-quick-search-value", "quickSearchValue"], searchLiterals: [0, "p-literals", "searchLiterals"], spacing: [0, "p-spacing", "spacing"], textWrap: [2, "p-text-wrap", "textWrap", convertToBoolean], draggable: [0, "p-draggable", "draggable"], virtualScroll: [0, "p-virtual-scroll", "virtualScroll"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 25, consts: [[3, "p-advanced-search", "p-change-disclaimers", "p-quick-search", "p-actions", "p-breadcrumb", "p-hide-close-disclaimers", "p-filters", "p-keep-filters", "p-literals", "p-concat-filters", "p-hide-remove-all-disclaimer", "p-quick-search-width", "p-title", "p-quick-search-value"], [3, "p-show-more", "p-sort-by", "p-change-visible-columns", "p-restore-column-manager", "p-sort", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-height", "p-hide-columns-manager", "p-infinite-scroll", "p-show-more-disabled", "p-text-wrap", "p-draggable", "p-spacing", "p-virtual-scroll"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
1135
1156
  i0.ɵɵelementStart(0, "po-page-dynamic-search", 0);
1136
1157
  i0.ɵɵlistener("p-advanced-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_advanced_search_0_listener($event) { return ctx.onAdvancedSearch($event); })("p-change-disclaimers", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_change_disclaimers_0_listener($event) { return ctx.onChangeDisclaimers($event); })("p-quick-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_quick_search_0_listener($event) { return ctx.onQuickSearch($event); });
1137
1158
  i0.ɵɵelementStart(1, "po-table", 1);
@@ -1140,12 +1161,12 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
1140
1161
  } if (rf & 2) {
1141
1162
  i0.ɵɵproperty("p-actions", ctx.pageActions)("p-breadcrumb", ctx.breadcrumb)("p-hide-close-disclaimers", ctx.hideCloseDisclaimers)("p-filters", ctx.filters)("p-keep-filters", ctx.keepFilters)("p-literals", ctx.searchLiterals)("p-concat-filters", ctx.concatFilters)("p-hide-remove-all-disclaimer", ctx.hideRemoveAllDisclaimer)("p-quick-search-width", ctx.quickSearchWidth)("p-title", ctx.title)("p-quick-search-value", ctx.quickSearchValue || "");
1142
1163
  i0.ɵɵadvance();
1143
- i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-height", ctx.height)("p-hide-columns-manager", ctx.hideColumnsManager)("p-infinite-scroll", ctx.infiniteScroll)("p-show-more-disabled", !ctx.hasNext)("p-text-wrap", ctx.textWrap)("p-draggable", ctx.draggable)("p-spacing", ctx.spacing);
1164
+ i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-height", ctx.height)("p-hide-columns-manager", ctx.hideColumnsManager)("p-infinite-scroll", ctx.infiniteScroll)("p-show-more-disabled", !ctx.hasNext)("p-text-wrap", ctx.textWrap)("p-draggable", ctx.draggable)("p-spacing", ctx.spacing)("p-virtual-scroll", ctx.virtualScroll);
1144
1165
  } }, dependencies: [i2.PoTableComponent, i6.PoPageDynamicSearchComponent], encapsulation: 2 });
1145
1166
  }
1146
1167
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicTableComponent, [{
1147
1168
  type: Component,
1148
- args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-hide-close-disclaimers]=\"hideCloseDisclaimers\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-literals]=\"searchLiterals\"\n [p-concat-filters]=\"concatFilters\"\n [p-hide-remove-all-disclaimer]=\"hideRemoveAllDisclaimer\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n [p-quick-search-value]=\"quickSearchValue || ''\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-actions-right]=\"actionRight\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-height]=\"height\"\n [p-hide-columns-manager]=\"hideColumnsManager\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n (p-change-visible-columns)=\"onChangeVisibleColumns($event)\"\n (p-restore-column-manager)=\"onColumnRestoreManager($event)\"\n (p-sort-by)=\"onSortBy($event)\"\n [p-text-wrap]=\"textWrap\"\n [p-draggable]=\"draggable\"\n [p-spacing]=\"spacing\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
1169
+ args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-hide-close-disclaimers]=\"hideCloseDisclaimers\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-literals]=\"searchLiterals\"\n [p-concat-filters]=\"concatFilters\"\n [p-hide-remove-all-disclaimer]=\"hideRemoveAllDisclaimer\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n [p-quick-search-value]=\"quickSearchValue || ''\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-actions-right]=\"actionRight\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-height]=\"height\"\n [p-hide-columns-manager]=\"hideColumnsManager\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n (p-change-visible-columns)=\"onChangeVisibleColumns($event)\"\n (p-restore-column-manager)=\"onColumnRestoreManager($event)\"\n (p-sort-by)=\"onSortBy($event)\"\n [p-text-wrap]=\"textWrap\"\n [p-draggable]=\"draggable\"\n [p-spacing]=\"spacing\"\n [p-virtual-scroll]=\"virtualScroll\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
1149
1170
  }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PoDialogService }, { type: i2.PoNotificationService }, { type: i3.PoPageDynamicService }, { type: i4.PoPageCustomizationService }, { type: i5.PoPageDynamicTableActionsService }, { type: i2.PoLanguageService }], { onLoad: [{
1150
1171
  type: Input,
1151
1172
  args: ['p-load']
@@ -1203,6 +1224,9 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
1203
1224
  }], draggable: [{
1204
1225
  type: Input,
1205
1226
  args: ['p-draggable']
1227
+ }], virtualScroll: [{
1228
+ type: Input,
1229
+ args: ['p-virtual-scroll']
1206
1230
  }] }); })();
1207
1231
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoPageDynamicTableComponent, { className: "PoPageDynamicTableComponent", filePath: "lib/components/po-page-dynamic-table/po-page-dynamic-table.component.ts", lineNumber: 151 }); })();
1208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBUUwscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxLQUFLLElBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFldEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1B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O2tCQUExRCxLQUFLO21CQUFDLDBCQUEwQjtZQWlCRSxnQkFBZ0I7a0JBQWxELEtBQUs7bUJBQUMsc0JBQXNCO1lBZ0JNLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0I7WUE4Q1IsY0FBYztrQkFBbEMsS0FBSzttQkFBQyxZQUFZO1lBYUssT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBdUI0QyxRQUFRO2tCQUFyRSxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFVbEMsU0FBUztrQkFBbEMsS0FBSzttQkFBQyxhQUFhOztrRkFoYVQsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBQb1RhYmxlQWN0aW9uLFxuICBQb1RhYmxlQ29sdW1uU29ydCxcbiAgUG9UYWJsZUNvbHVtblNvcnRUeXBlLFxuICBQb1RhYmxlQ29sdW1uU3BhY2luZyxcbiAgcG9Mb2NhbGVEZWZhdWx0XG59IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcblxuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtZHluYW1pYy9wby1wYWdlLWR5bmFtaWMuc2VydmljZSc7XG5pbXBvcnQgeyBpc0V4dGVybmFsTGluaywgb3BlbkV4dGVybmFsTGluaywgcmVtb3ZlRHVwbGljYXRlSXRlbXNXaXRoQXJyYXlLZXkgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZWFyY2hMaXRlcmFscyB9IGZyb20gJy4uL3BvLXBhZ2UtZHluYW1pYy1zZWFyY2gvcG8tcGFnZS1keW5hbWljLXNlYXJjaC1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWN1c3RvbWl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtZHluYW1pYy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1hY3Rpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEZXRhaWwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1kZXRhaWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWR1cGxpY2F0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWVkaXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLW5ldy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlQWxsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtcmVtb3ZlLWFsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtcmVtb3ZlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWN1c3RvbS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWxpc3QtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtbGl0ZXJhbHMnO1xuXG5jb25zdCBQQUdFX1NJWkVfREVGQVVMVCA9IDEwO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy10YWJsZWAgw6kgdW1hIHDDoWdpbmEgcXVlIGV4aWJlIHVtYSBsaXN0YSBkZSByZWdpc3Ryb3MgZW0gdW1hIHRhYmVsYSBiYXNlYWRvIGVtIHVtYSBsaXN0YSBkZSBmaWVsZHMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqICMjIyBVdGlsaXphw6fDo28gdmlhIHJvdGFcbiAqXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGluaWNpYWxpemFyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcXVlIGRldmVtIHNlciBmb3JuZWNpZGFzIG5vIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZGUgcm90YXMgZGEgYXBsaWNhw6fDo28sIHBhcmFcbiAqIHBvZGVyIGVzcGVjaWZpY2FyIG8gZW5kcG9pbnQgZG9zIGRhZG9zIGUgZG9zIG1ldGFkYWRvcyBxdWUgc2Vyw6NvIGNhcnJlZ2Fkb3MgbmEgaW5pY2lhbGl6YcOnw6NvLlxuICpcbiAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICpcbiAqIEFycXVpdm8gZGUgY29uZmlndXJhw6fDo28gZGUgcm90YXMgZGEgYXBsaWNhw6fDo286IGBhcHAtcm91dGluZy5tb2R1bGUudHNgXG4gKiBgYGBcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICoge1xuICogICBwYXRoOiAncGVvcGxlJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIFBvc3RcbiAqICAgfVxuICogIH0sXG4gKiAge1xuICogICBwYXRoOiAnaG9tZScsXG4gKiAgIGNvbXBvbmVudDogSG9tZUV4YW1wbGVDb21wb25lbnRcbiAqICB9XG4gKiBdO1xuICpcbiAqIGBgYFxuICogTyBjb21wb25lbnRlIHByaW1laXJvIGlyw6EgY2FycmVnYXIgbyBtZXRhZGFkbyBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VNZXRhZGF0YUFwaVxuICogZSBkZXBvaXMgaXLDoSBidXNjYXIgZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTG9hZEFwaS5cbiAqXG4gKiBBIHJlcXVpc2nDp8OjbyBkb3MgbWV0YWRhZG9zIMOpIGZlaXRhIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhciBvcyBtZXRhZGFkb3MgZGEgcMOhZ2luYSBwYXNzYW5kbyBvXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cbiAqXG4gKiA+IENhc28gbyBzZXJ2aWRvciByZXRvcm5hciB1bSBlcnJvIGFvIHJlY3VwZXJhciBvcyBtZXRhZGFkb3MsIHNlcsOjbyByZXBhc3NhZG9zIG9zIG1ldGFkYWRvcyBzYWx2b3MgZW0gY2FjaGUsXG4gKiBzZSBvIGNhY2hlIG7Do28gZXhpc3RpciBzZXLDoSBkaXNwYXJhZGEgdW1hIG5vdGlmaWNhw6fDo28uXG4gKlxuICogTyBmb3JtYXRvIGVzcGVyYWRvIG5hIHJlc3Bvc3RhIGRhIHJlcXVpc2nDp8OjbyBlc3TDoSBlc3BlY2lmaWNhZG8gbmEgaW50ZXJmYWNlXG4gKiBbUG9QYWdlRHluYW1pY1RhYmxlTWV0YWRhdGFdKC9kb2N1bWVudGF0aW9uL3BvLXBhZ2UtZHluYW1pYy10YWJsZSNwby1wYWdlLWR5bmFtaWMtdGFibGUtbWV0YWRhdGEpLiBQb3IgZXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqICB7XG4gKiAgIHZlcnNpb246IDEsXG4gKiAgIHRpdGxlOiAnUGVyc29uIFRhYmxlJyxcbiAqICAgZmllbGRzOiBbXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25pY2tuYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2dlbnJlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjaXR5JyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XG4gKiAgIF0sXG4gKiAgIGtlZXBGaWx0ZXJzOiB0cnVlXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiA+IENhc28gbyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIG7Do28gc2VqYSBlc3BlY2lmaWNhZG8sIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gdXRpbGl6YW5kbyBvIGBzZXJ2aWNlQXBpYCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAqIGBgYFxuICogR0VUIHtlbmQtcG9pbnR9L21ldGFkYXRhP3R5cGU9bGlzdCZ2ZXJzaW9uPXt2ZXJzaW9ufVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgVGFibGUgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGVcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFBlb3BsZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vyc1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gVXNlcnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVsc1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gSG90ZWxzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3BcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIERyYWcgYW5kIERyb3BcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1kcmFnLWFuZC1kcm9wL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3AuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tcGFnZS1keW5hbWljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQgZXh0ZW5kcyBQb1BhZ2VEeW5hbWljTGlzdEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBvdSBzZXJ2acOnbyBxdWUgc2Vyw6EgZXhlY3V0YWRvIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYHN0cmluZ2A6ICpFbmRwb2ludCogdXNhZG8gcGVsbyBjb21wb25lbnRlIHBhcmEgcmVxdWlzacOnw6NvIHZpYSBgUE9TVGAuXG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBPIHJldG9ybm8gZGVzdGEgZnVuw6fDo28gZGV2ZSBzZXIgZG8gdGlwbyBgUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9uc2AsXG4gICAqIG9uZGUgbyB1c3XDoXJpbyBwb2RlcsOhIGN1c3RvbWl6YXIgbm92b3MgY2FtcG9zLCBicmVhZGNydW1iLCB0aXRsZSBlIGFjdGlvbnNcbiAgICpcbiAgICogUG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBnZXRQYWdlT3B0aW9ucygpOiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zIHtcbiAgICogcmV0dXJuIHtcbiAgICogICBhY3Rpb25zOlxuICAgKiAgICAgeyBuZXc6ICduZXcnLCBlZGl0OiAnZWRpdC86aWQnLCByZW1vdmU6IHRydWUgfSxcbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XG4gICAqICAgXVxuICAgKiB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWRdPVwib25Mb2FkT3B0aW9ucy5iaW5kKHRoaXMpXCJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZCcpIG9uTG9hZDogc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE1hbnTDqW0gbmEgbW9kYWwgZGUgYEJ1c2NhIEF2YW7Dp2FkYWAgb3MgdmFsb3JlcyBwcmVlbmNoaWRvcyBkbyDDumx0aW1vIGZpbHRybyByZWFsaXphZG8gcGVsbyB1c3XDoXJpby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWtlZXAtZmlsdGVycycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBrZWVwRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBjb2x1bmEgZGUgYcOnw7VlcyBmaWNhcsOhIG5vIGxhZG8gZGlyZWl0byBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hY3Rpb25zLXJpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGFjdGlvblJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHV0aWxpemHDp8OjbyBkYSBwZXNxdWlzYSByw6FwaWRhIGp1bnRvIGNvbSBhIHBlc3F1aXNhIGF2YW7Dp2FkYS5cbiAgICpcbiAgICogRGVzdGEgZm9ybWEsIGFvIHRlciB1bWEgcGVzcXVpc2EgYXZhbsOnYWRhIGVzdGFiZWxlY2lkYSBlIHNlclxuICAgKiBwcmVlbmNoaWRvIGEgcGVzcXVpc2EgcsOhcGlkYSwgbyBmaWx0cm8gc2Vyw6EgY29uY2F0ZW5hZG8gYWRpY2lvbmFuZG8gYSBwZXNxdWlzYVxuICAgKiByw6FwaWRhIHRhbWLDqW0gbmEgbGlzdGEgZGUgYGRpc2NsYWltZXJzYCBhIGFwbGljYW5kbyB1bWEgbm92YSBidXNjYSBjb20gYSBjb25jYXRlbmHDp8Ojby5cbiAgICpcbiAgICogUG9yIGV4ZW1wbG8sIGNvbSBvcyBzZWd1aW50ZXMgZmlsdHJvcyBhcGxpY2Fkb3M6XG4gICAqICAgLSBmaWx0cm8gYXZhbsOnYWRvOiBgeyBuYW1lOiAnTWlrZScsIGFnZTogJzEyJyB9YFxuICAgKiAgIC0gZmlsdHJvIHLDoXBpZG86IGB7IHNlYXJjaDogJ3BhcGVyJyB9YFxuICAgKlxuICAgKiBBIHJlcXVpc2nDp8OjbyBkb3MgZGFkb3MgbmEgQVBJIGZpY2Fyw6EgY29tIG9zIHBhcsOibWV0cm9zOlxuICAgKiBgYGBcbiAgICogcGFnZT0xJnBhZ2VTaXplPTEwJm5hbWU9TWlrZSZhZ2U9MTImc2VhcmNoPXBhcGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtY29uY2F0LWZpbHRlcnMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgY29uY2F0RmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcywgcmVzcG9uc8OhdmVsIHBlbGEgZGVmaW5pw6fDo28gZGUgcXVhaXMgY29sdW5hcyBzZXLDo28gZXhpYmlkYXMsIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1jb2x1bW5zLW1hbmFnZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSlcbiAgaGlkZUNvbHVtbnNNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2N1bHRhIG8gYm90w6NvIHBhcmEgcmVtb3ZlciB0b2RvcyBvcyAqZGlzY2xhaW1lcnMqIGRvIGdydXBvLlxuICAgKlxuICAgKiA+IFBvciBwYWRyw6NvLCBvIG1lc21vIMOpIGV4aWJpZG8gw6AgcGFydGlyIGRlIGRvaXMgb3UgbWFpcyAqZGlzY2xhaW1lcnMqIGNvbSBhIG9ww6fDo28gYGhpZGVDbG9zZWAgaGFiaWxpdGFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWhpZGUtcmVtb3ZlLWFsbC1kaXNjbGFpbWVyJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pXG4gIGhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgYXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBhIHRhYmVsYSBlIG8gYm90w6NvIFwiQ2FycmVnYXIgTWFpc1wiIGRlaXhhcsOhIGRlIHNlciBleGliaWRvLiBBbyBjaGVnYXIgbm8gZmltIGRhIHRhYmVsYVxuICAgKiBleGVjdXRhcsOhIGEgZnVuw6fDo28gYHAtc2hvdy1tb3JlYC5cbiAgICpcbiAgICogKipSZWdyYXMgZGUgdXRpbGl6YcOnw6NvOioqXG4gICAqICAtIE8gc2Nyb2xsIGluZmluaXRvIHPDsyBmdW5jaW9uYSBwYXJhIHRhYmVsYXMgcXVlIHV0aWxpemFtIGEgcHJvcHJpZWRhZGUgYHAtaGVpZ2h0YCBlIHF1ZSBwb3NzdWVtIG8gc2Nyb2xsIGrDoSBuYSBjYXJnYSBpbmljaWFsIGRvcyBkYWRvcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWluZmluaXRlLXNjcm9sbCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGhhc05leHQgPSBmYWxzZTtcbiAgaXRlbXMgPSBbXTtcbiAgbGl0ZXJhbHM7XG4gIHBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcblxuICBwcml2YXRlIF9hY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zID0ge307XG4gIHByaXZhdGUgX3BhZ2VDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF9vbGRRdWlja1NlYXJjaFBhcmFtOiBzdHJpbmc7XG4gIHByaXZhdGUgX3F1aWNrU2VhcmNoUGFyYW06IHN0cmluZyA9ICdzZWFyY2gnO1xuICBwcml2YXRlIF9xdWlja1NlYXJjaFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3F1aWNrU2VhcmNoV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGFibGVDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4gPSBbXTtcblxuICBwcml2YXRlIHBhZ2U6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgaXRlbVNlbGVjdGVkQWN0aW9uO1xuICBwcml2YXRlIHBhcmFtcyA9IHt9O1xuICBwcml2YXRlIHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBoYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2N1c3RvbVBhZ2VMaXN0QWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9jdXN0b21UYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRQYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9kZWZhdWx0VGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9oaWRlQ2xvc2VEaXNjbGFpbWVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcml2YXRlIF9kcmFnZ2FibGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3BhY2luZzogUG9UYWJsZUNvbHVtblNwYWNpbmcgPSBQb1RhYmxlQ29sdW1uU3BhY2luZy5NZWRpdW07XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFBhZ2VBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VBY3Rpb24+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUYWJsZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVBhZ2VMaXN0QWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlQWN0aW9uPikge1xuICAgIHRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUGFnZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9jdXN0b21UYWJsZUFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQcOnw7VlcyBkYSBww6FnaW5hIGUgZGEgdGFiZWxhLlxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyh2YWx1ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwID8gdmFsdWUgOiB7fTtcblxuICAgIHRoaXMuc2V0UGFnZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcbiAgICB0aGlzLnNldFJlbW92ZUFsbEFjdGlvbigpO1xuICAgIHRoaXMuc2V0VGFibGVBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIGRhIHDDoWdpbmEgcXVlIHNlcsOjbyBpbmNvcnBvcmFkYXMgw6BzIGHDp8O1ZXNcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cbiAgICpcbiAgICogRXNzYXMgYcOnw7VlcyBmaWNhbSBsb2NhbGl6YWRhcyBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBww6FnaW5hIGVtIGJvdMO1ZXMgY29tIGHDp8O1ZXMuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0V4cG9ydCcsIGFjdGlvbjogdGhpcy5leHBvcnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ1ByaW50JywgYWN0aW9uOiB0aGlzLnByaW50LmJpbmQodGhpcykgfVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1wYWdlLWN1c3RvbS1hY3Rpb25zJykgc2V0IHBhZ2VDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+KSB7XG4gICAgdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtQ3VzdG9tQWN0aW9uc1RvUGFnZUxpc3RBY3Rpb24odGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyk7XG4gICAgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMuc29tZShjdXN0b21BY3Rpb24gPT4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUpO1xuICB9XG5cbiAgZ2V0IHBhZ2VDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ3VzdG9tQWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIG5hIHRhYmVsYSBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0FwcGx5IGRpc2NvdW50JywgYWN0aW9uOiB0aGlzLmFwcGx5RGlzY291bnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ0RldGFpbHMnLCBhY3Rpb246IHRoaXMuZGV0YWlscy5iaW5kKHRoaXMpIH1cbiAgICogXTtcbiAgICogYGBgXG4gICAqID4gQ2FzbyB1dGlsaXphciBhIGHDp8OjbyBwYWRyw6NvIGRlIGV4Y2x1aXIsIGEgbWVzbWEgc2Vyw6EgZXhpYmlkYSBwb3Igw7psdGltbyBuYSB0YWJlbGEuXG4gICAqL1xuICBASW5wdXQoJ3AtdGFibGUtY3VzdG9tLWFjdGlvbnMnKSBzZXQgdGFibGVDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVRhYmxlQWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnModGhpcy50YWJsZUN1c3RvbUFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IHRhYmxlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMYXJndXJhIGRvIGNhbXBvIGRlIGJ1c2NhLCB1dGlsaXphbmRvIG8gKkdyaWQgU3lzdGVtKixcbiAgICogZSBsaW1pdGFkbyBhbyBtw6F4aW1vIGRlIDYgY29sdW5hcy4gTyB0YW1hbmhvIG3DrW5pbW8gw6kgY29udHJvbGFkb1xuICAgKiBjb25mb3JtZSByZXNvbHXDp8OjbyBkZSB0ZWxhIHBhcmEgbWFudGVyIGEgY29uc2lzdMOqbmNpYSBkbyBsYXlvdXQuXG4gICAqL1xuICBASW5wdXQoJ3AtcXVpY2stc2VhcmNoLXdpZHRoJykgc2V0IHF1aWNrU2VhcmNoV2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3F1aWNrU2VhcmNoV2lkdGggPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcXVpY2tTZWFyY2hXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2hlaWdodCA9IHV0aWwuY29udmVydFRvSW50KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgZmlsdHJvcyBxdWUgdGVyw6NvIGEgb3DDp8OjbyBkZSBmZWNoYXIgb2N1bHRhZGFcbiAgICogZW0gc2V1IHJlc3BlY3Rpdm8gZGlzY2xhaW1lci4gVXRpbGl6YXIgbyBhdHJpYnV0byBgcHJvcGVydHlgIGRvIGNhbXBvLlxuICAgKlxuICAgKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAgICogYGBgXG4gICAqIFsnY2l0eScsJ25hbWUnXTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1jbG9zZS1kaXNjbGFpbWVycycpIHNldCBoaWRlQ2xvc2VEaXNjbGFpbWVycyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuX2hpZGVDbG9zZURpc2NsYWltZXJzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICB9XG5cbiAgZ2V0IGhpZGVDbG9zZURpc2NsYWltZXJzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIElkZW50aWZpY2Fkb3IgZG8gcGFyw6JtZXRybyBlbnZpYWRvIGFvIHNlcnZpw6dvIGFvIHJlYWxpemFyIHVtYSBidXNjYSByw6FwaWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnc2VhcmNoJ1xuICAgKi9cbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC1wYXJhbScpIHNldCBxdWlja1NlYXJjaFBhcmFtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWlja1NlYXJjaFBhcmFtID0gdmFsdWUgPz8gJ3NlYXJjaCc7XG4gIH1cblxuICBnZXQgcXVpY2tTZWFyY2hQYXJhbSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFBhcmFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgcGFkcsOjbyBuYSBidXNjYSByw6FwaWRhIGFvIGluaWNpYWxpemFyIG8gY29tcG9uZW50ZVxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC12YWx1ZScpIHNldCBxdWlja1NlYXJjaFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWlja1NlYXJjaFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcXVpY2tTZWFyY2hWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLXBhZ2UtZHluYW1pYy10YWJsZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNTZWFyY2hMaXRlcmFscyA9IHtcbiAgICogICAgZGlzY2xhaW1lckdyb3VwVGl0bGU6ICdGaWx0cm9zIGFwbGljYWRvczonLFxuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nLFxuICAgKiAgICBmaWx0ZXJDYW5jZWxMYWJlbDogJ0ZlY2hhcicsXG4gICAqICAgIGZpbHRlckNvbmZpcm1MYWJlbDogJ0FwbGljYXInLFxuICAgKiAgICBxdWlja1NlYXJjaExhYmVsOiAnVmFsb3IgcGVzcXVpc2FkbzonLFxuICAgKiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1Blc3F1aXNlIGFxdWknXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzID0ge1xuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1wYWdlLWR5bmFtaWMtdGFibGVcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLXBhZ2UtZHluYW1pYy10YWJsZT5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyB2YWxvciBwYWRyw6NvIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGNvbmZpZ3VyYWRvIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNlYXJjaExpdGVyYWxzOiBQb1BhZ2VEeW5hbWljU2VhcmNoTGl0ZXJhbHM7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUmVzcG9uc8OhdmVsIHBvciBhcGxpY2FyIGVzcGHDp2FtZW50byBuYXMgY29sdW5hcy5cbiAgICpcbiAgICogRGV2ZSByZWNlYmVyIHVtIGRvcyB2YWxvcmVzIGRvIGVudW0gYFBvVGFibGVDb2x1bW5TcGFjaW5nYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYG1lZGl1bWBcbiAgICovXG4gIEBJbnB1dCgncC1zcGFjaW5nJykgc2V0IHNwYWNpbmcodmFsdWU6IFBvVGFibGVDb2x1bW5TcGFjaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAnc21hbGwnIHx8IHZhbHVlID09PSAnbWVkaXVtJyB8fCB2YWx1ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBhIHF1ZWJyYSBhdXRvbcOhdGljYSBkZSB0ZXh0by4gUXVhbmRvIGF0aXZhZGEsIG8gdGV4dG8gcXVlIGV4Y2VkZVxuICAgKiBvIGVzcGHDp28gZGlzcG9uw612ZWwgw6kgdHJhbnNmZXJpZG8gcGFyYSBhIHByw7N4aW1hIGxpbmhhIGVtIHBvbnRvcyBhcHJvcHJpYWRvcyBwYXJhIHVtYVxuICAgKiBsZWl0dXJhIGNsYXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtdGV4dC13cmFwJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHRleHRXcmFwPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gbW9kbyBkcmFnIGFuZCBkcm9wIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZHJhZ2dhYmxlJykgc2V0IGRyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYWdnYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGRyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxpdGVyYWxzID0ge1xuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHsgcGFnZTogMSwgLi4uZmlsdGVyIH0pLnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnBhcmFtcyA9IGZpbHRlcjtcblxuICAgIGlmICh0aGlzLmtlZXBGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VEaXNjbGFpbWVycyhkaXNjbGFpbWVycykge1xuICAgIGNvbnN0IGZpbHRlciA9IHt9O1xuXG4gICAgZGlzY2xhaW1lcnMuZm9yRWFjaChkaXNjbGFpbWVyID0+IHtcbiAgICAgIGZpbHRlcltkaXNjbGFpbWVyLnByb3BlcnR5XSA9IGRpc2NsYWltZXIudmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKTtcbiAgfVxuXG4gIG9uUXVpY2tTZWFyY2godGVybVR5cGVkSW5RdWlja1NlYXJjaCkge1xuICAgIGNvbnN0IHF1aWNrU2VhcmNoUGFyYW0gPSB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGVybVR5cGVkSW5RdWlja1NlYXJjaCB9IDoge307XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmNvbmNhdEZpbHRlcnMgPyB7IC4uLnRoaXMucGFyYW1zLCAuLi5xdWlja1NlYXJjaFBhcmFtIH0gOiB7IC4uLnF1aWNrU2VhcmNoUGFyYW0gfTtcblxuICAgIGlmICh0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtIGluIHRoaXMucGFyYW1zICYmIHRoaXMuX29sZFF1aWNrU2VhcmNoUGFyYW0gIT09IHRoaXMucXVpY2tTZWFyY2hQYXJhbSkge1xuICAgICAgZGVsZXRlIHRoaXMucGFyYW1zW3RoaXMuX29sZFF1aWNrU2VhcmNoUGFyYW1dO1xuICAgIH1cblxuICAgIHRoaXMuX29sZFF1aWNrU2VhcmNoUGFyYW0gPSB0aGlzLnF1aWNrU2VhcmNoUGFyYW07XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggPyB7IHBhZ2U6IDEsIC4uLnRoaXMucGFyYW1zIH0gOiB1bmRlZmluZWQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIG9uU29ydChzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0KSB7XG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XG4gICAgICBjb25zdCBvcmRlciA9IHNvcnRlZENvbHVtbi50eXBlID09PSAnYXNjZW5kaW5nJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHV0aWwuc29ydEFycmF5T2ZPYmplY3RzKHRoaXMuaXRlbXMsIHNvcnRlZENvbHVtbi5jb2x1bW4ucHJvcGVydHksIG9yZGVyKTtcbiAgICB9XG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBzb3J0ZWRDb2x1bW47XG4gIH1cblxuICBvbkNoYW5nZVZpc2libGVDb2x1bW5zKHZhbHVlKSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmxlQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ29sdW1uUmVzdG9yZU1hbmFnZXIodmFsdWU6IEFycmF5PFN0cmluZz4pIHtcbiAgICB0aGlzLmNvbHVtblJlc3RvcmVNYW5hZ2VyLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25Tb3J0Qnkoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xuICAgIHRoaXMuc29ydEJ5LmVtaXQoc29ydGVkQ29sdW1uKTtcbiAgfVxuXG4gIHNob3dNb3JlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6ICsrdGhpcy5wYWdlLCAuLi50aGlzLnBhcmFtcyB9KS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgZW5hYmxlU2VsZWN0aW9uVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uUmVtb3ZlQWxsIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGU7XG4gIH1cblxuICBnZXQgaGFzQWN0aW9uUmVtb3ZlQWxsKCkge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aW9ucy5yZW1vdmVBbGw7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIHJlYWxpemEgYSBhdHVhbGl6YcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gY2FwdHVyYXIgYSBpbnN0w6JuY2lhIGRvIGBwYWdlIGR5bmFtaWMgdGFibGVgLCBjb21vIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGAgaHRtbFxuICAgKiA8cG8tcGFnZS1keW5hbWljLXRhYmxlICNkeW5hbWljVGFibGUgW3Atc2VydmljZS1hcGldPVwic2VydmljZUFwaVwiPjwvcG8tcGFnZS1keW5hbWljLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgIGphdmFzY3JpcHRcbiAgICogaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50LCBQb0R5bmFtaWNGb3JtRmllbGQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljVGFibGU6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudDtcbiAgICpcbiAgICogcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXG4gICAqIHtcbiAgICogICBsYWJlbDogJ1VwZGF0ZScsXG4gICAqICAgYWN0aW9uOiB0aGlzLnVwZGF0ZVRhYmxlLmJpbmQodGhpcyksXG4gICAqICAgaWNvbjogJ3BoLWFycm93cy1jbG9ja3dpc2UnXG4gICAqIH1dXG4gICAqXG4gICAqIHVwZGF0ZVRhYmxlKCkge1xuICAgKiAgIHRoaXMuZHluYW1pY1RhYmxlLnVwZGF0ZURhdGFUYWJsZSgpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge3twYWdlOiBudW1iZXIsIGtleTogdmFsdWUgfX0gZmlsdGVyIFByb3ByaWVkYWRlIHBhcmEgZW52aW8gZGUgdW0gZmlsdHJvIGN1c3RvbWl6YWRvLlxuICAgKiBFeGVtcGxvIGRlIGVudmlvOlxuICAgKlxuICAgKmBgYFxuICAgKiB0aGlzLmR5bmFtaWNUYWJsZS51cGRhdGVEYXRhVGFibGUoe3BhZ2U6IDMsIHNlYXJjaDogJ0JyYXNpbCd9KTtcbiAgICogYGBgXG4gICAqIENhc28gbsOjbyBzZWphIHBhc3NhZG8gdW0gZmlsdHJvIGN1c3RvbWl6YWRvIHBhcmEgbyBtw6l0b2RvIGB1cGRhdGVEYXRhVGFibGVgIGEgdGFiZWxhIHNlcsOhIGF0dWFsaXphZGEgY29uZm9ybWUgYSBww6FnaW5hIGRvIHVsdGltbyBpdGVtIG1vZGlmaWNhZG8uXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRGF0YVRhYmxlKGZpbHRlcj86IGFueSkge1xuICAgIGNvbnN0IGluZGV4SXRlbVNlbGVjdGVkID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLml0ZW1TZWxlY3RlZEFjdGlvbik7XG4gICAgY29uc3QgcGFnZU51bWJlciA9IE1hdGguZmxvb3IoaW5kZXhJdGVtU2VsZWN0ZWQgLyBQQUdFX1NJWkVfREVGQVVMVCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VOdW1iZXIgPCAwID8gdGhpcy5jdXJyZW50UGFnZSA6IHBhZ2VOdW1iZXIgKyAxO1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YShmaWx0ZXIpLnN1YnNjcmliZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHsgcGFnZTogdGhpcy5jdXJyZW50UGFnZSwgLi4udGhpcy5wYXJhbXMgfSkuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ10sXG4gICAgaXRlbVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZU1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZS5iaW5kKHRoaXMsIGl0ZW0sIGFjdGlvblJlbW92ZSwgYWN0aW9uQmVmb3JlUmVtb3ZlKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZUFsbChcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XG4gICAgICB0aXRsZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlQWxsVGl0bGUsXG4gICAgICBtZXNzYWdlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxNZXNzYWdlLFxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb25SZW1vdmVBbGwsIGFjdGlvbkJlZm9yZVJlbW92ZUFsbClcbiAgICB9O1xuXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XG4gICAgY29uc3Qga2V5cyA9IHV0aWwubWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHRoaXMua2V5cyk7XG5cbiAgICByZXR1cm4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB0eXBlIH0gPSBzb3J0ZWRDb2x1bW47XG5cbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZykge1xuICAgICAgcmV0dXJuIHsgb3JkZXI6IGAtJHtjb2x1bW4ucHJvcGVydHl9YCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IG9yZGVyOiBgJHtjb2x1bW4ucHJvcGVydHl9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShwYXJhbXM6IHsgcGFnZT86IG51bWJlcjsgc2VhcmNoPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5zZXJ2aWNlQXBpKSB7XG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKHRoaXMubGl0ZXJhbHMubG9hZERhdGFFcnJvck5vdGlmaWNhdGlvbik7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJQYXJhbSA9IHRoaXMuZ2V0T3JkZXJQYXJhbSh0aGlzLnNvcnRlZENvbHVtbik7XG4gICAgY29uc3QgZGVmYXVsdFBhcmFtczogYW55ID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogUEFHRV9TSVpFX0RFRkFVTFQgfTtcbiAgICBjb25zdCBmdWxsUGFyYW1zOiBhbnkgPSB7IC4uLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcywgLi4ub3JkZXJQYXJhbSB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2VzKGZ1bGxQYXJhbXMpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBsZXQgbmV3QXJyYXk7XG4gICAgICAgIGlmIChmdWxsUGFyYW1zLnBhZ2UgPT09IDEpIHtcbiAgICAgICAgICBuZXdBcnJheSA9IHJlbW92ZUR1cGxpY2F0ZUl0ZW1zV2l0aEFycmF5S2V5KHJlc3BvbnNlLml0ZW1zLCByZXNwb25zZS5pdGVtcywgdGhpcy5rZXlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdBcnJheSA9IHJlbW92ZUR1cGxpY2F0ZUl0ZW1zV2l0aEFycmF5S2V5KHRoaXMuaXRlbXMsIHJlc3BvbnNlLml0ZW1zLCB0aGlzLmtleXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXdBcnJheSA/IFsuLi5uZXdBcnJheV0gOiB0aGlzLml0ZW1zO1xuICAgICAgICB0aGlzLnBhZ2UgPSBmdWxsUGFyYW1zLnBhZ2U7XG4gICAgICAgIHRoaXMuaGFzTmV4dCA9IHJlc3BvbnNlLmhhc05leHQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxuICAgIHNlcnZpY2VBcGlGcm9tUm91dGU6IHN0cmluZyxcbiAgICBvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb25cbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4ge1xuICAgIGlmIChzZXJ2aWNlQXBpRnJvbVJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRNZXRhZGF0YTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4oKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b1JvdXRlciA9IHJlc3BvbnNlLmF1dG9Sb3V0ZXIgfHwgdGhpcy5hdXRvUm91dGVyO1xuICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zO1xuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IHJlc3BvbnNlLmJyZWFkY3J1bWIgfHwgdGhpcy5icmVhZGNydW1iO1xuICAgICAgICAgIHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmllbGRzIHx8IHRoaXMuZmllbGRzO1xuICAgICAgICAgIHRoaXMudGl0bGUgPSByZXNwb25zZS50aXRsZSB8fCB0aGlzLnRpdGxlO1xuICAgICAgICAgIHRoaXMucGFnZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS5wYWdlQ3VzdG9tQWN0aW9ucyB8fCB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zO1xuICAgICAgICAgIHRoaXMudGFibGVDdXN0b21BY3Rpb25zID0gcmVzcG9uc2UudGFibGVDdXN0b21BY3Rpb25zIHx8IHRoaXMudGFibGVDdXN0b21BY3Rpb25zO1xuICAgICAgICAgIHRoaXMua2VlcEZpbHRlcnMgPSByZXNwb25zZS5rZWVwRmlsdGVycyB8fCB0aGlzLmtlZXBGaWx0ZXJzO1xuICAgICAgICAgIHRoaXMuY29uY2F0RmlsdGVycyA9IHJlc3BvbnNlLmNvbmNhdEZpbHRlcnMgfHwgdGhpcy5jb25jYXRGaWx0ZXJzO1xuICAgICAgICAgIHRoaXMuaGlkZVJlbW92ZUFsbERpc2NsYWltZXIgPSByZXNwb25zZS5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lciB8fCB0aGlzLmhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyO1xuICAgICAgICAgIHRoaXMuaGlkZUNsb3NlRGlzY2xhaW1lcnMgPSByZXNwb25zZS5oaWRlQ2xvc2VEaXNjbGFpbWVycyB8fCB0aGlzLmhpZGVDbG9zZURpc2NsYWltZXJzO1xuICAgICAgICAgIHRoaXMucXVpY2tTZWFyY2hXaWR0aCA9IHJlc3BvbnNlLnF1aWNrU2VhcmNoV2lkdGggfHwgdGhpcy5xdWlja1NlYXJjaFdpZHRoO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKTtcbiAgfVxuXG4gIC8vIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvKFxuICAgIHJvdXRlOiB7IHBhdGg6IHN0cmluZzsgY29tcG9uZW50PzsgdXJsPzogc3RyaW5nOyBwYXJhbXM/OiBhbnkgfSxcbiAgICBmb3JjZVN0b3BBdXRvUm91dGVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlLnVybCB8fCByb3V0ZS5wYXRoXSwgeyBxdWVyeVBhcmFtczogcm91dGUucGFyYW1zIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGlmIChmb3JjZVN0b3BBdXRvUm91dGVyIHx8ICF0aGlzLmF1dG9Sb3V0ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvdXRlci5jb25maWcudW5zaGlmdCg8Um91dGU+e1xuICAgICAgICBwYXRoOiByb3V0ZS5wYXRoLFxuICAgICAgICBjb21wb25lbnQ6IHJvdXRlLmNvbXBvbmVudCxcbiAgICAgICAgZGF0YTogeyBzZXJ2aWNlQXBpOiB0aGlzLnNlcnZpY2VBcGksIGF1dG9Sb3V0ZXI6IHRydWUgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubmF2aWdhdGVUbyhyb3V0ZSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmNhdGVuYXRlZFVybChjb25jYXRLZXlzOiBib29sZWFuLCB1cmw6IHN0cmluZywgc2VsZWN0ZWRJdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXlzID0gdGhpcy5rZXlzLm1hcChrZXkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdGVkSXRlbVtrZXldKSkuam9pbigpO1xuICAgIHJldHVybiBjb25jYXRLZXlzID8gYCR7dXJsfS8ke2tleXN9YCA6IHVybDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRldGFpbChhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2RldGFpbCddLCBpdGVtKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRGV0YWlsKHRoaXMuYWN0aW9ucy5iZWZvcmVEZXRhaWwsIGlkLCBpdGVtKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEZXRhaWxSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCkgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEZXRhaWwoYWN0aW9uLCBiZWZvcmVEZXRhaWxSZXN1bHQsIGlkLCBpdGVtKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZURldGFpbChcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2RldGFpbCddLFxuICAgIGJlZm9yZURldGFpbFJlc3VsdD86IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldyxcbiAgICBpZD86IHN0cmluZyxcbiAgICBpdGVtPzogYW55XG4gICkge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZURldGFpbFJlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgeyBuZXdVcmwgfSA9IGJlZm9yZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb24pIHtcbiAgICAgIGlmIChuZXdVcmwpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsLCBpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKGl0ZW0sIGFjdGlvbik7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbiwgdXJsLCBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb24oaWQsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChuZXdVcmwuaW5jbHVkZXMoJzppZCcpKSB7XG4gICAgICByZXR1cm4gbmV3VXJsLnJlcGxhY2UoLzppZC9nLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkdXBsaWNhdGUnXSwgaXRlbTogYW55KSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICBjb25zdCBkdXBsaWNhdGVzID0gdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHV0aWwubWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHRoaXMuZHVwbGljYXRlcykpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUR1cGxpY2F0ZSh0aGlzLmFjdGlvbnMuYmVmb3JlRHVwbGljYXRlLCBpZCwgZHVwbGljYXRlcylcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUpID0+XG4gICAgICAgICAgdGhpcy5leGVjdXRlRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZSwgYmVmb3JlRHVwbGljYXRlUmVzdWx0LCBkdXBsaWNhdGVzKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUR1cGxpY2F0ZShcbiAgICBhY3Rpb25EdXBsaWNhdGU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2R1cGxpY2F0ZSddLFxuICAgIGJlZm9yZUR1cGxpY2F0ZVJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlLFxuICAgIGR1cGxpY2F0ZXM6IGFueVxuICApIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVEdXBsaWNhdGVSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlID0gYmVmb3JlLnJlc291cmNlO1xuICAgIGNvbnN0IG5ld0FjdGlvbiA9IGJlZm9yZS5uZXdVcmwgPz8gYWN0aW9uRHVwbGljYXRlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbkR1cGxpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSA9PT0gJ29iamVjdCcgJiYgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbmV3QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogbmV3QWN0aW9uLCBwYXJhbXM6IHsgZHVwbGljYXRlOiBKU09OLnN0cmluZ2lmeShkdXBsaWNhdGVzKSB9IH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3QWN0aW9uKGR1cGxpY2F0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXQoYWN0aW9uRWRpdDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZWRpdCddLCBpdGVtKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVFZGl0KHRoaXMuYWN0aW9ucy5iZWZvcmVFZGl0LCBpZCwgaXRlbSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0KSA9PlxuICAgICAgICAgICAgdGhpcy5leGVjdXRlRWRpdEFjdGlvbihhY3Rpb25FZGl0LCBiZWZvcmVFZGl0UmVzdWx0LCBpdGVtLCBpZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUVkaXRBY3Rpb24oXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sXG4gICAgYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCxcbiAgICBpdGVtOiBhbnksXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBuZXdFZGl0QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8ubmV3VXJsID8/IGFjdGlvbjtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5vcGVuRWRpdFVybChuZXdFZGl0QWN0aW9uLCBpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSBuZXdFZGl0QWN0aW9uKGlkLCBpdGVtKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlZEl0ZW0gPT09ICdvYmplY3QnICYmIHVwZGF0ZWRJdGVtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubW9kaWZ5VUlUYWJsZUl0ZW0oaXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdFVybChwYXRoOiBzdHJpbmcsIGl0ZW0pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwoaXRlbSwgcGF0aCk7XG5cbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vZGlmeVVJVGFibGVJdGVtKGN1cnJlbnRJdGVtLCBuZXdJdGVtVmFsdWUpIHtcbiAgICBjb25zdCB0YWJsZUl0ZW0gPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGN1cnJlbnRJdGVtKTtcbiAgICB0aGlzLml0ZW1zW3RhYmxlSXRlbV0gPSB7IC4uLmN1cnJlbnRJdGVtLCAuLi5uZXdJdGVtVmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk5ldyhhY3Rpb25OZXc6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ25ldyddKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZU5ldyh0aGlzLmFjdGlvbnMuYmVmb3JlTmV3KVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVOZXdSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykgPT4gdGhpcy5leGVjdXRlTmV3KGFjdGlvbk5ldywgYmVmb3JlTmV3UmVzdWx0KSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlTmV3KGFjdGlvbk5ldzogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snbmV3J10sIGJlZm9yZU5ld1Jlc3VsdD86IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZU5ld1Jlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgeyBuZXdVcmwgfSA9IGJlZm9yZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25OZXcpIHtcbiAgICAgIGlmIChuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IG5ld1VybCB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25OZXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb25OZXcgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3Rpb25OZXcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FzbyBleGlzdGEgbWFpcyBkZSB1bSBpZGVudGlmaWNhZG9yLCBzZXLDoSBjb25jYXRlbmFkbyBjb20gJ3wnLlxuICAgKlxuICAgKiBFeDogeyBpZDogMSwgY29tcGFueTogJ3BvJyB9XG4gICAqXG4gICAqIFBhcmEgbyBlbmRwb2ludCAvcmVzb3VyY2VzLzppZCBzZXLDoSBleGVjdXRhZGEgYSB1cmwgL3Jlc291cmNlcy8xfHBvXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZShcbiAgICBpdGVtLFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmUoYWN0aW9uQmVmb3JlUmVtb3ZlLCB1bmlxdWVLZXksIGl0ZW0pXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBY3Rpb24oaXRlbSwgYWN0aW9uUmVtb3ZlLCBiZWZvcmVSZW1vdmUpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWN0aW9uKFxuICAgIGl0ZW0sXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBiZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHsgYWxsb3dBY3Rpb24sIG5ld1VybCB9ID0gYmVmb3JlUmVtb3ZlIHx8IHt9O1xuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmIChhbGxvdykge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgICAgY29uc3QgcmVzb3VyY2VUb1JlbW92ZUtleSA9IHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhbaXRlbV0pO1xuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZSA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xuICAgICAgICB1bmlxdWVLZXkgPSBuZXdVcmwgPyB1bmRlZmluZWQgOiB1bmlxdWVLZXk7XG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlXG4gICAgICAgICAgLmRlbGV0ZVJlc291cmNlKHVuaXF1ZUtleSwgbmV3VXJsKVxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmUodW5pcXVlS2V5LCBpdGVtKSkucGlwZShcbiAgICAgICAgdGFwKHJlbW92ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlSXRlbSA9IHJlbW92ZSA/PyBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24sIHJlbW92ZUl0ZW0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcm9tVUkoaXRlbXM6IEFycmF5PGFueT4sIG1lc3NhZ2U6IHN0cmluZywgcmVtb3ZlID0gdHJ1ZSkge1xuICAgIGlmIChyZW1vdmUgPT09IHRydWUgJiYgaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yZW1vdmVMb2NhbEl0ZW1zKGl0ZW1zKTtcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUFsbChcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlQWxsJ11cbiAgKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXNvdXJjZXNLZXlzID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmVBbGwoYWN0aW9uQmVmb3JlUmVtb3ZlQWxsLCBvcmlnaW5hbFJlc291cmNlc0tleXMpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBbGxBY3Rpb24oYWN0aW9uUmVtb3ZlQWxsLCBiZWZvcmVSZW1vdmUsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cykpKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEl0ZW1zS2V5cygpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uJHNlbGVjdGVkKTtcblxuICAgIGlmIChyZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJldHVyblJlc291cmNlc0tleXMocmVzb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpIHtcbiAgICByZXR1cm4gdXRpbC5tYXBBcnJheUJ5UHJvcGVydGllcyhyZXNvdXJjZXMsIHRoaXMua2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUFsbEFjdGlvbihcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxuICAgIGJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlQWxsLFxuICAgIG9yaWdpbmFsUmVzb3VyY2VzOiBBcnJheTxhbnk+XG4gICkge1xuICAgIGNvbnN0IHsgYWxsb3dBY3Rpb24sIG5ld1VybCwgcmVzb3VyY2VzIH0gPSBiZWZvcmVSZW1vdmVBbGwgPz8ge307XG4gICAgY29uc3QgYWxsb3cgPSBhbGxvd0FjdGlvbiA/PyB0cnVlO1xuICAgIGNvbnN0IHJlc291cmNlc3RvRGVsZXRlID0gcmVzb3VyY2VzID8/IG9yaWdpbmFsUmVzb3VyY2VzO1xuXG4gICAgaWYgKGFsbG93ICYmIEFycmF5LmlzQXJyYXkocmVzb3VyY2VzdG9EZWxldGUpKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZUFsbCA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5kZWxldGVSZXNvdXJjZXMocmVzb3VyY2VzdG9EZWxldGUsIG5ld1VybCkucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VzdG9EZWxldGUsIHRoaXMubGl0ZXJhbHMucmVtb3ZlQWxsU3VjY2Vzc05vdGlmaWNhdGlvbik7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmVBbGwocmVzb3VyY2VzdG9EZWxldGUpKS5waXBlKFxuICAgICAgICB0YXAocmVtb3ZlSXRlbXMgPT4gdGhpcy5yZW1vdmVGcm9tVUkocmVtb3ZlSXRlbXMsIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbikpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7fSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxvY2FsSXRlbXMoaXRlbXNLZXlzVG9SZW1vdmUgPSBbXSkge1xuICAgIGlmIChpdGVtc0tleXNUb1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgICAgICByZXR1cm4gIWl0ZW1zS2V5c1RvUmVtb3ZlLmZpbmQoaXRlbUtleVRvUmVtb3ZlID0+IHV0aWwudmFsdWVzRnJvbU9iamVjdChpdGVtS2V5VG9SZW1vdmUpLmpvaW4oJ3wnKSA9PT0gaXRlbUtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnM/Lm5ldykge1xuICAgICAgdGhpcy5kZWZhdWx0UGFnZUFjdGlvbnMgPSBbeyBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uLCBhY3Rpb246IHRoaXMub3Blbk5ldy5iaW5kKHRoaXMsIGFjdGlvbnMubmV3KSB9XTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKFxuICAgIGN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj5cbiAgKTogQXJyYXk8UG9QYWdlQWN0aW9uPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gY3VzdG9tQWN0aW9ucy5tYXAoY3VzdG9tQWN0aW9uID0+ICh7XG4gICAgICBsYWJlbDogY3VzdG9tQWN0aW9uLmxhYmVsLFxuICAgICAgYWN0aW9uOiB0aGlzLmNhbGxQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGlzYWJsZVBhZ2VDdXN0b21BY3Rpb24uYmluZCh0aGlzLCBjdXN0b21BY3Rpb24pLFxuICAgICAgLi4uKGN1c3RvbUFjdGlvbi5pY29uICYmIHsgaWNvbjogY3VzdG9tQWN0aW9uLmljb24gfSksXG4gICAgICB2aXNpYmxlOiBjdXN0b21BY3Rpb24udmlzaWJsZVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnMoXG4gICAgdGFibGVDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj5cbiAgKTogQXJyYXk8UG9UYWJsZUFjdGlvbj4ge1xuICAgIHJldHVybiB0YWJsZUN1c3RvbUFjdGlvbnMubWFwKHRhYmxlQ3VzdG9tQWN0aW9uID0+ICh7XG4gICAgICBsYWJlbDogdGFibGVDdXN0b21BY3Rpb24ubGFiZWwsXG4gICAgICBpY29uOiB0YWJsZUN1c3RvbUFjdGlvbi5pY29uLFxuICAgICAgYWN0aW9uOiB0aGlzLmNhbGxUYWJsZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIHRhYmxlQ3VzdG9tQWN0aW9uKSxcbiAgICAgIGRpc2FibGVkOiB0YWJsZUN1c3RvbUFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIHZpc2libGU6IHRhYmxlQ3VzdG9tQWN0aW9uLnZpc2libGVcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZVBhZ2VDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlICYmICF0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxQYWdlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uKSB7XG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSA/IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW1zKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbik7XG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBjdXN0b21BY3Rpb24udXJsIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRhYmxlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24sIHNlbGVjdGVkSXRlbSkge1xuICAgIHRoaXMuaXRlbVNlbGVjdGVkQWN0aW9uID0gc2VsZWN0ZWRJdGVtO1xuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjb25zdCBzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbSlcbiAgICAgICAgLnN1YnNjcmliZSh1cGRhdGVkSXRlbSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5VUlUYWJsZUl0ZW0oc2VsZWN0ZWRJdGVtLCB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXBkYXRlZEl0ZW0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xuICAgICAgaWYgKGlzRXh0ZXJuYWxMaW5rKGN1c3RvbUFjdGlvbi51cmwpKSB7XG4gICAgICAgIG9wZW5FeHRlcm5hbExpbmsodGhpcy5jcmVhdGVDb25jYXRlbmF0ZWRVcmwoY3VzdG9tQWN0aW9uLmNvbmNhdEtleXMsIGN1c3RvbUFjdGlvbi51cmwsIHNlbGVjdGVkSXRlbSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHtcbiAgICAgICAgICBwYXRoOiB0aGlzLmNyZWF0ZUNvbmNhdGVuYXRlZFVybChjdXN0b21BY3Rpb24uY29uY2F0S2V5cywgY3VzdG9tQWN0aW9uLnVybCwgc2VsZWN0ZWRJdGVtKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlbW92ZUFsbEFjdGlvbigpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb25zO1xuICAgIGlmICh0aGlzLnNob3dSZW1vdmUoYWN0aW9uLnJlbW92ZUFsbCkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW1xuICAgICAgICAuLi50aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlQWxsLFxuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlQWxsLmJpbmQodGhpcywgYWN0aW9uLnJlbW92ZUFsbCwgYWN0aW9uLmJlZm9yZVJlbW92ZUFsbCksXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZVJlbW92ZUFsbC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlUmVtb3ZlQWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJsZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICBjb25zdCB2aXNpYmxlUmVtb3ZlID0gdGhpcy5zaG93UmVtb3ZlKGFjdGlvbnMucmVtb3ZlKTtcbiAgICAgIHRoaXMuZGVmYXVsdFRhYmxlQWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRGV0YWlsLmJpbmQodGhpcywgYWN0aW9ucy5kZXRhaWwpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uVmlldyxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZGV0YWlsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkVkaXQuYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRWRpdCxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZWRpdFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EdXBsaWNhdGUuYmluZCh0aGlzLCBhY3Rpb25zLmR1cGxpY2F0ZSksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EdXBsaWNhdGUsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmR1cGxpY2F0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmUuYmluZCh0aGlzLCBhY3Rpb25zLnJlbW92ZSwgYWN0aW9ucy5iZWZvcmVSZW1vdmUpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlLFxuICAgICAgICAgIHNlcGFyYXRvcjogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICB2aXNpYmxlOiB2aXNpYmxlUmVtb3ZlXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21BUEkoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlQXBpOiBzZXJ2aWNlQXBpRnJvbVJvdXRlLCBzZXJ2aWNlTWV0YWRhdGFBcGksIHNlcnZpY2VMb2FkQXBpIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE7XG5cbiAgICBjb25zdCBvbkxvYWQgPSBzZXJ2aWNlTG9hZEFwaSB8fCB0aGlzLm9uTG9hZDtcbiAgICB0aGlzLnNlcnZpY2VBcGkgPSBzZXJ2aWNlQXBpRnJvbVJvdXRlIHx8IHRoaXMuc2VydmljZUFwaTtcblxuICAgIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY29uZmlnU2VydmljZUFwaSh7IGVuZHBvaW50OiB0aGlzLnNlcnZpY2VBcGksIG1ldGFkYXRhOiBzZXJ2aWNlTWV0YWRhdGFBcGkgfSk7XG5cbiAgICBjb25zdCBtZXRhZGF0YSQgPSB0aGlzLmdldE1ldGFkYXRhKHNlcnZpY2VBcGlGcm9tUm91dGUsIG9uTG9hZCk7XG4gICAgbGV0IGRhdGEkO1xuICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoVmFsdWUpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1F1aWNrU2VhcmNoVmFsdWUgPSB7IFt0aGlzLnF1aWNrU2VhcmNoUGFyYW1dOiB0aGlzLnF1aWNrU2VhcmNoVmFsdWUgfTtcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YShwYXJhbXNRdWlja1NlYXJjaFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSQgPSB0aGlzLmxvYWREYXRhKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG1ldGFkYXRhJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCk7XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoaW5pdGlhbEZpbHRlcnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YSQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCkge1xuICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIGl0ZW0pID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtpdGVtLnByb3BlcnR5XTogaXRlbS5pbml0VmFsdWUgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBPYmplY3Qua2V5cyhpbml0aWFsRmlsdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFpbml0aWFsRmlsdGVyc1trZXldKSB7XG4gICAgICAgIGRlbGV0ZSBpbml0aWFsRmlsdGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGluaXRpYWxGaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAob25Mb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZVBvT3B0aW9uID0+XG4gICAgICAgICAgdGhpcy5wb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZS5jaGFuZ2VPcmlnaW5hbE9wdGlvbnNUb05ld09wdGlvbnModGhpcywgcmVzcG9uc2VQb09wdGlvbilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBvRHluYW1pY1BhZ2VPcHRpb25zKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbik6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucz4ge1xuICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAga2VlcEZpbHRlcnM6IHRoaXMua2VlcEZpbHRlcnMsXG4gICAgICBjb25jYXRGaWx0ZXJzOiB0aGlzLmNvbmNhdEZpbHRlcnMsXG4gICAgICBoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcjogdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcixcbiAgICAgIGhpZGVDbG9zZURpc2NsYWltZXJzOiB0aGlzLmhpZGVDbG9zZURpc2NsYWltZXJzLFxuICAgICAgcGFnZUN1c3RvbUFjdGlvbnM6IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMsXG4gICAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IHRoaXMudGFibGVDdXN0b21BY3Rpb25zLFxuICAgICAgcXVpY2tTZWFyY2hXaWR0aDogdGhpcy5xdWlja1NlYXJjaFdpZHRoXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+ID0ge1xuICAgICAgc2NoZW1hOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2ZpZWxkcycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYnJlYWRjcnVtYidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGl0bGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2tlZXBGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdxdWlja1NlYXJjaFdpZHRoJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdjb25jYXRGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnaGlkZUNsb3NlRGlzY2xhaW1lcnMnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3BhZ2VDdXN0b21BY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICd0YWJsZUN1c3RvbUFjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAnbGFiZWwnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuZ2V0Q3VzdG9tT3B0aW9ucyhvbkxvYWQsIG9yaWdpbmFsT3B0aW9uLCBwYWdlT3B0aW9uU2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1JlbW92ZTxUPihhY3Rpb25SZW1vdmU6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25SZW1vdmUgPz8gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcikge1xuICAgIHJldHVybiB0aGlzLmZpZWxkcy5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmhhc093blByb3BlcnR5KGl0ZW0ucHJvcGVydHkpKSB7XG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlID0gZmlsdGVyW2l0ZW0ucHJvcGVydHldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlQWN0aW9ucygpIHtcbiAgICB0aGlzLnBhZ2VBY3Rpb25zID0gWy4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucywgLi4udGhpcy5fY3VzdG9tUGFnZUxpc3RBY3Rpb25zXTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFibGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IGRlZmF1bHRUYWJsZUFjdGlvbnNXaXRob3V0QWN0aW9uRGVsZXRlID0gdGhpcy5fZGVmYXVsdFRhYmxlQWN0aW9ucy5maWx0ZXIoXG4gICAgICB0YWJsZUFjdGlvbiA9PiB0YWJsZUFjdGlvbi5sYWJlbCAhPT0gdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZVxuICAgICk7XG5cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRlbGV0ZSA9IHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMuZmluZChcbiAgICAgIHRhYmxlQWN0aW9uID0+IHRhYmxlQWN0aW9uLmxhYmVsID09PSB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlXG4gICAgKTtcblxuICAgIGNvbnN0IG5ld1RhYmxlQWN0aW9ucyA9IFsuLi5kZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSwgLi4udGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zXTtcblxuICAgIGlmICh0YWJsZUFjdGlvbkRlbGV0ZSkge1xuICAgICAgbmV3VGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb25EZWxldGUpO1xuICAgIH1cblxuICAgIHRoaXMudGFibGVBY3Rpb25zID0gbmV3VGFibGVBY3Rpb25zO1xuICB9XG59XG4iLCI8cG8tcGFnZS1keW5hbWljLXNlYXJjaFxuICBbcC1hY3Rpb25zXT1cInBhZ2VBY3Rpb25zXCJcbiAgW3AtYnJlYWRjcnVtYl09XCJicmVhZGNydW1iXCJcbiAgW3AtaGlkZS1jbG9zZS1kaXNjbGFpbWVyc109XCJoaWRlQ2xvc2VEaXNjbGFpbWVyc1wiXG4gIFtwLWZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gIFtwLWtlZXAtZmlsdGVyc109XCJrZWVwRmlsdGVyc1wiXG4gIFtwLWxpdGVyYWxzXT1cInNlYXJjaExpdGVyYWxzXCJcbiAgW3AtY29uY2F0LWZpbHRlcnNdPVwiY29uY2F0RmlsdGVyc1wiXG4gIFtwLWhpZGUtcmVtb3ZlLWFsbC1kaXNjbGFpbWVyXT1cImhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyXCJcbiAgW3AtcXVpY2stc2VhcmNoLXdpZHRoXT1cInF1aWNrU2VhcmNoV2lkdGhcIlxuICBbcC10aXRsZV09XCJ0aXRsZVwiXG4gIChwLWFkdmFuY2VkLXNlYXJjaCk9XCJvbkFkdmFuY2VkU2VhcmNoKCRldmVudClcIlxuICAocC1jaGFuZ2UtZGlzY2xhaW1lcnMpPVwib25DaGFuZ2VEaXNjbGFpbWVycygkZXZlbnQpXCJcbiAgKHAtcXVpY2stc2VhcmNoKT1cIm9uUXVpY2tTZWFyY2goJGV2ZW50KVwiXG4gIFtwLXF1aWNrLXNlYXJjaC12YWx1ZV09XCJxdWlja1NlYXJjaFZhbHVlIHx8ICcnXCJcbj5cbiAgPHBvLXRhYmxlXG4gICAgW3Atc29ydF09XCJ0cnVlXCJcbiAgICBbcC1hY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXG4gICAgW3AtYWN0aW9ucy1yaWdodF09XCJhY3Rpb25SaWdodFwiXG4gICAgW3Atc2VsZWN0YWJsZV09XCJlbmFibGVTZWxlY3Rpb25UYWJsZVwiXG4gICAgW3AtY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcC1pdGVtc109XCJpdGVtc1wiXG4gICAgW3AtaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3AtaGlkZS1jb2x1bW5zLW1hbmFnZXJdPVwiaGlkZUNvbHVtbnNNYW5hZ2VyXCJcbiAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgIFtwLXNob3ctbW9yZS1kaXNhYmxlZF09XCIhaGFzTmV4dFwiXG4gICAgKHAtc2hvdy1tb3JlKT1cInNob3dNb3JlKClcIlxuICAgIChwLXNvcnQtYnkpPVwib25Tb3J0KCRldmVudClcIlxuICAgIChwLWNoYW5nZS12aXNpYmxlLWNvbHVtbnMpPVwib25DaGFuZ2VWaXNpYmxlQ29sdW1ucygkZXZlbnQpXCJcbiAgICAocC1yZXN0b3JlLWNvbHVtbi1tYW5hZ2VyKT1cIm9uQ29sdW1uUmVzdG9yZU1hbmFnZXIoJGV2ZW50KVwiXG4gICAgKHAtc29ydC1ieSk9XCJvblNvcnRCeSgkZXZlbnQpXCJcbiAgICBbcC10ZXh0LXdyYXBdPVwidGV4dFdyYXBcIlxuICAgIFtwLWRyYWdnYWJsZV09XCJkcmFnZ2FibGVcIlxuICAgIFtwLXNwYWNpbmddPVwic3BhY2luZ1wiXG4gID5cbiAgPC9wby10YWJsZT5cbjwvcG8tcGFnZS1keW5hbWljLXNlYXJjaD5cbiJdfQ==
1232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBUUwscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxLQUFLLElBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFldEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1B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LEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBOEQxQyxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUE4QmtCLGlCQUFpQjtrQkFBcEQsS0FBSzttQkFBQyx1QkFBdUI7WUE0Qk8sa0JBQWtCO2tCQUF0RCxLQUFLO21CQUFDLHdCQUF3QjtZQW1CSSxnQkFBZ0I7a0JBQWxELEtBQUs7bUJBQUMsc0JBQXNCO1lBZU4sTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVO1lBcUJzQixvQkFBb0I7a0JBQTFELEtBQUs7bUJBQUMsMEJBQTBCO1lBaUJFLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0I7WUFnQk0sZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQjtZQThDUixjQUFjO2tCQUFsQyxLQUFLO21CQUFDLFlBQVk7WUFhSyxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUF5QjRDLFFBQVE7a0JBQXJFLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQVVsQyxTQUFTO2tCQUFsQyxLQUFLO21CQUFDLGFBQWE7WUFvQlcsYUFBYTtrQkFBM0MsS0FBSzttQkFBQyxrQkFBa0I7O2tGQXZiZCwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgUG9EaWFsb2dDb25maXJtT3B0aW9ucyxcbiAgUG9EaWFsb2dTZXJ2aWNlLFxuICBQb0xhbmd1YWdlU2VydmljZSxcbiAgUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxuICBQb1BhZ2VBY3Rpb24sXG4gIFBvVGFibGVBY3Rpb24sXG4gIFBvVGFibGVDb2x1bW5Tb3J0LFxuICBQb1RhYmxlQ29sdW1uU29ydFR5cGUsXG4gIFBvVGFibGVDb2x1bW5TcGFjaW5nLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcGFnZS1keW5hbWljLWRldGFpbC9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1keW5hbWljL3BvLXBhZ2UtZHluYW1pYy5zZXJ2aWNlJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxMaW5rLCBvcGVuRXh0ZXJuYWxMaW5rLCByZW1vdmVEdXBsaWNhdGVJdGVtc1dpdGhBcnJheUtleSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzIH0gZnJvbSAnLi4vcG8tcGFnZS1keW5hbWljLXNlYXJjaC9wby1wYWdlLWR5bmFtaWMtc2VhcmNoLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtY3VzdG9taXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1keW5hbWljLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZHVwbGljYXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZWRpdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtbmV3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1yZW1vdmUtYWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1yZW1vdmUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtY3VzdG9tLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWN1c3RvbS10YWJsZS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBwb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHQgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1saXRlcmFscyc7XG5cbmNvbnN0IFBBR0VfU0laRV9ERUZBVUxUID0gMTA7XG5cbnR5cGUgVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbiA9IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tcGFnZS1keW5hbWljLXRhYmxlYCDDqSB1bWEgcMOhZ2luYSBxdWUgZXhpYmUgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSB1bWEgdGFiZWxhIGJhc2VhZG8gZW0gdW1hIGxpc3RhIGRlIGZpZWxkcyxcbiAqIG8gbWVzbW8gdGFtYsOpbSBzdXBvcnRhIG1ldGFkYWRvcyBjb25mb3JtZSBlc3BlY2lmaWNhZG8gbmEgZG9jdW1lbnRhw6fDo28uXG4gKlxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxuICpcbiAqIEFvIHV0aWxpemFyIGFzIHJvdGFzIHBhcmEgaW5pY2lhbGl6YXIgbyB0ZW1wbGF0ZSwgbyBgcGFnZS1keW5hbWljLXRhYmxlYCBkaXNwb25pYmlsaXphIHByb3ByaWVkYWRlcyBxdWUgZGV2ZW0gc2VyIGZvcm5lY2lkYXMgbm8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbywgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zIHF1ZSBzZXLDo28gY2FycmVnYWRvcyBuYSBpbmljaWFsaXphw6fDo28uXG4gKlxuICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gKlxuICogQXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbzogYGFwcC1yb3V0aW5nLm1vZHVsZS50c2BcbiAqIGBgYFxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiB7XG4gKiAgIHBhdGg6ICdwZW9wbGUnLFxuICogICBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCxcbiAqICAgZGF0YToge1xuICogICAgIHNlcnZpY2VBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvcGVvcGxlJywgLy8gZW5kcG9pbnQgZG9zIGRhZG9zXG4gKiAgICAgc2VydmljZU1ldGFkYXRhQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL21ldGFkYXRhJywgLy8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIEdldFxuICogICAgIHNlcnZpY2VMb2FkQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2xvYWQtbWV0YWRhdGEnIC8vIGVuZHBvaW50IGRlIGN1c3RvbWl6YcOnw7VlcyBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgUG9zdFxuICogICB9XG4gKiAgfSxcbiAqICB7XG4gKiAgIHBhdGg6ICdob21lJyxcbiAqICAgY29tcG9uZW50OiBIb21lRXhhbXBsZUNvbXBvbmVudFxuICogIH1cbiAqIF07XG4gKlxuICogYGBgXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpLlxuICpcbiAqIEEgcmVxdWlzacOnw6NvIGRvcyBtZXRhZGFkb3Mgw6kgZmVpdGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIHRlbXBsYXRlIHBhcmEgYnVzY2FyIG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG9cbiAqIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICpcbiAqID4gQ2FzbyBvIHNlcnZpZG9yIHJldG9ybmFyIHVtIGVycm8gYW8gcmVjdXBlcmFyIG9zIG1ldGFkYWRvcywgc2Vyw6NvIHJlcGFzc2Fkb3Mgb3MgbWV0YWRhZG9zIHNhbHZvcyBlbSBjYWNoZSxcbiAqIHNlIG8gY2FjaGUgbsOjbyBleGlzdGlyIHNlcsOhIGRpc3BhcmFkYSB1bWEgbm90aWZpY2HDp8Ojby5cbiAqXG4gKiBPIGZvcm1hdG8gZXNwZXJhZG8gbmEgcmVzcG9zdGEgZGEgcmVxdWlzacOnw6NvIGVzdMOhIGVzcGVjaWZpY2FkbyBuYSBpbnRlcmZhY2VcbiAqIFtQb1BhZ2VEeW5hbWljVGFibGVNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLXRhYmxlI3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxuICpcbiAqIGBgYFxuICogIHtcbiAqICAgdmVyc2lvbjogMSxcbiAqICAgdGl0bGU6ICdQZXJzb24gVGFibGUnLFxuICogICBmaWVsZHM6IFtcbiAqICAgICB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ3N0YXR1cycgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmlja25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2JpcnRoZGF0ZScsIGxhYmVsOiAnQmlydGggZGF0ZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NpdHknIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NvdW50cnknIH1cbiAqICAgXSxcbiAqICAga2VlcEZpbHRlcnM6IHRydWVcbiAqIH1cbiAqIGBgYFxuICpcbiAqID4gQ2FzbyBvIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgbsOjbyBzZWphIGVzcGVjaWZpY2Fkbywgc2Vyw6EgZmVpdG8gdW1hIHJlcXVpc2nDp8OjbyB1dGlsaXphbmRvIG8gYHNlcnZpY2VBcGlgIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICogYGBgXG4gKiBHRVQge2VuZC1wb2ludH0vbWV0YWRhdGE/dHlwZT1saXN0JnZlcnNpb249e3ZlcnNpb259XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZVwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gUGVvcGxlXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGUvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGUuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgVGFibGUgLSBVc2Vyc1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgVGFibGUgLSBIb3RlbHNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcFwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gRHJhZyBhbmQgRHJvcFwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3Avc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1kcmFnLWFuZC1kcm9wLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1kcmFnLWFuZC1kcm9wL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbUG9QYWdlRHluYW1pY1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCBleHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEZ1bsOnw6NvIG91IHNlcnZpw6dvIHF1ZSBzZXLDoSBleGVjdXRhZG8gbmEgaW5pY2lhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIEEgcHJvcHJpZWRhZGUgYWNlaXRhIG9zIHNlZ3VpbnRlcyB0aXBvczpcbiAgICogLSBgc3RyaW5nYDogKkVuZHBvaW50KiB1c2FkbyBwZWxvIGNvbXBvbmVudGUgcGFyYSByZXF1aXNpw6fDo28gdmlhIGBQT1NUYC5cbiAgICogLSBgZnVuY3Rpb25gOiBNw6l0b2RvIHF1ZSBzZXLDoSBleGVjdXRhZG8uXG4gICAqXG4gICAqIE8gcmV0b3JubyBkZXN0YSBmdW7Dp8OjbyBkZXZlIHNlciBkbyB0aXBvIGBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zYCxcbiAgICogb25kZSBvIHVzdcOhcmlvIHBvZGVyw6EgY3VzdG9taXphciBub3ZvcyBjYW1wb3MsIGJyZWFkY3J1bWIsIHRpdGxlIGUgYWN0aW9uc1xuICAgKlxuICAgKiBQb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMge1xuICAgKiByZXR1cm4ge1xuICAgKiAgIGFjdGlvbnM6XG4gICAqICAgICB7IG5ldzogJ25ldycsIGVkaXQ6ICdlZGl0LzppZCcsIHJlbW92ZTogdHJ1ZSB9LFxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAgeyBwcm9wZXJ0eTogJ2lkQ2FyZCcsIGdyaWRDb2x1bW5zOiA2IH1cbiAgICogICBdXG4gICAqIH07XG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqIFBhcmEgcmVmZXJlbmNpYXIgYSBzdWEgZnVuw6fDo28gdXRpbGl6ZSBhIHByb3ByaWVkYWRlIGBiaW5kYCwgcG9yIGV4ZW1wbG86XG4gICAqIGBgYFxuICAgKiAgW3AtbG9hZF09XCJvbkxvYWRPcHRpb25zLmJpbmQodGhpcylcIlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkJykgb25Mb2FkOiBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTWFudMOpbSBuYSBtb2RhbCBkZSBgQnVzY2EgQXZhbsOnYWRhYCBvcyB2YWxvcmVzIHByZWVuY2hpZG9zIGRvIMO6bHRpbW8gZmlsdHJvIHJlYWxpemFkbyBwZWxvIHVzdcOhcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Ata2VlcC1maWx0ZXJzJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGtlZXBGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBhIGNvbHVuYSBkZSBhw6fDtWVzIGZpY2Fyw6Egbm8gbGFkbyBkaXJlaXRvIGRhIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWFjdGlvbnMtcmlnaHQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYWN0aW9uUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxuICAgKlxuICAgKiBEZXN0YSBmb3JtYSwgYW8gdGVyIHVtYSBwZXNxdWlzYSBhdmFuw6dhZGEgZXN0YWJlbGVjaWRhIGUgc2VyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXG4gICAqIHLDoXBpZGEgdGFtYsOpbSBuYSBsaXN0YSBkZSBgZGlzY2xhaW1lcnNgIGEgYXBsaWNhbmRvIHVtYSBub3ZhIGJ1c2NhIGNvbSBhIGNvbmNhdGVuYcOnw6NvLlxuICAgKlxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcbiAgICogICAtIGZpbHRybyBhdmFuw6dhZG86IGB7IG5hbWU6ICdNaWtlJywgYWdlOiAnMTInIH1gXG4gICAqICAgLSBmaWx0cm8gcsOhcGlkbzogYHsgc2VhcmNoOiAncGFwZXInIH1gXG4gICAqXG4gICAqIEEgcmVxdWlzacOnw6NvIGRvcyBkYWRvcyBuYSBBUEkgZmljYXLDoSBjb20gb3MgcGFyw6JtZXRyb3M6XG4gICAqIGBgYFxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1jb25jYXQtZmlsdGVycycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBjb25jYXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLCByZXNwb25zw6F2ZWwgcGVsYSBkZWZpbmnDp8OjbyBkZSBxdWFpcyBjb2x1bmFzIHNlcsOjbyBleGliaWRhcywgc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWNvbHVtbnMtbWFuYWdlcicsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KVxuICBoaWRlQ29sdW1uc01hbmFnZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPY3VsdGEgbyBib3TDo28gcGFyYSByZW1vdmVyIHRvZG9zIG9zICpkaXNjbGFpbWVycyogZG8gZ3J1cG8uXG4gICAqXG4gICAqID4gUG9yIHBhZHLDo28sIG8gbWVzbW8gw6kgZXhpYmlkbyDDoCBwYXJ0aXIgZGUgZG9pcyBvdSBtYWlzICpkaXNjbGFpbWVycyogY29tIGEgb3DDp8OjbyBgaGlkZUNsb3NlYCBoYWJpbGl0YWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1yZW1vdmUtYWxsLWRpc2NsYWltZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSlcbiAgaGlkZVJlbW92ZUFsbERpc2NsYWltZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGUgbyBib3TDo28gXCJDYXJyZWdhciBNYWlzXCIgZGVpeGFyw6EgZGUgc2VyIGV4aWJpZG8uIEFvIGNoZWdhciBubyBmaW0gZGEgdGFiZWxhXG4gICAqIGV4ZWN1dGFyw6EgYSBmdW7Dp8OjbyBgcC1zaG93LW1vcmVgLlxuICAgKlxuICAgKiAqKlJlZ3JhcyBkZSB1dGlsaXphw6fDo286KipcbiAgICogIC0gTyBzY3JvbGwgaW5maW5pdG8gc8OzIGZ1bmNpb25hIHBhcmEgdGFiZWxhcyBxdWUgdXRpbGl6YW0gYSBwcm9wcmllZGFkZSBgcC1oZWlnaHRgIGUgcXVlIHBvc3N1ZW0gbyBzY3JvbGwgasOhIG5hIGNhcmdhIGluaWNpYWwgZG9zIGRhZG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaW5maW5pdGUtc2Nyb2xsJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGFzTmV4dCA9IGZhbHNlO1xuICBpdGVtcyA9IFtdO1xuICBsaXRlcmFscztcbiAgcGFnZUFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcbiAgdGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgX2FjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX29sZFF1aWNrU2VhcmNoUGFyYW06IHN0cmluZztcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hQYXJhbTogc3RyaW5nID0gJ3NlYXJjaCc7XG4gIHByaXZhdGUgX3F1aWNrU2VhcmNoVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgcGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBpdGVtU2VsZWN0ZWRBY3Rpb247XG4gIHByaXZhdGUgcGFyYW1zID0ge307XG4gIHByaXZhdGUgc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY3VzdG9tUGFnZUxpc3RBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2N1c3RvbVRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRUYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2hpZGVDbG9zZURpc2NsYWltZXJzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIF9zcGFjaW5nOiBQb1RhYmxlQ29sdW1uU3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgcHJpdmF0ZSBfdmlydHVhbFNjcm9sbD86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByaXZhdGUgc2V0IGRlZmF1bHRQYWdlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlQWN0aW9uPikge1xuICAgIHRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUGFnZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGRlZmF1bHRUYWJsZUFjdGlvbnModmFsdWU6IEFycmF5PFBvVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFRhYmxlQWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlVGFibGVBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXN0b21QYWdlTGlzdEFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXN0b21UYWJsZUFjdGlvbnModmFsdWU6IEFycmF5PFBvVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUYWJsZUFjdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEHDp8O1ZXMgZGEgcMOhZ2luYSBlIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIHV0aWxpemFyIGEgYcOnw6NvIHBhZHLDo28gZGUgZXhjbHVpciwgYSBtZXNtYSBzZXLDoSBleGliaWRhIHBvciDDumx0aW1vIG5hIHRhYmVsYS5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnModmFsdWU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMCA/IHZhbHVlIDoge307XG5cbiAgICB0aGlzLnNldFBhZ2VBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XG4gICAgdGhpcy5zZXRSZW1vdmVBbGxBY3Rpb24oKTtcbiAgICB0aGlzLnNldFRhYmxlQWN0aW9ucyh0aGlzLmFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBhw6fDtWVzIGN1c3RvbWl6YWRhcyBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXG4gICAqXG4gICAqIEVzc2FzIGHDp8O1ZXMgZmljYW0gbG9jYWxpemFkYXMgbmEgcGFydGUgc3VwZXJpb3IgZGEgcMOhZ2luYSBlbSBib3TDtWVzIGNvbSBhw6fDtWVzLlxuICAgKlxuICAgKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAgICogYGBgXG4gICAqIFtcbiAgICogIHsgbGFiZWw6ICdFeHBvcnQnLCBhY3Rpb246IHRoaXMuZXhwb3J0LmJpbmQodGhpcykgfSxcbiAgICogIHsgbGFiZWw6ICdQcmludCcsIGFjdGlvbjogdGhpcy5wcmludC5iaW5kKHRoaXMpIH1cbiAgICogXTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtcGFnZS1jdXN0b20tYWN0aW9ucycpIHNldCBwYWdlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPikge1xuICAgIHRoaXMuX3BhZ2VDdXN0b21BY3Rpb25zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuXG4gICAgdGhpcy5jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKHRoaXMucGFnZUN1c3RvbUFjdGlvbnMpO1xuICAgIHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGUgPSB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLnNvbWUoY3VzdG9tQWN0aW9uID0+IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlKTtcbiAgfVxuXG4gIGdldCBwYWdlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBhw6fDtWVzIGN1c3RvbWl6YWRhcyBuYSB0YWJlbGEgZGEgcMOhZ2luYSBxdWUgc2Vyw6NvIGluY29ycG9yYWRhcyDDoHMgYcOnw7Vlc1xuICAgKiBpbmZvcm1hZGFzIGF0cmF2w6lzIGRhIHByb3ByaWVkYWRlIGBwLWFjdGlvbnNgLlxuICAgKlxuICAgKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAgICogYGBgXG4gICAqIFtcbiAgICogIHsgbGFiZWw6ICdBcHBseSBkaXNjb3VudCcsIGFjdGlvbjogdGhpcy5hcHBseURpc2NvdW50LmJpbmQodGhpcykgfSxcbiAgICogIHsgbGFiZWw6ICdEZXRhaWxzJywgYWN0aW9uOiB0aGlzLmRldGFpbHMuYmluZCh0aGlzKSB9XG4gICAqIF07XG4gICAqIGBgYFxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxuICAgKi9cbiAgQElucHV0KCdwLXRhYmxlLWN1c3RvbS1hY3Rpb25zJykgc2V0IHRhYmxlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fdGFibGVDdXN0b21BY3Rpb25zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuXG4gICAgdGhpcy5jdXN0b21UYWJsZUFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybVRhYmxlQ3VzdG9tQWN0aW9uc1RvVGFibGVBY3Rpb25zKHRoaXMudGFibGVDdXN0b21BY3Rpb25zKTtcbiAgfVxuXG4gIGdldCB0YWJsZUN1c3RvbUFjdGlvbnMoKTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVDdXN0b21BY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGFyZ3VyYSBkbyBjYW1wbyBkZSBidXNjYSwgdXRpbGl6YW5kbyBvICpHcmlkIFN5c3RlbSosXG4gICAqIGUgbGltaXRhZG8gYW8gbcOheGltbyBkZSA2IGNvbHVuYXMuIE8gdGFtYW5obyBtw61uaW1vIMOpIGNvbnRyb2xhZG9cbiAgICogY29uZm9ybWUgcmVzb2x1w6fDo28gZGUgdGVsYSBwYXJhIG1hbnRlciBhIGNvbnNpc3TDqm5jaWEgZG8gbGF5b3V0LlxuICAgKi9cbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC13aWR0aCcpIHNldCBxdWlja1NlYXJjaFdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9xdWlja1NlYXJjaFdpZHRoID0gdXRpbC5jb252ZXJ0VG9JbnQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHF1aWNrU2VhcmNoV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhIGFsdHVyYSBkYSB0YWJlbGEgZW0gKnBpeGVscyogZSBmaXhhIG8gY2FiZcOnYWxoby5cbiAgICovXG4gIEBJbnB1dCgncC1oZWlnaHQnKSBzZXQgaGVpZ2h0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGZpbHRyb3MgcXVlIHRlcsOjbyBhIG9ww6fDo28gZGUgZmVjaGFyIG9jdWx0YWRhXG4gICAqIGVtIHNldSByZXNwZWN0aXZvIGRpc2NsYWltZXIuIFV0aWxpemFyIG8gYXRyaWJ1dG8gYHByb3BlcnR5YCBkbyBjYW1wby5cbiAgICpcbiAgICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gICAqIGBgYFxuICAgKiBbJ2NpdHknLCduYW1lJ107XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtY2xvc2UtZGlzY2xhaW1lcnMnKSBzZXQgaGlkZUNsb3NlRGlzY2xhaW1lcnModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgfVxuXG4gIGdldCBoaWRlQ2xvc2VEaXNjbGFpbWVycygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5faGlkZUNsb3NlRGlzY2xhaW1lcnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJZGVudGlmaWNhZG9yIGRvIHBhcsOibWV0cm8gZW52aWFkbyBhbyBzZXJ2acOnbyBhbyByZWFsaXphciB1bWEgYnVzY2EgcsOhcGlkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3NlYXJjaCdcbiAgICovXG4gIEBJbnB1dCgncC1xdWljay1zZWFyY2gtcGFyYW0nKSBzZXQgcXVpY2tTZWFyY2hQYXJhbSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcXVpY2tTZWFyY2hQYXJhbSA9IHZhbHVlID8/ICdzZWFyY2gnO1xuICB9XG5cbiAgZ2V0IHF1aWNrU2VhcmNoUGFyYW0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hQYXJhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFZhbG9yIHBhZHLDo28gbmEgYnVzY2EgcsOhcGlkYSBhbyBpbmljaWFsaXphciBvIGNvbXBvbmVudGVcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1xdWljay1zZWFyY2gtdmFsdWUnKSBzZXQgcXVpY2tTZWFyY2hWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcXVpY2tTZWFyY2hWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHF1aWNrU2VhcmNoVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1wYWdlLWR5bmFtaWMtdGFibGVgLlxuICAgKlxuICAgKiBFeGlzdGVtIGR1YXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvIGNvbXBvbmVudGUsIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1BhZ2VEeW5hbWljU2VhcmNoTGl0ZXJhbHMgPSB7XG4gICAqICAgIGRpc2NsYWltZXJHcm91cFRpdGxlOiAnRmlsdHJvcyBhcGxpY2Fkb3M6JyxcbiAgICogICAgZmlsdGVyVGl0bGU6ICdGaWx0cm8gYXZhbsOnYWRvJyxcbiAgICogICAgZmlsdGVyQ2FuY2VsTGFiZWw6ICdGZWNoYXInLFxuICAgKiAgICBmaWx0ZXJDb25maXJtTGFiZWw6ICdBcGxpY2FyJyxcbiAgICogICAgcXVpY2tTZWFyY2hMYWJlbDogJ1ZhbG9yIHBlc3F1aXNhZG86JyxcbiAgICogICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzZSBhcXVpJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNTZWFyY2hMaXRlcmFscyA9IHtcbiAgICogICAgZmlsdGVyVGl0bGU6ICdGaWx0cm8gYXZhbsOnYWRvJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tcGFnZS1keW5hbWljLXRhYmxlXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1wYWdlLWR5bmFtaWMtdGFibGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gdmFsb3IgcGFkcsOjbyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBjb25maWd1cmFkbyBubyBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSAqYnJvd3NlciouXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZWFyY2hMaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJlc3BvbnPDoXZlbCBwb3IgYXBsaWNhciBlc3Bhw6dhbWVudG8gbmFzIGNvbHVuYXMuXG4gICAqXG4gICAqIERldmUgcmVjZWJlciB1bSBkb3MgdmFsb3JlcyBkbyBlbnVtIGBQb1RhYmxlQ29sdW1uU3BhY2luZ2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBtZWRpdW1gXG4gICAqL1xuICBASW5wdXQoJ3Atc3BhY2luZycpIHNldCBzcGFjaW5nKHZhbHVlOiBQb1RhYmxlQ29sdW1uU3BhY2luZykge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3NtYWxsJyB8fCB2YWx1ZSA9PT0gJ21lZGl1bScgfHwgdmFsdWUgPT09ICdsYXJnZScpIHtcbiAgICAgIHRoaXMuX3NwYWNpbmcgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3BhY2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhY2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG91IGRlc2FiaWxpdGEgYSBxdWVicmEgYXV0b23DoXRpY2EgZGUgdGV4dG8uIFF1YW5kbyBhdGl2YWRhLCBvIHRleHRvIHF1ZSBleGNlZGVcbiAgICogbyBlc3Bhw6dvIGRpc3BvbsOtdmVsIMOpIHRyYW5zZmVyaWRvIHBhcmEgYSBwcsOzeGltYSBsaW5oYSBlbSBwb250b3MgYXByb3ByaWFkb3MgcGFyYSB1bWFcbiAgICogbGVpdHVyYSBjbGFyYS5cbiAgICpcbiAgICogPiBJbmNvbXBhdMOtdmVsIGNvbSBgdmlydHVhbC1zY3JvbGxgLCBxdWUgcmVxdWVyIGFsdHVyYSBmaXhhIG5hcyBsaW5oYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC10ZXh0LXdyYXAnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgdGV4dFdyYXA/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgbyBtb2RvIGRyYWcgYW5kIGRyb3AgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZHJhZ2dhYmxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnZ2FibGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvIGB2aXJ0dWFsLXNjcm9sbGAgbmEgdGFiZWxhIHBhcmEgbWVsaG9yYXIgYSBwZXJmb3JtYW5jZSBjb20gZ3JhbmRlcyB2b2x1bWVzIGRlIGRhZG9zLlxuICAgKiBSZXF1ZXIgYWx0dXJhIChgcC1oZWlnaHRgKSBwYXJhIGZ1bmNpb25hciBjb3JyZXRhbWVudGUuXG4gICAqXG4gICAqID4gSW5jb21wYXTDrXZlbCBjb20gYHAtdGV4dC13cmFwYCBlIGBtYXN0ZXItZGV0YWlsYCwgcG9pcyBvIGB2aXJ0dWFsLXNjcm9sbGAgZXhpZ2UgYWx0dXJhIGZpeGEgbmFzIGxpbmhhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoJ3AtdmlydHVhbC1zY3JvbGwnKSBzZXQgdmlydHVhbFNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlICYmIHRoaXMuaGVpZ2h0ID4gMCk7XG4gIH1cblxuICBnZXQgdmlydHVhbFNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlydHVhbFNjcm9sbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBwb0RpYWxvZ1NlcnZpY2U6IFBvRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHBvTm90aWZpY2F0aW9uOiBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljU2VydmljZTogUG9QYWdlRHluYW1pY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZTogUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W2xhbmd1YWdlXVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWREYXRhRnJvbUFQSSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbkFkdmFuY2VkU2VhcmNoKGZpbHRlcikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IDEsIC4uLmZpbHRlciB9KS5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5wYXJhbXMgPSBmaWx0ZXI7XG5cbiAgICBpZiAodGhpcy5rZWVwRmlsdGVycykge1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlRGlzY2xhaW1lcnMoZGlzY2xhaW1lcnMpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcblxuICAgIGRpc2NsYWltZXJzLmZvckVhY2goZGlzY2xhaW1lciA9PiB7XG4gICAgICBmaWx0ZXJbZGlzY2xhaW1lci5wcm9wZXJ0eV0gPSBkaXNjbGFpbWVyLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkFkdmFuY2VkU2VhcmNoKGZpbHRlcik7XG4gIH1cblxuICBvblF1aWNrU2VhcmNoKHRlcm1UeXBlZEluUXVpY2tTZWFyY2gpIHtcbiAgICBjb25zdCBxdWlja1NlYXJjaFBhcmFtID0gdGVybVR5cGVkSW5RdWlja1NlYXJjaCA/IHsgW3RoaXMucXVpY2tTZWFyY2hQYXJhbV06IHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggfSA6IHt9O1xuICAgIHRoaXMucGFyYW1zID0gdGhpcy5jb25jYXRGaWx0ZXJzID8geyAuLi50aGlzLnBhcmFtcywgLi4ucXVpY2tTZWFyY2hQYXJhbSB9IDogeyAuLi5xdWlja1NlYXJjaFBhcmFtIH07XG5cbiAgICBpZiAodGhpcy5fb2xkUXVpY2tTZWFyY2hQYXJhbSBpbiB0aGlzLnBhcmFtcyAmJiB0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtICE9PSB0aGlzLnF1aWNrU2VhcmNoUGFyYW0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtc1t0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtXTtcbiAgICB9XG5cbiAgICB0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtID0gdGhpcy5xdWlja1NlYXJjaFBhcmFtO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBwYWdlOiAxLCAuLi50aGlzLnBhcmFtcyB9IDogdW5kZWZpbmVkKS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBvblNvcnQoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSBzb3J0ZWRDb2x1bW4udHlwZSA9PT0gJ2FzY2VuZGluZycgPyB0cnVlIDogZmFsc2U7XG4gICAgICB1dGlsLnNvcnRBcnJheU9mT2JqZWN0cyh0aGlzLml0ZW1zLCBzb3J0ZWRDb2x1bW4uY29sdW1uLnByb3BlcnR5LCBvcmRlcik7XG4gICAgfVxuICAgIHRoaXMuc29ydGVkQ29sdW1uID0gc29ydGVkQ29sdW1uO1xuICB9XG5cbiAgb25DaGFuZ2VWaXNpYmxlQ29sdW1ucyh2YWx1ZSkge1xuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKHZhbHVlOiBBcnJheTxTdHJpbmc+KSB7XG4gICAgdGhpcy5jb2x1bW5SZXN0b3JlTWFuYWdlci5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uU29ydEJ5KHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQpIHtcbiAgICB0aGlzLnNvcnRCeS5lbWl0KHNvcnRlZENvbHVtbik7XG4gIH1cblxuICBzaG93TW9yZSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiArK3RoaXMucGFnZSwgLi4udGhpcy5wYXJhbXMgfSkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZVNlbGVjdGlvblRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvblJlbW92ZUFsbCB8fCB0aGlzLmhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlO1xuICB9XG5cbiAgZ2V0IGhhc0FjdGlvblJlbW92ZUFsbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGlvbnMucmVtb3ZlQWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSByZWFsaXphIGEgYXR1YWxpemHDp8OjbyBkb3MgZGFkb3MgZGEgdGFiZWxhLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIGNhcHR1cmFyIGEgaW5zdMOibmNpYSBkbyBgcGFnZSBkeW5hbWljIHRhYmxlYCwgY29tbyBwb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgIGh0bWxcbiAgICogPHBvLXBhZ2UtZHluYW1pYy10YWJsZSAjZHluYW1pY1RhYmxlIFtwLXNlcnZpY2UtYXBpXT1cInNlcnZpY2VBcGlcIj48L3BvLXBhZ2UtZHluYW1pYy10YWJsZT5cbiAgICogYGBgXG4gICAqXG4gICAqIGBgYCBqYXZhc2NyaXB0XG4gICAqIGltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCwgUG9EeW5hbWljRm9ybUZpZWxkIH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuICAgKlxuICAgKiAuLi5cbiAgICpcbiAgICogQFZpZXdDaGlsZCgnZHluYW1pY1RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY1RhYmxlOiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQ7XG4gICAqXG4gICAqIHBhZ2VDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+ID0gW1xuICAgKiB7XG4gICAqICAgbGFiZWw6ICdVcGRhdGUnLFxuICAgKiAgIGFjdGlvbjogdGhpcy51cGRhdGVUYWJsZS5iaW5kKHRoaXMpLFxuICAgKiAgIGljb246ICdwaC1hcnJvd3MtY2xvY2t3aXNlJ1xuICAgKiB9XVxuICAgKlxuICAgKiB1cGRhdGVUYWJsZSgpIHtcbiAgICogICB0aGlzLmR5bmFtaWNUYWJsZS51cGRhdGVEYXRhVGFibGUoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHt7cGFnZTogbnVtYmVyLCBrZXk6IHZhbHVlIH19IGZpbHRlciBQcm9wcmllZGFkZSBwYXJhIGVudmlvIGRlIHVtIGZpbHRybyBjdXN0b21pemFkby5cbiAgICogRXhlbXBsbyBkZSBlbnZpbzpcbiAgICpcbiAgICpgYGBcbiAgICogdGhpcy5keW5hbWljVGFibGUudXBkYXRlRGF0YVRhYmxlKHtwYWdlOiAzLCBzZWFyY2g6ICdCcmFzaWwnfSk7XG4gICAqIGBgYFxuICAgKiBDYXNvIG7Do28gc2VqYSBwYXNzYWRvIHVtIGZpbHRybyBjdXN0b21pemFkbyBwYXJhIG8gbcOpdG9kbyBgdXBkYXRlRGF0YVRhYmxlYCBhIHRhYmVsYSBzZXLDoSBhdHVhbGl6YWRhIGNvbmZvcm1lIGEgcMOhZ2luYSBkbyB1bHRpbW8gaXRlbSBtb2RpZmljYWRvLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZURhdGFUYWJsZShmaWx0ZXI/OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleEl0ZW1TZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5pdGVtU2VsZWN0ZWRBY3Rpb24pO1xuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBNYXRoLmZsb29yKGluZGV4SXRlbVNlbGVjdGVkIC8gUEFHRV9TSVpFX0RFRkFVTFQpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlTnVtYmVyIDwgMCA/IHRoaXMuY3VycmVudFBhZ2UgOiBwYWdlTnVtYmVyICsgMTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoZmlsdGVyKS5zdWJzY3JpYmUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIC4uLnRoaXMucGFyYW1zIH0pLnN1YnNjcmliZSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbmZpcm1SZW1vdmUoXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddLFxuICAgIGl0ZW1cbiAgKSB7XG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XG4gICAgICB0aXRsZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlVGl0bGUsXG4gICAgICBtZXNzYWdlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVNZXNzYWdlLFxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmUuYmluZCh0aGlzLCBpdGVtLCBhY3Rpb25SZW1vdmUsIGFjdGlvbkJlZm9yZVJlbW92ZSlcbiAgICB9O1xuXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpcm1SZW1vdmVBbGwoXG4gICAgYWN0aW9uUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZUFsbFRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlQWxsTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlQWxsLmJpbmQodGhpcywgYWN0aW9uUmVtb3ZlQWxsLCBhY3Rpb25CZWZvcmVSZW1vdmVBbGwpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVbmlxdWVLZXkoaXRlbSkge1xuICAgIGNvbnN0IGtleXMgPSB1dGlsLm1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCB0aGlzLmtleXMpO1xuXG4gICAgcmV0dXJuIHV0aWwudmFsdWVzRnJvbU9iamVjdChrZXlzKS5qb2luKCd8Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyUGFyYW0oc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCA9IHsgdHlwZTogdW5kZWZpbmVkIH0pIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdHlwZSB9ID0gc29ydGVkQ29sdW1uO1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmcpIHtcbiAgICAgIHJldHVybiB7IG9yZGVyOiBgLSR7Y29sdW1uLnByb3BlcnR5fWAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcmRlcjogYCR7Y29sdW1uLnByb3BlcnR5fWAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocGFyYW1zOiB7IHBhZ2U/OiBudW1iZXI7IHNlYXJjaD86IHN0cmluZyB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZUFwaSkge1xuICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcih0aGlzLmxpdGVyYWxzLmxvYWREYXRhRXJyb3JOb3RpZmljYXRpb24pO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyUGFyYW0gPSB0aGlzLmdldE9yZGVyUGFyYW0odGhpcy5zb3J0ZWRDb2x1bW4pO1xuICAgIGNvbnN0IGRlZmF1bHRQYXJhbXM6IGFueSA9IHsgcGFnZTogMSwgcGFnZVNpemU6IFBBR0VfU0laRV9ERUZBVUxUIH07XG4gICAgY29uc3QgZnVsbFBhcmFtczogYW55ID0geyAuLi5kZWZhdWx0UGFyYW1zLCAuLi5wYXJhbXMsIC4uLm9yZGVyUGFyYW0gfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldFJlc291cmNlcyhmdWxsUGFyYW1zKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgbGV0IG5ld0FycmF5O1xuICAgICAgICBpZiAoZnVsbFBhcmFtcy5wYWdlID09PSAxKSB7XG4gICAgICAgICAgbmV3QXJyYXkgPSByZW1vdmVEdXBsaWNhdGVJdGVtc1dpdGhBcnJheUtleShyZXNwb25zZS5pdGVtcywgcmVzcG9uc2UuaXRlbXMsIHRoaXMua2V5cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QXJyYXkgPSByZW1vdmVEdXBsaWNhdGVJdGVtc1dpdGhBcnJheUtleSh0aGlzLml0ZW1zLCByZXNwb25zZS5pdGVtcywgdGhpcy5rZXlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3QXJyYXkgPyBbLi4ubmV3QXJyYXldIDogdGhpcy5pdGVtcztcbiAgICAgICAgdGhpcy5wYWdlID0gZnVsbFBhcmFtcy5wYWdlO1xuICAgICAgICB0aGlzLmhhc05leHQgPSByZXNwb25zZS5oYXNOZXh0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRhZGF0YShcbiAgICBzZXJ2aWNlQXBpRnJvbVJvdXRlOiBzdHJpbmcsXG4gICAgb25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uXG4gICk6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGE+IHtcbiAgICBpZiAoc2VydmljZUFwaUZyb21Sb3V0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGE+KCkucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmF1dG9Sb3V0ZXIgPSByZXNwb25zZS5hdXRvUm91dGVyIHx8IHRoaXMuYXV0b1JvdXRlcjtcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucztcbiAgICAgICAgICB0aGlzLmJyZWFkY3J1bWIgPSByZXNwb25zZS5icmVhZGNydW1iIHx8IHRoaXMuYnJlYWRjcnVtYjtcbiAgICAgICAgICB0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZpZWxkcyB8fCB0aGlzLmZpZWxkcztcbiAgICAgICAgICB0aGlzLnRpdGxlID0gcmVzcG9uc2UudGl0bGUgfHwgdGhpcy50aXRsZTtcbiAgICAgICAgICB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zID0gcmVzcG9uc2UucGFnZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucztcbiAgICAgICAgICB0aGlzLnRhYmxlQ3VzdG9tQWN0aW9ucyA9IHJlc3BvbnNlLnRhYmxlQ3VzdG9tQWN0aW9ucyB8fCB0aGlzLnRhYmxlQ3VzdG9tQWN0aW9ucztcbiAgICAgICAgICB0aGlzLmtlZXBGaWx0ZXJzID0gcmVzcG9uc2Uua2VlcEZpbHRlcnMgfHwgdGhpcy5rZWVwRmlsdGVycztcbiAgICAgICAgICB0aGlzLmNvbmNhdEZpbHRlcnMgPSByZXNwb25zZS5jb25jYXRGaWx0ZXJzIHx8IHRoaXMuY29uY2F0RmlsdGVycztcbiAgICAgICAgICB0aGlzLmhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyID0gcmVzcG9uc2UuaGlkZVJlbW92ZUFsbERpc2NsYWltZXIgfHwgdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcjtcbiAgICAgICAgICB0aGlzLmhpZGVDbG9zZURpc2NsYWltZXJzID0gcmVzcG9uc2UuaGlkZUNsb3NlRGlzY2xhaW1lcnMgfHwgdGhpcy5oaWRlQ2xvc2VEaXNjbGFpbWVycztcbiAgICAgICAgICB0aGlzLnF1aWNrU2VhcmNoV2lkdGggPSByZXNwb25zZS5xdWlja1NlYXJjaFdpZHRoIHx8IHRoaXMucXVpY2tTZWFyY2hXaWR0aDtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCk7XG4gIH1cblxuICAvLyBAdG9kbyBWYWxpZGFyIHJvdGFzIG5hIG3Do28gcG9pcyBzZSBleGlzdGlyIHVtYSByb3RhICcqKicgbyBjYXRjaCBkbyBuYXZpZ2F0aW9uIG7Do28gZnVuY2lvbmEuXG4gIHByaXZhdGUgbmF2aWdhdGVUbyhcbiAgICByb3V0ZTogeyBwYXRoOiBzdHJpbmc7IGNvbXBvbmVudD87IHVybD86IHN0cmluZzsgcGFyYW1zPzogYW55IH0sXG4gICAgZm9yY2VTdG9wQXV0b1JvdXRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZS51cmwgfHwgcm91dGUucGF0aF0sIHsgcXVlcnlQYXJhbXM6IHJvdXRlLnBhcmFtcyB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBpZiAoZm9yY2VTdG9wQXV0b1JvdXRlciB8fCAhdGhpcy5hdXRvUm91dGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3V0ZXIuY29uZmlnLnVuc2hpZnQoPFJvdXRlPntcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcbiAgICAgICAgY29tcG9uZW50OiByb3V0ZS5jb21wb25lbnQsXG4gICAgICAgIGRhdGE6IHsgc2VydmljZUFwaTogdGhpcy5zZXJ2aWNlQXBpLCBhdXRvUm91dGVyOiB0cnVlIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5hdmlnYXRlVG8ocm91dGUsIHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25jYXRlbmF0ZWRVcmwoY29uY2F0S2V5czogYm9vbGVhbiwgdXJsOiBzdHJpbmcsIHNlbGVjdGVkSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5cyA9IHRoaXMua2V5cy5tYXAoa2V5ID0+IGVuY29kZVVSSUNvbXBvbmVudChzZWxlY3RlZEl0ZW1ba2V5XSkpLmpvaW4oKTtcbiAgICByZXR1cm4gY29uY2F0S2V5cyA/IGAke3VybH0vJHtrZXlzfWAgOiB1cmw7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EZXRhaWwoYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkZXRhaWwnXSwgaXRlbSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZURldGFpbCh0aGlzLmFjdGlvbnMuYmVmb3JlRGV0YWlsLCBpZCwgaXRlbSlcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRGV0YWlsUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEZXRhaWwpID0+XG4gICAgICAgICAgdGhpcy5leGVjdXRlRGV0YWlsKGFjdGlvbiwgYmVmb3JlRGV0YWlsUmVzdWx0LCBpZCwgaXRlbSlcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVEZXRhaWwoXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkZXRhaWwnXSxcbiAgICBiZWZvcmVEZXRhaWxSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcsXG4gICAgaWQ/OiBzdHJpbmcsXG4gICAgaXRlbT86IGFueVxuICApIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVEZXRhaWxSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uKSB7XG4gICAgICBpZiAobmV3VXJsKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGhGcm9tTmV3VXJsKG5ld1VybCwgaWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aCB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBhY3Rpb24pO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb24sIHVybCwgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uKGlkLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhGcm9tTmV3VXJsKG5ld1VybDogc3RyaW5nLCBpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAobmV3VXJsLmluY2x1ZGVzKCc6aWQnKSkge1xuICAgICAgcmV0dXJuIG5ld1VybC5yZXBsYWNlKC86aWQvZywgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sIGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1dGlsLm1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCB0aGlzLmR1cGxpY2F0ZXMpKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVEdXBsaWNhdGUodGhpcy5hY3Rpb25zLmJlZm9yZUR1cGxpY2F0ZSwgaWQsIGR1cGxpY2F0ZXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZUR1cGxpY2F0ZVJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUR1cGxpY2F0ZShhY3Rpb25EdXBsaWNhdGUsIGJlZm9yZUR1cGxpY2F0ZVJlc3VsdCwgZHVwbGljYXRlcylcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVEdXBsaWNhdGUoXG4gICAgYWN0aW9uRHVwbGljYXRlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkdXBsaWNhdGUnXSxcbiAgICBiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSxcbiAgICBkdXBsaWNhdGVzOiBhbnlcbiAgKSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRHVwbGljYXRlUmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSA9IGJlZm9yZS5yZXNvdXJjZTtcbiAgICBjb25zdCBuZXdBY3Rpb24gPSBiZWZvcmUubmV3VXJsID8/IGFjdGlvbkR1cGxpY2F0ZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25EdXBsaWNhdGUpIHtcbiAgICAgIGlmICh0eXBlb2YgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPT09ICdvYmplY3QnICYmIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5ld0FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IG5ld0FjdGlvbiwgcGFyYW1zOiB7IGR1cGxpY2F0ZTogSlNPTi5zdHJpbmdpZnkoZHVwbGljYXRlcykgfSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld0FjdGlvbihkdXBsaWNhdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0KGFjdGlvbkVkaXQ6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSwgaXRlbSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRWRpdCh0aGlzLmFjdGlvbnMuYmVmb3JlRWRpdCwgaWQsIGl0ZW0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCkgPT5cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUVkaXRBY3Rpb24oYWN0aW9uRWRpdCwgYmVmb3JlRWRpdFJlc3VsdCwgaXRlbSwgaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZWRpdCddLFxuICAgIGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQsXG4gICAgaXRlbTogYW55LFxuICAgIGlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbmV3RWRpdEFjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/Lm5ld1VybCA/PyBhY3Rpb247XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5hbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgaWYgKCFhbGxvd0FjdGlvbikge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3RWRpdEFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMub3BlbkVkaXRVcmwobmV3RWRpdEFjdGlvbiwgaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtID0gbmV3RWRpdEFjdGlvbihpZCwgaXRlbSk7XG4gICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKGl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXRVcmwocGF0aDogc3RyaW5nLCBpdGVtKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKGl0ZW0sIHBhdGgpO1xuXG4gICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aCwgdXJsIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb2RpZnlVSVRhYmxlSXRlbShjdXJyZW50SXRlbSwgbmV3SXRlbVZhbHVlKSB7XG4gICAgY29uc3QgdGFibGVJdGVtID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBjdXJyZW50SXRlbSk7XG4gICAgdGhpcy5pdGVtc1t0YWJsZUl0ZW1dID0geyAuLi5jdXJyZW50SXRlbSwgLi4ubmV3SXRlbVZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIG9wZW5OZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVOZXcodGhpcy5hY3Rpb25zLmJlZm9yZU5ldylcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlTmV3UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcpID0+IHRoaXMuZXhlY3V0ZU5ldyhhY3Rpb25OZXcsIGJlZm9yZU5ld1Jlc3VsdCkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZU5ldyhhY3Rpb25OZXc6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ25ldyddLCBiZWZvcmVOZXdSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcpIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVOZXdSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uTmV3KSB7XG4gICAgICBpZiAobmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdVcmwgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uTmV3ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogYWN0aW9uTmV3IH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uTmV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhc28gZXhpc3RhIG1haXMgZGUgdW0gaWRlbnRpZmljYWRvciwgc2Vyw6EgY29uY2F0ZW5hZG8gY29tICd8Jy5cbiAgICpcbiAgICogRXg6IHsgaWQ6IDEsIGNvbXBhbnk6ICdwbycgfVxuICAgKlxuICAgKiBQYXJhIG8gZW5kcG9pbnQgL3Jlc291cmNlcy86aWQgc2Vyw6EgZXhlY3V0YWRhIGEgdXJsIC9yZXNvdXJjZXMvMXxwb1xuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmUoXG4gICAgaXRlbSxcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCBpdGVtKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWN0aW9uKGl0ZW0sIGFjdGlvblJlbW92ZSwgYmVmb3JlUmVtb3ZlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUFjdGlvbihcbiAgICBpdGVtLFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB7IGFsbG93QWN0aW9uLCBuZXdVcmwgfSA9IGJlZm9yZVJlbW92ZSB8fCB7fTtcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoYWxsb3cpIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICAgIGNvbnN0IHJlc291cmNlVG9SZW1vdmVLZXkgPSB0aGlzLnJldHVyblJlc291cmNlc0tleXMoW2l0ZW1dKTtcblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmUgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgdW5pcXVlS2V5ID0gbmV3VXJsID8gdW5kZWZpbmVkIDogdW5pcXVlS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZVxuICAgICAgICAgIC5kZWxldGVSZXNvdXJjZSh1bmlxdWVLZXksIG5ld1VybClcbiAgICAgICAgICAucGlwZShtYXAoKCkgPT4gdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VUb1JlbW92ZUtleSwgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2YoYWN0aW9uUmVtb3ZlKHVuaXF1ZUtleSwgaXRlbSkpLnBpcGUoXG4gICAgICAgIHRhcChyZW1vdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSByZW1vdmUgPz8gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VUb1JlbW92ZUtleSwgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uLCByZW1vdmVJdGVtKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVVJKGl0ZW1zOiBBcnJheTxhbnk+LCBtZXNzYWdlOiBzdHJpbmcsIHJlbW92ZSA9IHRydWUpIHtcbiAgICBpZiAocmVtb3ZlID09PSB0cnVlICYmIGl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTG9jYWxJdGVtcyhpdGVtcyk7XG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBbGwoXG4gICAgYWN0aW9uUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmVBbGwnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZUFsbCddXG4gICkge1xuICAgIGNvbnN0IG9yaWdpbmFsUmVzb3VyY2VzS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlQWxsKGFjdGlvbkJlZm9yZVJlbW92ZUFsbCwgb3JpZ2luYWxSZXNvdXJjZXNLZXlzKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWxsQWN0aW9uKGFjdGlvblJlbW92ZUFsbCwgYmVmb3JlUmVtb3ZlLCBvcmlnaW5hbFJlc291cmNlc0tleXMpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKSB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XG5cbiAgICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcyk7XG4gIH1cblxuICBwcml2YXRlIHJldHVyblJlc291cmNlc0tleXMocmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIHV0aWwubWFwQXJyYXlCeVByb3BlcnRpZXMocmVzb3VyY2VzLCB0aGlzLmtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBbGxBY3Rpb24oXG4gICAgYWN0aW9uUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmVBbGwnXSxcbiAgICBiZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZUFsbCxcbiAgICBvcmlnaW5hbFJlc291cmNlczogQXJyYXk8YW55PlxuICApIHtcbiAgICBjb25zdCB7IGFsbG93QWN0aW9uLCBuZXdVcmwsIHJlc291cmNlcyB9ID0gYmVmb3JlUmVtb3ZlQWxsID8/IHt9O1xuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcbiAgICBjb25zdCByZXNvdXJjZXN0b0RlbGV0ZSA9IHJlc291cmNlcyA/PyBvcmlnaW5hbFJlc291cmNlcztcblxuICAgIGlmIChhbGxvdyAmJiBBcnJheS5pc0FycmF5KHJlc291cmNlc3RvRGVsZXRlKSkge1xuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmVBbGwgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZGVsZXRlUmVzb3VyY2VzKHJlc291cmNlc3RvRGVsZXRlLCBuZXdVcmwpLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlc3RvRGVsZXRlLCB0aGlzLmxpdGVyYWxzLnJlbW92ZUFsbFN1Y2Nlc3NOb3RpZmljYXRpb24pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2YoYWN0aW9uUmVtb3ZlQWxsKHJlc291cmNlc3RvRGVsZXRlKSkucGlwZShcbiAgICAgICAgdGFwKHJlbW92ZUl0ZW1zID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlbW92ZUl0ZW1zLCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMb2NhbEl0ZW1zKGl0ZW1zS2V5c1RvUmVtb3ZlID0gW10pIHtcbiAgICBpZiAoaXRlbXNLZXlzVG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1LZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICAgICAgcmV0dXJuICFpdGVtc0tleXNUb1JlbW92ZS5maW5kKGl0ZW1LZXlUb1JlbW92ZSA9PiB1dGlsLnZhbHVlc0Zyb21PYmplY3QoaXRlbUtleVRvUmVtb3ZlKS5qb2luKCd8JykgPT09IGl0ZW1LZXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVXJsKGl0ZW06IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC86aWQvZywgdW5pcXVlS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIGlmIChhY3Rpb25zPy5uZXcpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW3sgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbiwgYWN0aW9uOiB0aGlzLm9wZW5OZXcuYmluZCh0aGlzLCBhY3Rpb25zLm5ldykgfV07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1DdXN0b21BY3Rpb25zVG9QYWdlTGlzdEFjdGlvbihcbiAgICBjdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+XG4gICk6IEFycmF5PFBvUGFnZUFjdGlvbj4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGN1c3RvbUFjdGlvbnMubWFwKGN1c3RvbUFjdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IGN1c3RvbUFjdGlvbi5sYWJlbCxcbiAgICAgIGFjdGlvbjogdGhpcy5jYWxsUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcbiAgICAgIC4uLihjdXN0b21BY3Rpb24uaWNvbiAmJiB7IGljb246IGN1c3RvbUFjdGlvbi5pY29uIH0pLFxuICAgICAgdmlzaWJsZTogY3VzdG9tQWN0aW9uLnZpc2libGVcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVRhYmxlQ3VzdG9tQWN0aW9uc1RvVGFibGVBY3Rpb25zKFxuICAgIHRhYmxlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+XG4gICk6IEFycmF5PFBvVGFibGVBY3Rpb24+IHtcbiAgICByZXR1cm4gdGFibGVDdXN0b21BY3Rpb25zLm1hcCh0YWJsZUN1c3RvbUFjdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IHRhYmxlQ3VzdG9tQWN0aW9uLmxhYmVsLFxuICAgICAgaWNvbjogdGFibGVDdXN0b21BY3Rpb24uaWNvbixcbiAgICAgIGFjdGlvbjogdGhpcy5jYWxsVGFibGVDdXN0b21BY3Rpb24uYmluZCh0aGlzLCB0YWJsZUN1c3RvbUFjdGlvbiksXG4gICAgICBkaXNhYmxlZDogdGFibGVDdXN0b21BY3Rpb24uZGlzYWJsZWQsXG4gICAgICB2aXNpYmxlOiB0YWJsZUN1c3RvbUFjdGlvbi52aXNpYmxlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVQYWdlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSAmJiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbikge1xuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUgPyB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5jdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uLmFjdGlvbiwgc2VsZWN0ZWRJdGVtcylcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogY3VzdG9tQWN0aW9uLnVybCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGxUYWJsZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICB0aGlzLml0ZW1TZWxlY3RlZEFjdGlvbiA9IHNlbGVjdGVkSXRlbTtcbiAgICBpZiAoY3VzdG9tQWN0aW9uLmFjdGlvbikge1xuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgIC5zdWJzY3JpYmUodXBkYXRlZEl0ZW0gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlZEl0ZW0gPT09ICdvYmplY3QnICYmIHVwZGF0ZWRJdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKHNlbGVjdGVkSXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbUFjdGlvbi51cmwpIHtcbiAgICAgIGlmIChpc0V4dGVybmFsTGluayhjdXN0b21BY3Rpb24udXJsKSkge1xuICAgICAgICBvcGVuRXh0ZXJuYWxMaW5rKHRoaXMuY3JlYXRlQ29uY2F0ZW5hdGVkVXJsKGN1c3RvbUFjdGlvbi5jb25jYXRLZXlzLCBjdXN0b21BY3Rpb24udXJsLCBzZWxlY3RlZEl0ZW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7XG4gICAgICAgICAgcGF0aDogdGhpcy5jcmVhdGVDb25jYXRlbmF0ZWRVcmwoY3VzdG9tQWN0aW9uLmNvbmNhdEtleXMsIGN1c3RvbUFjdGlvbi51cmwsIHNlbGVjdGVkSXRlbSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZW1vdmVBbGxBY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9ucztcbiAgICBpZiAodGhpcy5zaG93UmVtb3ZlKGFjdGlvbi5yZW1vdmVBbGwpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQYWdlQWN0aW9ucyA9IFtcbiAgICAgICAgLi4udGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvblJlbW92ZUFsbCxcbiAgICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZUFsbC5iaW5kKHRoaXMsIGFjdGlvbi5yZW1vdmVBbGwsIGFjdGlvbi5iZWZvcmVSZW1vdmVBbGwpLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVSZW1vdmVBbGwuYmluZCh0aGlzKSxcbiAgICAgICAgICB0eXBlOiAnZGFuZ2VyJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZVJlbW92ZUFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFibGVBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgY29uc3QgdmlzaWJsZVJlbW92ZSA9IHRoaXMuc2hvd1JlbW92ZShhY3Rpb25zLnJlbW92ZSk7XG4gICAgICB0aGlzLmRlZmF1bHRUYWJsZUFjdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkRldGFpbC5iaW5kKHRoaXMsIGFjdGlvbnMuZGV0YWlsKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvblZpZXcsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmRldGFpbFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5FZGl0LmJpbmQodGhpcywgYWN0aW9ucy5lZGl0KSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkVkaXQsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmVkaXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRHVwbGljYXRlLmJpbmQodGhpcywgYWN0aW9ucy5kdXBsaWNhdGUpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRHVwbGljYXRlLFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kdXBsaWNhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIGFjdGlvbnMuYmVmb3JlUmVtb3ZlKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZSxcbiAgICAgICAgICBzZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVJlbW92ZVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGcm9tQVBJKCkge1xuICAgIGNvbnN0IHsgc2VydmljZUFwaTogc2VydmljZUFwaUZyb21Sb3V0ZSwgc2VydmljZU1ldGFkYXRhQXBpLCBzZXJ2aWNlTG9hZEFwaSB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhO1xuXG4gICAgY29uc3Qgb25Mb2FkID0gc2VydmljZUxvYWRBcGkgfHwgdGhpcy5vbkxvYWQ7XG4gICAgdGhpcy5zZXJ2aWNlQXBpID0gc2VydmljZUFwaUZyb21Sb3V0ZSB8fCB0aGlzLnNlcnZpY2VBcGk7XG5cbiAgICB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmNvbmZpZ1NlcnZpY2VBcGkoeyBlbmRwb2ludDogdGhpcy5zZXJ2aWNlQXBpLCBtZXRhZGF0YTogc2VydmljZU1ldGFkYXRhQXBpIH0pO1xuXG4gICAgY29uc3QgbWV0YWRhdGEkID0gdGhpcy5nZXRNZXRhZGF0YShzZXJ2aWNlQXBpRnJvbVJvdXRlLCBvbkxvYWQpO1xuICAgIGxldCBkYXRhJDtcbiAgICBpZiAodGhpcy5xdWlja1NlYXJjaFZhbHVlKSB7XG4gICAgICBjb25zdCBwYXJhbXNRdWlja1NlYXJjaFZhbHVlID0geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGhpcy5xdWlja1NlYXJjaFZhbHVlIH07XG4gICAgICBkYXRhJCA9IHRoaXMubG9hZERhdGEocGFyYW1zUXVpY2tTZWFyY2hWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBtZXRhZGF0YSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5nZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpO1xuXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpIHtcbiAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBpdGVtKSA9PiBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBbaXRlbS5wcm9wZXJ0eV06IGl0ZW0uaW5pdFZhbHVlIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgT2JqZWN0LmtleXMoaW5pdGlhbEZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghaW5pdGlhbEZpbHRlcnNba2V5XSkge1xuICAgICAgICBkZWxldGUgaW5pdGlhbEZpbHRlcnNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsRmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+IHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMsXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIGtlZXBGaWx0ZXJzOiB0aGlzLmtlZXBGaWx0ZXJzLFxuICAgICAgY29uY2F0RmlsdGVyczogdGhpcy5jb25jYXRGaWx0ZXJzLFxuICAgICAgaGlkZVJlbW92ZUFsbERpc2NsYWltZXI6IHRoaXMuaGlkZVJlbW92ZUFsbERpc2NsYWltZXIsXG4gICAgICBoaWRlQ2xvc2VEaXNjbGFpbWVyczogdGhpcy5oaWRlQ2xvc2VEaXNjbGFpbWVycyxcbiAgICAgIHBhZ2VDdXN0b21BY3Rpb25zOiB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLFxuICAgICAgdGFibGVDdXN0b21BY3Rpb25zOiB0aGlzLnRhYmxlQ3VzdG9tQWN0aW9ucyxcbiAgICAgIHF1aWNrU2VhcmNoV2lkdGg6IHRoaXMucXVpY2tTZWFyY2hXaWR0aFxuICAgIH07XG5cbiAgICBjb25zdCBwYWdlT3B0aW9uU2NoZW1hOiBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYTxQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdrZWVwRmlsdGVycydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAncXVpY2tTZWFyY2hXaWR0aCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnY29uY2F0RmlsdGVycydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnaGlkZVJlbW92ZUFsbERpc2NsYWltZXInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2hpZGVDbG9zZURpc2NsYWltZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdwYWdlQ3VzdG9tQWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdsYWJlbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGFibGVDdXN0b21BY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dSZW1vdmU8VD4oYWN0aW9uUmVtb3ZlOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWN0aW9uID0gYWN0aW9uUmVtb3ZlID8/IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJWYWx1ZShmaWx0ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMubWFwKGl0ZW0gPT4ge1xuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShpdGVtLnByb3BlcnR5KSkge1xuICAgICAgICBpdGVtLmluaXRWYWx1ZSA9IGZpbHRlcltpdGVtLnByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZUFjdGlvbnMoKSB7XG4gICAgdGhpcy5wYWdlQWN0aW9ucyA9IFsuLi50aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMsIC4uLnRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9uc107XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlQWN0aW9ucygpIHtcbiAgICBjb25zdCBkZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSA9IHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMuZmlsdGVyKFxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgIT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcbiAgICApO1xuXG4gICAgY29uc3QgdGFibGVBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbmQoXG4gICAgICB0YWJsZUFjdGlvbiA9PiB0YWJsZUFjdGlvbi5sYWJlbCA9PT0gdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZVxuICAgICk7XG5cbiAgICBjb25zdCBuZXdUYWJsZUFjdGlvbnMgPSBbLi4uZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUsIC4uLnRoaXMuX2N1c3RvbVRhYmxlQWN0aW9uc107XG5cbiAgICBpZiAodGFibGVBY3Rpb25EZWxldGUpIHtcbiAgICAgIG5ld1RhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uRGVsZXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IG5ld1RhYmxlQWN0aW9ucztcbiAgfVxufVxuIiwiPHBvLXBhZ2UtZHluYW1pYy1zZWFyY2hcbiAgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiXG4gIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiXG4gIFtwLWhpZGUtY2xvc2UtZGlzY2xhaW1lcnNdPVwiaGlkZUNsb3NlRGlzY2xhaW1lcnNcIlxuICBbcC1maWx0ZXJzXT1cImZpbHRlcnNcIlxuICBbcC1rZWVwLWZpbHRlcnNdPVwia2VlcEZpbHRlcnNcIlxuICBbcC1saXRlcmFsc109XCJzZWFyY2hMaXRlcmFsc1wiXG4gIFtwLWNvbmNhdC1maWx0ZXJzXT1cImNvbmNhdEZpbHRlcnNcIlxuICBbcC1oaWRlLXJlbW92ZS1hbGwtZGlzY2xhaW1lcl09XCJoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lclwiXG4gIFtwLXF1aWNrLXNlYXJjaC13aWR0aF09XCJxdWlja1NlYXJjaFdpZHRoXCJcbiAgW3AtdGl0bGVdPVwidGl0bGVcIlxuICAocC1hZHZhbmNlZC1zZWFyY2gpPVwib25BZHZhbmNlZFNlYXJjaCgkZXZlbnQpXCJcbiAgKHAtY2hhbmdlLWRpc2NsYWltZXJzKT1cIm9uQ2hhbmdlRGlzY2xhaW1lcnMoJGV2ZW50KVwiXG4gIChwLXF1aWNrLXNlYXJjaCk9XCJvblF1aWNrU2VhcmNoKCRldmVudClcIlxuICBbcC1xdWljay1zZWFyY2gtdmFsdWVdPVwicXVpY2tTZWFyY2hWYWx1ZSB8fCAnJ1wiXG4+XG4gIDxwby10YWJsZVxuICAgIFtwLXNvcnRdPVwidHJ1ZVwiXG4gICAgW3AtYWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxuICAgIFtwLWFjdGlvbnMtcmlnaHRdPVwiYWN0aW9uUmlnaHRcIlxuICAgIFtwLXNlbGVjdGFibGVdPVwiZW5hYmxlU2VsZWN0aW9uVGFibGVcIlxuICAgIFtwLWNvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3AtaXRlbXNdPVwiaXRlbXNcIlxuICAgIFtwLWhlaWdodF09XCJoZWlnaHRcIlxuICAgIFtwLWhpZGUtY29sdW1ucy1tYW5hZ2VyXT1cImhpZGVDb2x1bW5zTWFuYWdlclwiXG4gICAgW3AtaW5maW5pdGUtc2Nyb2xsXT1cImluZmluaXRlU2Nyb2xsXCJcbiAgICBbcC1zaG93LW1vcmUtZGlzYWJsZWRdPVwiIWhhc05leHRcIlxuICAgIChwLXNob3ctbW9yZSk9XCJzaG93TW9yZSgpXCJcbiAgICAocC1zb3J0LWJ5KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgICAocC1jaGFuZ2UtdmlzaWJsZS1jb2x1bW5zKT1cIm9uQ2hhbmdlVmlzaWJsZUNvbHVtbnMoJGV2ZW50KVwiXG4gICAgKHAtcmVzdG9yZS1jb2x1bW4tbWFuYWdlcik9XCJvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKCRldmVudClcIlxuICAgIChwLXNvcnQtYnkpPVwib25Tb3J0QnkoJGV2ZW50KVwiXG4gICAgW3AtdGV4dC13cmFwXT1cInRleHRXcmFwXCJcbiAgICBbcC1kcmFnZ2FibGVdPVwiZHJhZ2dhYmxlXCJcbiAgICBbcC1zcGFjaW5nXT1cInNwYWNpbmdcIlxuICAgIFtwLXZpcnR1YWwtc2Nyb2xsXT1cInZpcnR1YWxTY3JvbGxcIlxuICA+XG4gIDwvcG8tdGFibGU+XG48L3BvLXBhZ2UtZHluYW1pYy1zZWFyY2g+XG4iXX0=