@onecx/angular-accelerator 5.10.0 → 5.10.1

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.
Files changed (31) hide show
  1. package/esm2022/lib/angular-accelerator-primeng.module.mjs +4 -4
  2. package/esm2022/lib/angular-accelerator.module.mjs +4 -4
  3. package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +3 -3
  4. package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +3 -3
  5. package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +3 -3
  6. package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +18 -10
  7. package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +3 -3
  8. package/esm2022/lib/components/data-table/data-table.component.mjs +15 -7
  9. package/esm2022/lib/components/data-view/data-view.component.mjs +5 -5
  10. package/esm2022/lib/components/diagram/diagram.component.mjs +3 -3
  11. package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +3 -3
  12. package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +13 -7
  13. package/esm2022/lib/components/page-header/page-header.component.mjs +3 -3
  14. package/esm2022/lib/components/search-config/search-config.component.mjs +3 -3
  15. package/esm2022/lib/components/search-header/search-header.component.mjs +3 -3
  16. package/esm2022/lib/directives/advanced.directive.mjs +3 -3
  17. package/esm2022/lib/directives/if-breakpoint.directive.mjs +3 -3
  18. package/esm2022/lib/directives/if-permission.directive.mjs +3 -3
  19. package/esm2022/lib/directives/src.directive.mjs +3 -3
  20. package/esm2022/lib/directives/tooltipOnOverflow.directive.mjs +3 -3
  21. package/esm2022/lib/pipes/dynamic.pipe.mjs +3 -3
  22. package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +3 -3
  23. package/esm2022/lib/services/app-config-service.mjs +3 -3
  24. package/esm2022/lib/services/breadcrumb.service.mjs +3 -3
  25. package/esm2022/lib/services/translation-cache.service.mjs +3 -3
  26. package/esm2022/lib/utils/dateutils.mjs +3 -3
  27. package/fesm2022/onecx-angular-accelerator.mjs +115 -93
  28. package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
  29. package/lib/components/data-list-grid/data-list-grid.component.d.ts +4 -1
  30. package/lib/components/data-table/data-table.component.d.ts +4 -1
  31. package/package.json +1 -1
@@ -207,12 +207,18 @@ export class InteractiveDataViewComponent {
207
207
  }
208
208
  this.firstColumnId = this.columns[0]?.id;
209
209
  let dataListGridSortingComponentState$ = this.dataListGridSortingComponentState$;
210
+ let columnGroupSelectionComponentState$ = this.columnGroupSelectionComponentState$;
211
+ let customGroupColumnSelectorComponentState$ = this.customGroupColumnSelectorComponentState$;
210
212
  if (this.layout === 'table') {
211
213
  dataListGridSortingComponentState$ = dataListGridSortingComponentState$.pipe(startWith({}));
212
214
  }
215
+ else {
216
+ columnGroupSelectionComponentState$ = columnGroupSelectionComponentState$.pipe(startWith({}));
217
+ customGroupColumnSelectorComponentState$ = customGroupColumnSelectorComponentState$.pipe(startWith({}));
218
+ }
213
219
  combineLatest([
214
- this.columnGroupSelectionComponentState$.pipe(timestamp()),
215
- this.customGroupColumnSelectorComponentState$.pipe(timestamp()),
220
+ columnGroupSelectionComponentState$.pipe(timestamp()),
221
+ customGroupColumnSelectorComponentState$.pipe(timestamp()),
216
222
  this.dataLayoutComponentState$.pipe(timestamp()),
217
223
  dataListGridSortingComponentState$.pipe(timestamp()),
218
224
  this.dataViewComponentState$.pipe(timestamp()),
@@ -225,7 +231,7 @@ export class InteractiveDataViewComponent {
225
231
  });
226
232
  }
