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

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 (126) hide show
  1. package/assets/i18n/de.json +3 -3
  2. package/assets/i18n/en.json +3 -3
  3. package/assets/styles.scss +0 -4
  4. package/fesm2022/onecx-angular-accelerator-testing.mjs +90 -28
  5. package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -1
  6. package/fesm2022/onecx-angular-accelerator.mjs +941 -510
  7. package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
  8. package/index.d.ts +8 -0
  9. package/lib/angular-accelerator-primeng.module.d.ts +6 -4
  10. package/lib/angular-accelerator.module.d.ts +26 -20
  11. package/lib/components/content/content.component.d.ts +13 -0
  12. package/lib/components/content-container/content-container.component.d.ts +19 -0
  13. package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +0 -2
  14. package/lib/components/data-list-grid/data-list-grid.component.d.ts +10 -20
  15. package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +2 -2
  16. package/lib/components/data-table/data-table.component.d.ts +12 -20
  17. package/lib/components/data-view/data-view.component.d.ts +10 -8
  18. package/lib/components/diagram/diagram.component.d.ts +0 -2
  19. package/lib/components/filter-view/filter-view.component.d.ts +3 -3
  20. package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +0 -2
  21. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +10 -6
  22. package/lib/components/lifecycle/lifecycle.component.d.ts +12 -0
  23. package/lib/components/page-header/page-header.component.d.ts +1 -4
  24. package/lib/components/search-header/search-header.component.d.ts +3 -4
  25. package/lib/directives/advanced.directive.d.ts +5 -6
  26. package/lib/directives/content-container.directive.d.ts +23 -0
  27. package/lib/directives/content.directive.d.ts +21 -0
  28. package/lib/directives/if-breakpoint.directive.d.ts +3 -4
  29. package/lib/directives/if-permission.directive.d.ts +7 -9
  30. package/lib/directives/src.directive.d.ts +2 -3
  31. package/lib/directives/template.directive.d.ts +9 -0
  32. package/lib/directives/tooltipOnOverflow.directive.d.ts +2 -3
  33. package/lib/model/filter.model.d.ts +16 -4
  34. package/lib/pipes/dynamic.pipe.d.ts +2 -2
  35. package/lib/pipes/ocxtimeago.pipe.d.ts +3 -3
  36. package/lib/services/breadcrumb.service.d.ts +2 -4
  37. package/lib/services/translation-connection.service.d.ts +10 -0
  38. package/lib/utils/criteria.utils.d.ts +3 -3
  39. package/lib/utils/data-operation-strategy.d.ts +20 -0
  40. package/lib/utils/dateutils.d.ts +0 -1
  41. package/lib/utils/provide-connection-service.d.ts +6 -0
  42. package/migrations.json +26 -0
  43. package/package.json +22 -20
  44. package/testing/column-group-selection.harness.d.ts +2 -2
  45. package/testing/content-container.harness.d.ts +7 -0
  46. package/testing/content.harness.d.ts +10 -0
  47. package/testing/data-layout-selection.harness.d.ts +7 -6
  48. package/testing/index.d.ts +3 -0
  49. package/testing/interactive-data-view.harness.d.ts +5 -3
  50. package/testing/lifecycle.harness.d.ts +6 -0
  51. package/esm2022/index.mjs +0 -63
  52. package/esm2022/lib/angular-accelerator-primeng.module.mjs +0 -146
  53. package/esm2022/lib/angular-accelerator.module.mjs +0 -209
  54. package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +0 -90
  55. package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +0 -184
  56. package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +0 -73
  57. package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +0 -615
  58. package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +0 -107
  59. package/esm2022/lib/components/data-loading-error/data-loading-error.component.mjs +0 -28
  60. package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +0 -134
  61. package/esm2022/lib/components/data-table/data-table.component.mjs +0 -840
  62. package/esm2022/lib/components/data-view/data-view.component.mjs +0 -672
  63. package/esm2022/lib/components/diagram/diagram.component.mjs +0 -183
  64. package/esm2022/lib/components/filter-view/filter-view.component.mjs +0 -263
  65. package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +0 -133
  66. package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +0 -724
  67. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -238
  68. package/esm2022/lib/components/search-header/search-header.component.mjs +0 -199
  69. package/esm2022/lib/directives/advanced.directive.mjs +0 -36
  70. package/esm2022/lib/directives/if-breakpoint.directive.mjs +0 -47
  71. package/esm2022/lib/directives/if-permission.directive.mjs +0 -95
  72. package/esm2022/lib/directives/src.directive.mjs +0 -65
  73. package/esm2022/lib/directives/tooltipOnOverflow.directive.mjs +0 -48
  74. package/esm2022/lib/functions/at-least-one-field-filled-validator.mjs +0 -7
  75. package/esm2022/lib/functions/flatten-object.mjs +0 -20
  76. package/esm2022/lib/injection-tokens/has-permission-checker.mjs +0 -10
  77. package/esm2022/lib/model/breadcrumb-menu-item.model.mjs +0 -2
  78. package/esm2022/lib/model/column-type.model.mjs +0 -16
  79. package/esm2022/lib/model/data-action.mjs +0 -2
  80. package/esm2022/lib/model/data-column-name-id.model.mjs +0 -2
  81. package/esm2022/lib/model/data-sort-direction.mjs +0 -2
  82. package/esm2022/lib/model/data-table-column.model.mjs +0 -2
  83. package/esm2022/lib/model/diagram-column.mjs +0 -2
  84. package/esm2022/lib/model/diagram-data.mjs +0 -2
  85. package/esm2022/lib/model/diagram-type.mjs +0 -2
  86. package/esm2022/lib/model/filter.model.mjs +0 -6
  87. package/esm2022/lib/pipes/dynamic.pipe.mjs +0 -58
  88. package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +0 -107
  89. package/esm2022/lib/services/breadcrumb.service.mjs +0 -128
  90. package/esm2022/lib/services/translation-cache.service.mjs +0 -44
  91. package/esm2022/lib/utils/async-translate-loader.utils.mjs +0 -15
  92. package/esm2022/lib/utils/caching-translate-loader.utils.mjs +0 -18
  93. package/esm2022/lib/utils/colorutils.mjs +0 -19
  94. package/esm2022/lib/utils/create-remote-component-and-mfe-translate-loader.utils.mjs +0 -12
  95. package/esm2022/lib/utils/create-remote-component-translate-loader.utils.mjs +0 -25
  96. package/esm2022/lib/utils/create-translate-loader.utils.mjs +0 -30
  97. package/esm2022/lib/utils/criteria.utils.mjs +0 -28
  98. package/esm2022/lib/utils/dateutils.mjs +0 -38
  99. package/esm2022/lib/utils/dynamic-locale-id.mjs +0 -21
  100. package/esm2022/lib/utils/enum-to-dropdown-options.utils.mjs +0 -8
  101. package/esm2022/lib/utils/filter.utils.mjs +0 -6
  102. package/esm2022/lib/utils/objectutils.mjs +0 -30
  103. package/esm2022/lib/utils/primeicon.utils.mjs +0 -2
  104. package/esm2022/lib/utils/rxjs-utils.mjs +0 -13
  105. package/esm2022/lib/utils/string-and-array-helper-functions.utils.mjs +0 -22
  106. package/esm2022/lib/utils/template.utils.mjs +0 -11
  107. package/esm2022/lib/utils/translate.combined.loader.mjs +0 -42
  108. package/esm2022/onecx-angular-accelerator.mjs +0 -5
  109. package/esm2022/testing/column-group-selection.harness.mjs +0 -10
  110. package/esm2022/testing/custom-group-column-selector.harness.mjs +0 -31
  111. package/esm2022/testing/data-layout-selection.harness.mjs +0 -32
  112. package/esm2022/testing/data-list-grid.harness.mjs +0 -51
  113. package/esm2022/testing/data-table.harness.mjs +0 -69
  114. package/esm2022/testing/data-view.harness.mjs +0 -12
  115. package/esm2022/testing/default-grid-item.harness.mjs +0 -24
  116. package/esm2022/testing/default-list-item.harness.mjs +0 -26
  117. package/esm2022/testing/diagram.harness.mjs +0 -22
  118. package/esm2022/testing/filter-view.harness.mjs +0 -18
  119. package/esm2022/testing/group-by-count-diagram.harness.mjs +0 -10
  120. package/esm2022/testing/index.mjs +0 -23
  121. package/esm2022/testing/interactive-data-view.harness.mjs +0 -21
  122. package/esm2022/testing/more-actions-menu-button.harness.mjs +0 -35
  123. package/esm2022/testing/onecx-angular-accelerator-testing.mjs +0 -5
  124. package/esm2022/testing/page-header.harness.mjs +0 -81
  125. package/esm2022/testing/search-header.harness.mjs +0 -36
  126. package/esm2022/testing/slot.harness.mjs +0 -5
