@onecx/angular-accelerator 5.38.0 → 6.0.0-rc.10

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 (128) hide show
  1. package/assets/i18n/de.json +3 -3
  2. package/assets/i18n/en.json +3 -3
  3. package/assets/i18n/primeng/de.json +1 -1
  4. package/assets/i18n/primeng/en.json +1 -1
  5. package/assets/styles.scss +0 -4
  6. package/fesm2022/onecx-angular-accelerator-testing.mjs +90 -28
  7. package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -1
  8. package/fesm2022/onecx-angular-accelerator.mjs +777 -398
  9. package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
  10. package/index.d.ts +8 -0
  11. package/lib/angular-accelerator-primeng.module.d.ts +6 -4
  12. package/lib/angular-accelerator.module.d.ts +26 -20
  13. package/lib/components/content/content.component.d.ts +13 -0
  14. package/lib/components/content-container/content-container.component.d.ts +19 -0
  15. package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +0 -2
  16. package/lib/components/data-list-grid/data-list-grid.component.d.ts +9 -19
  17. package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +2 -2
  18. package/lib/components/data-table/data-table.component.d.ts +8 -18
  19. package/lib/components/data-view/data-view.component.d.ts +10 -8
  20. package/lib/components/diagram/diagram.component.d.ts +0 -2
  21. package/lib/components/filter-view/filter-view.component.d.ts +2 -2
  22. package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +0 -2
  23. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +10 -6
  24. package/lib/components/lifecycle/lifecycle.component.d.ts +12 -0
  25. package/lib/components/page-header/page-header.component.d.ts +1 -4
  26. package/lib/components/search-header/search-header.component.d.ts +3 -4
  27. package/lib/directives/advanced.directive.d.ts +5 -6
  28. package/lib/directives/content-container.directive.d.ts +23 -0
  29. package/lib/directives/content.directive.d.ts +21 -0
  30. package/lib/directives/if-breakpoint.directive.d.ts +3 -4
  31. package/lib/directives/if-permission.directive.d.ts +6 -8
  32. package/lib/directives/src.directive.d.ts +2 -3
  33. package/lib/directives/template.directive.d.ts +9 -0
  34. package/lib/directives/tooltipOnOverflow.directive.d.ts +2 -3
  35. package/lib/model/filter.model.d.ts +16 -4
  36. package/lib/pipes/dynamic.pipe.d.ts +2 -2
  37. package/lib/pipes/ocxtimeago.pipe.d.ts +3 -3
  38. package/lib/services/breadcrumb.service.d.ts +2 -4
  39. package/lib/services/translation-connection.service.d.ts +10 -0
  40. package/lib/utils/criteria.utils.d.ts +3 -3
  41. package/lib/utils/data-operation-strategy.d.ts +20 -0
  42. package/lib/utils/dateutils.d.ts +0 -1
  43. package/lib/utils/provide-connection-service.d.ts +6 -0
  44. package/migrations.json +26 -0
  45. package/package.json +21 -20
  46. package/testing/column-group-selection.harness.d.ts +2 -2
  47. package/testing/content-container.harness.d.ts +7 -0
  48. package/testing/content.harness.d.ts +10 -0
  49. package/testing/data-layout-selection.harness.d.ts +7 -6
  50. package/testing/index.d.ts +3 -0
  51. package/testing/interactive-data-view.harness.d.ts +5 -3
  52. package/testing/lifecycle.harness.d.ts +6 -0
  53. package/esm2022/index.mjs +0 -63
  54. package/esm2022/lib/angular-accelerator-primeng.module.mjs +0 -146
  55. package/esm2022/lib/angular-accelerator.module.mjs +0 -209
  56. package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +0 -90
  57. package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +0 -184
  58. package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +0 -73
  59. package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +0 -615
  60. package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +0 -107
  61. package/esm2022/lib/components/data-loading-error/data-loading-error.component.mjs +0 -28
  62. package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +0 -134
  63. package/esm2022/lib/components/data-table/data-table.component.mjs +0 -840
  64. package/esm2022/lib/components/data-view/data-view.component.mjs +0 -672
  65. package/esm2022/lib/components/diagram/diagram.component.mjs +0 -183
  66. package/esm2022/lib/components/filter-view/filter-view.component.mjs +0 -263
  67. package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +0 -133
  68. package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +0 -724
  69. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -238
  70. package/esm2022/lib/components/search-header/search-header.component.mjs +0 -199
  71. package/esm2022/lib/directives/advanced.directive.mjs +0 -36
  72. package/esm2022/lib/directives/if-breakpoint.directive.mjs +0 -47
  73. package/esm2022/lib/directives/if-permission.directive.mjs +0 -95
  74. package/esm2022/lib/directives/src.directive.mjs +0 -65
  75. package/esm2022/lib/directives/tooltipOnOverflow.directive.mjs +0 -48
  76. package/esm2022/lib/functions/at-least-one-field-filled-validator.mjs +0 -7
  77. package/esm2022/lib/functions/flatten-object.mjs +0 -20
  78. package/esm2022/lib/injection-tokens/has-permission-checker.mjs +0 -10
  79. package/esm2022/lib/model/breadcrumb-menu-item.model.mjs +0 -2
  80. package/esm2022/lib/model/column-type.model.mjs +0 -16
  81. package/esm2022/lib/model/data-action.mjs +0 -2
  82. package/esm2022/lib/model/data-column-name-id.model.mjs +0 -2
  83. package/esm2022/lib/model/data-sort-direction.mjs +0 -2
  84. package/esm2022/lib/model/data-table-column.model.mjs +0 -2
  85. package/esm2022/lib/model/diagram-column.mjs +0 -2
  86. package/esm2022/lib/model/diagram-data.mjs +0 -2
  87. package/esm2022/lib/model/diagram-type.mjs +0 -2
  88. package/esm2022/lib/model/filter.model.mjs +0 -6
  89. package/esm2022/lib/pipes/dynamic.pipe.mjs +0 -58
  90. package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +0 -107
  91. package/esm2022/lib/services/breadcrumb.service.mjs +0 -128
  92. package/esm2022/lib/services/translation-cache.service.mjs +0 -44
  93. package/esm2022/lib/utils/async-translate-loader.utils.mjs +0 -15
  94. package/esm2022/lib/utils/caching-translate-loader.utils.mjs +0 -18
  95. package/esm2022/lib/utils/colorutils.mjs +0 -19
  96. package/esm2022/lib/utils/create-remote-component-and-mfe-translate-loader.utils.mjs +0 -12
  97. package/esm2022/lib/utils/create-remote-component-translate-loader.utils.mjs +0 -25
  98. package/esm2022/lib/utils/create-translate-loader.utils.mjs +0 -30
  99. package/esm2022/lib/utils/criteria.utils.mjs +0 -28
  100. package/esm2022/lib/utils/dateutils.mjs +0 -38
  101. package/esm2022/lib/utils/dynamic-locale-id.mjs +0 -21
  102. package/esm2022/lib/utils/enum-to-dropdown-options.utils.mjs +0 -8
  103. package/esm2022/lib/utils/filter.utils.mjs +0 -6
  104. package/esm2022/lib/utils/objectutils.mjs +0 -30
  105. package/esm2022/lib/utils/primeicon.utils.mjs +0 -2
  106. package/esm2022/lib/utils/rxjs-utils.mjs +0 -13
  107. package/esm2022/lib/utils/string-and-array-helper-functions.utils.mjs +0 -22
  108. package/esm2022/lib/utils/template.utils.mjs +0 -11
  109. package/esm2022/lib/utils/translate.combined.loader.mjs +0 -42
  110. package/esm2022/onecx-angular-accelerator.mjs +0 -5
  111. package/esm2022/testing/column-group-selection.harness.mjs +0 -10
  112. package/esm2022/testing/custom-group-column-selector.harness.mjs +0 -31
  113. package/esm2022/testing/data-layout-selection.harness.mjs +0 -32
  114. package/esm2022/testing/data-list-grid.harness.mjs +0 -51
  115. package/esm2022/testing/data-table.harness.mjs +0 -69
  116. package/esm2022/testing/data-view.harness.mjs +0 -12
  117. package/esm2022/testing/default-grid-item.harness.mjs +0 -24
  118. package/esm2022/testing/default-list-item.harness.mjs +0 -26
  119. package/esm2022/testing/diagram.harness.mjs +0 -22
  120. package/esm2022/testing/filter-view.harness.mjs +0 -18
  121. package/esm2022/testing/group-by-count-diagram.harness.mjs +0 -10
  122. package/esm2022/testing/index.mjs +0 -23
  123. package/esm2022/testing/interactive-data-view.harness.mjs +0 -21
  124. package/esm2022/testing/more-actions-menu-button.harness.mjs +0 -35
  125. package/esm2022/testing/onecx-angular-accelerator-testing.mjs +0 -5
  126. package/esm2022/testing/page-header.harness.mjs +0 -81
  127. package/esm2022/testing/search-header.harness.mjs +0 -36
  128. package/esm2022/testing/slot.harness.mjs +0 -5