227
233
  ngAfterContentInit() {
228
- this.templates?.forEach((item) => {
234
+ this.templates$.value?.forEach((item) => {
229
235
  switch (item.getType()) {
230
236
  case 'tableCell':
231
237
  this.tableCell = item.template;
@@ -417,10 +423,10 @@ export class InteractiveDataViewComponent {
417
423
  this.pageSize = event;
418
424
  this.pageSizeChanged.emit(event);
419
425
  }
420
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: InteractiveDataViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
421
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: InteractiveDataViewComponent, selector: "ocx-interactive-data-view", inputs: { deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", supportedViewLayouts: "supportedViewLayouts", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", totalRecordsOnServer: "totalRecordsOnServer", layout: "layout", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey", groupSelectionNoGroupSelectedKey: "groupSelectionNoGroupSelectedKey", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", additionalActions: "additionalActions", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", page: "page", selectedRows: "selectedRows", displayedColumnKeys: "displayedColumnKeys", displayedColumns: "displayedColumns", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", data: "data" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", dataViewLayoutChange: "dataViewLayoutChange", displayedColumnsChange: "displayedColumnsChange", displayedColumnKeysChange: "displayedColumnKeysChange", selectionChanged: "selectionChanged", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], queries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableDateCell", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "dateTableCell", first: true, predicate: ["dateTableCell"], descendants: true }, { propertyName: "tableRelativeDateCell", first: true, predicate: ["tableRelativeDateCell"], descendants: true }, { propertyName: "relativeDateTableCell", first: true, predicate: ["relativeDateTableCell"], descendants: true }, { propertyName: "tableTranslationKeyCell", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "translationKeyTableCell", first: true, predicate: ["translationKeyTableCell"], descendants: true }, { propertyName: "gridItemSubtitleLines", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLines", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "stringTableCell", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCell", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "customTableCell", first: true, predicate: ["customTableCell"], descendants: true }, { propertyName: "gridItem", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "topCenter", first: true, predicate: ["topCenter"], descendants: true }, { propertyName: "listValue", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValue", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValue", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValue", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValue", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValue", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValue", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "tableFilterCell", first: true, predicate: ["tableFilterCell"], descendants: true }, { propertyName: "dateTableFilterCell", first: true, predicate: ["dateTableFilterCell"], descendants: true }, { propertyName: "relativeDateTableFilterCell", first: true, predicate: ["relativeDateTableFilterCell"], descendants: true }, { propertyName: "translationKeyTableFilterCell", first: true, predicate: ["translationKeyTableFilterCell"], descendants: true }, { propertyName: "stringTableFilterCell", first: true, predicate: ["stringTableFilterCell"], descendants: true }, { propertyName: "numberTableFilterCell", first: true, predicate: ["numberTableFilterCell"], descendants: true }, { propertyName: "customTableFilterCell", first: true, predicate: ["customTableFilterCell"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "dataView", first: true, predicate: DataViewComponent, descendants: true }], ngImport: i0, template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div *ngIf=\"layout === 'table'\" class=\"flex flex-wrap justify-content-between align-items-center gap-2\">\n <ocx-column-group-selection\n [selectedGroupKey]=\"selectedGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n\n <ocx-custom-group-column-selector\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n >\n </ocx-data-view>\n</div>\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: ["selectedGroupKey", "columns", "placeholderKey", "defaultGroupKey", "customGroupKey"], outputs: ["groupSelectionChanged", "componentStateChanged"] }, { kind: "component", type: i3.CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: ["columns", "displayedColumns", "dialogTitle", "openButtonTitle", "saveButtonLabel", "cancelButtonLabel", "activeColumnsLabel", "inactiveColumnsLabel", "frozenActionColumn", "actionColumnPosition"], outputs: ["columnSelectionChanged", "actionColumnConfigChanged", "componentStateChanged"] }, { kind: "component", type: i4.DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: ["supportedViewLayouts", "layout"], outputs: ["dataViewLayoutChange", "componentStateChanged"] }, { kind: "component", type: i5.DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: ["columns", "sortStates", "sortDirection", "sortField"], outputs: ["sortChange", "sortDirectionChange", "componentStateChanged", "columnsChange"] }, { kind: "component", type: i6.DataViewComponent, selector: "ocx-data-view", inputs: ["deletePermission", "editPermission", "viewPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "data", "name", "titleLineId", "subtitleLineIds", "layout", "columns", "emptyResultsMessage", "clientSideSorting", "clientSideFiltering", "fallbackImage", "filters", "sortField", "sortDirection", "listGridPaginator", "tablePaginator", "page", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "selectedRows", "frozenActionColumn", "actionColumnPosition", "paginator", "sortStates", "pageSizes", "pageSize", "stringTableCellTemplate", "numberTableCellTemplate", "customTableCellTemplate", "dateTableCellTemplate", "tableDateCellTemplate", "tableCellTemplate", "translationKeyTableCellTemplate", "tableTranslationKeyCellTemplate", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "gridItemTemplate", "listItemTemplate", "relativeDateTableCellTemplate", "tableRelativeDateCellTemplate", "listValueTemplate", "translationKeyListValueTemplate", "numberListValueTemplate", "relativeDateListValueTemplate", "customListValueTemplate", "stringListValueTemplate", "dateListValueTemplate", "tableFilterCellTemplate", "dateTableFilterCellTemplate", "relativeDateTableFilterCellTemplate", "translationKeyTableFilterCellTemplate", "stringTableFilterCellTemplate", "numberTableFilterCellTemplate", "customTableFilterCellTemplate", "additionalActions", "parentTemplates"], outputs: ["filtered", "sorted", "deleteItem", "viewItem", "editItem", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
426
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: InteractiveDataViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
427
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: InteractiveDataViewComponent, selector: "ocx-interactive-data-view", inputs: { deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", supportedViewLayouts: "supportedViewLayouts", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", totalRecordsOnServer: "totalRecordsOnServer", layout: "layout", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey", groupSelectionNoGroupSelectedKey: "groupSelectionNoGroupSelectedKey", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", additionalActions: "additionalActions", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", page: "page", selectedRows: "selectedRows", displayedColumnKeys: "displayedColumnKeys", displayedColumns: "displayedColumns", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", data: "data" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", dataViewLayoutChange: "dataViewLayoutChange", displayedColumnsChange: "displayedColumnsChange", displayedColumnKeysChange: "displayedColumnKeysChange", selectionChanged: "selectionChanged", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], queries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableDateCell", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "dateTableCell", first: true, predicate: ["dateTableCell"], descendants: true }, { propertyName: "tableRelativeDateCell", first: true, predicate: ["tableRelativeDateCell"], descendants: true }, { propertyName: "relativeDateTableCell", first: true, predicate: ["relativeDateTableCell"], descendants: true }, { propertyName: "tableTranslationKeyCell", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "translationKeyTableCell", first: true, predicate: ["translationKeyTableCell"], descendants: true }, { propertyName: "gridItemSubtitleLines", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLines", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "stringTableCell", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCell", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "customTableCell", first: true, predicate: ["customTableCell"], descendants: true }, { propertyName: "gridItem", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "topCenter", first: true, predicate: ["topCenter"], descendants: true }, { propertyName: "listValue", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValue", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValue", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValue", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValue", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValue", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValue", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "tableFilterCell", first: true, predicate: ["tableFilterCell"], descendants: true }, { propertyName: "dateTableFilterCell", first: true, predicate: ["dateTableFilterCell"], descendants: true }, { propertyName: "relativeDateTableFilterCell", first: true, predicate: ["relativeDateTableFilterCell"], descendants: true }, { propertyName: "translationKeyTableFilterCell", first: true, predicate: ["translationKeyTableFilterCell"], descendants: true }, { propertyName: "stringTableFilterCell", first: true, predicate: ["stringTableFilterCell"], descendants: true }, { propertyName: "numberTableFilterCell", first: true, predicate: ["numberTableFilterCell"], descendants: true }, { propertyName: "customTableFilterCell", first: true, predicate: ["customTableFilterCell"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "dataView", first: true, predicate: DataViewComponent, descendants: true }], ngImport: i0, template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div *ngIf=\"layout === 'table'\" class=\"flex flex-wrap justify-content-between align-items-center gap-2\">\n <ocx-column-group-selection\n [selectedGroupKey]=\"selectedGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n\n <ocx-custom-group-column-selector\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n >\n </ocx-data-view>\n</div>\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: ["selectedGroupKey", "columns", "placeholderKey", "defaultGroupKey", "customGroupKey"], outputs: ["groupSelectionChanged", "componentStateChanged"] }, { kind: "component", type: i3.CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: ["columns", "displayedColumns", "dialogTitle", "openButtonTitle", "saveButtonLabel", "cancelButtonLabel", "activeColumnsLabel", "inactiveColumnsLabel", "frozenActionColumn", "actionColumnPosition"], outputs: ["columnSelectionChanged", "actionColumnConfigChanged", "componentStateChanged"] }, { kind: "component", type: i4.DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: ["supportedViewLayouts", "layout"], outputs: ["dataViewLayoutChange", "componentStateChanged"] }, { kind: "component", type: i5.DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: ["columns", "sortStates", "sortDirection", "sortField"], outputs: ["sortChange", "sortDirectionChange", "componentStateChanged", "columnsChange"] }, { kind: "component", type: i6.DataViewComponent, selector: "ocx-data-view", inputs: ["deletePermission", "editPermission", "viewPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "data", "name", "titleLineId", "subtitleLineIds", "layout", "columns", "emptyResultsMessage", "clientSideSorting", "clientSideFiltering", "fallbackImage", "filters", "sortField", "sortDirection", "listGridPaginator", "tablePaginator", "page", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "selectedRows", "frozenActionColumn", "actionColumnPosition", "paginator", "sortStates", "pageSizes", "pageSize", "stringTableCellTemplate", "numberTableCellTemplate", "customTableCellTemplate", "dateTableCellTemplate", "tableDateCellTemplate", "tableCellTemplate", "translationKeyTableCellTemplate", "tableTranslationKeyCellTemplate", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "gridItemTemplate", "listItemTemplate", "relativeDateTableCellTemplate", "tableRelativeDateCellTemplate", "listValueTemplate", "translationKeyListValueTemplate", "numberListValueTemplate", "relativeDateListValueTemplate", "customListValueTemplate", "stringListValueTemplate", "dateListValueTemplate", "tableFilterCellTemplate", "dateTableFilterCellTemplate", "relativeDateTableFilterCellTemplate", "translationKeyTableFilterCellTemplate", "stringTableFilterCellTemplate", "numberTableFilterCellTemplate", "customTableFilterCellTemplate", "additionalActions", "parentTemplates"], outputs: ["filtered", "sorted", "deleteItem", "viewItem", "editItem", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
422
428
  }
423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: InteractiveDataViewComponent, decorators: [{
429
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: InteractiveDataViewComponent, decorators: [{
424
430
  type: Component,
425
431
  args: [{ selector: 'ocx-interactive-data-view', providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div *ngIf=\"layout === 'table'\" class=\"flex flex-wrap justify-content-between align-items-center gap-2\">\n <ocx-column-group-selection\n [selectedGroupKey]=\"selectedGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n\n <ocx-custom-group-column-selector\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n >\n </ocx-data-view>\n</div>\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n" }]
426
432
  }], propDecorators: { dataView: [{
@@ -625,4 +631,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
625
631
  }], data: [{
626
632
  type: Input
627
633
  }] } });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYWN0aXZlLWRhdGEtdmlldy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFJM0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFLdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQVMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJDLE1BQU0sa0NBQWtDLENBQUE7Ozs7Ozs7O0FBYTdHLE1BQU0sT0FBTyw0QkFBNEI7SUFOekM7UUFnQkUsd0NBQW1DLEdBQUcsSUFBSSxhQUFhLENBQXFDLENBQUMsQ0FBQyxDQUFBO1FBQzlGLDZDQUF3QyxHQUFHLElBQUksYUFBYSxDQUEwQyxDQUFDLENBQUMsQ0FBQTtRQUN4Ryw4QkFBeUIsR0FBRyxJQUFJLGFBQWEsQ0FBb0MsQ0FBQyxDQUFDLENBQUE7UUFDbkYsdUNBQWtDLEdBQUcsSUFBSSxhQUFhLENBQW9DLENB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QkFLcEIsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBU0gsU0FBUztzQkFEWixLQUFLO2dCQWdHRixJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHN0YXJ0V2l0aCwgdGltZXN0YW1wIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IERhdGFBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLWFjdGlvbidcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtdGFibGUtY29sdW1uLm1vZGVsJ1xuaW1wb3J0IHsgb3JkZXJBbmRNZXJnZVZhbHVlc0J5VGltZXN0YW1wIH0gZnJvbSAnLi4vLi4vdXRpbHMvcnhqcy11dGlscydcbmltcG9ydCB7XG4gIENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUsXG4gIEdyb3VwU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxufSBmcm9tICcuLi9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29sdW1uQ2hhbmdlZEV2ZW50LFxuICBDb2x1bW5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSxcbn0gZnJvbSAnLi4vY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSB9IGZyb20gJy4uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1saXN0LWdyaWQtc29ydGluZy9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudCdcbmltcG9ydCB7IEZpbHRlciwgUm93LCBTb3J0IH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFWaWV3Q29tcG9uZW50LCBEYXRhVmlld0NvbXBvbmVudFN0YXRlLCBSb3dMaXN0R3JpZERhdGEgfSBmcm9tICcuLi9kYXRhLXZpZXcvZGF0YS12aWV3LmNvbXBvbmVudCdcblxuZXhwb3J0IHR5cGUgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudFN0YXRlID0gQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSAmXG4gIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSAmXG4gIERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSAmXG4gIERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSAmXG4gIERhdGFWaWV3Q29tcG9uZW50U3RhdGVcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1pbnRlcmFjdGl2ZS1kYXRhLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIHVzZUV4aXN0aW5nOiBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgX2RhdGFWaWV3Q29tcG9uZW50OiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBAVmlld0NoaWxkKERhdGFWaWV3Q29tcG9uZW50KSBzZXQgZGF0YVZpZXcocmVmOiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50ID0gcmVmXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpXG4gIH1cbiAgZ2V0IGRhdGFWaWV3KCk6IERhdGFWaWV3Q29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVZpZXdDb21wb25lbnRcbiAgfVxuXG4gIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxheW91dENvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YVZpZXdDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhVmlld0NvbXBvbmVudFN0YXRlPigxKVxuXG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIG5hbWUgPSAnRGF0YSdcbiAgQElucHV0KCkgdGl0bGVMaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBzdWJ0aXRsZUxpbmVJZHM6IHN0cmluZ1tdID0gW11cbiAgQElucHV0KCkgc3VwcG9ydGVkVmlld0xheW91dHM6ICgnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKVtdID0gWydncmlkJywgJ2xpc3QnLCAndGFibGUnXVxuICBASW5wdXQoKSBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIGVtcHR5UmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBjbGllbnRTaWRlU29ydGluZyA9IHRydWVcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEZpbHRlcltdID0gW11cbiAgQElucHV0KCkgc29ydERpcmVjdGlvbjogRGF0YVNvcnREaXJlY3Rpb24gPSBEYXRhU29ydERpcmVjdGlvbi5OT05FXG4gIEBJbnB1dCgpIHNvcnRGaWVsZDogYW55ID0gJydcbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtcbiAgICBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcsXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORyxcbiAgICBEYXRhU29ydERpcmVjdGlvbi5OT05FLFxuICBdXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB0b3RhbFJlY29yZHNPblNlcnZlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJyA9ICd0YWJsZSdcbiAgQElucHV0KCkgZGVmYXVsdEdyb3VwS2V5ID0gJydcbiAgQElucHV0KCkgY3VzdG9tR3JvdXBLZXkgPSAnT0NYX0lOVEVSQUNUSVZFX0RBVEFfVklFVy5DVVNUT01fR1JPVVAnXG4gIEBJbnB1dCgpIGdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5ID0gJ09DWF9JTlRFUkFDVElWRV9EQVRBX1ZJRVcuTk9fR1JPVVBfU0VMRUNURUQnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ0tleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HJ1xuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HX1dJVEhfVE9UQUxfT05fU0VSVkVSJ1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQWN0aW9uczogRGF0YUFjdGlvbltdID0gW11cbiAgQElucHV0KCkgbGlzdEdyaWRQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHRhYmxlUGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFJvd1tdID0gW11cbiAgZGlzcGxheWVkQ29sdW1uS2V5cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSlcbiAgZGlzcGxheWVkQ29sdW1ucyQ6IE9ic2VydmFibGU8RGF0YVRhYmxlQ29sdW1uW10+IHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIFxuICBnZXQgZGlzcGxheWVkQ29sdW1uS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBkaXNwbGF5ZWRDb2x1bW5LZXlzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQubmV4dCh2YWx1ZSlcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBkaXNwbGF5ZWRDb2x1bW5LZXlzYCBhbmQgcGFzcyBpbiBjb2x1bW4gaWRzIGluc3RlYWQgb2YgYERhdGFUYWJsZUNvbHVtbmAgb2JqZWN0c1xuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc3BsYXllZENvbHVtbnMoKTogRGF0YVRhYmxlQ29sdW1uW10ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c1xuICAgICAgICAgIC5tYXAoKGQpID0+IHRoaXMuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBkKSlcbiAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkKSBhcyBEYXRhVGFibGVDb2x1bW5bXSkgPz8gW11cbiAgICAgICk7XG4gIH1cbiAgc2V0IGRpc3BsYXllZENvbHVtbnModmFsdWU6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5uZXh0KHZhbHVlLm1hcCgoZCkgPT4gZC5pZCkpXG4gIH1cbiAgQElucHV0KCkgZnJvemVuQWN0aW9uQ29sdW1uID0gZmFsc2VcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1uUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlQ2VsbCcpIHRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZXBsYWNlZCBieSBkYXRlVGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZURhdGVDZWxsJykgdGFibGVEYXRlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlVGFibGVDZWxsJykgZGF0ZVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgndGFibGVSZWxhdGl2ZURhdGVDZWxsJykgdGFibGVSZWxhdGl2ZURhdGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCcpIHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IHRyYW5zbGF0aW9uS2V5VGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCcpIHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsJykgdHJhbnNsYXRpb25LZXlUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICBAQ29udGVudENoaWxkKCdncmlkSXRlbVN1YnRpdGxlTGluZXMnKSBncmlkSXRlbVN1YnRpdGxlTGluZXM6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzJykgbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ1RhYmxlQ2VsbCcpIHN0cmluZ1RhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJUYWJsZUNlbGwnKSBudW1iZXJUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlQ2VsbCcpIGN1c3RvbVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdncmlkSXRlbScpIGdyaWRJdGVtOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RJdGVtJykgbGlzdEl0ZW06IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndG9wQ2VudGVyJykgdG9wQ2VudGVyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RWYWx1ZScpIGxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScpIHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlckxpc3RWYWx1ZScpIG51bWJlckxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVMaXN0VmFsdWUnKSByZWxhdGl2ZURhdGVMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZExpc3RWYWx1ZVxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBEYXRhTGlzdEdyaWQgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUxpc3RWYWx1ZScpIGN1c3RvbUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdMaXN0VmFsdWUnKSBzdHJpbmdMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZGF0ZUxpc3RWYWx1ZScpIGRhdGVMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndGFibGVGaWx0ZXJDZWxsJykgdGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVUYWJsZUZpbHRlckNlbGwnKSBkYXRlVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCcpIHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCcpIHRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCcpIHN0cmluZ1RhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJUYWJsZUZpbHRlckNlbGwnKSBudW1iZXJUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uIGZpbHRlclxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRUYWJsZUZpbHRlckNlbGxcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgaW4gRGF0YVRhYmxlIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZFRhYmxlRmlsdGVyQ2VsbFwiXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdjdXN0b21UYWJsZUZpbHRlckNlbGwnKSBjdXN0b21UYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICB0ZW1wbGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKVxuICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpXG4gIHNldCB0ZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJbXT4oKVxuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpXG4gIEBPdXRwdXQoKSBkZWxldGVJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIHZpZXdJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGVkaXRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGRhdGFWaWV3TGF5b3V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjwnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnPigpXG4gIC8vIFRPRE86IFJlbW92ZSBmb2xsb3dpbmcgbGluZSBvbmNlIGRpc3BsYXllZENvbHVtbnMgKGRlcHJlY2F0ZWQpIGhhcyBiZWVuIHJlbW92ZWRcbiAgQE91dHB1dCgpIGRpc3BsYXllZENvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUNvbHVtbltdPigpXG4gIEBPdXRwdXQoKSBkaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFJvd1tdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG5cbiAgQE91dHB1dCgpIGNvbXBvbmVudFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudFN0YXRlPigpXG5cbiAgc2VsZWN0ZWRHcm91cEtleSA9ICcnXG4gIGlzRGVsZXRlSXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzVmlld0l0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBpc0VkaXRJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgZmlyc3RDb2x1bW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0R3JpZFBhZ2luYXRvciAmJiB0aGlzLnRhYmxlUGFnaW5hdG9yXG4gIH1cbiAgc2V0IHBhZ2luYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdEdyaWRQYWdpbmF0b3IgPSB2YWx1ZVxuICAgIHRoaXMudGFibGVQYWdpbmF0b3IgPSB2YWx1ZVxuICB9XG5cbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzXG4gIH1cbiAgZ2V0IF9saXN0SXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXG4gIH1cbiAgZ2V0IF90YWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9zdHJpbmdUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9udW1iZXJUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9jdXN0b21UYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF90YWJsZURhdGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGwgPz8gdGhpcy50YWJsZURhdGVDZWxsXG4gIH1cbiAgZ2V0IF9kYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPz8gdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGxcbiAgfVxuICBnZXQgX3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8/IHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGxcbiAgfVxuICBnZXQgX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVxuICB9XG4gIGdldCBfbGlzdEl0ZW0oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1cbiAgfVxuICBnZXQgX2xpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0VmFsdWVcbiAgfVxuICBnZXQgX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9udW1iZXJMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9yZWxhdGl2ZURhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9jdXN0b21MaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9zdHJpbmdMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9kYXRlTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVMaXN0VmFsdWVcbiAgfVxuICBnZXQgX3RhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX2RhdGVUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX251bWJlclRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGxcbiAgfVxuXG4gIF9kYXRhOiBSb3dMaXN0R3JpZERhdGFbXSA9IFtdXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCk6IFJvd0xpc3RHcmlkRGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVxuICB9XG4gIHNldCBkYXRhKHZhbHVlOiBSb3dMaXN0R3JpZERhdGFbXSkge1xuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gdGhpcy5kZWZhdWx0R3JvdXBLZXlcbiAgICBpZighdGhpcy5kaXNwbGF5ZWRDb2x1bW5zIHx8IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKVxuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0R3JvdXBLZXkpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT5cbiAgICAgICAgY29sdW1uLnByZWRlZmluZWRHcm91cEtleXM/LmluY2x1ZGVzKHRoaXMuZGVmYXVsdEdyb3VwS2V5KVxuICAgICAgKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKVxuICAgIH1cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMkID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5waXBlKG1hcCgoY29sdW1uS2V5cykgPT4gKFxuICAgICAgKGNvbHVtbktleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT09IGtleSkpXG4gICAgICAgIC5maWx0ZXIoKGQpID0+IGQpIGFzIERhdGFUYWJsZUNvbHVtbltdKSA/PyBbXVxuICAgICkpKVxuICAgIC8vIFRPRE86IFJlbW92ZSBmb2xsb3dpbmcgbGluZSBvbmNlIGRpc3BsYXllZENvbHVtbnMgKGRlcHJlY2F0ZWQpIGhhcyBiZWVuIHJlbW92ZWRcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzKVxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleSkge1xuICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleSA9ICdPQ1hfSU5URVJBQ1RJVkVfREFUQV9WSUVXLk5PX0dST1VQX1NFTEVDVEVEJ1xuICAgIH1cbiAgICB0aGlzLmZpcnN0Q29sdW1uSWQgPSB0aGlzLmNvbHVtbnNbMF0/LmlkXG5cbiAgICBsZXQgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJDogT2JzZXJ2YWJsZTxEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4+ID1cbiAgICAgIHRoaXMuZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJFxuICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3RhYmxlJykge1xuICAgICAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQucGlwZShzdGFydFdpdGgoe30pKVxuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmRhdGFMYXlvdXRDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgdGhpcy5kYXRhVmlld0NvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY29tcG9uZW50U3RhdGVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9yZGVyQW5kTWVyZ2VWYWx1ZXNCeVRpbWVzdGFtcChjb21wb25lbnRTdGF0ZXMpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh2YWwpXG4gICAgICB9KVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudGVtcGxhdGVzPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZVJlbGF0aXZlRGF0ZUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVSZWxhdGl2ZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVUcmFuc2xhdGlvbktleUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtU3VidGl0bGVMaW5lcyA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0SXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2dyaWRJdGVtJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RJdGVtJzpcbiAgICAgICAgICB0aGlzLmxpc3RJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RvcENlbnRlcic6XG4gICAgICAgICAgdGhpcy50b3BDZW50ZXIgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubnVtYmVyTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnY3VzdG9tTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmN1c3RvbUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzdHJpbmdMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuc3RyaW5nTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuZGF0ZUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZpbHRlcmluZyhldmVudDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZXZlbnRcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpXG4gIH1cblxuICBzb3J0aW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBldmVudC5zb3J0RGlyZWN0aW9uXG4gICAgdGhpcy5zb3J0RmllbGQgPSBldmVudC5zb3J0Q29sdW1uXG4gICAgdGhpcy5zb3J0ZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uRGVsZXRlRWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvblZpZXdFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25FZGl0RWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuZWRpdEl0ZW0uZW1pdChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UobGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKSB7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXRcbiAgICB0aGlzLmRhdGFWaWV3TGF5b3V0Q2hhbmdlLmVtaXQobGF5b3V0KVxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RmllbGQgPSAkZXZlbnRcbiAgICB0aGlzLnNvcnRlZC5lbWl0KHsgc29ydENvbHVtbjogdGhpcy5zb3J0RmllbGQsIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvbiB9KVxuICB9XG5cbiAgb25Tb3J0RGlyZWN0aW9uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJGV2ZW50XG4gICAgdGhpcy5zb3J0ZWQuZW1pdCh7IHNvcnRDb2x1bW46IHRoaXMuc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSlcbiAgfVxuXG4gIG9uQ29sdW1uR3JvdXBTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEdyb3VwU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IGV2ZW50Lmdyb3VwS2V5XG4gICAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gIH1cblxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpIHtcbiAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnQoZXZlbnQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgIGlmICghdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py52aWV3SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblZpZXdFbGVtZW50KGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZWRpdEl0ZW0uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMub25FZGl0RWxlbWVudChldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZShldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdGlvbkNoYW5nZShldmVudDogQ29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IHRoaXMuY3VzdG9tR3JvdXBLZXlcbiAgICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgfVxuXG4gIG9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKGV2ZW50OiBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbiA9IGV2ZW50LmZyb3plbkFjdGlvbkNvbHVtblxuICAgIHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gPSBldmVudC5hY3Rpb25Db2x1bW5Qb3NpdGlvblxuICB9XG5cbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFJvd1tdKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2UgPSBldmVudFxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUgPSBldmVudFxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQoZXZlbnQpXG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIGdhcC0yXCI+XG4gICAgPG9jeC1kYXRhLWxheW91dC1zZWxlY3Rpb25cbiAgICAgIFtzdXBwb3J0ZWRWaWV3TGF5b3V0c109XCJzdXBwb3J0ZWRWaWV3TGF5b3V0c1wiXG4gICAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAoZGF0YVZpZXdMYXlvdXRDaGFuZ2UpPVwib25EYXRhVmlld0xheW91dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgID48L29jeC1kYXRhLWxheW91dC1zZWxlY3Rpb24+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidG9wQ2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvcENlbnRlclwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsYXlvdXQgIT09ICd0YWJsZSdcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8b2N4LWRhdGEtbGlzdC1ncmlkLXNvcnRpbmdcbiAgICAgICAgW3NvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnREaXJlY3Rpb25DaGFuZ2UpPVwib25Tb3J0RGlyZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgID48L29jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImxheW91dCA9PT0gJ3RhYmxlJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8b2N4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb25cbiAgICAgICAgW3NlbGVjdGVkR3JvdXBLZXldPVwic2VsZWN0ZWRHcm91cEtleVwiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICBbZGVmYXVsdEdyb3VwS2V5XT1cImRlZmF1bHRHcm91cEtleVwiXG4gICAgICAgIFtjdXN0b21Hcm91cEtleV09XCJjdXN0b21Hcm91cEtleVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcktleV09XCJncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleVwiXG4gICAgICAgIChncm91cFNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb24+XG5cbiAgICAgIDxvY3gtY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3RvclxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgKGNvbHVtblNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtmcm96ZW5BY3Rpb25Db2x1bW5dPVwiZnJvemVuQWN0aW9uQ29sdW1uXCJcbiAgICAgICAgW2FjdGlvbkNvbHVtblBvc2l0aW9uXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uXCJcbiAgICAgICAgKGFjdGlvbkNvbHVtbkNvbmZpZ0NoYW5nZWQpPVwib25BY3Rpb25Db2x1bW5Db25maWdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWN1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicC0zXCI+XG4gIDxvY3gtZGF0YS12aWV3XG4gICAgW2NvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICBbc29ydFN0YXRlc109XCJzb3J0U3RhdGVzXCJcbiAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW3NvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgW3RpdGxlTGluZUlkXT1cInRpdGxlTGluZUlkXCJcbiAgICBbc3VidGl0bGVMaW5lSWRzXT1cInN1YnRpdGxlTGluZUlkc1wiXG4gICAgW2NsaWVudFNpZGVTb3J0aW5nXT1cImNsaWVudFNpZGVTb3J0aW5nXCJcbiAgICBbY2xpZW50U2lkZUZpbHRlcmluZ109XCJjbGllbnRTaWRlRmlsdGVyaW5nXCJcbiAgICBbcGFnZVNpemVzXT1cInBhZ2VTaXplc1wiXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICBbZW1wdHlSZXN1bHRzTWVzc2FnZV09XCJlbXB0eVJlc3VsdHNNZXNzYWdlXCJcbiAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2RlbGV0ZVBlcm1pc3Npb25dPVwiZGVsZXRlUGVybWlzc2lvblwiXG4gICAgW2VkaXRQZXJtaXNzaW9uXT1cImVkaXRQZXJtaXNzaW9uXCJcbiAgICBbdmlld1Blcm1pc3Npb25dPVwidmlld1Blcm1pc3Npb25cIlxuICAgIFtkZWxldGVBY3Rpb25FbmFibGVkRmllbGRdPVwiZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgICBbZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkXT1cImRlbGV0ZUFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25FbmFibGVkRmllbGRdPVwiZWRpdEFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25WaXNpYmxlRmllbGRdPVwiZWRpdEFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25FbmFibGVkRmllbGRdPVwidmlld0FjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25WaXNpYmxlRmllbGRdPVwidmlld0FjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2FkZGl0aW9uYWxBY3Rpb25zXT1cImFkZGl0aW9uYWxBY3Rpb25zXCJcbiAgICBbbGlzdEdyaWRQYWdpbmF0b3JdPVwibGlzdEdyaWRQYWdpbmF0b3JcIlxuICAgIFt0YWJsZVBhZ2luYXRvcl09XCJ0YWJsZVBhZ2luYXRvclwiXG4gICAgW3BhZ2VdPVwicGFnZVwiXG4gICAgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocGFnZVNpemVDaGFuZ2VkKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW3NlbGVjdGVkUm93c109XCJzZWxlY3RlZFJvd3NcIlxuICAgIFtmcm96ZW5BY3Rpb25Db2x1bW5dPVwiZnJvemVuQWN0aW9uQ29sdW1uXCJcbiAgICBbYWN0aW9uQ29sdW1uUG9zaXRpb25dPVwiYWN0aW9uQ29sdW1uUG9zaXRpb25cIlxuICAgIFtzdHJpbmdUYWJsZUNlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVDZWxsID8gc3RyaW5nVGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyVGFibGVDZWxsVGVtcGxhdGVdPVwiX251bWJlclRhYmxlQ2VsbCA/IG51bWJlclRhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2N1c3RvbVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9jdXN0b21UYWJsZUNlbGwgPyBjdXN0b21UYWJsZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlVGFibGVDZWxsVGVtcGxhdGVdPVwiX2RhdGVUYWJsZUNlbGwgPyBkYXRlVGFibGVDZWxsIDogX3RhYmxlRGF0ZUNlbGwgPyB0YWJsZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlVGFibGVDZWxsVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA/IHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA6IF90YWJsZVJlbGF0aXZlRGF0ZUNlbGwgPyB0YWJsZVJlbGF0aXZlRGF0ZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFt0YWJsZUNlbGxUZW1wbGF0ZV09XCJfdGFibGVDZWxsID8gdGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxUZW1wbGF0ZV09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPyB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCA6IF90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA/IHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGVdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lcyA/IGdyaWRJdGVtU3VidGl0bGVMaW5lcyA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXMgPyBsaXN0SXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVRlbXBsYXRlXT1cIl9saXN0SXRlbSA/IGxpc3RJdGVtIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdFZhbHVlVGVtcGxhdGVdPVwiX2xpc3RWYWx1ZSA/IGxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlID8gdHJhbnNsYXRpb25LZXlMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtudW1iZXJMaXN0VmFsdWVUZW1wbGF0ZV09XCJfbnVtYmVyTGlzdFZhbHVlID8gbnVtYmVyTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlTGlzdFZhbHVlVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA/IHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2N1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9jdXN0b21MaXN0VmFsdWUgPyBjdXN0b21MaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtzdHJpbmdMaXN0VmFsdWVUZW1wbGF0ZV09XCJfc3RyaW5nTGlzdFZhbHVlID8gc3RyaW5nTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9kYXRlTGlzdFZhbHVlID8gZGF0ZUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtVGVtcGxhdGVdPVwiX2dyaWRJdGVtID8gZ3JpZEl0ZW0gIDogdW5kZWZpbmVkXCJcbiAgICBbdGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RhYmxlRmlsdGVyQ2VsbCA/IHRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfZGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IGRhdGVUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21UYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfY3VzdG9tVGFibGVGaWx0ZXJDZWxsID8gY3VzdG9tVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbCA/IG51bWJlclRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3N0cmluZ1RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9zdHJpbmdUYWJsZUZpbHRlckNlbGwgPyBzdHJpbmdUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsID8gcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgPyB0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgKHNvcnRlZCk9XCJzb3J0aW5nKCRldmVudClcIlxuICAgIChmaWx0ZXJlZCk9XCJmaWx0ZXJpbmcoJGV2ZW50KVwiXG4gICAgW3RvdGFsUmVjb3Jkc09uU2VydmVyXT1cInRvdGFsUmVjb3Jkc09uU2VydmVyXCJcbiAgICBbY3VycmVudFBhZ2VTaG93aW5nS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ0tleVwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFWaWV3Q29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gICAgW3BhcmVudFRlbXBsYXRlc109XCJ0ZW1wbGF0ZXMkIHwgYXN5bmNcIlxuICA+XG4gIDwvb2N4LWRhdGEtdmlldz5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNzdHJpbmdUYWJsZUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVRhYmxlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVSZWxhdGl2ZURhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlVGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90cmFuc2xhdGlvbktleVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2dyaWRJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNncmlkSXRlbSBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbnVtYmVyTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RyaW5nTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVMaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNudW1iZXJUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVGFibGVGaWx0ZXJDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG4iXX0=
634
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYWN0aXZlLWRhdGEtdmlldy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFJM0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFLdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQVMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJDLE1BQU0sa0NBQWtDLENBQUE7Ozs7Ozs7O0FBYTdHLE1BQU0sT0FBTyw0QkFBNEI7SUFOekM7UUFnQkUsd0NBQW1DLEdBQUcsSUFBSSxhQUFhLENBQXFDLENBQUMsQ0FBQyxDQUFBO1FBQzlGLDZDQUF3QyxHQUFHLElBQUksYUFBYSxDQUEwQyxDQUFDLENBQUMsQ0FBQTtRQUN4Ryw4QkFBeUIsR0FBRyxJQUFJLGFBQWEsQ0FBb0MsQ0FBQyxDQUFDLENBQUE7UUFDbkYsdUNBQWtDLEdBQUcsSUFBSSxhQUFhLENBQW9DLENB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QUFZO3VCQUFDLHFCQUFxQjtnQkFDVSwyQkFBMkI7c0JBQXZFLFlBQVk7dUJBQUMsNkJBQTZCO2dCQUNJLDZCQUE2QjtzQkFBM0UsWUFBWTt1QkFBQywrQkFBK0I7Z0JBQ04scUJBQXFCO3NCQUEzRCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFDRSxxQkFBcUI7c0JBQTNELFlBQVk7dUJBQUMsdUJBQXVCO2dCQU1FLHFCQUFxQjtzQkFBM0QsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBTWpDLFNBQVM7c0JBRFosZUFBZTt1QkFBQyxhQUFhO2dCQUtwQixRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFTSCxTQUFTO3NCQURaLEtBQUs7Z0JBZ0dGLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc3RhcnRXaXRoLCB0aW1lc3RhbXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgRGF0YUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtYWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXNvcnQtZGlyZWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAgfSBmcm9tICcuLi8uLi91dGlscy9yeGpzLXV0aWxzJ1xuaW1wb3J0IHtcbiAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSxcbiAgR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG59IGZyb20gJy4uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQge1xuICBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQsXG4gIENvbHVtblNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlLFxufSBmcm9tICcuLi9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1sYXlvdXQtc2VsZWN0aW9uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUgfSBmcm9tICcuLi9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcuY29tcG9uZW50J1xuaW1wb3J0IHsgRmlsdGVyLCBSb3csIFNvcnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YVZpZXdDb21wb25lbnQsIERhdGFWaWV3Q29tcG9uZW50U3RhdGUsIFJvd0xpc3RHcmlkRGF0YSB9IGZyb20gJy4uL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50U3RhdGUgPSBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlICZcbiAgRGF0YVZpZXdDb21wb25lbnRTdGF0ZVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWludGVyYWN0aXZlLWRhdGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50JywgdXNlRXhpc3Rpbmc6IEludGVyYWN0aXZlRGF0YVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEludGVyYWN0aXZlRGF0YVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBfZGF0YVZpZXdDb21wb25lbnQ6IERhdGFWaWV3Q29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIEBWaWV3Q2hpbGQoRGF0YVZpZXdDb21wb25lbnQpIHNldCBkYXRhVmlldyhyZWY6IERhdGFWaWV3Q29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGF0YVZpZXdDb21wb25lbnQgPSByZWZcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lckZvckRhdGFWaWV3KClcbiAgfVxuICBnZXQgZGF0YVZpZXcoKTogRGF0YVZpZXdDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhVmlld0NvbXBvbmVudFxuICB9XG5cbiAgY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlPigxKVxuICBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8Q3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlPigxKVxuICBkYXRhTGF5b3V0Q29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlPigxKVxuICBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlPigxKVxuICBkYXRhVmlld0NvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFWaWV3Q29tcG9uZW50U3RhdGU+KDEpXG5cbiAgQElucHV0KCkgZGVsZXRlUGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld1Blcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgbmFtZSA9ICdEYXRhJ1xuICBASW5wdXQoKSB0aXRsZUxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHN1YnRpdGxlTGluZUlkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSBzdXBwb3J0ZWRWaWV3TGF5b3V0czogKCdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScpW10gPSBbJ2dyaWQnLCAnbGlzdCcsICd0YWJsZSddXG4gIEBJbnB1dCgpIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdID0gW11cbiAgQElucHV0KCkgZW1wdHlSZXN1bHRzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGNsaWVudFNpZGVTb3J0aW5nID0gdHJ1ZVxuICBASW5wdXQoKSBjbGllbnRTaWRlRmlsdGVyaW5nID0gdHJ1ZVxuICBASW5wdXQoKSBmYWxsYmFja0ltYWdlID0gJ3BsYWNlaG9sZGVyLnBuZydcbiAgQElucHV0KCkgZmlsdGVyczogRmlsdGVyW10gPSBbXVxuICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBEYXRhU29ydERpcmVjdGlvbiA9IERhdGFTb3J0RGlyZWN0aW9uLk5PTkVcbiAgQElucHV0KCkgc29ydEZpZWxkOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBzb3J0U3RhdGVzOiBEYXRhU29ydERpcmVjdGlvbltdID0gW1xuICAgIERhdGFTb3J0RGlyZWN0aW9uLkFTQ0VORElORyxcbiAgICBEYXRhU29ydERpcmVjdGlvbi5ERVNDRU5ESU5HLFxuICAgIERhdGFTb3J0RGlyZWN0aW9uLk5PTkUsXG4gIF1cbiAgQElucHV0KCkgcGFnZVNpemVzOiBudW1iZXJbXSA9IFsxMCwgMjUsIDUwXVxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3Jkc09uU2VydmVyOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgbGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnID0gJ3RhYmxlJ1xuICBASW5wdXQoKSBkZWZhdWx0R3JvdXBLZXkgPSAnJ1xuICBASW5wdXQoKSBjdXN0b21Hcm91cEtleSA9ICdPQ1hfSU5URVJBQ1RJVkVfREFUQV9WSUVXLkNVU1RPTV9HUk9VUCdcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXkgPSAnT0NYX0lOVEVSQUNUSVZFX0RBVEFfVklFVy5OT19HUk9VUF9TRUxFQ1RFRCdcbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkcnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkdfV0lUSF9UT1RBTF9PTl9TRVJWRVInXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxBY3Rpb25zOiBEYXRhQWN0aW9uW10gPSBbXVxuICBASW5wdXQoKSBsaXN0R3JpZFBhZ2luYXRvciA9IHRydWVcbiAgQElucHV0KCkgdGFibGVQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHBhZ2UgPSAwXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogUm93W10gPSBbXVxuICBkaXNwbGF5ZWRDb2x1bW5LZXlzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKVxuICBkaXNwbGF5ZWRDb2x1bW5zJDogT2JzZXJ2YWJsZTxEYXRhVGFibGVDb2x1bW5bXT4gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgXG4gIGdldCBkaXNwbGF5ZWRDb2x1bW5LZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGRpc3BsYXllZENvbHVtbktleXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5uZXh0KHZhbHVlKVxuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGRpc3BsYXllZENvbHVtbktleXNgIGFuZCBwYXNzIGluIGNvbHVtbiBpZHMgaW5zdGVhZCBvZiBgRGF0YVRhYmxlQ29sdW1uYCBvYmplY3RzXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzcGxheWVkQ29sdW1ucygpOiBEYXRhVGFibGVDb2x1bW5bXSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzXG4gICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGQpKVxuICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQpIGFzIERhdGFUYWJsZUNvbHVtbltdKSA/PyBbXVxuICAgICAgKTtcbiAgfVxuICBzZXQgZGlzcGxheWVkQ29sdW1ucyh2YWx1ZTogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLm5leHQodmFsdWUubWFwKChkKSA9PiBkLmlkKSlcbiAgfVxuICBASW5wdXQoKSBmcm96ZW5BY3Rpb25Db2x1bW4gPSBmYWxzZVxuICBASW5wdXQoKSBhY3Rpb25Db2x1bW5Qb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCdcbiAgQENvbnRlbnRDaGlsZCgndGFibGVDZWxsJykgdGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IGRhdGVUYWJsZUNlbGxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlRGF0ZUNlbGwnKSB0YWJsZURhdGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVUYWJsZUNlbGwnKSBkYXRlVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgcmVsYXRpdmVEYXRlVGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZVJlbGF0aXZlRGF0ZUNlbGwnKSB0YWJsZVJlbGF0aXZlRGF0ZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgncmVsYXRpdmVEYXRlVGFibGVDZWxsJykgcmVsYXRpdmVEYXRlVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsJykgdGFibGVUcmFuc2xhdGlvbktleUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnKSB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lczogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXM6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnc3RyaW5nVGFibGVDZWxsJykgc3RyaW5nVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlclRhYmxlQ2VsbCcpIG51bWJlclRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkVGFibGVDZWxsXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIGluIERhdGFUYWJsZSB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRUYWJsZUNlbGxcIlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tVGFibGVDZWxsJykgY3VzdG9tVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtJykgZ3JpZEl0ZW06IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdEl0ZW0nKSBsaXN0SXRlbTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0b3BDZW50ZXInKSB0b3BDZW50ZXI6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdFZhbHVlJykgbGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlJykgdHJhbnNsYXRpb25LZXlMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyTGlzdFZhbHVlJykgbnVtYmVyTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZScpIHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkTGlzdFZhbHVlXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIERhdGFMaXN0R3JpZCB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRMaXN0VmFsdWVcIlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tTGlzdFZhbHVlJykgY3VzdG9tTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ0xpc3RWYWx1ZScpIHN0cmluZ0xpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlTGlzdFZhbHVlJykgZGF0ZUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZUZpbHRlckNlbGwnKSB0YWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZGF0ZVRhYmxlRmlsdGVyQ2VsbCcpIGRhdGVUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgncmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsJykgcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJykgdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnc3RyaW5nVGFibGVGaWx0ZXJDZWxsJykgc3RyaW5nVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlclRhYmxlRmlsdGVyQ2VsbCcpIG51bWJlclRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW4gZmlsdGVyXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlRmlsdGVyQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVGaWx0ZXJDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCcpIGN1c3RvbVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIHRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IHRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMkLm5leHQodmFsdWUpXG4gIH1cblxuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlcltdPigpXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KClcbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgdmlld0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZWRpdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZGF0YVZpZXdMYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZSc+KClcbiAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICBAT3V0cHV0KCkgZGlzcGxheWVkQ29sdW1uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQ29sdW1uW10+KClcbiAgQE91dHB1dCgpIGRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Um93W10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KClcblxuICBAT3V0cHV0KCkgY29tcG9uZW50U3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50U3RhdGU+KClcblxuICBzZWxlY3RlZEdyb3VwS2V5ID0gJydcbiAgaXNEZWxldGVJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaXNWaWV3SXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzRWRpdEl0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBmaXJzdENvbHVtbklkOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBASW5wdXQoKVxuICBnZXQgcGFnaW5hdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3RHcmlkUGFnaW5hdG9yICYmIHRoaXMudGFibGVQYWdpbmF0b3JcbiAgfVxuICBzZXQgcGFnaW5hdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5saXN0R3JpZFBhZ2luYXRvciA9IHZhbHVlXG4gICAgdGhpcy50YWJsZVBhZ2luYXRvciA9IHZhbHVlXG4gIH1cblxuICBnZXQgX2dyaWRJdGVtU3VidGl0bGVMaW5lcygpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNcbiAgfVxuICBnZXQgX2xpc3RJdGVtU3VidGl0bGVMaW5lcygpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbVN1YnRpdGxlTGluZXNcbiAgfVxuICBnZXQgX3RhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUNlbGxcbiAgfVxuICBnZXQgX3N0cmluZ1RhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUYWJsZUNlbGxcbiAgfVxuICBnZXQgX251bWJlclRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUNlbGxcbiAgfVxuICBnZXQgX2N1c3RvbVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlRGF0ZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlQ2VsbCA/PyB0aGlzLnRhYmxlRGF0ZUNlbGxcbiAgfVxuICBnZXQgX2RhdGVUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfdGFibGVSZWxhdGl2ZURhdGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA/PyB0aGlzLnRhYmxlUmVsYXRpdmVEYXRlQ2VsbFxuICB9XG4gIGdldCBfcmVsYXRpdmVEYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfdGFibGVUcmFuc2xhdGlvbktleUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPz8gdGhpcy50YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGxcbiAgfVxuICBnZXQgX2dyaWRJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdyaWRJdGVtXG4gIH1cbiAgZ2V0IF9saXN0SXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbVxuICB9XG4gIGdldCBfbGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RWYWx1ZVxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcbiAgfVxuICBnZXQgX251bWJlckxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJMaXN0VmFsdWVcbiAgfVxuICBnZXQgX3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWVcbiAgfVxuICBnZXQgX2N1c3RvbUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21MaXN0VmFsdWVcbiAgfVxuICBnZXQgX3N0cmluZ0xpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdMaXN0VmFsdWVcbiAgfVxuICBnZXQgX2RhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUxpc3RWYWx1ZVxuICB9XG4gIGdldCBfdGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfZGF0ZVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF90cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfc3RyaW5nVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfbnVtYmVyVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm51bWJlclRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfY3VzdG9tVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVRhYmxlRmlsdGVyQ2VsbFxuICB9XG5cbiAgX2RhdGE6IFJvd0xpc3RHcmlkRGF0YVtdID0gW11cbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKTogUm93TGlzdEdyaWREYXRhW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhXG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkgPSB0aGlzLmRlZmF1bHRHcm91cEtleVxuICAgIGlmKCF0aGlzLmRpc3BsYXllZENvbHVtbnMgfHwgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpXG4gICAgfVxuICAgIGlmICh0aGlzLmRlZmF1bHRHcm91cEtleSkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PlxuICAgICAgICBjb2x1bW4ucHJlZGVmaW5lZEdyb3VwS2V5cz8uaW5jbHVkZXModGhpcy5kZWZhdWx0R3JvdXBLZXkpXG4gICAgICApLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpXG4gICAgfVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLnBpcGUobWFwKChjb2x1bW5LZXlzKSA9PiAoXG4gICAgICAoY29sdW1uS2V5c1xuICAgICAgICAubWFwKChrZXkpID0+IHRoaXMuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0ga2V5KSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZCkgYXMgRGF0YVRhYmxlQ29sdW1uW10pID8/IFtdXG4gICAgKSkpXG4gICAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gICAgaWYgKCF0aGlzLmdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5KSB7XG4gICAgICB0aGlzLmdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5ID0gJ09DWF9JTlRFUkFDVElWRV9EQVRBX1ZJRVcuTk9fR1JPVVBfU0VMRUNURUQnXG4gICAgfVxuICAgIHRoaXMuZmlyc3RDb2x1bW5JZCA9IHRoaXMuY29sdW1uc1swXT8uaWRcblxuICAgIGxldCBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkOiBPYnNlcnZhYmxlPERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPj4gPVxuICAgICAgdGhpcy5kYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkXG4gICAgICBsZXQgY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPj4gPVxuICAgICAgdGhpcy5jb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJFxuICAgICAgbGV0IGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8Q3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+PiA9XG4gICAgICB0aGlzLmN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSRcblxuICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3RhYmxlJykge1xuICAgICAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQucGlwZShzdGFydFdpdGgoe30pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJCA9IGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLnBpcGUoc3RhcnRXaXRoKHt9KSlcbiAgICAgIGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQgPSBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkLnBpcGUoc3RhcnRXaXRoKHt9KSlcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIHRoaXMuZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmRhdGFWaWV3Q29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChjb21wb25lbnRTdGF0ZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JkZXJBbmRNZXJnZVZhbHVlc0J5VGltZXN0YW1wKGNvbXBvbmVudFN0YXRlcylcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFN0YXRlQ2hhbmdlZC5lbWl0KHZhbClcbiAgICAgIH0pXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMkLnZhbHVlPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZVJlbGF0aXZlRGF0ZUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVSZWxhdGl2ZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVUcmFuc2xhdGlvbktleUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtU3VidGl0bGVMaW5lcyA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0SXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2dyaWRJdGVtJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RJdGVtJzpcbiAgICAgICAgICB0aGlzLmxpc3RJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RvcENlbnRlcic6XG4gICAgICAgICAgdGhpcy50b3BDZW50ZXIgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubnVtYmVyTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnY3VzdG9tTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmN1c3RvbUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzdHJpbmdMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuc3RyaW5nTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuZGF0ZUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZpbHRlcmluZyhldmVudDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZXZlbnRcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpXG4gIH1cblxuICBzb3J0aW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBldmVudC5zb3J0RGlyZWN0aW9uXG4gICAgdGhpcy5zb3J0RmllbGQgPSBldmVudC5zb3J0Q29sdW1uXG4gICAgdGhpcy5zb3J0ZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uRGVsZXRlRWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvblZpZXdFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25FZGl0RWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuZWRpdEl0ZW0uZW1pdChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UobGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKSB7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXRcbiAgICB0aGlzLmRhdGFWaWV3TGF5b3V0Q2hhbmdlLmVtaXQobGF5b3V0KVxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RmllbGQgPSAkZXZlbnRcbiAgICB0aGlzLnNvcnRlZC5lbWl0KHsgc29ydENvbHVtbjogdGhpcy5zb3J0RmllbGQsIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvbiB9KVxuICB9XG5cbiAgb25Tb3J0RGlyZWN0aW9uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJGV2ZW50XG4gICAgdGhpcy5zb3J0ZWQuZW1pdCh7IHNvcnRDb2x1bW46IHRoaXMuc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSlcbiAgfVxuXG4gIG9uQ29sdW1uR3JvdXBTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEdyb3VwU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IGV2ZW50Lmdyb3VwS2V5XG4gICAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gIH1cblxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpIHtcbiAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnQoZXZlbnQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgIGlmICghdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py52aWV3SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblZpZXdFbGVtZW50KGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZWRpdEl0ZW0uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMub25FZGl0RWxlbWVudChldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZShldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdGlvbkNoYW5nZShldmVudDogQ29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IHRoaXMuY3VzdG9tR3JvdXBLZXlcbiAgICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgfVxuXG4gIG9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKGV2ZW50OiBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbiA9IGV2ZW50LmZyb3plbkFjdGlvbkNvbHVtblxuICAgIHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gPSBldmVudC5hY3Rpb25Db2x1bW5Qb3NpdGlvblxuICB9XG5cbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFJvd1tdKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2UgPSBldmVudFxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUgPSBldmVudFxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQoZXZlbnQpXG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIGdhcC0yXCI+XG4gICAgPG9jeC1kYXRhLWxheW91dC1zZWxlY3Rpb25cbiAgICAgIFtzdXBwb3J0ZWRWaWV3TGF5b3V0c109XCJzdXBwb3J0ZWRWaWV3TGF5b3V0c1wiXG4gICAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAoZGF0YVZpZXdMYXlvdXRDaGFuZ2UpPVwib25EYXRhVmlld0xheW91dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgID48L29jeC1kYXRhLWxheW91dC1zZWxlY3Rpb24+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidG9wQ2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvcENlbnRlclwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsYXlvdXQgIT09ICd0YWJsZSdcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8b2N4LWRhdGEtbGlzdC1ncmlkLXNvcnRpbmdcbiAgICAgICAgW3NvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnREaXJlY3Rpb25DaGFuZ2UpPVwib25Tb3J0RGlyZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgID48L29jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImxheW91dCA9PT0gJ3RhYmxlJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8b2N4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb25cbiAgICAgICAgW3NlbGVjdGVkR3JvdXBLZXldPVwic2VsZWN0ZWRHcm91cEtleVwiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICBbZGVmYXVsdEdyb3VwS2V5XT1cImRlZmF1bHRHcm91cEtleVwiXG4gICAgICAgIFtjdXN0b21Hcm91cEtleV09XCJjdXN0b21Hcm91cEtleVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcktleV09XCJncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleVwiXG4gICAgICAgIChncm91cFNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb24+XG5cbiAgICAgIDxvY3gtY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3RvclxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgKGNvbHVtblNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtmcm96ZW5BY3Rpb25Db2x1bW5dPVwiZnJvemVuQWN0aW9uQ29sdW1uXCJcbiAgICAgICAgW2FjdGlvbkNvbHVtblBvc2l0aW9uXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uXCJcbiAgICAgICAgKGFjdGlvbkNvbHVtbkNvbmZpZ0NoYW5nZWQpPVwib25BY3Rpb25Db2x1bW5Db25maWdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWN1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicC0zXCI+XG4gIDxvY3gtZGF0YS12aWV3XG4gICAgW2NvbHVtbnNdPVwiKGRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICBbc29ydFN0YXRlc109XCJzb3J0U3RhdGVzXCJcbiAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW3NvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgW3RpdGxlTGluZUlkXT1cInRpdGxlTGluZUlkXCJcbiAgICBbc3VidGl0bGVMaW5lSWRzXT1cInN1YnRpdGxlTGluZUlkc1wiXG4gICAgW2NsaWVudFNpZGVTb3J0aW5nXT1cImNsaWVudFNpZGVTb3J0aW5nXCJcbiAgICBbY2xpZW50U2lkZUZpbHRlcmluZ109XCJjbGllbnRTaWRlRmlsdGVyaW5nXCJcbiAgICBbcGFnZVNpemVzXT1cInBhZ2VTaXplc1wiXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICBbZW1wdHlSZXN1bHRzTWVzc2FnZV09XCJlbXB0eVJlc3VsdHNNZXNzYWdlXCJcbiAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2RlbGV0ZVBlcm1pc3Npb25dPVwiZGVsZXRlUGVybWlzc2lvblwiXG4gICAgW2VkaXRQZXJtaXNzaW9uXT1cImVkaXRQZXJtaXNzaW9uXCJcbiAgICBbdmlld1Blcm1pc3Npb25dPVwidmlld1Blcm1pc3Npb25cIlxuICAgIFtkZWxldGVBY3Rpb25FbmFibGVkRmllbGRdPVwiZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgICBbZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkXT1cImRlbGV0ZUFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25FbmFibGVkRmllbGRdPVwiZWRpdEFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25WaXNpYmxlRmllbGRdPVwiZWRpdEFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25FbmFibGVkRmllbGRdPVwidmlld0FjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25WaXNpYmxlRmllbGRdPVwidmlld0FjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2FkZGl0aW9uYWxBY3Rpb25zXT1cImFkZGl0aW9uYWxBY3Rpb25zXCJcbiAgICBbbGlzdEdyaWRQYWdpbmF0b3JdPVwibGlzdEdyaWRQYWdpbmF0b3JcIlxuICAgIFt0YWJsZVBhZ2luYXRvcl09XCJ0YWJsZVBhZ2luYXRvclwiXG4gICAgW3BhZ2VdPVwicGFnZVwiXG4gICAgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocGFnZVNpemVDaGFuZ2VkKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW3NlbGVjdGVkUm93c109XCJzZWxlY3RlZFJvd3NcIlxuICAgIFtmcm96ZW5BY3Rpb25Db2x1bW5dPVwiZnJvemVuQWN0aW9uQ29sdW1uXCJcbiAgICBbYWN0aW9uQ29sdW1uUG9zaXRpb25dPVwiYWN0aW9uQ29sdW1uUG9zaXRpb25cIlxuICAgIFtzdHJpbmdUYWJsZUNlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVDZWxsID8gc3RyaW5nVGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyVGFibGVDZWxsVGVtcGxhdGVdPVwiX251bWJlclRhYmxlQ2VsbCA/IG51bWJlclRhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2N1c3RvbVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9jdXN0b21UYWJsZUNlbGwgPyBjdXN0b21UYWJsZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlVGFibGVDZWxsVGVtcGxhdGVdPVwiX2RhdGVUYWJsZUNlbGwgPyBkYXRlVGFibGVDZWxsIDogX3RhYmxlRGF0ZUNlbGwgPyB0YWJsZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlVGFibGVDZWxsVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA/IHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA6IF90YWJsZVJlbGF0aXZlRGF0ZUNlbGwgPyB0YWJsZVJlbGF0aXZlRGF0ZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFt0YWJsZUNlbGxUZW1wbGF0ZV09XCJfdGFibGVDZWxsID8gdGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxUZW1wbGF0ZV09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPyB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCA6IF90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA/IHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGVdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lcyA/IGdyaWRJdGVtU3VidGl0bGVMaW5lcyA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXMgPyBsaXN0SXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVRlbXBsYXRlXT1cIl9saXN0SXRlbSA/IGxpc3RJdGVtIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdFZhbHVlVGVtcGxhdGVdPVwiX2xpc3RWYWx1ZSA/IGxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlID8gdHJhbnNsYXRpb25LZXlMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtudW1iZXJMaXN0VmFsdWVUZW1wbGF0ZV09XCJfbnVtYmVyTGlzdFZhbHVlID8gbnVtYmVyTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlTGlzdFZhbHVlVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA/IHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2N1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9jdXN0b21MaXN0VmFsdWUgPyBjdXN0b21MaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtzdHJpbmdMaXN0VmFsdWVUZW1wbGF0ZV09XCJfc3RyaW5nTGlzdFZhbHVlID8gc3RyaW5nTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9kYXRlTGlzdFZhbHVlID8gZGF0ZUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtVGVtcGxhdGVdPVwiX2dyaWRJdGVtID8gZ3JpZEl0ZW0gIDogdW5kZWZpbmVkXCJcbiAgICBbdGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RhYmxlRmlsdGVyQ2VsbCA/IHRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfZGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IGRhdGVUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21UYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfY3VzdG9tVGFibGVGaWx0ZXJDZWxsID8gY3VzdG9tVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbCA/IG51bWJlclRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3N0cmluZ1RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9zdHJpbmdUYWJsZUZpbHRlckNlbGwgPyBzdHJpbmdUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsID8gcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgPyB0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgKHNvcnRlZCk9XCJzb3J0aW5nKCRldmVudClcIlxuICAgIChmaWx0ZXJlZCk9XCJmaWx0ZXJpbmcoJGV2ZW50KVwiXG4gICAgW3RvdGFsUmVjb3Jkc09uU2VydmVyXT1cInRvdGFsUmVjb3Jkc09uU2VydmVyXCJcbiAgICBbY3VycmVudFBhZ2VTaG93aW5nS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ0tleVwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XT1cImN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5XCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFWaWV3Q29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gICAgW3BhcmVudFRlbXBsYXRlc109XCJ0ZW1wbGF0ZXMkIHwgYXN5bmNcIlxuICA+XG4gIDwvb2N4LWRhdGEtdmlldz5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNzdHJpbmdUYWJsZUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVRhYmxlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVSZWxhdGl2ZURhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlVGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90cmFuc2xhdGlvbktleVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2dyaWRJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNncmlkSXRlbSBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbnVtYmVyTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RyaW5nTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVMaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNudW1iZXJUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVGFibGVGaWx0ZXJDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG4iXX0=