@@ -1,672 +0,0 @@
1
- import { Component, ContentChild, ContentChildren, EventEmitter, Injector, Input, Output, QueryList, ViewChild, } from '@angular/core';
2
- import { DataListGridComponent, } from '../data-list-grid/data-list-grid.component';
3
- import { DataTableComponent } from '../data-table/data-table.component';
4
- import { BehaviorSubject, ReplaySubject, timestamp, combineLatest, map, startWith } from 'rxjs';
5
- import { orderAndMergeValuesByTimestamp } from '../../utils/rxjs-utils';
6
- import { PrimeTemplate } from 'primeng/api';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "../data-list-grid/data-list-grid.component";
10
- import * as i3 from "../data-table/data-table.component";
11
- export class DataViewComponent {
12
- set listGrid(ref) {
13
- this._dataListGridComponent = ref;
14
- this.registerEventListenerForListGrid();
15
- }
16
- get listGrid() {
17
- return this._dataListGridComponent;
18
- }
19
- set dataTable(ref) {
20
- this._dataTableComponent = ref;
21
- this.registerEventListenerForDataTable();
22
- }
23
- get dataTable() {
24
- return this._dataTableComponent;
25
- }
26
- get paginator() {
27
- return this.listGridPaginator && this.tablePaginator;
28
- }
29
- set paginator(value) {
30
- this.listGridPaginator = value;
31
- this.tablePaginator = value;
32
- }
33
- get _stringTableCell() {
34
- return this.stringTableCellTemplate || this.stringTableCellChildTemplate;
35
- }
36
- get _numberTableCell() {
37
- return this.numberTableCellTemplate || this.numberTableCellChildTemplate;
38
- }
39
- get _customTableCell() {
40
- return this.customTableCellTemplate || this.customTableCellChildTemplate;
41
- }
42
- /**
43
- * @deprecated Will be replaced by dateTableCellTemplate
44
- */
45
- get tableDateCellTemplate() {
46
- return this.dateTableCellTemplate;
47
- }
48
- set tableDateCellTemplate(value) {
49
- this.dateTableCellTemplate = value;
50
- }
51
- get _dateTableCell() {
52
- return this.dateTableCellTemplate || this.dateTableCellChildTemplate || this.tableDateCellChildTemplate;
53
- }
54
- get _tableCell() {
55
- return this.tableCellTemplate || this.tableCellChildTemplate;
56
- }
57
- /**
58
- * @deprecated Will be replaced by translationKeyTableCellTemplate
59
- */
60
- get tableTranslationKeyCellTemplate() {
61
- return this.translationKeyTableCellTemplate;
62
- }
63
- set tableTranslationKeyCellTemplate(value) {
64
- this.translationKeyTableCellTemplate = value;
65
- }
66
- get _translationKeyTableCell() {
67
- return (this.translationKeyTableCellTemplate ||
68
- this.translationKeyTableCellChildTemplate ||
69
- this.tableTranslationKeyCellChildTemplate);
70
- }
71
- get _gridItemSubtitleLines() {
72
- return this.gridItemSubtitleLinesTemplate || this.gridItemSubtitleLinesChildTemplate;
73
- }
74
- get _listItemSubtitleLines() {
75
- return this.listItemSubtitleLinesTemplate || this.listItemSubtitleLinesChildTemplate;
76
- }
77
- get _gridItem() {
78
- return this.gridItemTemplate || this.gridItemChildTemplate;
79
- }
80
- get _listItem() {
81
- return this.listItemTemplate || this.listItemChildTemplate;
82
- }
83
- /**
84
- * @deprecated Will be replaced by relativeDateTableCellTemplate
85
- */
86
- get tableRelativeDateCellTemplate() {
87
- return this.relativeDateTableCellTemplate;
88
- }
89
- set tableRelativeDateCellTemplate(value) {
90
- this.relativeDateTableCellTemplate = value;
91
- }
92
- get _relativeDateTableCell() {
93
- return (this.relativeDateTableCellTemplate ||
94
- this.relativeDateTableCellChildTemplate ||
95
- this.tableRelativeDateCellChildTemplate);
96
- }
97
- get _listValue() {
98
- return this.listValueTemplate || this.listValueChildTemplate;
99
- }
100
- get _translationKeyListValue() {
101
- return this.translationKeyListValueTemplate || this.translationKeyListValueChildTemplate;
102
- }
103
- get _numberListValue() {
104
- return this.numberListValueTemplate || this.numberListValueChildTemplate;
105
- }
106
- get _relativeDateListValue() {
107
- return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate;
108
- }
109
- get _customListValue() {
110
- return this.customListValueTemplate || this.customListValueChildTemplate;
111
- }
112
- get _stringListValue() {
113
- return this.stringListValueTemplate || this.stringListValueChildTemplate;
114
- }
115
- get _dateListValue() {
116
- return this.dateListValueTemplate || this.dateListValueChildTemplate;
117
- }
118
- get _tableFilterCell() {
119
- return this.tableFilterCellTemplate || this.tableFilterCellChildTemplate;
120
- }
121
- get _dateTableFilterCell() {
122
- return this.dateTableFilterCellTemplate || this.dateTableFilterCellChildTemplate;
123
- }
124
- get _relativeDateTableFilterCell() {
125
- return this.relativeDateTableFilterCellTemplate || this.relativeDateTableFilterCellChildTemplate;
126
- }
127
- get _translationKeyTableFilterCell() {
128
- return this.translationKeyTableFilterCellTemplate || this.translationKeyTableFilterCellChildTemplate;
129
- }
130
- get _stringTableFilterCell() {
131
- return this.stringTableFilterCellTemplate || this.stringTableFilterCellChildTemplate;
132
- }
133
- get _numberTableFilterCell() {
134
- return this.numberTableFilterCellTemplate || this.numberTableFilterCellChildTemplate;
135
- }
136
- get _customTableFilterCell() {
137
- return this.customTableFilterCellTemplate || this.customTableFilterCellChildTemplate;
138
- }
139
- set parentTemplates(value) {
140
- this.parentTemplates$.next(value);
141
- }
142
- set templates(value) {
143
- this.templates$.next(value);
144
- }
145
- get viewItemObserved() {
146
- return this.injector.get('InteractiveDataViewComponent', null)?.viewItem.observed || this.viewItem.observed;
147
- }
148
- get editItemObserved() {
149
- return this.injector.get('InteractiveDataViewComponent', null)?.editItem.observed || this.editItem.observed;
150
- }
151
- get deleteItemObserved() {
152
- return this.injector.get('InteractiveDataViewComponent', null)?.deleteItem.observed || this.deleteItem.observed;
153
- }
154
- get selectionChangedObserved() {
155
- return (this.injector.get('InteractiveDataViewComponent', null)?.selectionChanged.observed ||
156
- this.selectionChanged.observed);
157
- }
158
- constructor(injector) {
159
- this.injector = injector;
160
- this.dataTableComponentState$ = new ReplaySubject(1);
161
- this.dataListGridComponentState$ = new ReplaySubject(1);
162
- this.tableAllowSelectAll = true;
163
- this.data = [];
164
- this.name = 'Data table';
165
- this.subtitleLineIds = [];
166
- this.layout = ['grid', 'list', 'table'];
167
- this.columns = [];
168
- this.clientSideSorting = true;
169
- this.clientSideFiltering = true;
170
- this.fallbackImage = 'placeholder.png';
171
- this.filters = [];
172
- this.sortField = '';
173
- this.sortDirection = "NONE" /* DataSortDirection.NONE */;
174
- this.listGridPaginator = true;
175
- this.tablePaginator = true;
176
- this.page = 0;
177
- this.currentPageShowingKey = 'OCX_DATA_TABLE.SHOWING';
178
- this.currentPageShowingWithTotalOnServerKey = 'OCX_DATA_TABLE.SHOWING_WITH_TOTAL_ON_SERVER';
179
- this.selectedRows = [];
180
- this.frozenActionColumn = false;
181
- this.actionColumnPosition = 'right';
182
- this.sortStates = ["ASCENDING" /* DataSortDirection.ASCENDING */, "DESCENDING" /* DataSortDirection.DESCENDING */];
183
- this.pageSizes = [10, 25, 50];
184
- this.showAllOption = false;
185
- this.additionalActions = [];
186
- this.filtered = new EventEmitter();
187
- this.sorted = new EventEmitter();
188
- this.deleteItem = new EventEmitter();
189
- this.viewItem = new EventEmitter();
190
- this.editItem = new EventEmitter();
191
- this.selectionChanged = new EventEmitter();
192
- this.pageChanged = new EventEmitter();
193
- this.pageSizeChanged = new EventEmitter();
194
- this.componentStateChanged = new EventEmitter();
195
- this.parentTemplates$ = new BehaviorSubject(undefined);
196
- this.templates$ = new BehaviorSubject(undefined);
197
- this.templatesForChildren$ = combineLatest([
198
- this.templates$,
199
- this.parentTemplates$,
200
- ]).pipe(map(([t, pt]) => {
201
- const ql = new QueryList();
202
- ql.reset([...(t?.toArray() ?? []), ...(pt?.toArray() ?? [])]);
203
- return ql;
204
- }));
205
- }
206
- ngOnInit() {
207
- this.firstColumnId = this.columns[0]?.id;
208
- let dataTableComponentState$ = this.dataTableComponentState$;
209
- let dataListGridComponentState$ = this.dataListGridComponentState$;
210
- if (this.layout === 'table') {
211
- dataListGridComponentState$ = dataListGridComponentState$.pipe(startWith({}));
212
- }
213
- else {
214
- dataTableComponentState$ = dataTableComponentState$.pipe(startWith({}));
215
- }
216
- combineLatest([dataTableComponentState$.pipe(timestamp()), dataListGridComponentState$.pipe(timestamp())])
217
- .pipe(map((componentStates) => {
218
- return orderAndMergeValuesByTimestamp(componentStates);
219
- }))
220
- .subscribe((val) => {
221
- this.componentStateChanged.emit(val);
222
- });
223
- }
224
- ngAfterContentInit() {
225
- this.templates$.value?.forEach((item) => {
226
- switch (item.getType()) {
227
- case 'stringTableCell':
228
- this.stringTableCellChildTemplate = item.template;
229
- break;
230
- case 'numberTableCell':
231
- this.numberTableCellChildTemplate = item.template;
232
- break;
233
- case 'customTableCell':
234
- this.customTableCellChildTemplate = item.template;
235
- break;
236
- case 'tableDateCell':
237
- this.tableDateCellChildTemplate = item.template;
238
- break;
239
- case 'dateTableCell':
240
- this.dateTableCellChildTemplate = item.template;
241
- break;
242
- case 'tableCell':
243
- this.tableCellChildTemplate = item.template;
244
- break;
245
- case 'tableTranslationKeyCell':
246
- this.tableTranslationKeyCellChildTemplate = item.template;
247
- break;
248
- case 'translationKeyTableCell':
249
- this.translationKeyTableCellChildTemplate = item.template;
250
- break;
251
- case 'gridItemSubtitleLines':
252
- this.gridItemSubtitleLinesChildTemplate = item.template;
253
- break;
254
- case 'listItemSubtitleLines':
255
- this.listItemSubtitleLinesChildTemplate = item.template;
256
- break;
257
- case 'gridItem':
258
- this.gridItemChildTemplate = item.template;
259
- break;
260
- case 'listItem':
261
- this.listItemChildTemplate = item.template;
262
- break;
263
- case 'tableRelativeDateCell':
264
- this.tableRelativeDateCellChildTemplate = item.template;
265
- break;
266
- case 'relativeDateTableCell':
267
- this.relativeDateTableCellChildTemplate = item.template;
268
- break;
269
- case 'listValue':
270
- this.listValueChildTemplate = item.template;
271
- break;
272
- case 'translationKeyListValue':
273
- this.translationKeyListValueChildTemplate = item.template;
274
- break;
275
- case 'numberListValue':
276
- this.numberListValueChildTemplate = item.template;
277
- break;
278
- case 'relativeDateListValue':
279
- this.relativeDateListValueChildTemplate = item.template;
280
- break;
281
- case 'customListValue':
282
- this.customListValueChildTemplate = item.template;
283
- break;
284
- case 'stringListValue':
285
- this.stringListValueChildTemplate = item.template;
286
- break;
287
- case 'dateListValue':
288
- this.dateListValueChildTemplate = item.template;
289
- break;
290
- case 'tableFilterCell':
291
- this.tableFilterCellChildTemplate = item.template;
292
- break;
293
- case 'dateTableFilterCell':
294
- this.dateTableFilterCellChildTemplate = item.template;
295
- break;
296
- case 'relativeDateTableFilterCell':
297
- this.relativeDateTableFilterCellChildTemplate = item.template;
298
- break;
299
- case 'translationKeyTableFilterCell':
300
- this.translationKeyTableFilterCellChildTemplate = item.template;
301
- break;
302
- case 'stringTableFilterCell':
303
- this.stringTableFilterCellChildTemplate = item.template;
304
- break;
305
- case 'numberTableFilterCell':
306
- this.numberTableFilterCellChildTemplate = item.template;
307
- break;
308
- case 'customTableFilterCell':
309
- this.customTableFilterCellChildTemplate = item.template;
310
- break;
311
- }
312
- });
313
- }
314
- ngDoCheck() {
315
- this.registerEventListenerForDataTable();
316
- this.registerEventListenerForListGrid();
317
- }
318
- registerEventListenerForListGrid() {
319
- if (this.layout !== 'table') {
320
- if (this.deleteItem.observed) {
321
- this.isDeleteItemObserved = true;
322
- if (!this._dataListGridComponent?.deleteItem.observed) {
323
- this._dataListGridComponent?.deleteItem.subscribe((event) => {
324
- this.deletingElement(event);
325
- });
326
- }
327
- }
328
- if (this.viewItem.observed) {
329
- this.isViewItemObserved = true;
330
- if (!this._dataListGridComponent?.viewItem.observed) {
331
- this._dataListGridComponent?.viewItem.subscribe((event) => {
332
- this.viewingElement(event);
333
- });
334
- }
335
- }
336
- if (this.editItem.observed) {
337
- this.IsEditItemObserved = true;
338
- if (!this._dataListGridComponent?.editItem.observed) {
339
- this._dataListGridComponent?.editItem.subscribe((event) => {
340
- this.editingElement(event);
341
- });
342
- }
343
- }
344
- }
345
- }
346
- registerEventListenerForDataTable() {
347
- if (this.layout === 'table') {
348
- if (this.deleteItem.observed) {
349
- this.isDeleteItemObserved = true;
350
- if (!this._dataTableComponent?.deleteTableRow.observed) {
351
- this._dataTableComponent?.deleteTableRow.subscribe((event) => {
352
- this.deletingElement(event);
353
- });
354
- }
355
- }
356
- if (this.viewItem.observed) {
357
- this.isViewItemObserved = true;
358
- if (!this._dataTableComponent?.viewTableRow.observed) {
359
- this._dataTableComponent?.viewTableRow.subscribe((event) => {
360
- this.viewingElement(event);
361
- });
362
- }
363
- }
364
- if (this.editItem.observed) {
365
- this.IsEditItemObserved = true;
366
- if (!this._dataTableComponent?.editTableRow.observed) {
367
- this._dataTableComponent?.editTableRow.subscribe((event) => {
368
- this.editingElement(event);
369
- });
370
- }
371
- }
372
- if (this.selectionChangedObserved) {
373
- if (!this._dataTableComponent?.selectionChanged.observed) {
374
- this._dataTableComponent?.selectionChanged.subscribe((event) => {
375
- this.onRowSelectionChange(event);
376
- });
377
- }
378
- }
379
- }
380
- }
381
- filtering(event) {
382
- this.filters = event;
383
- this.filtered.emit(event);
384
- }
385
- sorting(event) {
386
- this.sortDirection = event.sortDirection;
387
- this.sortField = event.sortColumn;
388
- this.sorted.emit(event);
389
- }
390
- deletingElement(event) {
391
- if (this.isDeleteItemObserved) {
392
- this.deleteItem.emit(event);
393
- }
394
- }
395
- viewingElement(event) {
396
- if (this.isViewItemObserved) {
397
- this.viewItem.emit(event);
398
- }
399
- }
400
- editingElement(event) {
401
- if (this.IsEditItemObserved) {
402
- this.editItem.emit(event);
403
- }
404
- }
405
- onRowSelectionChange(event) {
406
- if (this.selectionChangedObserved) {
407
- this.selectionChanged.emit(event);
408
- }
409
- }
410
- onPageChange(event) {
411
- this.page = event;
412
- this.pageChanged.emit(event);
413
- }
414
- onPageSizeChange(event) {
415
- this.pageSize = event;
416
- this.pageSizeChanged.emit(event);
417
- }
418
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
419
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, selector: "ocx-data-view", inputs: { deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", tableSelectionEnabledField: "tableSelectionEnabledField", tableAllowSelectAll: "tableAllowSelectAll", data: "data", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", layout: "layout", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortField: "sortField", sortDirection: "sortDirection", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", page: "page", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", selectedRows: "selectedRows", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", showAllOption: "showAllOption", stringTableCellTemplate: "stringTableCellTemplate", numberTableCellTemplate: "numberTableCellTemplate", customTableCellTemplate: "customTableCellTemplate", dateTableCellTemplate: "dateTableCellTemplate", tableDateCellTemplate: "tableDateCellTemplate", tableCellTemplate: "tableCellTemplate", translationKeyTableCellTemplate: "translationKeyTableCellTemplate", tableTranslationKeyCellTemplate: "tableTranslationKeyCellTemplate", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", gridItemTemplate: "gridItemTemplate", listItemTemplate: "listItemTemplate", relativeDateTableCellTemplate: "relativeDateTableCellTemplate", tableRelativeDateCellTemplate: "tableRelativeDateCellTemplate", listValueTemplate: "listValueTemplate", translationKeyListValueTemplate: "translationKeyListValueTemplate", numberListValueTemplate: "numberListValueTemplate", relativeDateListValueTemplate: "relativeDateListValueTemplate", customListValueTemplate: "customListValueTemplate", stringListValueTemplate: "stringListValueTemplate", dateListValueTemplate: "dateListValueTemplate", tableFilterCellTemplate: "tableFilterCellTemplate", dateTableFilterCellTemplate: "dateTableFilterCellTemplate", relativeDateTableFilterCellTemplate: "relativeDateTableFilterCellTemplate", translationKeyTableFilterCellTemplate: "translationKeyTableFilterCellTemplate", stringTableFilterCellTemplate: "stringTableFilterCellTemplate", numberTableFilterCellTemplate: "numberTableFilterCellTemplate", customTableFilterCellTemplate: "customTableFilterCellTemplate", additionalActions: "additionalActions", parentTemplates: "parentTemplates" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", selectionChanged: "selectionChanged", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, providers: [{ provide: 'DataViewComponent', useExisting: DataViewComponent }], queries: [{ propertyName: "stringTableCellChildTemplate", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCellChildTemplate", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "customTableCellChildTemplate", first: true, predicate: ["customTableCell"], descendants: true }, { propertyName: "tableDateCellChildTemplate", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "dateTableCellChildTemplate", first: true, predicate: ["dateTableCell"], descendants: true }, { propertyName: "tableCellChildTemplate", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableTranslationKeyCellChildTemplate", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "translationKeyTableCellChildTemplate", first: true, predicate: ["translationKeyTableCell"], descendants: true }, { propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "tableRelativeDateCellChildTemplate", first: true, predicate: ["tableRelativeDateCell"], descendants: true }, { propertyName: "relativeDateTableCellChildTemplate", first: true, predicate: ["relativeDateTableCell"], descendants: true }, { propertyName: "listValueChildTemplate", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValueChildTemplate", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValueChildTemplate", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValueChildTemplate", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValueChildTemplate", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValueChildTemplate", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValueChildTemplate", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "tableFilterCellChildTemplate", first: true, predicate: ["tableFilterCell"], descendants: true }, { propertyName: "dateTableFilterCellChildTemplate", first: true, predicate: ["dateFilterCell"], descendants: true }, { propertyName: "relativeDateTableFilterCellChildTemplate", first: true, predicate: ["relativeDateTableFilterCell"], descendants: true }, { propertyName: "translationKeyTableFilterCellChildTemplate", first: true, predicate: ["translationKeyTableFilterCell"], descendants: true }, { propertyName: "stringTableFilterCellChildTemplate", first: true, predicate: ["stringTableFilterCell"], descendants: true }, { propertyName: "numberTableFilterCellChildTemplate", first: true, predicate: ["numberTableFilterCell"], descendants: true }, { propertyName: "customTableFilterCellChildTemplate", first: true, predicate: ["customTableFilterCell"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "listGrid", first: true, predicate: DataListGridComponent, descendants: true }, { propertyName: "dataTable", first: true, predicate: DataTableComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"layout !== 'table'\">\n <ocx-data-list-grid\n #ocxdatalistgrid\n [name]=\"name\"\n [data]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [clientSideSorting]=\"clientSideSorting\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [showAllOption]=\"showAllOption\"\n [paginator]=\"listGridPaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n (componentStateChanged)=\"dataListGridComponentState$.next($event)\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\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 [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 [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [parentTemplates]=\"templatesForChildren$ | async\"\n >\n </ocx-data-list-grid>\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 #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 #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</div>\n\n<div *ngIf=\"layout === 'table'\">\n <ocx-data-table\n #ocxdatatable\n [rows]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortColumn]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [clientSideSorting]=\"clientSideSorting\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [showAllOption]=\"showAllOption\"\n [paginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n (componentStateChanged)=\"dataTableComponentState$.next($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\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 [stringCellTemplate]=\"_stringTableCell ? stringCell : undefined\"\n [numberCellTemplate]=\"_numberTableCell ? numberCell : undefined\"\n [customCellTemplate]=\"_customTableCell ? customCell : undefined\"\n [dateCellTemplate]=\"_dateTableCell ? dateCell : undefined\"\n [relativeDateCellTemplate]=\"_relativeDateTableCell ? relativeDateCell : undefined\"\n [cellTemplate]=\"_tableCell ? cell : undefined\"\n [translationKeyCellTemplate]=\"_translationKeyTableCell ? translationKeyCell : undefined\"\n [filterCellTemplate]=\"_tableFilterCell ? filterCell : undefined\"\n [dateFilterCellTemplate]=\"_dateTableFilterCell ? dateFilterCell : undefined\"\n [customFilterCellTemplate]=\"_customTableFilterCell ? customFilterCell : undefined\"\n [numberFilterCellTemplate]=\"_numberTableFilterCell ? numberFilterCell : undefined\"\n [stringFilterCellTemplate]=\"_stringTableFilterCell ? stringFilterCell : undefined\"\n [relativeDateFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateFilterCell : undefined\"\n [translationKeyFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n [parentTemplates]=\"templatesForChildren$ | async\"\n [allowSelectAll]=\"tableAllowSelectAll\"\n [selectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-table>\n <ng-template #stringCell 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 #numberCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableCell\"\n [ngTemplateOutlet]=\"_numberTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #customCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableCell\"\n [ngTemplateOutlet]=\"_customTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #dateCell 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 #relativeDateCell 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 #cell 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 #translationKeyCell 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 #stringFilterCell 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 #filterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableFilterCell\"\n [ngTemplateOutlet]=\"_tableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container>\n </ng-template>\n <ng-template #dateFilterCell 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 #customFilterCell 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 #numberFilterCell 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 #relativeDateFilterCell 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 #translationKeyFilterCell 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</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DataListGridComponent, selector: "ocx-data-list-grid", inputs: ["titleLineId", "subtitleLineIds", "clientSideSorting", "clientSideFiltering", "sortStates", "pageSizes", "pageSize", "showAllOption", "emptyResultsMessage", "fallbackImage", "layout", "viewPermission", "editPermission", "deletePermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "viewMenuItemKey", "editMenuItemKey", "deleteMenuItemKey", "paginator", "page", "columns", "name", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "data", "filters", "sortDirection", "sortField", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "listItemTemplate", "gridItemTemplate", "listValueTemplate", "translationKeyListValueTemplate", "numberListValueTemplate", "relativeDateListValueTemplate", "customListValueTemplate", "stringListValueTemplate", "dateListValueTemplate", "additionalActions", "parentTemplates"], outputs: ["viewItem", "editItem", "deleteItem", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "component", type: i3.DataTableComponent, selector: "ocx-data-table", inputs: ["rows", "selectedRows", "filters", "sortDirection", "sortColumn", "columns", "clientSideFiltering", "clientSideSorting", "sortStates", "pageSizes", "pageSize", "showAllOption", "emptyResultsMessage", "name", "deletePermission", "viewPermission", "editPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "selectionEnabledField", "allowSelectAll", "paginator", "page", "tableStyle", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "stringCellTemplate", "numberCellTemplate", "customCellTemplate", "dateCellTemplate", "relativeDateCellTemplate", "cellTemplate", "translationKeyCellTemplate", "stringFilterCellTemplate", "numberFilterCellTemplate", "customFilterCellTemplate", "dateFilterCellTemplate", "relativeDateFilterCellTemplate", "filterCellTemplate", "translationKeyFilterCellTemplate", "additionalActions", "frozenActionColumn", "actionColumnPosition", "parentTemplates"], outputs: ["filtered", "sorted", "viewTableRow", "editTableRow", "deleteTableRow", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
420
- }
421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, decorators: [{
422
- type: Component,
423
- args: [{ selector: 'ocx-data-view', providers: [{ provide: 'DataViewComponent', useExisting: DataViewComponent }], template: "<div *ngIf=\"layout !== 'table'\">\n <ocx-data-list-grid\n #ocxdatalistgrid\n [name]=\"name\"\n [data]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [clientSideSorting]=\"clientSideSorting\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"true\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [showAllOption]=\"showAllOption\"\n [paginator]=\"listGridPaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n (componentStateChanged)=\"dataListGridComponentState$.next($event)\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\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 [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 [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [parentTemplates]=\"templatesForChildren$ | async\"\n >\n </ocx-data-list-grid>\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 #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 #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</div>\n\n<div *ngIf=\"layout === 'table'\">\n <ocx-data-table\n #ocxdatatable\n [rows]=\"data\"\n [columns]=\"columns\"\n [filters]=\"filters\"\n [sortDirection]=\"sortDirection\"\n [sortColumn]=\"sortField\"\n [sortStates]=\"sortStates\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [clientSideSorting]=\"clientSideSorting\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [showAllOption]=\"showAllOption\"\n [paginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n (componentStateChanged)=\"dataTableComponentState$.next($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\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 [stringCellTemplate]=\"_stringTableCell ? stringCell : undefined\"\n [numberCellTemplate]=\"_numberTableCell ? numberCell : undefined\"\n [customCellTemplate]=\"_customTableCell ? customCell : undefined\"\n [dateCellTemplate]=\"_dateTableCell ? dateCell : undefined\"\n [relativeDateCellTemplate]=\"_relativeDateTableCell ? relativeDateCell : undefined\"\n [cellTemplate]=\"_tableCell ? cell : undefined\"\n [translationKeyCellTemplate]=\"_translationKeyTableCell ? translationKeyCell : undefined\"\n [filterCellTemplate]=\"_tableFilterCell ? filterCell : undefined\"\n [dateFilterCellTemplate]=\"_dateTableFilterCell ? dateFilterCell : undefined\"\n [customFilterCellTemplate]=\"_customTableFilterCell ? customFilterCell : undefined\"\n [numberFilterCellTemplate]=\"_numberTableFilterCell ? numberFilterCell : undefined\"\n [stringFilterCellTemplate]=\"_stringTableFilterCell ? stringFilterCell : undefined\"\n [relativeDateFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateFilterCell : undefined\"\n [translationKeyFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n [parentTemplates]=\"templatesForChildren$ | async\"\n [allowSelectAll]=\"tableAllowSelectAll\"\n [selectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-table>\n <ng-template #stringCell 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 #numberCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableCell\"\n [ngTemplateOutlet]=\"_numberTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #customCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableCell\"\n [ngTemplateOutlet]=\"_customTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n ></ng-template>\n <ng-template #dateCell 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 #relativeDateCell 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 #cell 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 #translationKeyCell 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 #stringFilterCell 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 #filterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableFilterCell\"\n [ngTemplateOutlet]=\"_tableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container>\n </ng-template>\n <ng-template #dateFilterCell 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 #customFilterCell 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 #numberFilterCell 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 #relativeDateFilterCell 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 #translationKeyFilterCell 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</div>\n" }]
424
- }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { listGrid: [{
425
- type: ViewChild,
426
- args: [DataListGridComponent]
427
- }], dataTable: [{
428
- type: ViewChild,
429
- args: [DataTableComponent]
430
- }], deletePermission: [{
431
- type: Input
432
- }], editPermission: [{
433
- type: Input
434
- }], viewPermission: [{
435
- type: Input
436
- }], deleteActionVisibleField: [{
437
- type: Input
438
- }], deleteActionEnabledField: [{
439
- type: Input
440
- }], viewActionVisibleField: [{
441
- type: Input
442
- }], viewActionEnabledField: [{
443
- type: Input
444
- }], editActionVisibleField: [{
445
- type: Input
446
- }], editActionEnabledField: [{
447
- type: Input
448
- }], tableSelectionEnabledField: [{
449
- type: Input
450
- }], tableAllowSelectAll: [{
451
- type: Input
452
- }], data: [{
453
- type: Input
454
- }], name: [{
455
- type: Input
456
- }], titleLineId: [{
457
- type: Input
458
- }], subtitleLineIds: [{
459
- type: Input
460
- }], layout: [{
461
- type: Input
462
- }], columns: [{
463
- type: Input
464
- }], emptyResultsMessage: [{
465
- type: Input
466
- }], clientSideSorting: [{
467
- type: Input
468
- }], clientSideFiltering: [{
469
- type: Input
470
- }], fallbackImage: [{
471
- type: Input
472
- }], filters: [{
473
- type: Input
474
- }], sortField: [{
475
- type: Input
476
- }], sortDirection: [{
477
- type: Input
478
- }], listGridPaginator: [{
479
- type: Input
480
- }], tablePaginator: [{
481
- type: Input
482
- }], page: [{
483
- type: Input
484
- }], totalRecordsOnServer: [{
485
- type: Input
486
- }], currentPageShowingKey: [{
487
- type: Input
488
- }], currentPageShowingWithTotalOnServerKey: [{
489
- type: Input
490
- }], selectedRows: [{
491
- type: Input
492
- }], frozenActionColumn: [{
493
- type: Input
494
- }], actionColumnPosition: [{
495
- type: Input
496
- }], paginator: [{
497
- type: Input
498
- }], sortStates: [{
499
- type: Input
500
- }], pageSizes: [{
501
- type: Input
502
- }], pageSize: [{
503
- type: Input
504
- }], showAllOption: [{
505
- type: Input
506
- }], stringTableCellTemplate: [{
507
- type: Input
508
- }], stringTableCellChildTemplate: [{
509
- type: ContentChild,
510
- args: ['stringTableCell']
511
- }], numberTableCellTemplate: [{
512
- type: Input
513
- }], numberTableCellChildTemplate: [{
514
- type: ContentChild,
515
- args: ['numberTableCell']
516
- }], customTableCellTemplate: [{
517
- type: Input
518
- }], customTableCellChildTemplate: [{
519
- type: ContentChild,
520
- args: ['customTableCell']
521
- }], dateTableCellTemplate: [{
522
- type: Input
523
- }], tableDateCellTemplate: [{
524
- type: Input
525
- }], tableDateCellChildTemplate: [{
526
- type: ContentChild,
527
- args: ['tableDateCell']
528
- }], dateTableCellChildTemplate: [{
529
- type: ContentChild,
530
- args: ['dateTableCell']
531
- }], tableCellTemplate: [{
532
- type: Input
533
- }], tableCellChildTemplate: [{
534
- type: ContentChild,
535
- args: ['tableCell']
536
- }], translationKeyTableCellTemplate: [{
537
- type: Input
538
- }], tableTranslationKeyCellTemplate: [{
539
- type: Input
540
- }], tableTranslationKeyCellChildTemplate: [{
541
- type: ContentChild,
542
- args: ['tableTranslationKeyCell']
543
- }], translationKeyTableCellChildTemplate: [{
544
- type: ContentChild,
545
- args: ['translationKeyTableCell']
546
- }], gridItemSubtitleLinesTemplate: [{
547
- type: Input
548
- }], gridItemSubtitleLinesChildTemplate: [{
549
- type: ContentChild,
550
- args: ['gridItemSubtitleLines']
551
- }], listItemSubtitleLinesTemplate: [{
552
- type: Input
553
- }], listItemSubtitleLinesChildTemplate: [{
554
- type: ContentChild,
555
- args: ['listItemSubtitleLines']
556
- }], gridItemTemplate: [{
557
- type: Input
558
- }], gridItemChildTemplate: [{
559
- type: ContentChild,
560
- args: ['gridItem']
561
- }], listItemTemplate: [{
562
- type: Input
563
- }], listItemChildTemplate: [{
564
- type: ContentChild,
565
- args: ['listItem']
566
- }], relativeDateTableCellTemplate: [{
567
- type: Input
568
- }], tableRelativeDateCellTemplate: [{
569
- type: Input
570
- }], tableRelativeDateCellChildTemplate: [{
571
- type: ContentChild,
572
- args: ['tableRelativeDateCell']
573
- }], relativeDateTableCellChildTemplate: [{
574
- type: ContentChild,
575
- args: ['relativeDateTableCell']
576
- }], listValueTemplate: [{
577
- type: Input
578
- }], listValueChildTemplate: [{
579
- type: ContentChild,
580
- args: ['listValue']
581
- }], translationKeyListValueTemplate: [{
582
- type: Input
583
- }], translationKeyListValueChildTemplate: [{
584
- type: ContentChild,
585
- args: ['translationKeyListValue']
586
- }], numberListValueTemplate: [{
587
- type: Input
588
- }], numberListValueChildTemplate: [{
589
- type: ContentChild,
590
- args: ['numberListValue']
591
- }], relativeDateListValueTemplate: [{
592
- type: Input
593
- }], relativeDateListValueChildTemplate: [{
594
- type: ContentChild,
595
- args: ['relativeDateListValue']
596
- }], customListValueTemplate: [{
597
- type: Input
598
- }], customListValueChildTemplate: [{
599
- type: ContentChild,
600
- args: ['customListValue']
601
- }], stringListValueTemplate: [{
602
- type: Input
603
- }], stringListValueChildTemplate: [{
604
- type: ContentChild,
605
- args: ['stringListValue']
606
- }], dateListValueTemplate: [{
607
- type: Input
608
- }], dateListValueChildTemplate: [{
609
- type: ContentChild,
610
- args: ['dateListValue']
611
- }], tableFilterCellTemplate: [{
612
- type: Input
613
- }], tableFilterCellChildTemplate: [{
614
- type: ContentChild,
615
- args: ['tableFilterCell']
616
- }], dateTableFilterCellTemplate: [{
617
- type: Input
618
- }], dateTableFilterCellChildTemplate: [{
619
- type: ContentChild,
620
- args: ['dateFilterCell']
621
- }], relativeDateTableFilterCellTemplate: [{
622
- type: Input
623
- }], relativeDateTableFilterCellChildTemplate: [{
624
- type: ContentChild,
625
- args: ['relativeDateTableFilterCell']
626
- }], translationKeyTableFilterCellTemplate: [{
627
- type: Input
628
- }], translationKeyTableFilterCellChildTemplate: [{
629
- type: ContentChild,
630
- args: ['translationKeyTableFilterCell']
631
- }], stringTableFilterCellTemplate: [{
632
- type: Input
633
- }], stringTableFilterCellChildTemplate: [{
634
- type: ContentChild,
635
- args: ['stringTableFilterCell']
636
- }], numberTableFilterCellTemplate: [{
637
- type: Input
638
- }], numberTableFilterCellChildTemplate: [{
639
- type: ContentChild,
640
- args: ['numberTableFilterCell']
641
- }], customTableFilterCellTemplate: [{
642
- type: Input
643
- }], customTableFilterCellChildTemplate: [{
644
- type: ContentChild,
645
- args: ['customTableFilterCell']
646
- }], additionalActions: [{
647
- type: Input
648
- }], filtered: [{
649
- type: Output
650
- }], sorted: [{
651
- type: Output
652
- }], deleteItem: [{
653
- type: Output
654
- }], viewItem: [{
655
- type: Output
656
- }], editItem: [{
657
- type: Output
658
- }], selectionChanged: [{
659
- type: Output
660
- }], pageChanged: [{
661
- type: Output
662
- }], pageSizeChanged: [{
663
- type: Output
664
- }], componentStateChanged: [{
665
- type: Output
666
- }], parentTemplates: [{
667
- type: Input
668
- }], templates: [{
669
- type: ContentChildren,
670
- args: [PrimeTemplate]
671
- }] } });
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxxQkFBcUIsR0FHdEIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNuRCxPQUFPLEVBQWEsa0JBQWtCLEVBQTJCLE1BQU0sb0NBQW9DLENBQUE7QUFJM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7Ozs7O0FBYTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsSUFBc0MsUUFBUSxDQUFDLEdBQXNDO1FBQ25GLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUE7UUFDakMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUE7SUFDekMsQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFBO0lBQ3BDLENBQUM7SUFHRCxJQUFtQyxTQUFTLENBQUMsR0FBbUM7UUFDOUUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtRQUM5QixJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQTtJQUMxQyxDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUE7SUFDakMsQ0FBQztJQXVDRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFBO0lBQ3RELENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7SUFDN0IsQ0FBQztJQVNELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQTtJQUMxRSxDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFBO0lBQzFFLENBQUM7SUFhRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUE7SUFDMUUsQ0FBQztJQUdEOztPQUVHO0lBQ0gsSUFDSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUE7SUFDbkMsQ0FBQztJQUNELElBQUkscUJBQXFCLENBQUMsS0FBbUM7UUFDM0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBTUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUE7SUFDekcsQ0FBQztJQUlELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtJQUM5RCxDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUNJLCtCQUErQjtRQUNqQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQTtJQUM3QyxDQUFDO0lBQ0QsSUFBSSwrQkFBK0IsQ0FBQyxLQUFtQztRQUNyRSxJQUFJLENBQUMsK0JBQStCLEdBQUcsS0FBSyxDQUFBO0lBQzlDLENBQUM7SUFNRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLENBQ0wsSUFBSSxDQUFDLCtCQUErQjtZQUNwQyxJQUFJLENBQUMsb0NBQW9DO1lBQ3pDLElBQUksQ0FBQyxvQ0FBb0MsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFJRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxJQUFJLENBQUMsa0NBQWtDLENBQUE7SUFDdEYsQ0FBQztJQUlELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixJQUFJLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQTtJQUN0RixDQUFDO0lBR0QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFBO0lBQzVELENBQUM7SUFJRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUE7SUFDNUQsQ0FBQztJQUdEOztPQUVHO0lBQ0gsSUFDSSw2QkFBNkI7UUFDL0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUE7SUFDM0MsQ0FBQztJQUNELElBQUksNkJBQTZCLENBQUMsS0FBbUM7UUFDbkUsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQTtJQUM1QyxDQUFDO0lBTUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxDQUNMLElBQUksQ0FBQyw2QkFBNkI7WUFDbEMsSUFBSSxDQUFDLGtDQUFrQztZQUN2QyxJQUFJLENBQUMsa0NBQWtDLENBQ3hDLENBQUE7SUFDSCxDQUFDO0lBSUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFBO0lBQzlELENBQUM7SUFHRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQywrQkFBK0IsSUFBSSxJQUFJLENBQUMsb0NBQW9DLENBQUE7SUFDMUYsQ0FBQztJQUdELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQTtJQUMxRSxDQUFDO0lBR0QsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsNkJBQTZCLElBQUksSUFBSSxDQUFDLGtDQUFrQyxDQUFBO0lBQ3RGLENBQUM7SUFhRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUE7SUFDMUUsQ0FBQztJQUdELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQTtJQUMxRSxDQUFDO0lBR0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQTtJQUN0RSxDQUFDO0lBR0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFBO0lBQzFFLENBQUM7SUFHRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLENBQUE7SUFDbEYsQ0FBQztJQUdELElBQUksNEJBQTRCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLG1DQUFtQyxJQUFJLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQTtJQUNsRyxDQUFDO0lBS0QsSUFBSSw4QkFBOEI7UUFDaEMsT0FBTyxJQUFJLENBQUMscUNBQXFDLElBQUksSUFBSSxDQUFDLDBDQUEwQyxDQUFBO0lBQ3RHLENBQUM7SUFHRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxJQUFJLENBQUMsa0NBQWtDLENBQUE7SUFDdEYsQ0FBQztJQUdELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixJQUFJLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQTtJQUN0RixDQUFDO0lBYUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsNkJBQTZCLElBQUksSUFBSSxDQUFDLGtDQUFrQyxDQUFBO0lBQ3RGLENBQUM7SUFxQkQsSUFDSSxlQUFlLENBQUMsS0FBa0Q7UUFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBS0QsSUFDSSxTQUFTLENBQUMsS0FBMkM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQWFELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQTtJQUM3RyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFBO0lBQzdHLENBQUM7SUFDRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUE7SUFDakgsQ0FBQztJQUNELElBQUksd0JBQXdCO1FBQzFCLE9BQU8sQ0FDTCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO1lBQ2xGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQy9CLENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXZVdEMsNkJBQXdCLEdBQUcsSUFBSSxhQUFhLENBQTBCLENBQUMsQ0FBQyxDQUFBO1FBQ3hFLGdDQUEyQixHQUFHLElBQUksYUFBYSxDQUE2QixDQUFDLENBQUMsQ0FBQTtRQVlyRSx3QkFBbUIsR0FBRyxJQUFJLENBQUE7UUFDMUIsU0FBSSxHQUFzQixFQUFFLENBQUE7UUFDNUIsU0FBSSxHQUFHLFlBQVksQ0FBQTtRQUVuQixvQkFBZSxHQUFhLEVBQUUsQ0FBQTtRQUM5QixXQUFNLEdBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZDLFlBQU8sR0FBc0IsRUFBRSxDQUFBO1FBRS9CLHNCQUFpQixHQUFHLElBQUksQ0FBQTtRQUN4Qix3QkFBbUIsR0FBRyxJQUFJLENBQUE7UUFDMUIsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQTtRQUNqQyxZQUFPLEdBQWEsRUFBRSxDQUFBO1FBQ3RCLGNBQVMsR0FBUSxFQUFFLENBQUE7UUFDbkIsa0JBQWEsdUNBQTRDO1FBQ3pELHNCQUFpQixHQUFHLElBQUksQ0FBQTtRQUN4QixtQkFBYyxHQUFHLElBQUksQ0FBQTtRQUNyQixTQUFJLEdBQUcsQ0FBQyxDQUFBO1FBRVIsMEJBQXFCLEdBQUcsd0JBQXdCLENBQUE7UUFDaEQsMkNBQXNDLEdBQUcsNkNBQTZDLENBQUE7UUFDdEYsaUJBQVksR0FBVSxFQUFFLENBQUE7UUFDeEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFBO1FBQzFCLHlCQUFvQixHQUFxQixPQUFPLENBQUE7UUFXaEQsZUFBVSxHQUF3QixnR0FBMkQsQ0FBQTtRQUM3RixjQUFTLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWxDLGtCQUFhLEdBQUcsS0FBSyxDQUFBO1FBMk5yQixzQkFBaUIsR0FBaUIsRUFBRSxDQUFBO1FBRW5DLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFBO1FBQ3ZDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO1FBQ2pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQTtRQUNoRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7UUFDOUMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFBO1FBQzlDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFTLENBQUE7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFBO1FBQ3hDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQTtRQUM1QywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQTtRQU01RSxxQkFBZ0IsR0FBaUUsSUFBSSxlQUFlLENBRWxHLFNBQVMsQ0FBQyxDQUFBO1FBTVosZUFBVSxHQUEwRCxJQUFJLGVBQWUsQ0FFckYsU0FBUyxDQUFDLENBQUE7UUFNWiwwQkFBcUIsR0FBcUQsYUFBYSxDQUFDO1lBQ3RGLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQjtTQUN0QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBaUIsQ0FBQTtZQUN6QyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM3RCxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUMsQ0FBQyxDQUNILENBQUE7SUFrQndDLENBQUM7SUFFMUMsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUE7UUFFeEMsSUFBSSx3QkFBd0IsR0FDMUIsSUFBSSxDQUFDLHdCQUF3QixDQUFBO1FBQy9CLElBQUksMkJBQTJCLEdBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQTtRQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUIsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQy9FLENBQUM7YUFBTSxDQUFDO1lBQ04sd0JBQXdCLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFFRCxhQUFhLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZHLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN0QixPQUFPLDhCQUE4QixDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3hELENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxpQkFBaUI7b0JBQ3BCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUNqRCxNQUFLO2dCQUNQLEtBQUssaUJBQWlCO29CQUNwQixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDakQsTUFBSztnQkFDUCxLQUFLLGlCQUFpQjtvQkFDcEIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ2pELE1BQUs7Z0JBQ1AsS0FBSyxlQUFlO29CQUNsQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDL0MsTUFBSztnQkFDUCxLQUFLLGVBQWU7b0JBQ2xCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUMvQyxNQUFLO2dCQUNQLEtBQUssV0FBVztvQkFDZCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDM0MsTUFBSztnQkFDUCxLQUFLLHlCQUF5QjtvQkFDNUIsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ3pELE1BQUs7Z0JBQ1AsS0FBSyx5QkFBeUI7b0JBQzVCLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUN6RCxNQUFLO2dCQUNQLEtBQUssdUJBQXVCO29CQUMxQixJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDdkQsTUFBSztnQkFDUCxLQUFLLHVCQUF1QjtvQkFDMUIsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ3ZELE1BQUs7Z0JBQ1AsS0FBSyxVQUFVO29CQUNiLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUMxQyxNQUFLO2dCQUNQLEtBQUssVUFBVTtvQkFDYixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDMUMsTUFBSztnQkFDUCxLQUFLLHVCQUF1QjtvQkFDMUIsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ3ZELE1BQUs7Z0JBQ1AsS0FBSyx1QkFBdUI7b0JBQzFCLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUN2RCxNQUFLO2dCQUNQLEtBQUssV0FBVztvQkFDZCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDM0MsTUFBSztnQkFDUCxLQUFLLHlCQUF5QjtvQkFDNUIsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ3pELE1BQUs7Z0JBQ1AsS0FBSyxpQkFBaUI7b0JBQ3BCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUNqRCxNQUFLO2dCQUNQLEtBQUssdUJBQXVCO29CQUMxQixJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDdkQsTUFBSztnQkFDUCxLQUFLLGlCQUFpQjtvQkFDcEIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ2pELE1BQUs7Z0JBQ1AsS0FBSyxpQkFBaUI7b0JBQ3BCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUNqRCxNQUFLO2dCQUNQLEtBQUssZUFBZTtvQkFDbEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQy9DLE1BQUs7Z0JBQ1AsS0FBSyxpQkFBaUI7b0JBQ3BCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUNqRCxNQUFLO2dCQUNQLEtBQUsscUJBQXFCO29CQUN4QixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDckQsTUFBSztnQkFDUCxLQUFLLDZCQUE2QjtvQkFDaEMsSUFBSSxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQzdELE1BQUs7Z0JBQ1AsS0FBSywrQkFBK0I7b0JBQ2xDLElBQUksQ0FBQywwQ0FBMEMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUMvRCxNQUFLO2dCQUNQLEtBQUssdUJBQXVCO29CQUMxQixJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDdkQsTUFBSztnQkFDUCxLQUFLLHVCQUF1QjtvQkFDMUIsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQ3ZELE1BQUs7Z0JBQ1AsS0FBSyx1QkFBdUI7b0JBQzFCLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUN2RCxNQUFLO1lBQ1QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsZ0NBQWdDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUE7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUM3QixDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQzVCLENBQUMsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO2dCQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDNUIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlDQUFpQztRQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDN0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUM1QixDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQzVCLENBQUMsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUM3RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ2xDLENBQUMsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFBO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBWTtRQUMvQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQyxDQUFDOytHQS9qQlUsaUJBQWlCO21HQUFqQixpQkFBaUIsNnpHQUZqQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLG16R0E0VDVELGFBQWEsdUVBeFRuQixxQkFBcUIsNEVBU3JCLGtCQUFrQixnRENsRC9CLG9wWkErU0E7OzRGRHhRYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsZUFBZSxhQUdkLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxtQkFBbUIsRUFBRSxDQUFDOzZFQUl2QyxRQUFRO3NCQUE3QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFTRyxTQUFTO3NCQUEzQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFXcEIsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHNDQUFzQztzQkFBOUMsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0YsU0FBUztzQkFEWixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUMyQiw0QkFBNEI7c0JBQTVELFlBQVk7dUJBQUMsaUJBQWlCO2dCQUt0Qix1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQzJCLDRCQUE0QjtzQkFBNUQsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBU3RCLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNMkIsNEJBQTRCO3NCQUE1RCxZQUFZO3VCQUFDLGlCQUFpQjtnQkFLdEIscUJBQXFCO3NCQUE3QixLQUFLO2dCQUtGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFVeUIsMEJBQTBCO3NCQUF4RCxZQUFZO3VCQUFDLGVBQWU7Z0JBQ0UsMEJBQTBCO3NCQUF4RCxZQUFZO3VCQUFDLGVBQWU7Z0JBS3BCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDcUIsc0JBQXNCO3NCQUFoRCxZQUFZO3VCQUFDLFdBQVc7Z0JBS2hCLCtCQUErQjtzQkFBdkMsS0FBSztnQkFLRiwrQkFBK0I7c0JBRGxDLEtBQUs7Z0JBVW1DLG9DQUFvQztzQkFBNUUsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBQ0Usb0NBQW9DO3NCQUE1RSxZQUFZO3VCQUFDLHlCQUF5QjtnQkFTOUIsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNpQyxrQ0FBa0M7c0JBQXhFLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUs1Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTVCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDb0IscUJBQXFCO3NCQUE5QyxZQUFZO3VCQUFDLFVBQVU7Z0JBS2YsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNvQixxQkFBcUI7c0JBQTlDLFlBQVk7dUJBQUMsVUFBVTtnQkFLZiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBS0YsNkJBQTZCO3NCQURoQyxLQUFLO2dCQVVpQyxrQ0FBa0M7c0JBQXhFLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUNFLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBUzVCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDcUIsc0JBQXNCO3NCQUFoRCxZQUFZO3VCQUFDLFdBQVc7Z0JBSWhCLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDbUMsb0NBQW9DO3NCQUE1RSxZQUFZO3VCQUFDLHlCQUF5QjtnQkFJOUIsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUMyQiw0QkFBNEI7c0JBQTVELFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl0Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBUzVCLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNMkIsNEJBQTRCO3NCQUE1RCxZQUFZO3VCQUFDLGlCQUFpQjtnQkFJdEIsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUMyQiw0QkFBNEI7c0JBQTVELFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl0QixxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ3lCLDBCQUEwQjtzQkFBeEQsWUFBWTt1QkFBQyxlQUFlO2dCQUlwQix1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQzJCLDRCQUE0QjtzQkFBNUQsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSXRCLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDMEIsZ0NBQWdDO3NCQUEvRCxZQUFZO3VCQUFDLGdCQUFnQjtnQkFJckIsbUNBQW1DO3NCQUEzQyxLQUFLO2dCQUN1Qyx3Q0FBd0M7c0JBQXBGLFlBQVk7dUJBQUMsNkJBQTZCO2dCQUlsQyxxQ0FBcUM7c0JBQTdDLEtBQUs7Z0JBQ3lDLDBDQUEwQztzQkFBeEYsWUFBWTt1QkFBQywrQkFBK0I7Z0JBTXBDLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDaUMsa0NBQWtDO3NCQUF4RSxZQUFZO3VCQUFDLHVCQUF1QjtnQkFJNUIsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNpQyxrQ0FBa0M7c0JBQXhFLFlBQVk7dUJBQUMsdUJBQXVCO2dCQVM1Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBTWlDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSzVCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFVSCxlQUFlO3NCQURsQixLQUFLO2dCQVNGLFNBQVM7c0JBRFosZUFBZTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBEYXRhTGlzdEdyaWRDb21wb25lbnQsXG4gIERhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlLFxuICBMaXN0R3JpZERhdGEsXG59IGZyb20gJy4uL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdywgU29ydCwgRGF0YVRhYmxlQ29tcG9uZW50LCBEYXRhVGFibGVDb21wb25lbnRTdGF0ZSB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLWFjdGlvbidcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgdGltZXN0YW1wLCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAgfSBmcm9tICcuLi8uLi91dGlscy9yeGpzLXV0aWxzJ1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZmlsdGVyLm1vZGVsJ1xuXG5leHBvcnQgdHlwZSBSb3dMaXN0R3JpZERhdGEgPSBMaXN0R3JpZERhdGEgJiBSb3dcblxuZXhwb3J0IHR5cGUgRGF0YVZpZXdDb21wb25lbnRTdGF0ZSA9IERhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlICYgRGF0YVRhYmxlQ29tcG9uZW50U3RhdGVcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWRhdGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdEYXRhVmlld0NvbXBvbmVudCcsIHVzZUV4aXN0aW5nOiBEYXRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBfZGF0YUxpc3RHcmlkQ29tcG9uZW50OiBEYXRhTGlzdEdyaWRDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgQFZpZXdDaGlsZChEYXRhTGlzdEdyaWRDb21wb25lbnQpIHNldCBsaXN0R3JpZChyZWY6IERhdGFMaXN0R3JpZENvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudCA9IHJlZlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yTGlzdEdyaWQoKVxuICB9XG4gIGdldCBsaXN0R3JpZCgpOiBEYXRhTGlzdEdyaWRDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnRcbiAgfVxuXG4gIF9kYXRhVGFibGVDb21wb25lbnQ6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBAVmlld0NoaWxkKERhdGFUYWJsZUNvbXBvbmVudCkgc2V0IGRhdGFUYWJsZShyZWY6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudCA9IHJlZlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yRGF0YVRhYmxlKClcbiAgfVxuICBnZXQgZGF0YVRhYmxlKCk6IERhdGFUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudFxuICB9XG5cbiAgZGF0YVRhYmxlQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVRhYmxlQ29tcG9uZW50U3RhdGU+KDEpXG4gIGRhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlPigxKVxuXG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRQZXJtaXNzaW9uOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3UGVybWlzc2lvbjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHRhYmxlU2VsZWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdGFibGVBbGxvd1NlbGVjdEFsbCA9IHRydWVcbiAgQElucHV0KCkgZGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBASW5wdXQoKSBuYW1lID0gJ0RhdGEgdGFibGUnXG4gIEBJbnB1dCgpIHRpdGxlTGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VidGl0bGVMaW5lSWRzOiBzdHJpbmdbXSA9IFtdXG4gIEBJbnB1dCgpIGxheW91dDogYW55ID0gWydncmlkJywgJ2xpc3QnLCAndGFibGUnXVxuICBASW5wdXQoKSBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIGVtcHR5UmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBjbGllbnRTaWRlU29ydGluZyA9IHRydWVcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEZpbHRlcltdID0gW11cbiAgQElucHV0KCkgc29ydEZpZWxkOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBEYXRhU29ydERpcmVjdGlvbiA9IERhdGFTb3J0RGlyZWN0aW9uLk5PTkVcbiAgQElucHV0KCkgbGlzdEdyaWRQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHRhYmxlUGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBASW5wdXQoKSB0b3RhbFJlY29yZHNPblNlcnZlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ0tleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HJ1xuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HX1dJVEhfVE9UQUxfT05fU0VSVkVSJ1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFJvd1tdID0gW11cbiAgQElucHV0KCkgZnJvemVuQWN0aW9uQ29sdW1uID0gZmFsc2VcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1uUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnXG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0R3JpZFBhZ2luYXRvciAmJiB0aGlzLnRhYmxlUGFnaW5hdG9yXG4gIH1cbiAgc2V0IHBhZ2luYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdEdyaWRQYWdpbmF0b3IgPSB2YWx1ZVxuICAgIHRoaXMudGFibGVQYWdpbmF0b3IgPSB2YWx1ZVxuICB9XG5cbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcsIERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkddXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBzaG93QWxsT3B0aW9uID0gZmFsc2VcblxuICBASW5wdXQoKSBzdHJpbmdUYWJsZUNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdUYWJsZUNlbGwnKSBzdHJpbmdUYWJsZUNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfc3RyaW5nVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlQ2VsbFRlbXBsYXRlIHx8IHRoaXMuc3RyaW5nVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbnVtYmVyVGFibGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyVGFibGVDZWxsJykgbnVtYmVyVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX251bWJlclRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUNlbGxUZW1wbGF0ZSB8fCB0aGlzLm51bWJlclRhYmxlQ2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkVGFibGVDZWxsXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIGluIERhdGFUYWJsZSB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRUYWJsZUNlbGxcIlxuICAgKi9cbiAgQElucHV0KCkgY3VzdG9tVGFibGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlQ2VsbCcpIGN1c3RvbVRhYmxlQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9jdXN0b21UYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGFibGVDZWxsVGVtcGxhdGUgfHwgdGhpcy5jdXN0b21UYWJsZUNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBkYXRlVGFibGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgZGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdGFibGVEYXRlQ2VsbFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGxUZW1wbGF0ZVxuICB9XG4gIHNldCB0YWJsZURhdGVDZWxsVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRhdGVUYWJsZUNlbGxUZW1wbGF0ZSA9IHZhbHVlXG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgZGF0ZVRhYmxlQ2VsbENoaWxkVGVtcGxhdGVcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlRGF0ZUNlbGwnKSB0YWJsZURhdGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlVGFibGVDZWxsJykgZGF0ZVRhYmxlQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9kYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGxUZW1wbGF0ZSB8fCB0aGlzLmRhdGVUYWJsZUNlbGxDaGlsZFRlbXBsYXRlIHx8IHRoaXMudGFibGVEYXRlQ2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIHRhYmxlQ2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlQ2VsbCcpIHRhYmxlQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF90YWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVDZWxsVGVtcGxhdGUgfHwgdGhpcy50YWJsZUNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IHRyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGVcbiAgfVxuICBzZXQgdGFibGVUcmFuc2xhdGlvbktleUNlbGxUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGxUZW1wbGF0ZSA9IHZhbHVlXG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxDaGlsZFRlbXBsYXRlXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCcpIHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCcpIHRyYW5zbGF0aW9uS2V5VGFibGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGUgfHxcbiAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGxDaGlsZFRlbXBsYXRlIHx8XG4gICAgICB0aGlzLnRhYmxlVHJhbnNsYXRpb25LZXlDZWxsQ2hpbGRUZW1wbGF0ZVxuICAgIClcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RJdGVtJykgbGlzdEl0ZW1DaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW0oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1UZW1wbGF0ZSB8fCB0aGlzLmxpc3RJdGVtQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgcmVsYXRpdmVEYXRlVGFibGVDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgcmVsYXRpdmVEYXRlVGFibGVDZWxsVGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0YWJsZVJlbGF0aXZlRGF0ZUNlbGxUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGxUZW1wbGF0ZVxuICB9XG4gIHNldCB0YWJsZVJlbGF0aXZlRGF0ZUNlbGxUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucmVsYXRpdmVEYXRlVGFibGVDZWxsVGVtcGxhdGUgPSB2YWx1ZVxuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2UgYnkgcmVsYXRpdmVEYXRlVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZVxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgndGFibGVSZWxhdGl2ZURhdGVDZWxsJykgdGFibGVSZWxhdGl2ZURhdGVDZWxsQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVUYWJsZUNlbGwnKSByZWxhdGl2ZURhdGVUYWJsZUNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfcmVsYXRpdmVEYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbFRlbXBsYXRlIHx8XG4gICAgICB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbENoaWxkVGVtcGxhdGUgfHxcbiAgICAgIHRoaXMudGFibGVSZWxhdGl2ZURhdGVDZWxsQ2hpbGRUZW1wbGF0ZVxuICAgIClcbiAgfVxuXG4gIEBJbnB1dCgpIGxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RWYWx1ZScpIGxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9saXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5saXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cbiAgQElucHV0KCkgdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScpIHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuICBASW5wdXQoKSBudW1iZXJMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJMaXN0VmFsdWUnKSBudW1iZXJMaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbnVtYmVyTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm51bWJlckxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMubnVtYmVyTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZScpIHJlbGF0aXZlRGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9yZWxhdGl2ZURhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZExpc3RWYWx1ZVxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhTGlzdEdyaWQgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgRGF0YUxpc3RHcmlkIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZExpc3RWYWx1ZVwiXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdjdXN0b21MaXN0VmFsdWUnKSBjdXN0b21MaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfY3VzdG9tTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuY3VzdG9tTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIHN0cmluZ0xpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ0xpc3RWYWx1ZScpIHN0cmluZ0xpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9zdHJpbmdMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5zdHJpbmdMaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cbiAgQElucHV0KCkgZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVMaXN0VmFsdWUnKSBkYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2RhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuZGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuICBASW5wdXQoKSB0YWJsZUZpbHRlckNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0YWJsZUZpbHRlckNlbGwnKSB0YWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfdGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlIHx8IHRoaXMudGFibGVGaWx0ZXJDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIGRhdGVUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlRmlsdGVyQ2VsbCcpIGRhdGVUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfZGF0ZVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGUgfHwgdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCcpIHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGUgfHwgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cbiAgQElucHV0KCkgdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCcpIHRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsQ2hpbGRUZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPGFueT5cbiAgICB8IHVuZGVmaW5lZFxuICBnZXQgX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsVGVtcGxhdGUgfHwgdGhpcy50cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGVcbiAgfVxuICBASW5wdXQoKSBzdHJpbmdUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdUYWJsZUZpbHRlckNlbGwnKSBzdHJpbmdUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfc3RyaW5nVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlIHx8IHRoaXMuc3RyaW5nVGFibGVGaWx0ZXJDZWxsQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIEBJbnB1dCgpIG51bWJlclRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlclRhYmxlRmlsdGVyQ2VsbCcpIG51bWJlclRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9udW1iZXJUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGUgfHwgdGhpcy5udW1iZXJUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uIGZpbHRlclxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRUYWJsZUZpbHRlckNlbGxcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgaW4gRGF0YVRhYmxlIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZFRhYmxlRmlsdGVyQ2VsbFwiXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21UYWJsZUZpbHRlckNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGFuZCBpbnN0ZWFkIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgb2YgYSBzcGVjaWZpYyBjb2x1bW4gZmlsdGVyXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlRmlsdGVyQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVGaWx0ZXJDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCcpIGN1c3RvbVRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9jdXN0b21UYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGUgfHwgdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBhZGRpdGlvbmFsQWN0aW9uczogRGF0YUFjdGlvbltdID0gW11cblxuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlcltdPigpXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KClcbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgdmlld0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZWRpdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0xpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93W10+KClcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KClcbiAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG4gIEBPdXRwdXQoKSBjb21wb25lbnRTdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFWaWV3Q29tcG9uZW50U3RhdGU+KClcbiAgaXNEZWxldGVJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaXNWaWV3SXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIElzRWRpdEl0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBmaXJzdENvbHVtbklkOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBwYXJlbnRUZW1wbGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IG51bGwgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBJbnB1dCgpXG4gIHNldCBwYXJlbnRUZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnBhcmVudFRlbXBsYXRlcyQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIHRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IHRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMkLm5leHQodmFsdWUpXG4gIH1cblxuICB0ZW1wbGF0ZXNGb3JDaGlsZHJlbiQ6IE9ic2VydmFibGU8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMudGVtcGxhdGVzJCxcbiAgICB0aGlzLnBhcmVudFRlbXBsYXRlcyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdCwgcHRdKSA9PiB7XG4gICAgICBjb25zdCBxbCA9IG5ldyBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4oKVxuICAgICAgcWwucmVzZXQoWy4uLih0Py50b0FycmF5KCkgPz8gW10pLCAuLi4ocHQ/LnRvQXJyYXkoKSA/PyBbXSldKVxuICAgICAgcmV0dXJuIHFsXG4gICAgfSlcbiAgKVxuXG4gIGdldCB2aWV3SXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpPy52aWV3SXRlbS5vYnNlcnZlZCB8fCB0aGlzLnZpZXdJdGVtLm9ic2VydmVkXG4gIH1cbiAgZ2V0IGVkaXRJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCdJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50JywgbnVsbCk/LmVkaXRJdGVtLm9ic2VydmVkIHx8IHRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgfVxuICBnZXQgZGVsZXRlSXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpPy5kZWxldGVJdGVtLm9ic2VydmVkIHx8IHRoaXMuZGVsZXRlSXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBzZWxlY3Rpb25DaGFuZ2VkT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCdJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50JywgbnVsbCk/LnNlbGVjdGlvbkNoYW5nZWQub2JzZXJ2ZWQgfHxcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZFxuICAgIClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlyc3RDb2x1bW5JZCA9IHRoaXMuY29sdW1uc1swXT8uaWRcblxuICAgIGxldCBkYXRhVGFibGVDb21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8RGF0YVRhYmxlQ29tcG9uZW50U3RhdGUgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4+ID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlQ29tcG9uZW50U3RhdGUkXG4gICAgbGV0IGRhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlJDogT2JzZXJ2YWJsZTxEYXRhTGlzdEdyaWRDb21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPj4gPVxuICAgICAgdGhpcy5kYXRhTGlzdEdyaWRDb21wb25lbnRTdGF0ZSRcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09ICd0YWJsZScpIHtcbiAgICAgIGRhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlJCA9IGRhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlJC5waXBlKHN0YXJ0V2l0aCh7fSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUYWJsZUNvbXBvbmVudFN0YXRlJCA9IGRhdGFUYWJsZUNvbXBvbmVudFN0YXRlJC5waXBlKHN0YXJ0V2l0aCh7fSkpXG4gICAgfVxuXG4gICAgY29tYmluZUxhdGVzdChbZGF0YVRhYmxlQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLCBkYXRhTGlzdEdyaWRDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSldKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY29tcG9uZW50U3RhdGVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9yZGVyQW5kTWVyZ2VWYWx1ZXNCeVRpbWVzdGFtcChjb21wb25lbnRTdGF0ZXMpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh2YWwpXG4gICAgICB9KVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC52YWx1ZT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICBjYXNlICdzdHJpbmdUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuc3RyaW5nVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMubnVtYmVyVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVDZWxsQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZURhdGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0ZUNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlQ2VsbENoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlQ2VsbENoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVUcmFuc2xhdGlvbktleUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdncmlkSXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0SXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdncmlkSXRlbSc6XG4gICAgICAgICAgdGhpcy5ncmlkSXRlbUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdEl0ZW0nOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW1DaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5saXN0VmFsdWVDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubnVtYmVyTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyZWxhdGl2ZURhdGVMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21MaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzdHJpbmdMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuc3RyaW5nTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdkYXRlTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmRhdGVMaXN0VmFsdWVDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbENoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ251bWJlclRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5udW1iZXJUYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGxDaGlsZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lckZvckRhdGFUYWJsZSgpXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JMaXN0R3JpZCgpXG4gIH1cblxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JMaXN0R3JpZCgpIHtcbiAgICBpZiAodGhpcy5sYXlvdXQgIT09ICd0YWJsZScpIHtcbiAgICAgIGlmICh0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnQ/LmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnQ/LmRlbGV0ZUl0ZW0uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxldGluZ0VsZW1lbnQoZXZlbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5pc1ZpZXdJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICAgIGlmICghdGhpcy5fZGF0YUxpc3RHcmlkQ29tcG9uZW50Py52aWV3SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICAgIHRoaXMuX2RhdGFMaXN0R3JpZENvbXBvbmVudD8udmlld0l0ZW0uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aWV3aW5nRWxlbWVudChldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLklzRWRpdEl0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhTGlzdEdyaWRDb21wb25lbnQ/LmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5fZGF0YUxpc3RHcmlkQ29tcG9uZW50Py5lZGl0SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdFbGVtZW50KGV2ZW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVGFibGUoKSB7XG4gICAgaWYgKHRoaXMubGF5b3V0ID09PSAndGFibGUnKSB7XG4gICAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuaXNEZWxldGVJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICAgIGlmICghdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py5kZWxldGVUYWJsZVJvdy5vYnNlcnZlZCkge1xuICAgICAgICAgIHRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudD8uZGVsZXRlVGFibGVSb3cuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxldGluZ0VsZW1lbnQoZXZlbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5pc1ZpZXdJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICAgIGlmICghdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py52aWV3VGFibGVSb3cub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnZpZXdUYWJsZVJvdy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpZXdpbmdFbGVtZW50KGV2ZW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuSXNFZGl0SXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGFUYWJsZUNvbXBvbmVudD8uZWRpdFRhYmxlUm93Lm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5fZGF0YVRhYmxlQ29tcG9uZW50Py5lZGl0VGFibGVSb3cuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGl0aW5nRWxlbWVudChldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkT2JzZXJ2ZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnNlbGVjdGlvbkNoYW5nZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhVGFibGVDb21wb25lbnQ/LnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZShldmVudClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyaW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBldmVudFxuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudClcbiAgfVxuXG4gIHNvcnRpbmcoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IGV2ZW50LnNvcnREaXJlY3Rpb25cbiAgICB0aGlzLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRDb2x1bW5cbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgZGVsZXRpbmdFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgdmlld2luZ0VsZW1lbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGV2ZW50KVxuICAgIH1cbiAgfVxuICBlZGl0aW5nRWxlbWVudChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuSXNFZGl0SXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLmVkaXRJdGVtLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFJvd1tdKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZE9ic2VydmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudClcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImxheW91dCAhPT0gJ3RhYmxlJ1wiPlxuICA8b2N4LWRhdGEtbGlzdC1ncmlkXG4gICAgI29jeGRhdGFsaXN0Z3JpZFxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkXCJcbiAgICBbc29ydFN0YXRlc109XCJzb3J0U3RhdGVzXCJcbiAgICBbY2xpZW50U2lkZUZpbHRlcmluZ109XCJjbGllbnRTaWRlRmlsdGVyaW5nXCJcbiAgICBbY2xpZW50U2lkZVNvcnRpbmddPVwiY2xpZW50U2lkZVNvcnRpbmdcIlxuICAgIFt0aXRsZUxpbmVJZF09XCJ0aXRsZUxpbmVJZFwiXG4gICAgW3N1YnRpdGxlTGluZUlkc109XCJzdWJ0aXRsZUxpbmVJZHNcIlxuICAgIFtjbGllbnRTaWRlU29ydGluZ109XCJ0cnVlXCJcbiAgICBbcGFnZVNpemVzXT1cInBhZ2VTaXplc1wiXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICBbc2hvd0FsbE9wdGlvbl09XCJzaG93QWxsT3B0aW9uXCJcbiAgICBbcGFnaW5hdG9yXT1cImxpc3RHcmlkUGFnaW5hdG9yXCJcbiAgICBbcGFnZV09XCJwYWdlXCJcbiAgICAocGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgIChwYWdlU2l6ZUNoYW5nZWQpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFMaXN0R3JpZENvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgIFtlbXB0eVJlc3VsdHNNZXNzYWdlXT1cImVtcHR5UmVzdWx0c01lc3NhZ2VcIlxuICAgIFtsYXlvdXRdPVwibGF5b3V0XCJcbiAgICBbZGVsZXRlUGVybWlzc2lvbl09XCJkZWxldGVQZXJtaXNzaW9uXCJcbiAgICBbZWRpdFBlcm1pc3Npb25dPVwiZWRpdFBlcm1pc3Npb25cIlxuICAgIFt2aWV3UGVybWlzc2lvbl09XCJ2aWV3UGVybWlzc2lvblwiXG4gICAgW2RlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZF09XCJkZWxldGVBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRdPVwiZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkXCJcbiAgICBbZWRpdEFjdGlvbkVuYWJsZWRGaWVsZF09XCJlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgICBbZWRpdEFjdGlvblZpc2libGVGaWVsZF09XCJlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXCJcbiAgICBbdmlld0FjdGlvbkVuYWJsZWRGaWVsZF09XCJ2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgICBbdmlld0FjdGlvblZpc2libGVGaWVsZF09XCJ2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXCJcbiAgICBbYWRkaXRpb25hbEFjdGlvbnNdPVwiYWRkaXRpb25hbEFjdGlvbnNcIlxuICAgIFtncmlkSXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZV09XCJfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzID8gZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGVdPVwiX2xpc3RJdGVtU3VidGl0bGVMaW5lcyA/IGxpc3RJdGVtU3VidGl0bGVMaW5lcyA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RJdGVtVGVtcGxhdGVdPVwiX2xpc3RJdGVtID8gbGlzdEl0ZW0gOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0VmFsdWVUZW1wbGF0ZV09XCJfbGlzdFZhbHVlID8gbGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVUZW1wbGF0ZV09XCJfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWUgPyB0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlckxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9udW1iZXJMaXN0VmFsdWUgPyBudW1iZXJMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtyZWxhdGl2ZURhdGVMaXN0VmFsdWVUZW1wbGF0ZV09XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlID8gcmVsYXRpdmVEYXRlTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tTGlzdFZhbHVlVGVtcGxhdGVdPVwiX2N1c3RvbUxpc3RWYWx1ZSA/IGN1c3RvbUxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3N0cmluZ0xpc3RWYWx1ZVRlbXBsYXRlXT1cIl9zdHJpbmdMaXN0VmFsdWUgPyBzdHJpbmdMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlTGlzdFZhbHVlVGVtcGxhdGVdPVwiX2RhdGVMaXN0VmFsdWUgPyBkYXRlTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbZ3JpZEl0ZW1UZW1wbGF0ZV09XCJfZ3JpZEl0ZW0gPyBncmlkSXRlbSAgOiB1bmRlZmluZWRcIlxuICAgIFt0b3RhbFJlY29yZHNPblNlcnZlcl09XCJ0b3RhbFJlY29yZHNPblNlcnZlclwiXG4gICAgW3BhcmVudFRlbXBsYXRlc109XCJ0ZW1wbGF0ZXNGb3JDaGlsZHJlbiQgfCBhc3luY1wiXG4gID5cbiAgPC9vY3gtZGF0YS1saXN0LWdyaWQ+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX2xpc3RJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjZ3JpZEl0ZW0gbGV0LWl0ZW0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9saXN0SXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0SXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfbGlzdFZhbHVlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0VmFsdWVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI251bWJlckxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX251bWJlckxpc3RWYWx1ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbnVtYmVyTGlzdFZhbHVlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVMaXN0VmFsdWVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9jdXN0b21MaXN0VmFsdWVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmluZ0xpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3N0cmluZ0xpc3RWYWx1ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfc3RyaW5nTGlzdFZhbHVlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjZGF0ZUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwibGF5b3V0ID09PSAndGFibGUnXCI+XG4gIDxvY3gtZGF0YS10YWJsZVxuICAgICNvY3hkYXRhdGFibGVcbiAgICBbcm93c109XCJkYXRhXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbc29ydERpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCJcbiAgICBbc29ydENvbHVtbl09XCJzb3J0RmllbGRcIlxuICAgIFtzb3J0U3RhdGVzXT1cInNvcnRTdGF0ZXNcIlxuICAgIFtjbGllbnRTaWRlRmlsdGVyaW5nXT1cImNsaWVudFNpZGVGaWx0ZXJpbmdcIlxuICAgIFtjbGllbnRTaWRlU29ydGluZ109XCJjbGllbnRTaWRlU29ydGluZ1wiXG4gICAgW3BhZ2VTaXplc109XCJwYWdlU2l6ZXNcIlxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgW3Nob3dBbGxPcHRpb25dPVwic2hvd0FsbE9wdGlvblwiXG4gICAgW3BhZ2luYXRvcl09XCJ0YWJsZVBhZ2luYXRvclwiXG4gICAgW3BhZ2VdPVwicGFnZVwiXG4gICAgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocGFnZVNpemVDaGFuZ2VkKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhVGFibGVDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICBbc2VsZWN0ZWRSb3dzXT1cInNlbGVjdGVkUm93c1wiXG4gICAgW2Zyb3plbkFjdGlvbkNvbHVtbl09XCJmcm96ZW5BY3Rpb25Db2x1bW5cIlxuICAgIFthY3Rpb25Db2x1bW5Qb3NpdGlvbl09XCJhY3Rpb25Db2x1bW5Qb3NpdGlvblwiXG4gICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlSZXN1bHRzTWVzc2FnZVwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2RlbGV0ZVBlcm1pc3Npb25dPVwiZGVsZXRlUGVybWlzc2lvblwiXG4gICAgW2VkaXRQZXJtaXNzaW9uXT1cImVkaXRQZXJtaXNzaW9uXCJcbiAgICBbdmlld1Blcm1pc3Npb25dPVwidmlld1Blcm1pc3Npb25cIlxuICAgIFtkZWxldGVBY3Rpb25FbmFibGVkRmllbGRdPVwiZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgICBbZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkXT1cImRlbGV0ZUFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25FbmFibGVkRmllbGRdPVwiZWRpdEFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2VkaXRBY3Rpb25WaXNpYmxlRmllbGRdPVwiZWRpdEFjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25FbmFibGVkRmllbGRdPVwidmlld0FjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW3ZpZXdBY3Rpb25WaXNpYmxlRmllbGRdPVwidmlld0FjdGlvblZpc2libGVGaWVsZFwiXG4gICAgW2FkZGl0aW9uYWxBY3Rpb25zXT1cImFkZGl0aW9uYWxBY3Rpb25zXCJcbiAgICBbc3RyaW5nQ2VsbFRlbXBsYXRlXT1cIl9zdHJpbmdUYWJsZUNlbGwgPyBzdHJpbmdDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUNlbGwgPyBudW1iZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tQ2VsbFRlbXBsYXRlXT1cIl9jdXN0b21UYWJsZUNlbGwgPyBjdXN0b21DZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZUNlbGxUZW1wbGF0ZV09XCJfZGF0ZVRhYmxlQ2VsbCA/IGRhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlQ2VsbFRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPyByZWxhdGl2ZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY2VsbFRlbXBsYXRlXT1cIl90YWJsZUNlbGwgPyBjZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8gdHJhbnNsYXRpb25LZXlDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl90YWJsZUZpbHRlckNlbGwgPyBmaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfZGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IGRhdGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGwgPyBjdXN0b21GaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUZpbHRlckNlbGwgPyBudW1iZXJGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbc3RyaW5nRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9zdHJpbmdUYWJsZUZpbHRlckNlbGwgPyBzdHJpbmdGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgPyByZWxhdGl2ZURhdGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdHJhbnNsYXRpb25LZXlGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID8gdHJhbnNsYXRpb25LZXlGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICAoc29ydGVkKT1cInNvcnRpbmcoJGV2ZW50KVwiXG4gICAgKGZpbHRlcmVkKT1cImZpbHRlcmluZygkZXZlbnQpXCJcbiAgICBbdG90YWxSZWNvcmRzT25TZXJ2ZXJdPVwidG90YWxSZWNvcmRzT25TZXJ2ZXJcIlxuICAgIFtjdXJyZW50UGFnZVNob3dpbmdLZXldPVwiY3VycmVudFBhZ2VTaG93aW5nS2V5XCJcbiAgICBbY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXldPVwiY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXlcIlxuICAgIFtwYXJlbnRUZW1wbGF0ZXNdPVwidGVtcGxhdGVzRm9yQ2hpbGRyZW4kIHwgYXN5bmNcIlxuICAgIFthbGxvd1NlbGVjdEFsbF09XCJ0YWJsZUFsbG93U2VsZWN0QWxsXCJcbiAgICBbc2VsZWN0aW9uRW5hYmxlZEZpZWxkXT1cInRhYmxlU2VsZWN0aW9uRW5hYmxlZEZpZWxkXCJcbiAgPlxuICA8L29jeC1kYXRhLXRhYmxlPlxuICA8bmctdGVtcGxhdGUgI3N0cmluZ0NlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9zdHJpbmdUYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI251bWJlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9udW1iZXJUYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2N1c3RvbUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbVRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2RhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfcmVsYXRpdmVEYXRlVGFibGVDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfdGFibGVDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lclxuICA+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl90cmFuc2xhdGlvbktleVRhYmxlQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6cm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyXG4gID48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmluZ0ZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9zdHJpbmdUYWJsZUZpbHRlckNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlRmlsdGVyQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjZmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3RhYmxlRmlsdGVyQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdGFibGVGaWx0ZXJDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNkYXRlRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6cm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2N1c3RvbUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbnVtYmVyRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbnVtYmVyVGFibGVGaWx0ZXJDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNyZWxhdGl2ZURhdGVGaWx0ZXJDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6cm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uS2V5RmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==