@@ -1,724 +0,0 @@
1
- import { Component, ContentChild, ContentChildren, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
- import { BehaviorSubject, ReplaySubject, combineLatest, distinctUntilChanged, map, startWith, timestamp, withLatestFrom, } from 'rxjs';
3
- import { orderAndMergeValuesByTimestamp } from '../../utils/rxjs-utils';
4
- import { PrimeTemplate } from 'primeng/api';
5
- import { SlotService } from '@onecx/angular-remote-components';
6
- import { DataViewComponent } from '../data-view/data-view.component';
7
- import { limit } from '../../utils/filter.utils';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@onecx/angular-remote-components";
10
- import * as i2 from "@angular/common";
11
- import * as i3 from "primeng/skeleton";
12
- import * as i4 from "../column-group-selection/column-group-selection.component";
13
- import * as i5 from "../custom-group-column-selector/custom-group-column-selector.component";
14
- import * as i6 from "../data-layout-selection/data-layout-selection.component";
15
- import * as i7 from "../data-list-grid-sorting/data-list-grid-sorting.component";
16
- import * as i8 from "../data-view/data-view.component";
17
- import * as i9 from "../../directives/if-permission.directive";
18
- import * as i10 from "../filter-view/filter-view.component";
19
- export class InteractiveDataViewComponent {
20
- set dataView(ref) {
21
- this._dataViewComponent = ref;
22
- this.registerEventListenerForDataView();
23
- }
24
- get dataView() {
25
- return this._dataViewComponent;
26
- }
27
- get displayedColumnKeys() {
28
- return this.displayedColumnKeys$.getValue();
29
- }
30
- set displayedColumnKeys(value) {
31
- this.displayedColumnKeys$.next(value);
32
- }
33
- /**
34
- * @deprecated Use `displayedColumnKeys` and pass in column ids instead of `DataTableColumn` objects
35
- */
36
- get displayedColumns() {
37
- return (this.displayedColumnKeys
38
- .map((d) => this.columns.find((c) => c.id === d))
39
- .filter((d) => d) ?? []);
40
- }
41
- set displayedColumns(value) {
42
- this.displayedColumnKeys$.next(value.map((d) => d.id));
43
- }
44
- set templates(value) {
45
- this.templates$.next(value);
46
- }
47
- get selectedGroupKey() {
48
- return this.selectedGroupKey$.getValue();
49
- }
50
- set selectedGroupKey(value) {
51
- this.selectedGroupKey$.next(value);
52
- }
53
- get paginator() {
54
- return this.listGridPaginator && this.tablePaginator;
55
- }
56
- set paginator(value) {
57
- this.listGridPaginator = value;
58
- this.tablePaginator = value;
59
- }
60
- get _gridItemSubtitleLines() {
61
- return this.gridItemSubtitleLines;
62
- }
63
- get _listItemSubtitleLines() {
64
- return this.listItemSubtitleLines;
65
- }
66
- get _tableCell() {
67
- return this.tableCell;
68
- }
69
- get _stringTableCell() {
70
- return this.stringTableCell;
71
- }
72
- get _numberTableCell() {
73
- return this.numberTableCell;
74
- }
75
- get _customTableCell() {
76
- return this.customTableCell;
77
- }
78
- get _tableDateCell() {
79
- return this.dateTableCell ?? this.tableDateCell;
80
- }
81
- get _dateTableCell() {
82
- return this.dateTableCell;
83
- }
84
- get _tableRelativeDateCell() {
85
- return this.relativeDateTableCell ?? this.tableRelativeDateCell;
86
- }
87
- get _relativeDateTableCell() {
88
- return this.relativeDateTableCell;
89
- }
90
- get _tableTranslationKeyCell() {
91
- return this.translationKeyTableCell ?? this.tableTranslationKeyCell;
92
- }
93
- get _translationKeyTableCell() {
94
- return this.translationKeyTableCell;
95
- }
96
- get _gridItem() {
97
- return this.gridItem;
98
- }
99
- get _listItem() {
100
- return this.listItem;
101
- }
102
- get _listValue() {
103
- return this.listValue;
104
- }
105
- get _translationKeyListValue() {
106
- return this.translationKeyListValue;
107
- }
108
- get _numberListValue() {
109
- return this.numberListValue;
110
- }
111
- get _relativeDateListValue() {
112
- return this.relativeDateListValue;
113
- }
114
- get _customListValue() {
115
- return this.customListValue;
116
- }
117
- get _stringListValue() {
118
- return this.stringListValue;
119
- }
120
- get _dateListValue() {
121
- return this.dateListValue;
122
- }
123
- get _tableFilterCell() {
124
- return this.tableFilterCell;
125
- }
126
- get _dateTableFilterCell() {
127
- return this.dateTableFilterCell;
128
- }
129
- get _relativeDateTableFilterCell() {
130
- return this.relativeDateTableFilterCell;
131
- }
132
- get _translationKeyTableFilterCell() {
133
- return this.translationKeyTableFilterCell;
134
- }
135
- get _stringTableFilterCell() {
136
- return this.stringTableFilterCell;
137
- }
138
- get _numberTableFilterCell() {
139
- return this.numberTableFilterCell;
140
- }
141
- get _customTableFilterCell() {
142
- return this.customTableFilterCell;
143
- }
144
- get data() {
145
- return this._data;
146
- }
147
- set data(value) {
148
- this._data = value;
149
- }
150
- constructor(slotService) {
151
- this.slotService = slotService;
152
- this.columnGroupSelectionComponentState$ = new ReplaySubject(1);
153
- this.customGroupColumnSelectorComponentState$ = new ReplaySubject(1);
154
- this.dataLayoutComponentState$ = new ReplaySubject(1);
155
- this.dataListGridSortingComponentState$ = new ReplaySubject(1);
156
- this.dataViewComponentState$ = new ReplaySubject(1);
157
- this.filterViewComponentState$ = new ReplaySubject(1);
158
- this.tableAllowSelectAll = true;
159
- this.name = 'Data';
160
- this.subtitleLineIds = [];
161
- this.supportedViewLayouts = ['grid', 'list', 'table'];
162
- this.columns = [];
163
- this.clientSideSorting = true;
164
- this.clientSideFiltering = true;
165
- this.fallbackImage = 'placeholder.png';
166
- this.filters = [];
167
- this.sortDirection = "NONE" /* DataSortDirection.NONE */;
168
- this.sortField = '';
169
- this.sortStates = [
170
- "ASCENDING" /* DataSortDirection.ASCENDING */,
171
- "DESCENDING" /* DataSortDirection.DESCENDING */,
172
- "NONE" /* DataSortDirection.NONE */,
173
- ];
174
- this.pageSizes = [10, 25, 50];
175
- this.showAllOption = false;
176
- this.layout = 'table';
177
- this.defaultGroupKey = '';
178
- this.customGroupKey = 'OCX_INTERACTIVE_DATA_VIEW.CUSTOM_GROUP';
179
- this.groupSelectionNoGroupSelectedKey = 'OCX_INTERACTIVE_DATA_VIEW.NO_GROUP_SELECTED';
180
- this.currentPageShowingKey = 'OCX_DATA_TABLE.SHOWING';
181
- this.currentPageShowingWithTotalOnServerKey = 'OCX_DATA_TABLE.SHOWING_WITH_TOTAL_ON_SERVER';
182
- this.additionalActions = [];
183
- this.listGridPaginator = true;
184
- this.tablePaginator = true;
185
- this.disableFilterView = true;
186
- this.filterViewDisplayMode = 'button';
187
- this.filterViewChipStyleClass = '';
188
- this.filterViewTableStyle = { 'max-height': '50vh' };
189
- this.filterViewPanelStyle = { 'max-width': '90%' };
190
- this.selectDisplayedChips = (filters) => limit(filters, 3, { reverse: true });
191
- this.page = 0;
192
- this.selectedRows = [];
193
- this.displayedColumnKeys$ = new BehaviorSubject([]);
194
- this.frozenActionColumn = false;
195
- this.actionColumnPosition = 'right';
196
- this.templates$ = new BehaviorSubject(undefined);
197
- this.filtered = new EventEmitter();
198
- this.sorted = new EventEmitter();
199
- this.deleteItem = new EventEmitter();
200
- this.viewItem = new EventEmitter();
201
- this.editItem = new EventEmitter();
202
- this.dataViewLayoutChange = new EventEmitter();
203
- // TODO: Remove following line once displayedColumns (deprecated) has been removed
204
- this.displayedColumnsChange = new EventEmitter();
205
- this.displayedColumnKeysChange = new EventEmitter();
206
- this.selectionChanged = new EventEmitter();
207
- this.pageChanged = new EventEmitter();
208
- this.pageSizeChanged = new EventEmitter();
209
- this.componentStateChanged = new EventEmitter();
210
- this.selectedGroupKey$ = new BehaviorSubject('');
211
- this._data = [];
212
- this.columnGroupSlotName = 'onecx-column-group-selection';
213
- this.groupSelectionChangedSlotEmitter = new EventEmitter();
214
- this.isColumnGroupSelectionComponentDefined$ = this.slotService
215
- .isSomeComponentDefinedForSlot(this.columnGroupSlotName)
216
- .pipe(startWith(true));
217
- this.groupSelectionChangedSlotEmitter.subscribe((event) => {
218
- if (event === undefined) {
219
- event = {
220
- activeColumns: this.displayedColumns,
221
- groupKey: this.selectedGroupKey ?? this.defaultGroupKey,
222
- };
223
- }
224
- this.displayedColumnKeys$.next(event.activeColumns.map((col) => col.id));
225
- this.selectedGroupKey$.next(event.groupKey);
226
- this.displayedColumnsChange.emit(this.displayedColumns);
227
- this.displayedColumnKeysChange.emit(this.displayedColumnKeys);
228
- this.columnGroupSelectionComponentState$.next({
229
- activeColumnGroupKey: event.groupKey,
230
- displayedColumns: event.activeColumns,
231
- });
232
- });
233
- this.dataViewLayoutChange
234
- .pipe(withLatestFrom(this.isColumnGroupSelectionComponentDefined$))
235
- .subscribe(([_, columnGroupComponentDefined]) => {
236
- if (columnGroupComponentDefined) {
237
- if (!(this.columns.find((c) => c.nameKey === this.selectedGroupKey) ||
238
- this.selectedGroupKey === this.customGroupKey)) {
239
- this.selectedGroupKey$.next(undefined);
240
- }
241
- }
242
- });
243
- }
244
- ngOnInit() {
245
- this.selectedGroupKey = this.defaultGroupKey;
246
- if (!this.displayedColumns || this.displayedColumns.length === 0) {
247
- this.displayedColumnKeys = this.columns.map((column) => column.id);
248
- }
249
- if (this.defaultGroupKey && this.defaultGroupKey !== this.customGroupKey) {
250
- this.displayedColumnKeys = this.columns
251
- .filter((column) => column.predefinedGroupKeys?.includes(this.defaultGroupKey))
252
- .map((column) => column.id);
253
- }
254
- this.displayedColumns$ = this.displayedColumnKeys$.pipe(distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => curr[i] === v)), map((columnKeys) => columnKeys.map((key) => this.columns.find((col) => col.id === key)).filter((d) => d) ??
255
- []));
256
- this.displayedColumnsChange.emit(this.displayedColumns);
257
- this.displayedColumnKeysChange.emit(this.displayedColumnKeys);
258
- if (!this.groupSelectionNoGroupSelectedKey) {
259
- this.groupSelectionNoGroupSelectedKey = 'OCX_INTERACTIVE_DATA_VIEW.NO_GROUP_SELECTED';
260
- }
261
- this.firstColumnId = this.columns[0]?.id;
262
- let dataListGridSortingComponentState$ = this.dataListGridSortingComponentState$;
263
- let columnGroupSelectionComponentState$ = this.columnGroupSelectionComponentState$;
264
- let customGroupColumnSelectorComponentState$ = this.customGroupColumnSelectorComponentState$;
265
- if (this.layout === 'table') {
266
- dataListGridSortingComponentState$ = dataListGridSortingComponentState$.pipe(startWith({}));
267
- }
268
- else {
269
- columnGroupSelectionComponentState$ = columnGroupSelectionComponentState$.pipe(startWith({
270
- activeColumnGroupKey: this.selectedGroupKey,
271
- displayedColumns: this.displayedColumns,
272
- }));
273
- customGroupColumnSelectorComponentState$ = customGroupColumnSelectorComponentState$.pipe(startWith({
274
- actionColumnConfig: {
275
- frozen: this.frozenActionColumn,
276
- position: this.actionColumnPosition,
277
- },
278
- displayedColumns: this.displayedColumns,
279
- activeColumnGroupKey: this.selectedGroupKey,
280
- }));
281
- }
282
- let filterViewComponentState$ = this.filterViewComponentState$;
283
- if (this.disableFilterView) {
284
- filterViewComponentState$ = filterViewComponentState$.pipe(startWith({
285
- filters: this.filters,
286
- }));
287
- }
288
- combineLatest([
289
- columnGroupSelectionComponentState$.pipe(timestamp()),
290
- customGroupColumnSelectorComponentState$.pipe(timestamp()),
291
- this.dataLayoutComponentState$.pipe(timestamp()),
292
- dataListGridSortingComponentState$.pipe(timestamp()),
293
- this.dataViewComponentState$.pipe(timestamp()),
294
- filterViewComponentState$.pipe(timestamp()),
295
- ])
296
- .pipe(map((componentStates) => {
297
- return orderAndMergeValuesByTimestamp(componentStates);
298
- }))
299
- .subscribe((val) => {
300
- this.componentStateChanged.emit(val);
301
- });
302
- }
303
- ngAfterContentInit() {
304
- this.templates$.value?.forEach((item) => {
305
- switch (item.getType()) {
306
- case 'tableCell':
307
- this.tableCell = item.template;
308
- break;
309
- case 'tableDateCell':
310
- this.tableDateCell = item.template;
311
- break;
312
- case 'dateTableCell':
313
- this.dateTableCell = item.template;
314
- break;
315
- case 'tableRelativeDateCell':
316
- this.tableRelativeDateCell = item.template;
317
- break;
318
- case 'relativeDateTableCell':
319
- this.relativeDateTableCell = item.template;
320
- break;
321
- case 'tableTranslationKeyCell':
322
- this.tableTranslationKeyCell = item.template;
323
- break;
324
- case 'translationKeyTableCell':
325
- this.translationKeyTableCell = item.template;
326
- break;
327
- case 'gridItemSubtitleLines':
328
- this.gridItemSubtitleLines = item.template;
329
- break;
330
- case 'listItemSubtitleLines':
331
- this.listItemSubtitleLines = item.template;
332
- break;
333
- case 'stringTableCell':
334
- this.stringTableCell = item.template;
335
- break;
336
- case 'numberTableCell':
337
- this.numberTableCell = item.template;
338
- break;
339
- case 'customTableCell':
340
- this.customTableCell = item.template;
341
- break;
342
- case 'gridItem':
343
- this.gridItem = item.template;
344
- break;
345
- case 'listItem':
346
- this.listItem = item.template;
347
- break;
348
- case 'topCenter':
349
- this.topCenter = item.template;
350
- break;
351
- case 'listValue':
352
- this.listValue = item.template;
353
- break;
354
- case 'translationKeyListValue':
355
- this.translationKeyListValue = item.template;
356
- break;
357
- case 'numberListValue':
358
- this.numberListValue = item.template;
359
- break;
360
- case 'relativeDateListValue':
361
- this.relativeDateListValue = item.template;
362
- break;
363
- case 'customListValue':
364
- this.customListValue = item.template;
365
- break;
366
- case 'stringListValue':
367
- this.stringListValue = item.template;
368
- break;
369
- case 'dateListValue':
370
- this.dateListValue = item.template;
371
- break;
372
- case 'tableFilterCell':
373
- this.tableFilterCell = item.template;
374
- break;
375
- case 'dateTableFilterCell':
376
- this.dateTableFilterCell = item.template;
377
- break;
378
- case 'relativeDateTableFilterCell':
379
- this.relativeDateTableFilterCell = item.template;
380
- break;
381
- case 'translationKeyTableFilterCell':
382
- this.translationKeyTableFilterCell = item.template;
383
- break;
384
- case 'stringTableFilterCell':
385
- this.stringTableFilterCell = item.template;
386
- break;
387
- case 'numberTableFilterCell':
388
- this.numberTableFilterCell = item.template;
389
- break;
390
- case 'customTableFilterCell':
391
- this.customTableFilterCell = item.template;
392
- break;
393
- }
394
- });
395
- }
396
- filtering(event) {
397
- this.filters = event;
398
- this.filtered.emit(event);
399
- }
400
- sorting(event) {
401
- this.sortDirection = event.sortDirection;
402
- this.sortField = event.sortColumn;
403
- this.sorted.emit(event);
404
- }
405
- onDeleteElement(element) {
406
- if (this.isDeleteItemObserved) {
407
- this.deleteItem.emit(element);
408
- }
409
- }
410
- onViewElement(element) {
411
- if (this.isViewItemObserved) {
412
- this.viewItem.emit(element);
413
- }
414
- }
415
- onEditElement(element) {
416
- if (this.isEditItemObserved) {
417
- this.editItem.emit(element);
418
- }
419
- }
420
- onDataViewLayoutChange(layout) {
421
- this.layout = layout;
422
- this.dataViewLayoutChange.emit(layout);
423
- }
424
- onSortChange($event) {
425
- this.sortField = $event;
426
- this.sorted.emit({ sortColumn: this.sortField, sortDirection: this.sortDirection });
427
- }
428
- onSortDirectionChange($event) {
429
- this.sortDirection = $event;
430
- this.sorted.emit({ sortColumn: this.sortField, sortDirection: this.sortDirection });
431
- }
432
- onColumnGroupSelectionChange(event) {
433
- this.displayedColumnKeys = event.activeColumns.map((col) => col.id);
434
- this.selectedGroupKey = event.groupKey;
435
- // TODO: Remove following line once displayedColumns (deprecated) has been removed
436
- this.displayedColumnsChange.emit(this.displayedColumns);
437
- this.displayedColumnKeysChange.emit(this.displayedColumnKeys);
438
- }
439
- registerEventListenerForDataView() {
440
- if (this.deleteItem.observed) {
441
- this.isDeleteItemObserved = true;
442
- if (!this._dataViewComponent?.deleteItem.observed) {
443
- this._dataViewComponent?.deleteItem.subscribe((event) => {
444
- this.onDeleteElement(event);
445
- });
446
- }
447
- }
448
- if (this.viewItem.observed) {
449
- this.isViewItemObserved = true;
450
- if (!this._dataViewComponent?.viewItem.observed) {
451
- this._dataViewComponent?.viewItem.subscribe((event) => {
452
- this.onViewElement(event);
453
- });
454
- }
455
- }
456
- if (this.editItem.observed) {
457
- this.isEditItemObserved = true;
458
- if (!this._dataViewComponent?.editItem.observed) {
459
- this._dataViewComponent?.editItem.subscribe((event) => {
460
- this.onEditElement(event);
461
- });
462
- }
463
- }
464
- if (this.selectionChanged.observed) {
465
- if (!this._dataViewComponent?.selectionChanged.observed) {
466
- this._dataViewComponent?.selectionChanged.subscribe((event) => {
467
- this.onRowSelectionChange(event);
468
- });
469
- }
470
- }
471
- }
472
- onColumnSelectionChange(event) {
473
- this.displayedColumnKeys = event.activeColumns.map((col) => col.id);
474
- this.selectedGroupKey = this.customGroupKey;
475
- // TODO: Remove following line once displayedColumns (deprecated) has been removed
476
- this.displayedColumnsChange.emit(this.displayedColumns);
477
- this.displayedColumnKeysChange.emit(this.displayedColumnKeys);
478
- }
479
- onActionColumnConfigChange(event) {
480
- this.frozenActionColumn = event.frozenActionColumn;
481
- this.actionColumnPosition = event.actionColumnPosition;
482
- }
483
- onRowSelectionChange(event) {
484
- if (this.selectionChanged.observed) {
485
- this.selectionChanged.emit(event);
486
- }
487
- }
488
- onPageChange(event) {
489
- this.page = event;
490
- this.pageChanged.emit(event);
491
- }
492
- onPageSizeChange(event) {
493
- this.pageSize = event;
494
- this.pageSizeChanged.emit(event);
495
- }
496
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveDataViewComponent, deps: [{ token: i1.SlotService }], target: i0.ɵɵFactoryTarget.Component }); }
497
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InteractiveDataViewComponent, selector: "ocx-interactive-data-view", inputs: { searchConfigPermission: "searchConfigPermission", deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", tableSelectionEnabledField: "tableSelectionEnabledField", tableAllowSelectAll: "tableAllowSelectAll", 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", showAllOption: "showAllOption", totalRecordsOnServer: "totalRecordsOnServer", layout: "layout", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey", groupSelectionNoGroupSelectedKey: "groupSelectionNoGroupSelectedKey", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", additionalActions: "additionalActions", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", disableFilterView: "disableFilterView", filterViewDisplayMode: "filterViewDisplayMode", filterViewChipStyleClass: "filterViewChipStyleClass", filterViewTableStyle: "filterViewTableStyle", filterViewPanelStyle: "filterViewPanelStyle", selectDisplayedChips: "selectDisplayedChips", 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 <div class=\"flex flex-wrap justify-content-start align-items-center 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 <ocx-filter-view\n *ngIf=\"!disableFilterView\"\n [filters]=\"filters\"\n [columns]=\"columns\"\n [templates]=\"templates$ | async\"\n [displayMode]=\"filterViewDisplayMode\"\n [selectDisplayedChips]=\"selectDisplayedChips\"\n [chipStyleClass]=\"filterViewChipStyleClass\"\n [tableStyle]=\"filterViewTableStyle\"\n (filtered)=\"filtering($event)\"\n (componentStateChanged)=\"filterViewComponentState$.next($event)\"\n ></ocx-filter-view>\n </div>\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\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\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 [showAllOption]=\"showAllOption\"\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 [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i1.SlotComponent, selector: "ocx-slot[name]", inputs: ["name", "inputs", "outputs"] }, { kind: "component", type: i4.ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: ["selectedGroupKey", "columns", "placeholderKey", "defaultGroupKey", "customGroupKey"], outputs: ["groupSelectionChanged", "componentStateChanged"] }, { kind: "component", type: i5.CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: ["columns", "displayedColumns", "customGroupKey", "dialogTitle", "dialogTitleKey", "openButtonTitle", "openButtonTitleKey", "openButtonAriaLabel", "openButtonAriaLabelKey", "saveButtonLabel", "saveButtonLabelKey", "saveButtonAriaLabel", "saveButtonAriaLabelKey", "cancelButtonLabel", "cancelButtonLabelKey", "cancelButtonAriaLabel", "cancelButtonAriaLabelKey", "activeColumnsLabel", "activeColumnsLabelKey", "inactiveColumnsLabel", "inactiveColumnsLabelKey", "frozenActionColumn", "actionColumnPosition"], outputs: ["columnSelectionChanged", "actionColumnConfigChanged", "componentStateChanged"] }, { kind: "component", type: i6.DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: ["supportedViewLayouts", "layout"], outputs: ["dataViewLayoutChange", "componentStateChanged"] }, { kind: "component", type: i7.DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: ["columns", "sortStates", "sortDirection", "sortField"], outputs: ["sortChange", "sortDirectionChange", "componentStateChanged", "columnsChange"] }, { kind: "component", type: i8.DataViewComponent, selector: "ocx-data-view", inputs: ["deletePermission", "editPermission", "viewPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "tableSelectionEnabledField", "tableAllowSelectAll", "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", "showAllOption", "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: "directive", type: i9.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions", "ocxIfPermissionElseTemplate", "ocxIfNotPermissionElseTemplate"] }, { kind: "component", type: i10.FilterViewComponent, selector: "ocx-filter-view", inputs: ["filters", "columns", "displayMode", "selectDisplayedChips", "chipStyleClass", "tableStyle", "panelStyle", "templates"], outputs: ["filtered", "componentStateChanged"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
498
- }
499
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveDataViewComponent, decorators: [{
500
- type: Component,
501
- 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 <div class=\"flex flex-wrap justify-content-start align-items-center 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 <ocx-filter-view\n *ngIf=\"!disableFilterView\"\n [filters]=\"filters\"\n [columns]=\"columns\"\n [templates]=\"templates$ | async\"\n [displayMode]=\"filterViewDisplayMode\"\n [selectDisplayedChips]=\"selectDisplayedChips\"\n [chipStyleClass]=\"filterViewChipStyleClass\"\n [tableStyle]=\"filterViewTableStyle\"\n (filtered)=\"filtering($event)\"\n (componentStateChanged)=\"filterViewComponentState$.next($event)\"\n ></ocx-filter-view>\n </div>\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\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\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 [showAllOption]=\"showAllOption\"\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 [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\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" }]
502
- }], ctorParameters: () => [{ type: i1.SlotService }], propDecorators: { dataView: [{
503
- type: ViewChild,
504
- args: [DataViewComponent]
505
- }], searchConfigPermission: [{
506
- type: Input
507
- }], deletePermission: [{
508
- type: Input
509
- }], editPermission: [{
510
- type: Input
511
- }], viewPermission: [{
512
- type: Input
513
- }], deleteActionVisibleField: [{
514
- type: Input
515
- }], deleteActionEnabledField: [{
516
- type: Input
517
- }], viewActionVisibleField: [{
518
- type: Input
519
- }], viewActionEnabledField: [{
520
- type: Input
521
- }], editActionVisibleField: [{
522
- type: Input
523
- }], editActionEnabledField: [{
524
- type: Input
525
- }], tableSelectionEnabledField: [{
526
- type: Input
527
- }], tableAllowSelectAll: [{
528
- type: Input
529
- }], name: [{
530
- type: Input
531
- }], titleLineId: [{
532
- type: Input
533
- }], subtitleLineIds: [{
534
- type: Input
535
- }], supportedViewLayouts: [{
536
- type: Input
537
- }], columns: [{
538
- type: Input
539
- }], emptyResultsMessage: [{
540
- type: Input
541
- }], clientSideSorting: [{
542
- type: Input
543
- }], clientSideFiltering: [{
544
- type: Input
545
- }], fallbackImage: [{
546
- type: Input
547
- }], filters: [{
548
- type: Input
549
- }], sortDirection: [{
550
- type: Input
551
- }], sortField: [{
552
- type: Input
553
- }], sortStates: [{
554
- type: Input
555
- }], pageSizes: [{
556
- type: Input
557
- }], pageSize: [{
558
- type: Input
559
- }], showAllOption: [{
560
- type: Input
561
- }], totalRecordsOnServer: [{
562
- type: Input
563
- }], layout: [{
564
- type: Input
565
- }], defaultGroupKey: [{
566
- type: Input
567
- }], customGroupKey: [{
568
- type: Input
569
- }], groupSelectionNoGroupSelectedKey: [{
570
- type: Input
571
- }], currentPageShowingKey: [{
572
- type: Input
573
- }], currentPageShowingWithTotalOnServerKey: [{
574
- type: Input
575
- }], additionalActions: [{
576
- type: Input
577
- }], listGridPaginator: [{
578
- type: Input
579
- }], tablePaginator: [{
580
- type: Input
581
- }], disableFilterView: [{
582
- type: Input
583
- }], filterViewDisplayMode: [{
584
- type: Input
585
- }], filterViewChipStyleClass: [{
586
- type: Input
587
- }], filterViewTableStyle: [{
588
- type: Input
589
- }], filterViewPanelStyle: [{
590
- type: Input
591
- }], selectDisplayedChips: [{
592
- type: Input
593
- }], page: [{
594
- type: Input
595
- }], selectedRows: [{
596
- type: Input
597
- }], displayedColumnKeys: [{
598
- type: Input
599
- }], displayedColumns: [{
600
- type: Input
601
- }], frozenActionColumn: [{
602
- type: Input
603
- }], actionColumnPosition: [{
604
- type: Input
605
- }], tableCell: [{
606
- type: ContentChild,
607
- args: ['tableCell']
608
- }], tableDateCell: [{
609
- type: ContentChild,
610
- args: ['tableDateCell']
611
- }], dateTableCell: [{
612
- type: ContentChild,
613
- args: ['dateTableCell']
614
- }], tableRelativeDateCell: [{
615
- type: ContentChild,
616
- args: ['tableRelativeDateCell']
617
- }], relativeDateTableCell: [{
618
- type: ContentChild,
619
- args: ['relativeDateTableCell']
620
- }], tableTranslationKeyCell: [{
621
- type: ContentChild,
622
- args: ['tableTranslationKeyCell']
623
- }], translationKeyTableCell: [{
624
- type: ContentChild,
625
- args: ['translationKeyTableCell']
626
- }], gridItemSubtitleLines: [{
627
- type: ContentChild,
628
- args: ['gridItemSubtitleLines']
629
- }], listItemSubtitleLines: [{
630
- type: ContentChild,
631
- args: ['listItemSubtitleLines']
632
- }], stringTableCell: [{
633
- type: ContentChild,
634
- args: ['stringTableCell']
635
- }], numberTableCell: [{
636
- type: ContentChild,
637
- args: ['numberTableCell']
638
- }], customTableCell: [{
639
- type: ContentChild,
640
- args: ['customTableCell']
641
- }], gridItem: [{
642
- type: ContentChild,
643
- args: ['gridItem']
644
- }], listItem: [{
645
- type: ContentChild,
646
- args: ['listItem']
647
- }], topCenter: [{
648
- type: ContentChild,
649
- args: ['topCenter']
650
- }], listValue: [{
651
- type: ContentChild,
652
- args: ['listValue']
653
- }], translationKeyListValue: [{
654
- type: ContentChild,
655
- args: ['translationKeyListValue']
656
- }], numberListValue: [{
657
- type: ContentChild,
658
- args: ['numberListValue']
659
- }], relativeDateListValue: [{
660
- type: ContentChild,
661
- args: ['relativeDateListValue']
662
- }], customListValue: [{
663
- type: ContentChild,
664
- args: ['customListValue']
665
- }], stringListValue: [{
666
- type: ContentChild,
667
- args: ['stringListValue']
668
- }], dateListValue: [{
669
- type: ContentChild,
670
- args: ['dateListValue']
671
- }], tableFilterCell: [{
672
- type: ContentChild,
673
- args: ['tableFilterCell']
674
- }], dateTableFilterCell: [{
675
- type: ContentChild,
676
- args: ['dateTableFilterCell']
677
- }], relativeDateTableFilterCell: [{
678
- type: ContentChild,
679
- args: ['relativeDateTableFilterCell']
680
- }], translationKeyTableFilterCell: [{
681
- type: ContentChild,
682
- args: ['translationKeyTableFilterCell']
683
- }], stringTableFilterCell: [{
684
- type: ContentChild,
685
- args: ['stringTableFilterCell']
686
- }], numberTableFilterCell: [{
687
- type: ContentChild,
688
- args: ['numberTableFilterCell']
689
- }], customTableFilterCell: [{
690
- type: ContentChild,
691
- args: ['customTableFilterCell']
692
- }], templates: [{
693
- type: ContentChildren,
694
- args: [PrimeTemplate]
695
- }], filtered: [{
696
- type: Output
697
- }], sorted: [{
698
- type: Output
699
- }], deleteItem: [{
700
- type: Output
701
- }], viewItem: [{
702
- type: Output
703
- }], editItem: [{
704
- type: Output
705
- }], dataViewLayoutChange: [{
706
- type: Output
707
- }], displayedColumnsChange: [{
708
- type: Output
709
- }], displayedColumnKeysChange: [{
710
- type: Output
711
- }], selectionChanged: [{
712
- type: Output
713
- }], pageChanged: [{
714
- type: Output
715
- }], pageSizeChanged: [{
716
- type: Output
717
- }], componentStateChanged: [{
718
- type: Output
719
- }], paginator: [{
720
- type: Input
721
- }], data: [{
722
- type: Input
723
- }] } });
724
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYWN0aXZlLWRhdGEtdmlldy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQTtBQUliLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBS3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFNM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBSTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBMkMsTUFBTSxrQ0FBa0MsQ0FBQTtBQUU3RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7Ozs7Ozs7Ozs7OztBQW9CaEQsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QyxJQUFrQyxRQUFRLENBQUMsR0FBa0M7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtRQUM3QixJQUFJ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dCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICB0aW1lc3RhbXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgRGF0YUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtYWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXNvcnQtZGlyZWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAgfSBmcm9tICcuLi8uLi91dGlscy9yeGpzLXV0aWxzJ1xuaW1wb3J0IHtcbiAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSxcbiAgR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG59IGZyb20gJy4uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQge1xuICBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQsXG4gIENvbHVtblNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlLFxufSBmcm9tICcuLi9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50J1xuaW1wb3J0IHsgU2xvdFNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1yZW1vdGUtY29tcG9uZW50cydcbmltcG9ydCB7IERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSB9IGZyb20gJy4uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1saXN0LWdyaWQtc29ydGluZy9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdywgU29ydCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb21wb25lbnRTdGF0ZSwgUm93TGlzdEdyaWREYXRhIH0gZnJvbSAnLi4vZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQnXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5pbXBvcnQgeyBsaW1pdCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbHRlci51dGlscydcbmltcG9ydCB7IEZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSwgRmlsdGVyVmlld0Rpc3BsYXlNb2RlIH0gZnJvbSAnLi4vZmlsdGVyLXZpZXcvZmlsdGVyLXZpZXcuY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50U3RhdGUgPSBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlICZcbiAgRGF0YVZpZXdDb21wb25lbnRTdGF0ZSAmXG4gIEZpbHRlclZpZXdDb21wb25lbnRTdGF0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3VwRGF0YSB7XG4gIGFjdGl2ZUNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdXG4gIGdyb3VwS2V5OiBzdHJpbmdcbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1pbnRlcmFjdGl2ZS1kYXRhLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIHVzZUV4aXN0aW5nOiBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgX2RhdGFWaWV3Q29tcG9uZW50OiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBAVmlld0NoaWxkKERhdGFWaWV3Q29tcG9uZW50KSBzZXQgZGF0YVZpZXcocmVmOiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50ID0gcmVmXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpXG4gIH1cbiAgZ2V0IGRhdGFWaWV3KCk6IERhdGFWaWV3Q29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVZpZXdDb21wb25lbnRcbiAgfVxuXG4gIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxheW91dENvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YVZpZXdDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhVmlld0NvbXBvbmVudFN0YXRlPigxKVxuICBmaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RmlsdGVyVmlld0NvbXBvbmVudFN0YXRlPigxKVxuXG4gIEBJbnB1dCgpIHNlYXJjaENvbmZpZ1Blcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdFBlcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB0YWJsZUFsbG93U2VsZWN0QWxsID0gdHJ1ZVxuICBASW5wdXQoKSBuYW1lID0gJ0RhdGEnXG4gIEBJbnB1dCgpIHRpdGxlTGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VidGl0bGVMaW5lSWRzOiBzdHJpbmdbXSA9IFtdXG4gIEBJbnB1dCgpIHN1cHBvcnRlZFZpZXdMYXlvdXRzOiAoJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJylbXSA9IFsnZ3JpZCcsICdsaXN0JywgJ3RhYmxlJ11cbiAgQElucHV0KCkgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXVxuICBASW5wdXQoKSBlbXB0eVJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgY2xpZW50U2lkZVNvcnRpbmcgPSB0cnVlXG4gIEBJbnB1dCgpIGNsaWVudFNpZGVGaWx0ZXJpbmcgPSB0cnVlXG4gIEBJbnB1dCgpIGZhbGxiYWNrSW1hZ2UgPSAncGxhY2Vob2xkZXIucG5nJ1xuICBASW5wdXQoKSBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdXG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IERhdGFTb3J0RGlyZWN0aW9uID0gRGF0YVNvcnREaXJlY3Rpb24uTk9ORVxuICBASW5wdXQoKSBzb3J0RmllbGQ6IGFueSA9ICcnXG4gIEBJbnB1dCgpIHNvcnRTdGF0ZXM6IERhdGFTb3J0RGlyZWN0aW9uW10gPSBbXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HLFxuICAgIERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcsXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uTk9ORSxcbiAgXVxuICBASW5wdXQoKSBwYWdlU2l6ZXM6IG51bWJlcltdID0gWzEwLCAyNSwgNTBdXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc2hvd0FsbE9wdGlvbiA9IGZhbHNlXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3Jkc09uU2VydmVyOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgbGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnID0gJ3RhYmxlJ1xuICBASW5wdXQoKSBkZWZhdWx0R3JvdXBLZXkgPSAnJ1xuICBASW5wdXQoKSBjdXN0b21Hcm91cEtleSA9ICdPQ1hfSU5URVJBQ1RJVkVfREFUQV9WSUVXLkNVU1RPTV9HUk9VUCdcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXkgPSAnT0NYX0lOVEVSQUNUSVZFX0RBVEFfVklFVy5OT19HUk9VUF9TRUxFQ1RFRCdcbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkcnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkdfV0lUSF9UT1RBTF9PTl9TRVJWRVInXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxBY3Rpb25zOiBEYXRhQWN0aW9uW10gPSBbXVxuICBASW5wdXQoKSBsaXN0R3JpZFBhZ2luYXRvciA9IHRydWVcbiAgQElucHV0KCkgdGFibGVQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIGRpc2FibGVGaWx0ZXJWaWV3ID0gdHJ1ZVxuICBASW5wdXQoKSBmaWx0ZXJWaWV3RGlzcGxheU1vZGU6IEZpbHRlclZpZXdEaXNwbGF5TW9kZSA9ICdidXR0b24nXG4gIEBJbnB1dCgpIGZpbHRlclZpZXdDaGlwU3R5bGVDbGFzcyA9ICcnXG4gIEBJbnB1dCgpIGZpbHRlclZpZXdUYWJsZVN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gPSB7ICdtYXgtaGVpZ2h0JzogJzUwdmgnIH1cbiAgQElucHV0KCkgZmlsdGVyVmlld1BhbmVsU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSA9IHsgJ21heC13aWR0aCc6ICc5MCUnIH1cbiAgQElucHV0KCkgc2VsZWN0RGlzcGxheWVkQ2hpcHM6IChmaWx0ZXJzOiBGaWx0ZXJbXSwgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10pID0+IEZpbHRlcltdID0gKGZpbHRlcnMpID0+XG4gICAgbGltaXQoZmlsdGVycywgMywgeyByZXZlcnNlOiB0cnVlIH0pXG4gIEBJbnB1dCgpIHBhZ2UgPSAwXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogUm93W10gPSBbXVxuICBkaXNwbGF5ZWRDb2x1bW5LZXlzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKVxuICBkaXNwbGF5ZWRDb2x1bW5zJDogT2JzZXJ2YWJsZTxEYXRhVGFibGVDb2x1bW5bXT4gfCB1bmRlZmluZWRcbiAgQElucHV0KClcbiAgZ2V0IGRpc3BsYXllZENvbHVtbktleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLmdldFZhbHVlKClcbiAgfVxuICBzZXQgZGlzcGxheWVkQ29sdW1uS2V5cyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLm5leHQodmFsdWUpXG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZGlzcGxheWVkQ29sdW1uS2V5c2AgYW5kIHBhc3MgaW4gY29sdW1uIGlkcyBpbnN0ZWFkIG9mIGBEYXRhVGFibGVDb2x1bW5gIG9iamVjdHNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNwbGF5ZWRDb2x1bW5zKCk6IERhdGFUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c1xuICAgICAgICAubWFwKChkKSA9PiB0aGlzLmNvbHVtbnMuZmluZCgoYykgPT4gYy5pZCA9PT0gZCkpXG4gICAgICAgIC5maWx0ZXIoKGQpID0+IGQpIGFzIERhdGFUYWJsZUNvbHVtbltdKSA/PyBbXVxuICAgIClcbiAgfVxuICBzZXQgZGlzcGxheWVkQ29sdW1ucyh2YWx1ZTogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLm5leHQodmFsdWUubWFwKChkKSA9PiBkLmlkKSlcbiAgfVxuICBASW5wdXQoKSBmcm96ZW5BY3Rpb25Db2x1bW4gPSBmYWxzZVxuICBASW5wdXQoKSBhY3Rpb25Db2x1bW5Qb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCdcbiAgQENvbnRlbnRDaGlsZCgndGFibGVDZWxsJykgdGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IGRhdGVUYWJsZUNlbGxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlRGF0ZUNlbGwnKSB0YWJsZURhdGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVUYWJsZUNlbGwnKSBkYXRlVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgcmVsYXRpdmVEYXRlVGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZVJlbGF0aXZlRGF0ZUNlbGwnKSB0YWJsZVJlbGF0aXZlRGF0ZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgncmVsYXRpdmVEYXRlVGFibGVDZWxsJykgcmVsYXRpdmVEYXRlVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsJykgdGFibGVUcmFuc2xhdGlvbktleUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnKSB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lczogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXM6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnc3RyaW5nVGFibGVDZWxsJykgc3RyaW5nVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlclRhYmxlQ2VsbCcpIG51bWJlclRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkVGFibGVDZWxsXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIGluIERhdGFUYWJsZSB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRUYWJsZUNlbGxcIlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tVGFibGVDZWxsJykgY3VzdG9tVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtJykgZ3JpZEl0ZW06IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdEl0ZW0nKSBsaXN0SXRlbTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0b3BDZW50ZXInKSB0b3BDZW50ZXI6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdFZhbHVlJykgbGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlJykgdHJhbnNsYXRpb25LZXlMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyTGlzdFZhbHVlJykgbnVtYmVyTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZScpIHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkTGlzdFZhbHVlXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIERhdGFMaXN0R3JpZCB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRMaXN0VmFsdWVcIlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tTGlzdFZhbHVlJykgY3VzdG9tTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ0xpc3RWYWx1ZScpIHN0cmluZ0xpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlTGlzdFZhbHVlJykgZGF0ZUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZUZpbHRlckNlbGwnKSB0YWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZGF0ZVRhYmxlRmlsdGVyQ2VsbCcpIGRhdGVUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgncmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsJykgcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJykgdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnc3RyaW5nVGFibGVGaWx0ZXJDZWxsJykgc3RyaW5nVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlclRhYmxlRmlsdGVyQ2VsbCcpIG51bWJlclRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW4gZmlsdGVyXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlRmlsdGVyQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVGaWx0ZXJDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCcpIGN1c3RvbVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIHRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IHRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMkLm5leHQodmFsdWUpXG4gIH1cblxuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlcltdPigpXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KClcbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgdmlld0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZWRpdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZGF0YVZpZXdMYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZSc+KClcbiAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICBAT3V0cHV0KCkgZGlzcGxheWVkQ29sdW1uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlQ29sdW1uW10+KClcbiAgQE91dHB1dCgpIGRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Um93W10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KClcblxuICBAT3V0cHV0KCkgY29tcG9uZW50U3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50U3RhdGU+KClcblxuICBzZWxlY3RlZEdyb3VwS2V5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPignJylcbiAgZ2V0IHNlbGVjdGVkR3JvdXBLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwS2V5JC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IHNlbGVjdGVkR3JvdXBLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSQubmV4dCh2YWx1ZSlcbiAgfVxuICBpc0RlbGV0ZUl0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBpc1ZpZXdJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaXNFZGl0SXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGZpcnN0Q29sdW1uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIEBJbnB1dCgpXG4gIGdldCBwYWdpbmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEdyaWRQYWdpbmF0b3IgJiYgdGhpcy50YWJsZVBhZ2luYXRvclxuICB9XG4gIHNldCBwYWdpbmF0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxpc3RHcmlkUGFnaW5hdG9yID0gdmFsdWVcbiAgICB0aGlzLnRhYmxlUGFnaW5hdG9yID0gdmFsdWVcbiAgfVxuXG4gIGdldCBfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdyaWRJdGVtU3VidGl0bGVMaW5lc1xuICB9XG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1xuICB9XG4gIGdldCBfdGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ2VsbFxuICB9XG4gIGdldCBfc3RyaW5nVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlQ2VsbFxuICB9XG4gIGdldCBfbnVtYmVyVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm51bWJlclRhYmxlQ2VsbFxuICB9XG4gIGdldCBfY3VzdG9tVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfdGFibGVEYXRlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGFibGVDZWxsID8/IHRoaXMudGFibGVEYXRlQ2VsbFxuICB9XG4gIGdldCBfZGF0ZVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF90YWJsZVJlbGF0aXZlRGF0ZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlVGFibGVDZWxsID8/IHRoaXMudGFibGVSZWxhdGl2ZURhdGVDZWxsXG4gIH1cbiAgZ2V0IF9yZWxhdGl2ZURhdGVUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbktleVRhYmxlQ2VsbCA/PyB0aGlzLnRhYmxlVHJhbnNsYXRpb25LZXlDZWxsXG4gIH1cbiAgZ2V0IF90cmFuc2xhdGlvbktleVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbktleVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfZ3JpZEl0ZW0oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1cbiAgfVxuICBnZXQgX2xpc3RJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtXG4gIH1cbiAgZ2V0IF9saXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZVxuICB9XG4gIGdldCBfbnVtYmVyTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm51bWJlckxpc3RWYWx1ZVxuICB9XG4gIGdldCBfcmVsYXRpdmVEYXRlTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZVxuICB9XG4gIGdldCBfY3VzdG9tTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbUxpc3RWYWx1ZVxuICB9XG4gIGdldCBfc3RyaW5nTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ0xpc3RWYWx1ZVxuICB9XG4gIGdldCBfZGF0ZUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF90YWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9kYXRlVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9zdHJpbmdUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9udW1iZXJUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9jdXN0b21UYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGFibGVGaWx0ZXJDZWxsXG4gIH1cblxuICBfZGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBASW5wdXQoKVxuICBnZXQgZGF0YSgpOiBSb3dMaXN0R3JpZERhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFcbiAgfVxuICBzZXQgZGF0YSh2YWx1ZTogUm93TGlzdEdyaWREYXRhW10pIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWVcbiAgfVxuXG4gIGNvbHVtbkdyb3VwU2xvdE5hbWUgPSAnb25lY3gtY29sdW1uLWdyb3VwLXNlbGVjdGlvbidcbiAgaXNDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudERlZmluZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG4gIGdyb3VwU2VsZWN0aW9uQ2hhbmdlZFNsb3RFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5Hcm91cERhdGEgfCB1bmRlZmluZWQ+KClcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNsb3RTZXJ2aWNlOiBTbG90U2VydmljZSkge1xuICAgIHRoaXMuaXNDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudERlZmluZWQkID0gdGhpcy5zbG90U2VydmljZVxuICAgICAgLmlzU29tZUNvbXBvbmVudERlZmluZWRGb3JTbG90KHRoaXMuY29sdW1uR3JvdXBTbG90TmFtZSlcbiAgICAgIC5waXBlKHN0YXJ0V2l0aCh0cnVlKSlcblxuICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkU2xvdEVtaXR0ZXIuc3Vic2NyaWJlKChldmVudDogQ29sdW1uR3JvdXBEYXRhIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICBhY3RpdmVDb2x1bW5zOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsXG4gICAgICAgICAgZ3JvdXBLZXk6IHRoaXMuc2VsZWN0ZWRHcm91cEtleSA/PyB0aGlzLmRlZmF1bHRHcm91cEtleSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5uZXh0KGV2ZW50LmFjdGl2ZUNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5pZCkpXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkLm5leHQoZXZlbnQuZ3JvdXBLZXkpXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gICAgICB0aGlzLmNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLm5leHQoe1xuICAgICAgICBhY3RpdmVDb2x1bW5Hcm91cEtleTogZXZlbnQuZ3JvdXBLZXksXG4gICAgICAgIGRpc3BsYXllZENvbHVtbnM6IGV2ZW50LmFjdGl2ZUNvbHVtbnMsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB0aGlzLmRhdGFWaWV3TGF5b3V0Q2hhbmdlXG4gICAgICAucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLmlzQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnREZWZpbmVkJCkpXG4gICAgICAuc3Vic2NyaWJlKChbXywgY29sdW1uR3JvdXBDb21wb25lbnREZWZpbmVkXSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uR3JvdXBDb21wb25lbnREZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZUtleSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwS2V5KSB8fFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkgPT09IHRoaXMuY3VzdG9tR3JvdXBLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSQubmV4dCh1bmRlZmluZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gdGhpcy5kZWZhdWx0R3JvdXBLZXlcbiAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1ucyB8fCB0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZClcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdEdyb3VwS2V5ICYmIHRoaXMuZGVmYXVsdEdyb3VwS2V5ICE9PSB0aGlzLmN1c3RvbUdyb3VwS2V5KSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSB0aGlzLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4ucHJlZGVmaW5lZEdyb3VwS2V5cz8uaW5jbHVkZXModGhpcy5kZWZhdWx0R3JvdXBLZXkpKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZClcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zJCA9IHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBwcmV2Lmxlbmd0aCA9PT0gY3Vyci5sZW5ndGggJiYgcHJldi5ldmVyeSgodiwgaSkgPT4gY3VycltpXSA9PT0gdikpLFxuICAgICAgbWFwKFxuICAgICAgICAoY29sdW1uS2V5cykgPT5cbiAgICAgICAgICAoY29sdW1uS2V5cy5tYXAoKGtleSkgPT4gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmlkID09PSBrZXkpKS5maWx0ZXIoKGQpID0+IGQpIGFzIERhdGFUYWJsZUNvbHVtbltdKSA/P1xuICAgICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gICAgaWYgKCF0aGlzLmdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5KSB7XG4gICAgICB0aGlzLmdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5ID0gJ09DWF9JTlRFUkFDVElWRV9EQVRBX1ZJRVcuTk9fR1JPVVBfU0VMRUNURUQnXG4gICAgfVxuICAgIHRoaXMuZmlyc3RDb2x1bW5JZCA9IHRoaXMuY29sdW1uc1swXT8uaWRcblxuICAgIGxldCBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkOiBPYnNlcnZhYmxlPERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPj4gPVxuICAgICAgdGhpcy5kYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkXG4gICAgbGV0IGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkOiBPYnNlcnZhYmxlPENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4+ID1cbiAgICAgIHRoaXMuY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSRcbiAgICBsZXQgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJDogT2JzZXJ2YWJsZTxcbiAgICAgIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPlxuICAgID4gPSB0aGlzLmN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSRcblxuICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3RhYmxlJykge1xuICAgICAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQucGlwZShzdGFydFdpdGgoe30pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJCA9IGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh7XG4gICAgICAgICAgYWN0aXZlQ29sdW1uR3JvdXBLZXk6IHRoaXMuc2VsZWN0ZWRHcm91cEtleSxcbiAgICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkID0gY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoe1xuICAgICAgICAgIGFjdGlvbkNvbHVtbkNvbmZpZzoge1xuICAgICAgICAgICAgZnJvemVuOiB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLmFjdGlvbkNvbHVtblBvc2l0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzcGxheWVkQ29sdW1uczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICAgICAgIGFjdGl2ZUNvbHVtbkdyb3VwS2V5OiB0aGlzLnNlbGVjdGVkR3JvdXBLZXksXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IGZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8RmlsdGVyVmlld0NvbXBvbmVudFN0YXRlIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+PiA9XG4gICAgICB0aGlzLmZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSRcbiAgICBpZiAodGhpcy5kaXNhYmxlRmlsdGVyVmlldykge1xuICAgICAgZmlsdGVyVmlld0NvbXBvbmVudFN0YXRlJCA9IGZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSQucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHtcbiAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmRhdGFMYXlvdXRDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgdGhpcy5kYXRhVmlld0NvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIGZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNvbXBvbmVudFN0YXRlcykgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAoY29tcG9uZW50U3RhdGVzKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50U3RhdGVDaGFuZ2VkLmVtaXQodmFsKVxuICAgICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlcyQudmFsdWU/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSAndGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZURhdGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0ZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5kYXRlVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdncmlkSXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RJdGVtU3VidGl0bGVMaW5lcyc6XG4gICAgICAgICAgdGhpcy5saXN0SXRlbVN1YnRpdGxlTGluZXMgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ1RhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMubnVtYmVyVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2N1c3RvbVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5jdXN0b21UYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZ3JpZEl0ZW0nOlxuICAgICAgICAgIHRoaXMuZ3JpZEl0ZW0gPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdEl0ZW0nOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW0gPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndG9wQ2VudGVyJzpcbiAgICAgICAgICB0aGlzLnRvcENlbnRlciA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ251bWJlckxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5udW1iZXJMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21MaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ0xpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5kYXRlTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ1RhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMubnVtYmVyVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZmlsdGVyaW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBldmVudFxuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudClcbiAgfVxuXG4gIHNvcnRpbmcoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IGV2ZW50LnNvcnREaXJlY3Rpb25cbiAgICB0aGlzLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRDb2x1bW5cbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25EZWxldGVFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUl0ZW0uZW1pdChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIG9uVmlld0VsZW1lbnQoZWxlbWVudDogUm93TGlzdEdyaWREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNWaWV3SXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLnZpZXdJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvbkVkaXRFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzRWRpdEl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5lZGl0SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhVmlld0xheW91dENoYW5nZShsYXlvdXQ6ICdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScpIHtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dFxuICAgIHRoaXMuZGF0YVZpZXdMYXlvdXRDaGFuZ2UuZW1pdChsYXlvdXQpXG4gIH1cblxuICBvblNvcnRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRGaWVsZCA9ICRldmVudFxuICAgIHRoaXMuc29ydGVkLmVtaXQoeyBzb3J0Q29sdW1uOiB0aGlzLnNvcnRGaWVsZCwgc29ydERpcmVjdGlvbjogdGhpcy5zb3J0RGlyZWN0aW9uIH0pXG4gIH1cblxuICBvblNvcnREaXJlY3Rpb25DaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAkZXZlbnRcbiAgICB0aGlzLnNvcnRlZC5lbWl0KHsgc29ydENvbHVtbjogdGhpcy5zb3J0RmllbGQsIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvbiB9KVxuICB9XG5cbiAgb25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZShldmVudDogR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSBldmVudC5hY3RpdmVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaWQpXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gZXZlbnQuZ3JvdXBLZXlcbiAgICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgfVxuXG4gIHJlZ2lzdGVyRXZlbnRMaXN0ZW5lckZvckRhdGFWaWV3KCkge1xuICAgIGlmICh0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWxldGVJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5kZWxldGVJdGVtLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uRGVsZXRlRWxlbWVudChldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuaXNWaWV3SXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8udmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LnZpZXdJdGVtLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uVmlld0VsZW1lbnQoZXZlbnQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzRWRpdEl0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgIGlmICghdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5lZGl0SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkVkaXRFbGVtZW50KGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlKGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBDb2x1bW5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSBldmVudC5hY3RpdmVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaWQpXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gdGhpcy5jdXN0b21Hcm91cEtleVxuICAgIC8vIFRPRE86IFJlbW92ZSBmb2xsb3dpbmcgbGluZSBvbmNlIGRpc3BsYXllZENvbHVtbnMgKGRlcHJlY2F0ZWQpIGhhcyBiZWVuIHJlbW92ZWRcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzKVxuICB9XG5cbiAgb25BY3Rpb25Db2x1bW5Db25maWdDaGFuZ2UoZXZlbnQ6IEFjdGlvbkNvbHVtbkNoYW5nZWRFdmVudCkge1xuICAgIHRoaXMuZnJvemVuQWN0aW9uQ29sdW1uID0gZXZlbnQuZnJvemVuQWN0aW9uQ29sdW1uXG4gICAgdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvbiA9IGV2ZW50LmFjdGlvbkNvbHVtblBvc2l0aW9uXG4gIH1cblxuICBvblJvd1NlbGVjdGlvbkNoYW5nZShldmVudDogUm93W10pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudClcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIGdhcC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxvY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uXG4gICAgICAgIFtzdXBwb3J0ZWRWaWV3TGF5b3V0c109XCJzdXBwb3J0ZWRWaWV3TGF5b3V0c1wiXG4gICAgICAgIFtsYXlvdXRdPVwibGF5b3V0XCJcbiAgICAgICAgKGRhdGFWaWV3TGF5b3V0Q2hhbmdlKT1cIm9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWRhdGEtbGF5b3V0LXNlbGVjdGlvbj5cbiAgICAgIDxvY3gtZmlsdGVyLXZpZXdcbiAgICAgICAgKm5nSWY9XCIhZGlzYWJsZUZpbHRlclZpZXdcIlxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFt0ZW1wbGF0ZXNdPVwidGVtcGxhdGVzJCB8IGFzeW5jXCJcbiAgICAgICAgW2Rpc3BsYXlNb2RlXT1cImZpbHRlclZpZXdEaXNwbGF5TW9kZVwiXG4gICAgICAgIFtzZWxlY3REaXNwbGF5ZWRDaGlwc109XCJzZWxlY3REaXNwbGF5ZWRDaGlwc1wiXG4gICAgICAgIFtjaGlwU3R5bGVDbGFzc109XCJmaWx0ZXJWaWV3Q2hpcFN0eWxlQ2xhc3NcIlxuICAgICAgICBbdGFibGVTdHlsZV09XCJmaWx0ZXJWaWV3VGFibGVTdHlsZVwiXG4gICAgICAgIChmaWx0ZXJlZCk9XCJmaWx0ZXJpbmcoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZmlsdGVyVmlld0NvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWZpbHRlci12aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInRvcENlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b3BDZW50ZXJcIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibGF5b3V0ICE9PSAndGFibGUnXCIgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPG9jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nXG4gICAgICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXG4gICAgICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtzb3J0U3RhdGVzXT1cInNvcnRTdGF0ZXNcIlxuICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0RGlyZWN0aW9uQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gICAgICA+PC9vY3gtZGF0YS1saXN0LWdyaWQtc29ydGluZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtuZ1N0eWxlXT1cImxheW91dCAhPT0gJ3RhYmxlJyA/IHtcbiAgICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZSdcbiAgICB9IDoge31cIlxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQgfCBhc3luYzsgZWxzZSBkZWZhdWx0Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXllZENvbHVtbktleXMkIHwgYXN5bmMgYXMgZGlzcGxheWVkQ29sdW1uS2V5c1wiPlxuICAgICAgICAgIDxvY3gtc2xvdFxuICAgICAgICAgICAgW25nU3R5bGVdPVwibGF5b3V0ICE9PSAndGFibGUnID8geydkaXNwbGF5JyA6ICdub25lJ30gIDoge31cIlxuICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cInNlYXJjaENvbmZpZ1Blcm1pc3Npb247IGVsc2VUZW1wbGF0ZTogZGVmYXVsdENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgIG5hbWU9XCJ7e2NvbHVtbkdyb3VwU2xvdE5hbWV9fVwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cInsgcGxhY2Vob2xkZXJLZXk6IGdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5LCBkZWZhdWx0R3JvdXBLZXk6IGRlZmF1bHRHcm91cEtleSwgY3VzdG9tR3JvdXBLZXk6IGN1c3RvbUdyb3VwS2V5LCBjb2x1bW5zOiBjb2x1bW5zLCBzZWxlY3RlZEdyb3VwS2V5OiBzZWxlY3RlZEdyb3VwS2V5LCBsYXlvdXQ6IGxheW91dCwgZGlzcGxheWVkQ29sdW1uc0lkczogZGlzcGxheWVkQ29sdW1uS2V5cyB9XCJcbiAgICAgICAgICAgIFtvdXRwdXRzXT1cInsgZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkOiBncm91cFNlbGVjdGlvbkNoYW5nZWRTbG90RW1pdHRlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMThyZW1cIiBoZWlnaHQ9XCIzcmVtXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9vY3gtc2xvdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG9jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yXG4gICAgICAgICpuZ0lmPVwibGF5b3V0ID09PSAndGFibGUnXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtjdXN0b21Hcm91cEtleV09XCJjdXN0b21Hcm91cEtleVwiXG4gICAgICAgIChjb2x1bW5TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgICAgIFthY3Rpb25Db2x1bW5Qb3NpdGlvbl09XCJhY3Rpb25Db2x1bW5Qb3NpdGlvblwiXG4gICAgICAgIChhY3Rpb25Db2x1bW5Db25maWdDaGFuZ2VkKT1cIm9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgID48L29jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInAtM1wiPlxuICA8b2N4LWRhdGEtdmlld1xuICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgIFt0aXRsZUxpbmVJZF09XCJ0aXRsZUxpbmVJZFwiXG4gICAgW3N1YnRpdGxlTGluZUlkc109XCJzdWJ0aXRsZUxpbmVJZHNcIlxuICAgIFtjbGllbnRTaWRlU29ydGluZ109XCJjbGllbnRTaWRlU29ydGluZ1wiXG4gICAgW2NsaWVudFNpZGVGaWx0ZXJpbmddPVwiY2xpZW50U2lkZUZpbHRlcmluZ1wiXG4gICAgW3BhZ2VTaXplc109XCJwYWdlU2l6ZXNcIlxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgW3Nob3dBbGxPcHRpb25dPVwic2hvd0FsbE9wdGlvblwiXG4gICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlSZXN1bHRzTWVzc2FnZVwiXG4gICAgW2xheW91dF09XCJsYXlvdXRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkZWxldGVQZXJtaXNzaW9uXT1cImRlbGV0ZVBlcm1pc3Npb25cIlxuICAgIFtlZGl0UGVybWlzc2lvbl09XCJlZGl0UGVybWlzc2lvblwiXG4gICAgW3ZpZXdQZXJtaXNzaW9uXT1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICBbZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXT1cImRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2RlbGV0ZUFjdGlvblZpc2libGVGaWVsZF09XCJkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXT1cImVkaXRBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXT1cImVkaXRBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXT1cInZpZXdBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXT1cInZpZXdBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFthZGRpdGlvbmFsQWN0aW9uc109XCJhZGRpdGlvbmFsQWN0aW9uc1wiXG4gICAgW2xpc3RHcmlkUGFnaW5hdG9yXT1cImxpc3RHcmlkUGFnaW5hdG9yXCJcbiAgICBbdGFibGVQYWdpbmF0b3JdPVwidGFibGVQYWdpbmF0b3JcIlxuICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzXCJcbiAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgW2FjdGlvbkNvbHVtblBvc2l0aW9uXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uXCJcbiAgICBbc3RyaW5nVGFibGVDZWxsVGVtcGxhdGVdPVwiX3N0cmluZ1RhYmxlQ2VsbCA/IHN0cmluZ1RhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUNlbGwgPyBudW1iZXJUYWJsZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21UYWJsZUNlbGxUZW1wbGF0ZV09XCJfY3VzdG9tVGFibGVDZWxsID8gY3VzdG9tVGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9kYXRlVGFibGVDZWxsID8gZGF0ZVRhYmxlQ2VsbCA6IF90YWJsZURhdGVDZWxsID8gdGFibGVEYXRlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPyByZWxhdGl2ZURhdGVUYWJsZUNlbGwgOiBfdGFibGVSZWxhdGl2ZURhdGVDZWxsID8gdGFibGVSZWxhdGl2ZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdGFibGVDZWxsVGVtcGxhdGVdPVwiX3RhYmxlQ2VsbCA/IHRhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgOiBfdGFibGVUcmFuc2xhdGlvbktleUNlbGwgPyB0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBncmlkSXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZV09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID8gbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdEl0ZW1UZW1wbGF0ZV09XCJfbGlzdEl0ZW0gPyBsaXN0SXRlbSA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RWYWx1ZVRlbXBsYXRlXT1cIl9saXN0VmFsdWUgPyBsaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFt0cmFuc2xhdGlvbktleUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA/IHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyTGlzdFZhbHVlVGVtcGxhdGVdPVwiX251bWJlckxpc3RWYWx1ZSA/IG51bWJlckxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPyByZWxhdGl2ZURhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21MaXN0VmFsdWVUZW1wbGF0ZV09XCJfY3VzdG9tTGlzdFZhbHVlID8gY3VzdG9tTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbc3RyaW5nTGlzdFZhbHVlVGVtcGxhdGVdPVwiX3N0cmluZ0xpc3RWYWx1ZSA/IHN0cmluZ0xpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVMaXN0VmFsdWVUZW1wbGF0ZV09XCJfZGF0ZUxpc3RWYWx1ZSA/IGRhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtncmlkSXRlbVRlbXBsYXRlXT1cIl9ncmlkSXRlbSA/IGdyaWRJdGVtICA6IHVuZGVmaW5lZFwiXG4gICAgW3RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl90YWJsZUZpbHRlckNlbGwgPyB0YWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2RhdGVUYWJsZUZpbHRlckNlbGwgPyBkYXRlVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCA/IGN1c3RvbVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUZpbHRlckNlbGwgPyBudW1iZXJUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtzdHJpbmdUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsID8gc3RyaW5nVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIChzb3J0ZWQpPVwic29ydGluZygkZXZlbnQpXCJcbiAgICAoZmlsdGVyZWQpPVwiZmlsdGVyaW5nKCRldmVudClcIlxuICAgIFt0b3RhbFJlY29yZHNPblNlcnZlcl09XCJ0b3RhbFJlY29yZHNPblNlcnZlclwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ0tleV09XCJjdXJyZW50UGFnZVNob3dpbmdLZXlcIlxuICAgIFtjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleV09XCJjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleVwiXG4gICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhVmlld0NvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgIFtwYXJlbnRUZW1wbGF0ZXNdPVwidGVtcGxhdGVzJCB8IGFzeW5jXCJcbiAgICBbdGFibGVBbGxvd1NlbGVjdEFsbF09XCJ0YWJsZUFsbG93U2VsZWN0QWxsXCJcbiAgICBbdGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRdPVwidGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRcIlxuICA+XG4gIDwvb2N4LWRhdGEtdmlldz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudD5cbiAgPG9jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uXG4gICAgKm5nSWY9XCJsYXlvdXQgPT09ICd0YWJsZSdcIlxuICAgIFtzZWxlY3RlZEdyb3VwS2V5XT1cInNlbGVjdGVkR3JvdXBLZXkgPz8gZGVmYXVsdEdyb3VwS2V5XCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZGVmYXVsdEdyb3VwS2V5XT1cImRlZmF1bHRHcm91cEtleSAhPT0gY3VzdG9tR3JvdXBLZXkgPyBkZWZhdWx0R3JvdXBLZXkgOiAnJ1wiXG4gICAgW2N1c3RvbUdyb3VwS2V5XT1cImN1c3RvbUdyb3VwS2V5XCJcbiAgICBbcGxhY2Vob2xkZXJLZXldPVwiZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXlcIlxuICAgIChncm91cFNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gID48L29jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdHJpbmdUYWJsZUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+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=