ngx-rs-ant 0.9.9 → 0.10.2

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.
@@ -4,6 +4,7 @@ import { DxDataGridComponent } from "devextreme-angular";
4
4
  import { DataGridService } from "./data-grid.service";
5
5
  import { MasterDetailTemplateDirective } from "./master-detail-template.directive";
6
6
  import CustomStore from 'devextreme/data/custom_store';
7
+ import { RowButtonsTemplateDirective } from "./row-buttons-template.directive";
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "./data-grid.service";
9
10
  import * as i2 from "@angular/common";
@@ -11,6 +12,7 @@ import * as i3 from "devextreme-angular";
11
12
  import * as i4 from "devextreme-angular/ui/nested";
12
13
  import * as i5 from "devextreme-angular/core";
13
14
  import * as i6 from "ng-devui/popover";
15
+ import * as i7 from "./file-cell-template/file-cell-template.component";
14
16
  export class DataGridComponent {
15
17
  constructor(service, locale) {
16
18
  this.service = service;
@@ -59,247 +61,263 @@ export class DataGridComponent {
59
61
  this.service.getMetadataByView(this.tenant, this.className, this.view || '').subscribe((response) => {
60
62
  const columns = [];
61
63
  for (let field of response.data.columns) {
62
- if (field.type === 'FILE') {
63
- columns.push({
64
- dataField: field.name,
65
- caption: field.caption,
66
- dataType: 'string',
67
- alignment: 'left',
68
- allowHeaderFiltering: false,
69
- filterOperations: [],
70
- visible: field.visible
71
- });
72
- }
73
- else if (field.type === 'NORMAL') {
74
- const column = {
75
- dataField: field.name,
76
- caption: field.caption,
77
- dataType: this.typeMap[field.dataType].dataType,
78
- alignment: 'left',
79
- allowHeaderFiltering: true,
80
- headerFilter: {
81
- allowSelectAll: false
82
- },
83
- filterOperations: this.typeMap[field.dataType].filterOperations,
84
- format: this.typeMap[field.dataType].format,
85
- visible: field.visible
86
- };
87
- columns.push(column);
88
- switch (field.dataType) {
89
- case 'BOOLEAN':
90
- column.allowHeaderFiltering = false;
91
- column.alignment = 'center';
92
- column.trueText = '';
93
- column.falseText = '否';
94
- break;
95
- case 'DATE':
96
- case 'DATETIME':
97
- column.headerFilter.dataSource = (options) => {
98
- options.dataSource.group.length = 3;
99
- options.dataSource.postProcess = (data) => {
100
- data.forEach((year) => {
101
- year.text = year.key + '年';
102
- year.items.forEach((month) => {
103
- month.text = month.key + '月';
104
- month.items.forEach((day) => {
105
- day.text = day.key + '日';
106
- day.items = [];
64
+ switch (field.type) {
65
+ case 'FILE':
66
+ columns.push({
67
+ dataField: field.name,
68
+ caption: field.caption,
69
+ dataType: 'string',
70
+ alignment: 'center',
71
+ allowHeaderFiltering: false,
72
+ allowFiltering: false,
73
+ allowSorting: false,
74
+ cellTemplate: 'fileCellTemplate',
75
+ visible: field.visible
76
+ });
77
+ break;
78
+ case 'NORMAL':
79
+ const column = {
80
+ dataField: field.name,
81
+ caption: field.caption,
82
+ dataType: this.typeMap[field.dataType].dataType,
83
+ alignment: 'left',
84
+ allowHeaderFiltering: true,
85
+ headerFilter: {
86
+ allowSelectAll: false
87
+ },
88
+ filterOperations: this.typeMap[field.dataType].filterOperations,
89
+ format: this.typeMap[field.dataType].format,
90
+ visible: field.visible
91
+ };
92
+ columns.push(column);
93
+ switch (field.dataType) {
94
+ case 'BOOLEAN':
95
+ column.allowHeaderFiltering = false;
96
+ column.alignment = 'center';
97
+ column.trueText = '';
98
+ column.falseText = '';
99
+ break;
100
+ case 'DATE':
101
+ case 'DATETIME':
102
+ column.headerFilter.dataSource = (options) => {
103
+ options.dataSource.group.length = 3;
104
+ options.dataSource.postProcess = (data) => {
105
+ data.forEach((year) => {
106
+ year.text = year.key + '年';
107
+ year.items.forEach((month) => {
108
+ month.text = month.key + '月';
109
+ month.items.forEach((day) => {
110
+ day.text = day.key + '日';
111
+ day.items = [];
112
+ });
107
113
  });
108
114
  });
109
- });
110
- data.unshift({
111
- key: '',
112
- value: null,
113
- text: '(空白)'
114
- });
115
- };
116
- };
117
- break;
118
- case 'DOUBLE':
119
- case 'INTEGER':
120
- column.headerFilter.dataSource = (options) => {
121
- options.dataSource.postProcess = (data) => {
122
- data.unshift({
123
- key: '',
124
- value: null,
125
- text: '(空白)'
126
- });
127
- data.push({
128
- key: '__',
129
- value: '__',
130
- text: '__',
131
- visible: false
132
- });
115
+ data.unshift({
116
+ key: '',
117
+ value: null,
118
+ text: '(空白)'
119
+ });
120
+ };
133
121
  };
134
- };
135
- break;
136
- case 'STRING':
137
- column.headerFilter.dataSource = (options) => {
138
- options.dataSource.postProcess = (data) => {
139
- data.unshift({
140
- key: '',
141
- value: null,
142
- text: '(空白)'
143
- });
144
- data.push({
145
- key: '__',
146
- value: '__',
147
- text: '__',
148
- visible: false
149
- });
122
+ break;
123
+ case 'DOUBLE':
124
+ case 'INTEGER':
125
+ column.headerFilter.dataSource = (options) => {
126
+ options.dataSource.postProcess = (data) => {
127
+ data.unshift({
128
+ key: '',
129
+ value: null,
130
+ text: '(空白)'
131
+ });
132
+ data.push({
133
+ key: '__',
134
+ value: '__',
135
+ text: '__',
136
+ visible: false
137
+ });
138
+ };
150
139
  };
151
- };
152
- if (field.config.constraint.multiple) {
153
- column.width = 120;
154
- }
155
- switch (field.config.constraint.type) {
156
- case 'USER':
157
- column.headerFilter.dataSource = {
158
- store: new CustomStore({
159
- load: () => {
160
- return lastValueFrom(this.service.getUserColumnDataSource(this.className, this.view, field.name));
161
- }
162
- }),
163
- paginate: true
140
+ break;
141
+ case 'STRING':
142
+ column.headerFilter.dataSource = (options) => {
143
+ options.dataSource.postProcess = (data) => {
144
+ data.unshift({
145
+ key: '',
146
+ value: null,
147
+ text: '(空白)'
148
+ });
149
+ data.push({
150
+ key: '__',
151
+ value: '__',
152
+ text: '__',
153
+ visible: false
154
+ });
164
155
  };
165
- if (field.config.constraint.multiple) {
166
- column.allowFiltering = false;
167
- column.lookup = {
168
- dataSource: {
169
- store: new CustomStore({
170
- load: () => {
171
- return lastValueFrom(this.service.getUserColumnDataSource(this.className, this.view, field.name));
172
- }
173
- }),
174
- paginate: true
175
- },
176
- valueExpr: 'value',
177
- displayExpr: 'text'
156
+ };
157
+ switch (field.config.constraint.type) {
158
+ case 'USER':
159
+ column.headerFilter.dataSource = {
160
+ store: new CustomStore({
161
+ load: () => {
162
+ return lastValueFrom(this.service.getUserColumnDataSource(this.tenant, this.className, this.view, field.name));
163
+ }
164
+ }),
165
+ paginate: true
178
166
  };
179
- column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
180
- if (this.defaultCalculateFilterExpression) {
181
- return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
182
- }
183
- return '';
167
+ if (field.config.constraint.multiple) {
168
+ column.allowFiltering = false;
169
+ column.lookup = {
170
+ dataSource: {
171
+ store: new CustomStore({
172
+ load: () => {
173
+ return lastValueFrom(this.service.getUserColumnDataSource(this.tenant, this.className, this.view, field.name));
174
+ }
175
+ }),
176
+ paginate: true
177
+ },
178
+ valueExpr: 'value',
179
+ displayExpr: 'text'
180
+ };
181
+ column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
182
+ if (this.defaultCalculateFilterExpression) {
183
+ return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
184
+ }
185
+ return '';
186
+ };
187
+ column.cellTemplate = 'multipleValueCellTemplate';
188
+ }
189
+ else {
190
+ column.dataField = '__' + field.name + '\u0001User_displayName';
191
+ column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
192
+ if (target === 'headerFilter') {
193
+ if (this.defaultCalculateFilterExpression) {
194
+ this.dataField = '__' + field.name + '\u0001User_username';
195
+ return this.defaultCalculateFilterExpression.apply(this, [filterValue, selectedFilterOperation, target]);
196
+ }
197
+ }
198
+ return [
199
+ [column.name, selectedFilterOperation, filterValue],
200
+ 'or',
201
+ ['__' + field.name + '\u0001User_username', selectedFilterOperation, filterValue]
202
+ ];
203
+ };
204
+ }
205
+ break;
206
+ case 'UNIT':
207
+ column.headerFilter.dataSource = {
208
+ store: new CustomStore({
209
+ load: () => {
210
+ return lastValueFrom(this.service.getUnitColumnDataSource(this.tenant, this.className, this.view, field.name));
211
+ }
212
+ }),
213
+ paginate: true
184
214
  };
185
- column.cellTemplate = 'multipleValueCellTemplate';
186
- }
187
- else {
188
- column.dataField = '__' + field.name + '\u0001User_displayName';
189
- column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
190
- if (target === 'headerFilter') {
215
+ if (field.config.constraint.multiple) {
216
+ column.allowFiltering = false;
217
+ column.lookup = {
218
+ dataSource: {
219
+ store: new CustomStore({
220
+ load: () => {
221
+ return lastValueFrom(this.service.getUnitColumnDataSource(this.tenant, this.className, this.view, field.name));
222
+ }
223
+ }),
224
+ paginate: true
225
+ },
226
+ valueExpr: 'value',
227
+ displayExpr: 'text'
228
+ };
229
+ column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
191
230
  if (this.defaultCalculateFilterExpression) {
192
- this.dataField = '__' + field.name + '\u0001User_username';
193
- return this.defaultCalculateFilterExpression.apply(this, [filterValue, selectedFilterOperation, target]);
231
+ return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
232
+ }
233
+ return '';
234
+ };
235
+ column.cellTemplate = 'multipleValueCellTemplate';
236
+ }
237
+ else {
238
+ column.dataField = '__' + field.name + '\u0001Role_displayName';
239
+ column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
240
+ if (target === 'headerFilter') {
241
+ if (this.defaultCalculateFilterExpression) {
242
+ this.dataField = '__' + field.name + '\u0001Role_name';
243
+ return this.defaultCalculateFilterExpression.apply(this, [filterValue, selectedFilterOperation, target]);
244
+ }
245
+ }
246
+ return [
247
+ [column.name, selectedFilterOperation, filterValue],
248
+ 'or',
249
+ ['__' + field.name + '\u0001Role_name', selectedFilterOperation, filterValue]
250
+ ];
251
+ };
252
+ }
253
+ break;
254
+ case 'CUSTOM':
255
+ column.headerFilter.dataSource = {
256
+ store: new CustomStore({
257
+ load: () => {
258
+ return lastValueFrom(this.service.getConstraintColumnDataSource(this.tenant, this.className, this.view, field.name, field.config.constraint.name));
194
259
  }
195
- }
196
- return [
197
- [column.name, selectedFilterOperation, filterValue],
198
- 'or',
199
- ['__' + field.name + '\u0001User_username', selectedFilterOperation, filterValue]
200
- ];
260
+ }),
261
+ paginate: true
201
262
  };
202
- }
203
- break;
204
- case 'UNIT':
205
- column.headerFilter.dataSource = {
206
- store: new CustomStore({
207
- load: () => {
208
- return lastValueFrom(this.service.getUnitColumnDataSource(this.className, this.view, field.name));
209
- }
210
- }),
211
- paginate: true
212
- };
213
- if (field.config.constraint.multiple) {
214
- column.allowFiltering = false;
215
263
  column.lookup = {
216
264
  dataSource: {
217
265
  store: new CustomStore({
218
266
  load: () => {
219
- return lastValueFrom(this.service.getUnitColumnDataSource(this.className, this.view, field.name));
267
+ return lastValueFrom(this.service.getConstraintEntries(field.config.constraint.name));
220
268
  }
221
269
  }),
222
270
  paginate: true
223
271
  },
224
- valueExpr: 'value',
225
- displayExpr: 'text'
226
- };
227
- column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
228
- if (this.defaultCalculateFilterExpression) {
229
- return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
230
- }
231
- return '';
272
+ valueExpr: 'store',
273
+ displayExpr: 'display'
232
274
  };
233
- column.cellTemplate = 'multipleValueCellTemplate';
234
- }
235
- else {
236
- column.dataField = '__' + field.name + '\u0001Role_displayName';
237
- column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
238
- if (target === 'headerFilter') {
275
+ column.filterOperations = [];
276
+ if (field.config.constraint.multiple) {
277
+ column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
239
278
  if (this.defaultCalculateFilterExpression) {
240
- this.dataField = '__' + field.name + '\u0001Role_name';
241
- return this.defaultCalculateFilterExpression.apply(this, [filterValue, selectedFilterOperation, target]);
279
+ return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
242
280
  }
243
- }
244
- return [
245
- [column.name, selectedFilterOperation, filterValue],
246
- 'or',
247
- ['__' + field.name + '\u0001Role_name', selectedFilterOperation, filterValue]
248
- ];
249
- };
250
- }
251
- break;
252
- case 'CUSTOM':
253
- column.headerFilter.dataSource = {
254
- store: new CustomStore({
255
- load: () => {
256
- return lastValueFrom(this.service.getConstraintColumnDataSource(this.className, this.view, field.name, field.config.constraint.name));
257
- }
258
- }),
259
- paginate: true
260
- };
261
- column.lookup = {
262
- dataSource: {
263
- store: new CustomStore({
264
- load: () => {
265
- return lastValueFrom(this.service.getConstraintEntries(field.config.constraint.name));
266
- }
267
- }),
268
- paginate: true
269
- },
270
- valueExpr: 'store',
271
- displayExpr: 'display'
272
- };
273
- column.filterOperations = [];
274
- if (field.config.constraint.multiple) {
275
- column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
276
- if (this.defaultCalculateFilterExpression) {
277
- return this.defaultCalculateFilterExpression.apply(this, [filterValue, 'contains', target]);
278
- }
279
- return '';
280
- };
281
- }
282
- column.cellTemplate = 'multipleValueCellTemplate';
283
- break;
284
- }
285
- break;
286
- case 'TEXT':
287
- column.allowHeaderFiltering = false;
288
- column.width = 240;
289
- column.cellTemplate = 'textCellTemplate';
290
- break;
291
- }
292
- }
293
- else if (field.type === 'RELATION') {
294
- columns.push({
295
- dataField: field.name,
296
- caption: field.caption,
297
- dataType: 'string',
298
- alignment: 'left',
299
- allowHeaderFiltering: false,
300
- filterOperations: ['='],
301
- visible: field.visible
302
- });
281
+ return '';
282
+ };
283
+ }
284
+ column.cellTemplate = 'multipleValueCellTemplate';
285
+ break;
286
+ }
287
+ break;
288
+ case 'TEXT':
289
+ column.allowHeaderFiltering = false;
290
+ column.cellTemplate = 'textCellTemplate';
291
+ break;
292
+ }
293
+ break;
294
+ case 'RELATION':
295
+ switch (field.relationType) {
296
+ case 'MANY_TO_MANY':
297
+ case 'ONE_TO_MANY':
298
+ columns.push({
299
+ dataField: field.name,
300
+ caption: field.caption,
301
+ dataType: 'string',
302
+ alignment: 'left',
303
+ allowHeaderFiltering: false,
304
+ allowFiltering: false,
305
+ visible: field.visible
306
+ });
307
+ break;
308
+ case 'MANY_TO_ONE':
309
+ case 'ONE_TO_ONE':
310
+ columns.push({
311
+ dataField: field.name,
312
+ caption: field.caption,
313
+ dataType: 'string',
314
+ alignment: 'left',
315
+ allowHeaderFiltering: false,
316
+ filterOperations: ['='],
317
+ visible: field.visible
318
+ });
319
+ break;
320
+ }
303
321
  }
304
322
  }
305
323
  if (this.customColumnFn) {
@@ -360,15 +378,12 @@ export class DataGridComponent {
360
378
  }
361
379
  });
362
380
  }
363
- convertMultipleValueCellText(cellInfo, wrap) {
381
+ convertMultipleValueCellText(cellInfo) {
364
382
  if (!cellInfo.value) {
365
383
  return;
366
384
  }
367
385
  if (Array.isArray(cellInfo.value)) {
368
- if (wrap) {
369
- return cellInfo.value.map((item) => cellInfo.column.lookup.calculateCellValue(item)).join('<br />');
370
- }
371
- return cellInfo.value.map((item) => cellInfo.column.lookup.calculateCellValue(item)).join(';');
386
+ return cellInfo.value.map((item) => cellInfo.column.lookup.calculateCellValue(item)).join('<br />');
372
387
  }
373
388
  return cellInfo.column.lookup.calculateCellValue(cellInfo.value);
374
389
  }
@@ -384,10 +399,10 @@ export class DataGridComponent {
384
399
  }
385
400
  }
386
401
  DataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, deps: [{ token: i1.DataGridService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
387
- DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", enableMasterDetail: "enableMasterDetail", customColumnFn: "customColumnFn" }, providers: [DataGridService], queries: [{ propertyName: "masterDetailTemplate", first: true, predicate: MasterDetailTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [dataSource]=\"dataSource\"\n [columns]=\"columns\"\n [syncLookupFilterValues]=\"false\"\n [showBorders]=\"true\"\n [showColumnLines]=\"true\"\n [showRowLines]=\"true\"\n [hoverStateEnabled]=\"true\"\n [rowAlternationEnabled]=\"true\"\n [columnAutoWidth]=\"true\"\n [allowColumnResizing]=\"true\"\n columnResizingMode=\"widget\"\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\n (onRowExpanding)=\"$event.component.collapseAll(-1)\"\n>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\"></dxo-selection>\n <dxo-header-filter [visible]=\"true\">\n <dxo-search [enabled]=\"true\"></dxo-search>\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\n </dxo-header-filter>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-remote-operations [filtering]=\"true\"\n [sorting]=\"true\"\n [paging]=\"true\">\n </dxo-remote-operations>\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\n <dxo-pager [visible]=\"true\"\n [showInfo]=\"true\"\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\n [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"[15, 30, 50]\"\n ></dxo-pager>\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\n <dxo-export [allowExportSelectedData]=\"true\"\n [fileName]=\"className\"></dxo-export>\n <div *dxTemplate=\"let rowInfo of 'masterDetailTemplate'\">\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\n {{cellInfo.rowIndex + 1}}\n </div>\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"convertMultipleValueCellText(cellInfo, true)\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popoverStyle]=\"{ backgroundColor: '#fff', color: 'rgb(51, 51, 51)' }\"\n style=\"text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">\n {{convertMultipleValueCellText(cellInfo)}}\n </div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"cellInfo.value\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popMaxWidth]=\"300\"\n [popoverStyle]=\"{ backgroundColor: '#fff', color: 'rgb(51, 51, 51)' }\"\n style=\"text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">{{cellInfo.value}}</div>\n </div>\n</dx-data-grid>\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i4.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i4.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i4.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i4.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i4.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i4.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i4.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i4.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i4.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i4.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i4.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i4.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[dPopover]", inputs: ["content", "controlled", "position", "showAnimation", "showAnimate", "scrollElement", "appendToBody", "zIndex", "popType", "popMaxWidth", "trigger", "hoverToContent", "hoverDelayTime", "popoverStyle", "mouseEnterDelay", "mouseLeaveDelay", "visible"], exportAs: ["dPopover"] }] });
402
+ DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", enableMasterDetail: "enableMasterDetail", customColumnFn: "customColumnFn" }, providers: [DataGridService], queries: [{ propertyName: "masterDetailTemplate", first: true, predicate: MasterDetailTemplateDirective, descendants: true }, { propertyName: "rowButtonsTemplate", first: true, predicate: RowButtonsTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [dataSource]=\"dataSource\"\n [columns]=\"columns\"\n [syncLookupFilterValues]=\"false\"\n [showBorders]=\"true\"\n [showColumnLines]=\"true\"\n [showRowLines]=\"true\"\n [hoverStateEnabled]=\"true\"\n [rowAlternationEnabled]=\"true\"\n [columnAutoWidth]=\"true\"\n [allowColumnResizing]=\"true\"\n columnResizingMode=\"widget\"\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\n (onRowExpanding)=\"$event.component.collapseAll(-1)\"\n>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\"></dxo-selection>\n <dxo-header-filter [visible]=\"true\">\n <dxo-search [enabled]=\"true\"></dxo-search>\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\n </dxo-header-filter>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-remote-operations [filtering]=\"true\"\n [sorting]=\"true\"\n [paging]=\"true\">\n </dxo-remote-operations>\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\n <dxo-pager [visible]=\"true\"\n [showInfo]=\"true\"\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\n [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"[15, 30, 50]\"\n ></dxo-pager>\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\n <dxo-export [allowExportSelectedData]=\"true\"\n [fileName]=\"className\"></dxo-export>\n <div *dxTemplate=\"let rowInfo of 'masterDetailTemplate'\">\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let rowInfo of 'rowButtonsTemplate'\">\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\n {{cellInfo.rowIndex + 1}}\n </div>\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"cellInfo.value\"\n [trigger]=\"'hover'\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popMaxWidth]=\"300\"\n style=\"max-width: 240px; text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">{{cellInfo.value}}</div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\n <ng-container *ngFor=\"let file of cellInfo.value\">\n <rs-file-cell-template [template]=\"cellInfo\" [oid]=\"file\"></rs-file-cell-template>\n </ng-container>\n </div>\n</dx-data-grid>\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i4.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i4.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i4.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i4.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i4.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i4.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i4.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i4.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i4.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i4.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i4.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i4.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[dPopover]", inputs: ["content", "controlled", "position", "showAnimation", "showAnimate", "scrollElement", "appendToBody", "zIndex", "popType", "popMaxWidth", "trigger", "hoverToContent", "hoverDelayTime", "popoverStyle", "mouseEnterDelay", "mouseLeaveDelay", "visible"], exportAs: ["dPopover"] }, { kind: "component", type: i7.FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: ["template", "oid"] }] });
388
403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, decorators: [{
389
404
  type: Component,
390
- args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [dataSource]=\"dataSource\"\n [columns]=\"columns\"\n [syncLookupFilterValues]=\"false\"\n [showBorders]=\"true\"\n [showColumnLines]=\"true\"\n [showRowLines]=\"true\"\n [hoverStateEnabled]=\"true\"\n [rowAlternationEnabled]=\"true\"\n [columnAutoWidth]=\"true\"\n [allowColumnResizing]=\"true\"\n columnResizingMode=\"widget\"\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\n (onRowExpanding)=\"$event.component.collapseAll(-1)\"\n>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\"></dxo-selection>\n <dxo-header-filter [visible]=\"true\">\n <dxo-search [enabled]=\"true\"></dxo-search>\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\n </dxo-header-filter>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-remote-operations [filtering]=\"true\"\n [sorting]=\"true\"\n [paging]=\"true\">\n </dxo-remote-operations>\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\n <dxo-pager [visible]=\"true\"\n [showInfo]=\"true\"\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\n [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"[15, 30, 50]\"\n ></dxo-pager>\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\n <dxo-export [allowExportSelectedData]=\"true\"\n [fileName]=\"className\"></dxo-export>\n <div *dxTemplate=\"let rowInfo of 'masterDetailTemplate'\">\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\n {{cellInfo.rowIndex + 1}}\n </div>\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"convertMultipleValueCellText(cellInfo, true)\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popoverStyle]=\"{ backgroundColor: '#fff', color: 'rgb(51, 51, 51)' }\"\n style=\"text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">\n {{convertMultipleValueCellText(cellInfo)}}\n </div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"cellInfo.value\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popMaxWidth]=\"300\"\n [popoverStyle]=\"{ backgroundColor: '#fff', color: 'rgb(51, 51, 51)' }\"\n style=\"text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">{{cellInfo.value}}</div>\n </div>\n</dx-data-grid>\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
405
+ args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [dataSource]=\"dataSource\"\n [columns]=\"columns\"\n [syncLookupFilterValues]=\"false\"\n [showBorders]=\"true\"\n [showColumnLines]=\"true\"\n [showRowLines]=\"true\"\n [hoverStateEnabled]=\"true\"\n [rowAlternationEnabled]=\"true\"\n [columnAutoWidth]=\"true\"\n [allowColumnResizing]=\"true\"\n columnResizingMode=\"widget\"\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\n (onRowExpanding)=\"$event.component.collapseAll(-1)\"\n>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\"></dxo-selection>\n <dxo-header-filter [visible]=\"true\">\n <dxo-search [enabled]=\"true\"></dxo-search>\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\n </dxo-header-filter>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-remote-operations [filtering]=\"true\"\n [sorting]=\"true\"\n [paging]=\"true\">\n </dxo-remote-operations>\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\n <dxo-pager [visible]=\"true\"\n [showInfo]=\"true\"\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\n [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"[15, 30, 50]\"\n ></dxo-pager>\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\n <dxo-export [allowExportSelectedData]=\"true\"\n [fileName]=\"className\"></dxo-export>\n <div *dxTemplate=\"let rowInfo of 'masterDetailTemplate'\">\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let rowInfo of 'rowButtonsTemplate'\">\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowInfo}\"></ng-container>\n </div>\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\n {{cellInfo.rowIndex + 1}}\n </div>\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\n <div dPopover #textDiv\n [content]=\"cellInfo.value\"\n [trigger]=\"'hover'\"\n [controlled]=\"textDiv.clientWidth < textDiv.scrollWidth\"\n [popMaxWidth]=\"300\"\n style=\"max-width: 240px; text-overflow: ellipsis; overflow: hidden;\"\n [ngStyle]=\"{ cursor: textDiv.clientWidth < textDiv.scrollWidth ? 'pointer': 'default'}\">{{cellInfo.value}}</div>\n </div>\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\n <ng-container *ngFor=\"let file of cellInfo.value\">\n <rs-file-cell-template [template]=\"cellInfo\" [oid]=\"file\"></rs-file-cell-template>\n </ng-container>\n </div>\n</dx-data-grid>\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
391
406
  }], ctorParameters: function () { return [{ type: i1.DataGridService }, { type: undefined, decorators: [{
392
407
  type: Inject,
393
408
  args: [LOCALE_ID]
@@ -409,5 +424,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
409
424
  }], masterDetailTemplate: [{
410
425
  type: ContentChild,
411
426
  args: [MasterDetailTemplateDirective]
427
+ }], rowButtonsTemplate: [{
428
+ type: ContentChild,
429
+ args: [RowButtonsTemplateDirective]
412
430
  }] } });
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBU3ZELE1BQU0sT0FBTyxpQkFBaUI7SUFrRDVCLFlBQW9CLE9BQXdCLEVBQTZCLE1BQWM7UUFBbkUsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFBNkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXhDdkYsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRzNCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixZQUFPLEdBQVE7WUFDYixNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLGdCQUFnQixFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQzthQUNwRTtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsUUFBUTtn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LENBQUMsR0FBRyxFQUFFO1lBQzNDLElBQUksUUFBUSxFQUFFO2dCQUNaLFFBQVEsRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZELENBQUM7OzhHQTVYVSxpQkFBaUIsaURBa0QwQixTQUFTO2tHQWxEcEQsaUJBQWlCLHlNQUZqQixDQUFDLGVBQWUsQ0FBQyw0RUFrRGQsNkJBQTZCLDRGQURoQyxtQkFBbUIsOERDN0RoQyx5a0dBK0RBOzJGRGpEYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsY0FBYyxhQUdiLENBQUMsZUFBZSxDQUFDOzswQkFvRG1CLE1BQU07MkJBQUMsU0FBUzs0Q0FoRC9ELE1BQU07c0JBREwsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sY0FBYztzQkFEYixLQUFLO2dCQW9DMEMsVUFBVTtzQkFBekQsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0Qsb0JBQW9CO3NCQUFoRSxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEluamVjdCwgSW5wdXQsIExPQ0FMRV9JRCwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2xhc3RWYWx1ZUZyb219IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7RHhEYXRhR3JpZENvbXBvbmVudH0gZnJvbSBcImRldmV4dHJlbWUtYW5ndWxhclwiO1xyXG5pbXBvcnQge0RhdGFHcmlkU2VydmljZX0gZnJvbSBcIi4vZGF0YS1ncmlkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtNYXN0ZXJEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4vbWFzdGVyLWRldGFpbC10ZW1wbGF0ZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IEN1c3RvbVN0b3JlIGZyb20gJ2RldmV4dHJlbWUvZGF0YS9jdXN0b21fc3RvcmUnO1xyXG5pbXBvcnQge0NvbHVtbn0gZnJvbSBcImRldmV4dHJlbWUvdWkvZGF0YV9ncmlkXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JzLWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRGF0YUdyaWRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgdGVuYW50ITogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgY2xhc3NOYW1lITogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgdmlldz86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGZpbHRlcj86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGVuYWJsZU1hc3RlckRldGFpbCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgY3VzdG9tQ29sdW1uRm4/OiAoY29sdW1uczogYW55W10pID0+IHZvaWQ7XHJcbiAgZGF0YVNvdXJjZTogYW55ID0ge307XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0eXBlTWFwOiBhbnkgPSB7XHJcbiAgICBTVFJJTkc6IHtcclxuICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBmaWx0ZXJPcGVyYXRpb25zOiBbJ2NvbnRhaW5zJywgJ3N0YXJ0c3dpdGgnLCAnZW5kc3dpdGgnLCAnPScsICc8PiddXHJcbiAgICB9LFxyXG4gICAgVEVYVDoge1xyXG4gICAgICBkYXRhVHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnY29udGFpbnMnLCAnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCcsICc9JywgJzw+J11cclxuICAgIH0sXHJcbiAgICBCT09MRUFOOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnYm9vbGVhbicsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFtdXHJcbiAgICB9LFxyXG4gICAgSU5URUdFUjoge1xyXG4gICAgICBkYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnPScsICc8PicsICc+JywgJz49JywgJzwnLCAnPD0nLCAnYmV0d2VlbiddXHJcbiAgICB9LFxyXG4gICAgRE9VQkxFOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgZmlsdGVyT3BlcmF0aW9uczogWyc9JywgJzw+JywgJz4nLCAnPj0nLCAnPCcsICc8PScsICdiZXR3ZWVuJ11cclxuICAgIH0sXHJcbiAgICBEQVRFOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnPScsICc8PicsICc+JywgJz49JywgJzwnLCAnPD0nLCAnYmV0d2VlbiddLFxyXG4gICAgICBmb3JtYXQ6ICd5eXl5L01NL2RkJ1xyXG4gICAgfSxcclxuICAgIERBVEVUSU1FOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnZGF0ZXRpbWUnLFxyXG4gICAgICBmaWx0ZXJPcGVyYXRpb25zOiBbJz4nLCAnPCcsICdiZXR3ZWVuJ10sXHJcbiAgICAgIGZvcm1hdDogJ3l5eXkvTU0vZGQgSEg6bW06c3MnXHJcbiAgICB9XHJcbiAgfTtcclxuICBAVmlld0NoaWxkKER4RGF0YUdyaWRDb21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkeERhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlKSBtYXN0ZXJEZXRhaWxUZW1wbGF0ZSE6IE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IERhdGFHcmlkU2VydmljZSwgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCgpIHtcclxuICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5zZXJ2aWNlLmdldE1ldGFkYXRhQnlWaWV3KHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3IHx8ICcnKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiByZXNwb25zZS5kYXRhLmNvbHVtbnMpIHtcclxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ0ZJTEUnKSB7XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgICBkYXRhRmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICAgIGNhcHRpb246IGZpZWxkLmNhcHRpb24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgYWxpZ25tZW50OiAnbGVmdCcsXHJcbiAgICAgICAgICAgIGFsbG93SGVhZGVyRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsdGVyT3BlcmF0aW9uczogW10sXHJcbiAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ05PUk1BTCcpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICAgICAgICBkYXRhRmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICAgIGNhcHRpb246IGZpZWxkLmNhcHRpb24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLnR5cGVNYXBbZmllbGQuZGF0YVR5cGVdLmRhdGFUeXBlLFxyXG4gICAgICAgICAgICBhbGlnbm1lbnQ6ICdsZWZ0JyxcclxuICAgICAgICAgICAgYWxsb3dIZWFkZXJGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGhlYWRlckZpbHRlcjoge1xyXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWx0ZXJPcGVyYXRpb25zOiB0aGlzLnR5cGVNYXBbZmllbGQuZGF0YVR5cGVdLmZpbHRlck9wZXJhdGlvbnMsXHJcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy50eXBlTWFwW2ZpZWxkLmRhdGFUeXBlXS5mb3JtYXQsXHJcbiAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgICAgICAgIHN3aXRjaCAoZmllbGQuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnQk9PTEVBTic6XHJcbiAgICAgICAgICAgICAgY29sdW1uLmFsbG93SGVhZGVyRmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29sdW1uLmFsaWdubWVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICAgIGNvbHVtbi50cnVlVGV4dCA9ICfmmK8nO1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5mYWxzZVRleHQgPSAn5ZCmJztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnREFURSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ0RBVEVUSU1FJzpcclxuICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyRmlsdGVyLmRhdGFTb3VyY2UgPSAob3B0aW9uczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFTb3VyY2UuZ3JvdXAubGVuZ3RoID0gMztcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVNvdXJjZS5wb3N0UHJvY2VzcyA9IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKCh5ZWFyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB5ZWFyLnRleHQgPSB5ZWFyLmtleSArICflubQnO1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXIuaXRlbXMuZm9yRWFjaCgobW9udGg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbW9udGgudGV4dCA9IG1vbnRoLmtleSArICfmnIgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbW9udGguaXRlbXMuZm9yRWFjaCgoZGF5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5LnRleHQgPSBkYXkua2V5ICsgJ+aXpSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheS5pdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyjnqbrnmb0pJ1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRE9VQkxFJzpcclxuICAgICAgICAgICAgY2FzZSAnSU5URUdFUic6XHJcbiAgICAgICAgICAgICAgY29sdW1uLmhlYWRlckZpbHRlci5kYXRhU291cmNlID0gKG9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhU291cmNlLnBvc3RQcm9jZXNzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkYXRhLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyjnqbrnmb0pJ1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6ICdfXycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdfXycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnU1RSSU5HJzpcclxuICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyRmlsdGVyLmRhdGFTb3VyY2UgPSAob3B0aW9uczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFTb3VyY2UucG9zdFByb2Nlc3MgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCh7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKOepuueZvSknXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnX18nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmIChmaWVsZC5jb25maWcuY29uc3RyYWludC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoID0gMTIwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1VTRVInOlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyRmlsdGVyLmRhdGFTb3VyY2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2FkOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRVc2VyQ29sdW1uRGF0YVNvdXJjZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCBmaWVsZC5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmFsbG93RmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldFVzZXJDb2x1bW5EYXRhU291cmNlKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcsIGZpZWxkLm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcjogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiAndGV4dCdcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKHRoaXM6IENvbHVtbiwgZmlsdGVyVmFsdWU6IGFueSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb246IGFueSwgdGFyZ2V0OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uLmFwcGx5KHRoaXMsIFtmaWx0ZXJWYWx1ZSwgJ2NvbnRhaW5zJywgdGFyZ2V0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2VsbFRlbXBsYXRlID0gJ211bHRpcGxlVmFsdWVDZWxsVGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kYXRhRmllbGQgPSAnX18nICsgZmllbGQubmFtZSArICdcXHUwMDAxVXNlcl9kaXNwbGF5TmFtZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAodGhpczogYW55LCBmaWx0ZXJWYWx1ZTogYW55LCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbjogYW55LCB0YXJnZXQ6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ2hlYWRlckZpbHRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZCA9ICdfXycgKyBmaWVsZC5uYW1lICsgJ1xcdTAwMDFVc2VyX3VzZXJuYW1lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbi5hcHBseSh0aGlzLCBbZmlsdGVyVmFsdWUsIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uLCB0YXJnZXRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbi5uYW1lLCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbiwgZmlsdGVyVmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ19fJyArIGZpZWxkLm5hbWUgKyAnXFx1MDAwMVVzZXJfdXNlcm5hbWUnLCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbiwgZmlsdGVyVmFsdWVdXHJcbiAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdVTklUJzpcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlckZpbHRlci5kYXRhU291cmNlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLnNlcnZpY2UuZ2V0VW5pdENvbHVtbkRhdGFTb3VyY2UodGhpcy5jbGFzc05hbWUsIHRoaXMudmlldywgZmllbGQubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5jb25maWcuY29uc3RyYWludC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hbGxvd0ZpbHRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5sb29rdXAgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRVbml0Q29sdW1uRGF0YVNvdXJjZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCBmaWVsZC5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcjogJ3RleHQnXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0aGlzOiBDb2x1bW4sIGZpbHRlclZhbHVlOiBhbnksIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uOiBhbnksIHRhcmdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbi5hcHBseSh0aGlzLCBbZmlsdGVyVmFsdWUsICdjb250YWlucycsIHRhcmdldF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNlbGxUZW1wbGF0ZSA9ICdtdWx0aXBsZVZhbHVlQ2VsbFRlbXBsYXRlJztcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YUZpZWxkID0gJ19fJyArIGZpZWxkLm5hbWUgKyAnXFx1MDAwMVJvbGVfZGlzcGxheU5hbWUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKHRoaXM6IENvbHVtbiwgZmlsdGVyVmFsdWU6IGFueSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb246IGFueSwgdGFyZ2V0OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdoZWFkZXJGaWx0ZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQgPSAnX18nICsgZmllbGQubmFtZSArICdcXHUwMDAxUm9sZV9uYW1lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbi5hcHBseSh0aGlzLCBbZmlsdGVyVmFsdWUsIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uLCB0YXJnZXRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbi5uYW1lLCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbiwgZmlsdGVyVmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ19fJyArIGZpZWxkLm5hbWUgKyAnXFx1MDAwMVJvbGVfbmFtZScsIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uLCBmaWx0ZXJWYWx1ZV1cclxuICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0NVU1RPTSc6XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXJGaWx0ZXIuZGF0YVNvdXJjZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZTogbmV3IEN1c3RvbVN0b3JlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxvYWQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldENvbnN0cmFpbnRDb2x1bW5EYXRhU291cmNlKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcsIGZpZWxkLm5hbWUsIGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldENvbnN0cmFpbnRFbnRyaWVzKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByOiAnc3RvcmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiAnZGlzcGxheSdcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlck9wZXJhdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAodGhpczogQ29sdW1uLCBmaWx0ZXJWYWx1ZTogYW55LCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbjogYW55LCB0YXJnZXQ6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24uYXBwbHkodGhpcywgW2ZpbHRlclZhbHVlLCAnY29udGFpbnMnLCB0YXJnZXRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5jZWxsVGVtcGxhdGUgPSAnbXVsdGlwbGVWYWx1ZUNlbGxUZW1wbGF0ZSc7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnVEVYVCc6XHJcbiAgICAgICAgICAgICAgY29sdW1uLmFsbG93SGVhZGVyRmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29sdW1uLndpZHRoID0gMjQwO1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5jZWxsVGVtcGxhdGUgPSAndGV4dENlbGxUZW1wbGF0ZSc7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnUkVMQVRJT04nKSB7XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgICBkYXRhRmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICAgIGNhcHRpb246IGZpZWxkLmNhcHRpb24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgYWxpZ25tZW50OiAnbGVmdCcsXHJcbiAgICAgICAgICAgIGFsbG93SGVhZGVyRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsdGVyT3BlcmF0aW9uczogWyc9J10sXHJcbiAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jdXN0b21Db2x1bW5Gbikge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tQ29sdW1uRm4oY29sdW1ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEN1c3RvbVN0b3JlKHtcclxuICAgICAga2V5OiAnb2lkJyxcclxuICAgICAgYnlLZXk6IChrZXk6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRPbmUodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCBrZXkpKTtcclxuICAgICAgfSxcclxuICAgICAgbG9hZDogKGxvYWRPcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobG9hZE9wdGlvbnMuZGF0YUZpZWxkKSB7XHJcbiAgICAgICAgICAvLyDmnKrph43lhploZWFkZXJGaWx0ZXLnmoRkYXRhU291cmNl5pe277yMaGVhZGVyRmlsdGVy5Lya6LCD55SobG9hZOaWueazleWKoOi9veetm+mAieagke+8jOmHjeWGmeivpeaWueazleafpeivouivpeihqOaJgOacieaVsOaNrlxyXG4gICAgICAgICAgLy8g6K+l5pa55byP5a2Y5Zyo6aOO6Zmp77yM5peg5rOV6K+G5Yir5LiA5a6a5piv6YCa6L+HaGVhZGVyRmlsdGVy6L+H5ruk5omN5a2Y5ZyoZGF0YUZpZWxk5Y+C5pWwXHJcbiAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLnNlcnZpY2UuZ2V0Q29sdW1uRGF0YVNvdXJjZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCBsb2FkT3B0aW9ucy5kYXRhRmllbGQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9ICc/JztcclxuICAgICAgICBpZiAobG9hZE9wdGlvbnMuc2tpcCB8fCBsb2FkT3B0aW9ucy50YWtlKSB7XHJcbiAgICAgICAgICBwYXJhbXMgKz0gJ29mZnNldD0nICsgbG9hZE9wdGlvbnMuc2tpcDtcclxuICAgICAgICAgIHBhcmFtcyArPSAnJmxpbWl0PScgKyBsb2FkT3B0aW9ucy50YWtlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhbXMgKz0gJ2xpbWl0PTAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9hZE9wdGlvbnMuc29ydCkge1xyXG4gICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgIGZvciAoY29uc3QgdGhpc1NvcnQgb2YgbG9hZE9wdGlvbnMuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHtcclxuICAgICAgICAgICAgICBwYXJhbXMgKz0gJyZvcmRlckJ5PScgKyB0aGlzU29ydC5zZWxlY3RvcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwYXJhbXMgKz0gJywnICsgdGhpc1NvcnQuc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXNTb3J0LmRlc2MpIHtcclxuICAgICAgICAgICAgICBwYXJhbXMgKz0gJyBkZXNjJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZmlsdGVyO1xyXG4gICAgICAgIGlmIChsb2FkT3B0aW9ucy5maWx0ZXIpIHtcclxuICAgICAgICAgIGZpbHRlciA9IGxvYWRPcHRpb25zLmZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IFtmaWx0ZXIsICdhbmQnLCB0aGlzLmZpbHRlcl07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXIgPSB0aGlzLmZpbHRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcikge1xyXG4gICAgICAgICAgcGFyYW1zICs9ICcmZmlsdGVyPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZmlsdGVyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRNYW55KHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgcGFyYW1zICsgJyZ2aWV3PScgKyAodGhpcy52aWV3IHx8ICcnKSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRNdWx0aXBsZVZhbHVlQ2VsbFRleHQoY2VsbEluZm86IGFueSwgd3JhcD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghY2VsbEluZm8udmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2VsbEluZm8udmFsdWUpKSB7XHJcbiAgICAgIGlmICh3cmFwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNlbGxJbmZvLnZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiBjZWxsSW5mby5jb2x1bW4ubG9va3VwLmNhbGN1bGF0ZUNlbGxWYWx1ZShpdGVtKSkuam9pbignPGJyIC8+Jyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNlbGxJbmZvLnZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiBjZWxsSW5mby5jb2x1bW4ubG9va3VwLmNhbGN1bGF0ZUNlbGxWYWx1ZShpdGVtKSkuam9pbign77ybJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbEluZm8uY29sdW1uLmxvb2t1cC5jYWxjdWxhdGVDZWxsVmFsdWUoY2VsbEluZm8udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaChjYWxsYmFjaz86IGFueSkge1xyXG4gICAgdGhpcy5keERhdGFHcmlkLmluc3RhbmNlLnJlZnJlc2goKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5keERhdGFHcmlkLmluc3RhbmNlLmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgICAgICAgW3N5bmNMb29rdXBGaWx0ZXJWYWx1ZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaG93Q29sdW1uTGluZXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2FsbG93Q29sdW1uUmVzaXppbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS9NTS9kZCBISDptbTpzc1wiXG4gICAgICAgICAgICAgIChvblJvd0V4cGFuZGluZyk9XCIkZXZlbnQuY29tcG9uZW50LmNvbGxhcHNlQWxsKC0xKVwiXG4+XG4gIDxkeG8tc29ydGluZyBtb2RlPVwibXVsdGlwbGVcIj48L2R4by1zb3J0aW5nPlxuICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwibXVsdGlwbGVcIiBzZWxlY3RBbGxNb2RlPVwicGFnZVwiPjwvZHhvLXNlbGVjdGlvbj5cbiAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICA8ZHhvLXNlYXJjaCBbZW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tc2VhcmNoPlxuICAgIDxkeG8tdGV4dHMgW29rXT1cIifnoa7lrponXCI+PC9keG8tdGV4dHM+XG4gIDwvZHhvLWhlYWRlci1maWx0ZXI+XG4gIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cbiAgPGR4by1yZW1vdGUtb3BlcmF0aW9ucyBbZmlsdGVyaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdpbmddPVwidHJ1ZVwiPlxuICA8L2R4by1yZW1vdGUtb3BlcmF0aW9ucz5cbiAgPGR4by1tYXN0ZXItZGV0YWlsIFtlbmFibGVkXT1cImVuYWJsZU1hc3RlckRldGFpbFwiIHRlbXBsYXRlPVwibWFzdGVyRGV0YWlsVGVtcGxhdGVcIj48L2R4by1tYXN0ZXItZGV0YWlsPlxuICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTVcIj48L2R4by1wYWdpbmc+XG4gIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgW3Nob3dJbmZvXT1cInRydWVcIlxuICAgICAgICAgICAgIGluZm9UZXh0PVwi56ysezB96aG177yM5YWxezF96aG177yI5YWxezJ95Liq6aG555uu77yJXCJcbiAgICAgICAgICAgICBbc2hvd1BhZ2VTaXplU2VsZWN0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgW2FsbG93ZWRQYWdlU2l6ZXNdPVwiWzE1LCAzMCwgNTBdXCJcbiAgPjwvZHhvLXBhZ2VyPlxuICA8ZHhvLXNjcm9sbGluZyBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxuICA8ZHhvLWV4cG9ydCBbYWxsb3dFeHBvcnRTZWxlY3RlZERhdGFdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtmaWxlTmFtZV09XCJjbGFzc05hbWVcIj48L2R4by1leHBvcnQ+XG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgcm93SW5mbyBvZiAnbWFzdGVyRGV0YWlsVGVtcGxhdGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJtYXN0ZXJEZXRhaWxUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogcm93SW5mb31cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ3Jvd0luZGV4VGVtcGxhdGUnXCI+XG4gICAge3tjZWxsSW5mby5yb3dJbmRleCArIDF9fVxuICA8L2Rpdj5cbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAnbXVsdGlwbGVWYWx1ZUNlbGxUZW1wbGF0ZSdcIj5cbiAgICA8ZGl2IGRQb3BvdmVyICN0ZXh0RGl2XG4gICAgICAgICBbY29udGVudF09XCJjb252ZXJ0TXVsdGlwbGVWYWx1ZUNlbGxUZXh0KGNlbGxJbmZvLCB0cnVlKVwiXG4gICAgICAgICBbY29udHJvbGxlZF09XCJ0ZXh0RGl2LmNsaWVudFdpZHRoIDwgdGV4dERpdi5zY3JvbGxXaWR0aFwiXG4gICAgICAgICBbcG9wb3ZlclN0eWxlXT1cInsgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsIGNvbG9yOiAncmdiKDUxLCA1MSwgNTEpJyB9XCJcbiAgICAgICAgIHN0eWxlPVwidGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IG92ZXJmbG93OiBoaWRkZW47XCJcbiAgICAgICAgIFtuZ1N0eWxlXT1cInsgY3Vyc29yOiB0ZXh0RGl2LmNsaWVudFdpZHRoIDwgdGV4dERpdi5zY3JvbGxXaWR0aCA/ICdwb2ludGVyJzogJ2RlZmF1bHQnfVwiPlxuICAgICAge3tjb252ZXJ0TXVsdGlwbGVWYWx1ZUNlbGxUZXh0KGNlbGxJbmZvKX19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICd0ZXh0Q2VsbFRlbXBsYXRlJ1wiPlxuICAgIDxkaXYgZFBvcG92ZXIgI3RleHREaXZcbiAgICAgICAgIFtjb250ZW50XT1cImNlbGxJbmZvLnZhbHVlXCJcbiAgICAgICAgIFtjb250cm9sbGVkXT1cInRleHREaXYuY2xpZW50V2lkdGggPCB0ZXh0RGl2LnNjcm9sbFdpZHRoXCJcbiAgICAgICAgIFtwb3BNYXhXaWR0aF09XCIzMDBcIlxuICAgICAgICAgW3BvcG92ZXJTdHlsZV09XCJ7IGJhY2tncm91bmRDb2xvcjogJyNmZmYnLCBjb2xvcjogJ3JnYig1MSwgNTEsIDUxKScgfVwiXG4gICAgICAgICBzdHlsZT1cInRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBvdmVyZmxvdzogaGlkZGVuO1wiXG4gICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogdGV4dERpdi5jbGllbnRXaWR0aCA8IHRleHREaXYuc2Nyb2xsV2lkdGggPyAncG9pbnRlcic6ICdkZWZhdWx0J31cIj57e2NlbGxJbmZvLnZhbHVlfX08L2Rpdj5cbiAgPC9kaXY+XG48L2R4LWRhdGEtZ3JpZD5cbiJdfQ==
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUM7QUFFdkQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7OztBQVE3RSxNQUFNLE9BQU8saUJBQWlCO0lBbUQ1QixZQUFvQixPQUF3QixFQUE2QixNQUFjO1FBQW5FLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQTZCLFdBQU0sR0FBTixNQUFNLENBQVE7UUF6Q3ZGLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUczQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsWUFBTyxHQUFRO1lBQ2IsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENB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dGVudENoaWxkLCBJbmplY3QsIElucHV0LCBMT0NBTEVfSUQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtsYXN0VmFsdWVGcm9tfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0R4RGF0YUdyaWRDb21wb25lbnR9IGZyb20gXCJkZXZleHRyZW1lLWFuZ3VsYXJcIjtcclxuaW1wb3J0IHtEYXRhR3JpZFNlcnZpY2V9IGZyb20gXCIuL2RhdGEtZ3JpZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWFzdGVyRGV0YWlsVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gXCIuL21hc3Rlci1kZXRhaWwtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCBDdXN0b21TdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvY3VzdG9tX3N0b3JlJztcclxuaW1wb3J0IHtDb2x1bW59IGZyb20gXCJkZXZleHRyZW1lL3VpL2RhdGFfZ3JpZFwiO1xyXG5pbXBvcnQge1Jvd0J1dHRvbnNUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4vcm93LWJ1dHRvbnMtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JzLWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRGF0YUdyaWRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgdGVuYW50ITogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgY2xhc3NOYW1lITogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgdmlldz86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGZpbHRlcj86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGVuYWJsZU1hc3RlckRldGFpbCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgY3VzdG9tQ29sdW1uRm4/OiAoY29sdW1uczogYW55W10pID0+IHZvaWQ7XHJcbiAgZGF0YVNvdXJjZTogYW55ID0ge307XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0eXBlTWFwOiBhbnkgPSB7XHJcbiAgICBTVFJJTkc6IHtcclxuICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBmaWx0ZXJPcGVyYXRpb25zOiBbJ2NvbnRhaW5zJywgJ3N0YXJ0c3dpdGgnLCAnZW5kc3dpdGgnLCAnPScsICc8PiddXHJcbiAgICB9LFxyXG4gICAgVEVYVDoge1xyXG4gICAgICBkYXRhVHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnY29udGFpbnMnLCAnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCcsICc9JywgJzw+J11cclxuICAgIH0sXHJcbiAgICBCT09MRUFOOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnYm9vbGVhbicsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFtdXHJcbiAgICB9LFxyXG4gICAgSU5URUdFUjoge1xyXG4gICAgICBkYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnPScsICc8PicsICc+JywgJz49JywgJzwnLCAnPD0nLCAnYmV0d2VlbiddXHJcbiAgICB9LFxyXG4gICAgRE9VQkxFOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgZmlsdGVyT3BlcmF0aW9uczogWyc9JywgJzw+JywgJz4nLCAnPj0nLCAnPCcsICc8PScsICdiZXR3ZWVuJ11cclxuICAgIH0sXHJcbiAgICBEQVRFOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXHJcbiAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnPScsICc8PicsICc+JywgJz49JywgJzwnLCAnPD0nLCAnYmV0d2VlbiddLFxyXG4gICAgICBmb3JtYXQ6ICd5eXl5L01NL2RkJ1xyXG4gICAgfSxcclxuICAgIERBVEVUSU1FOiB7XHJcbiAgICAgIGRhdGFUeXBlOiAnZGF0ZXRpbWUnLFxyXG4gICAgICBmaWx0ZXJPcGVyYXRpb25zOiBbJz4nLCAnPCcsICdiZXR3ZWVuJ10sXHJcbiAgICAgIGZvcm1hdDogJ3l5eXkvTU0vZGQgSEg6bW06c3MnXHJcbiAgICB9XHJcbiAgfTtcclxuICBAVmlld0NoaWxkKER4RGF0YUdyaWRDb21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkeERhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlKSBtYXN0ZXJEZXRhaWxUZW1wbGF0ZSE6IE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUm93QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlKSByb3dCdXR0b25zVGVtcGxhdGUhOiBSb3dCdXR0b25zVGVtcGxhdGVEaXJlY3RpdmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLCBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZykge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ2V0TWV0YWRhdGFCeVZpZXcodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcgfHwgJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5zID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHJlc3BvbnNlLmRhdGEuY29sdW1ucykge1xyXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnRklMRSc6XHJcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZGF0YUZpZWxkOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgICAgIGNhcHRpb246IGZpZWxkLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgIGFsaWdubWVudDogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgYWxsb3dIZWFkZXJGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFsbG93RmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhbGxvd1NvcnRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJ2ZpbGVDZWxsVGVtcGxhdGUnLFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTk9STUFMJzpcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgZGF0YUZpZWxkOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgICAgIGNhcHRpb246IGZpZWxkLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGU6IHRoaXMudHlwZU1hcFtmaWVsZC5kYXRhVHlwZV0uZGF0YVR5cGUsXHJcbiAgICAgICAgICAgICAgYWxpZ25tZW50OiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgYWxsb3dIZWFkZXJGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgaGVhZGVyRmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICBhbGxvd1NlbGVjdEFsbDogZmFsc2VcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGZpbHRlck9wZXJhdGlvbnM6IHRoaXMudHlwZU1hcFtmaWVsZC5kYXRhVHlwZV0uZmlsdGVyT3BlcmF0aW9ucyxcclxuICAgICAgICAgICAgICBmb3JtYXQ6IHRoaXMudHlwZU1hcFtmaWVsZC5kYXRhVHlwZV0uZm9ybWF0LFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdCT09MRUFOJzpcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5hbGxvd0hlYWRlckZpbHRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLmFsaWdubWVudCA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnRydWVUZXh0ID0gJ+aYryc7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uZmFsc2VUZXh0ID0gJ+WQpic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdEQVRFJzpcclxuICAgICAgICAgICAgICBjYXNlICdEQVRFVElNRSc6XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyRmlsdGVyLmRhdGFTb3VyY2UgPSAob3B0aW9uczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVNvdXJjZS5ncm91cC5sZW5ndGggPSAzO1xyXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFTb3VyY2UucG9zdFByb2Nlc3MgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKCh5ZWFyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHllYXIudGV4dCA9IHllYXIua2V5ICsgJ+W5tCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICB5ZWFyLml0ZW1zLmZvckVhY2goKG1vbnRoOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgudGV4dCA9IG1vbnRoLmtleSArICfmnIgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aC5pdGVtcy5mb3JFYWNoKChkYXk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRheS50ZXh0ID0gZGF5LmtleSArICfml6UnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRheS5pdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKOepuueZvSknXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnRE9VQkxFJzpcclxuICAgICAgICAgICAgICBjYXNlICdJTlRFR0VSJzpcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXJGaWx0ZXIuZGF0YVNvdXJjZSA9IChvcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhU291cmNlLnBvc3RQcm9jZXNzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKOepuueZvSknXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnX18nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnU1RSSU5HJzpcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXJGaWx0ZXIuZGF0YVNvdXJjZSA9IChvcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhU291cmNlLnBvc3RQcm9jZXNzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKOepuueZvSknXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnX18nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ19fJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5jb25maWcuY29uc3RyYWludC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ1VTRVInOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXJGaWx0ZXIuZGF0YVNvdXJjZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldFVzZXJDb2x1bW5EYXRhU291cmNlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCBmaWVsZC5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5jb25maWcuY29uc3RyYWludC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmFsbG93RmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ubG9va3VwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRVc2VyQ29sdW1uRGF0YVNvdXJjZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMudmlldywgZmllbGQubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcjogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI6ICd0ZXh0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKHRoaXM6IENvbHVtbiwgZmlsdGVyVmFsdWU6IGFueSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb246IGFueSwgdGFyZ2V0OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbi5hcHBseSh0aGlzLCBbZmlsdGVyVmFsdWUsICdjb250YWlucycsIHRhcmdldF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2VsbFRlbXBsYXRlID0gJ211bHRpcGxlVmFsdWVDZWxsVGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YUZpZWxkID0gJ19fJyArIGZpZWxkLm5hbWUgKyAnXFx1MDAwMVVzZXJfZGlzcGxheU5hbWUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAodGhpczogYW55LCBmaWx0ZXJWYWx1ZTogYW55LCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbjogYW55LCB0YXJnZXQ6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSAnaGVhZGVyRmlsdGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZCA9ICdfXycgKyBmaWVsZC5uYW1lICsgJ1xcdTAwMDFVc2VyX3VzZXJuYW1lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uLmFwcGx5KHRoaXMsIFtmaWx0ZXJWYWx1ZSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb24sIHRhcmdldF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW4ubmFtZSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb24sIGZpbHRlclZhbHVlXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsnX18nICsgZmllbGQubmFtZSArICdcXHUwMDAxVXNlcl91c2VybmFtZScsIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uLCBmaWx0ZXJWYWx1ZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdVTklUJzpcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyRmlsdGVyLmRhdGFTb3VyY2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogbmV3IEN1c3RvbVN0b3JlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRVbml0Q29sdW1uRGF0YVNvdXJjZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMudmlldywgZmllbGQubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuY29uZmlnLmNvbnN0cmFpbnQubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hbGxvd0ZpbHRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLnNlcnZpY2UuZ2V0VW5pdENvbHVtbkRhdGFTb3VyY2UodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcsIGZpZWxkLm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiAndGV4dCdcclxuICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0aGlzOiBDb2x1bW4sIGZpbHRlclZhbHVlOiBhbnksIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uOiBhbnksIHRhcmdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24uYXBwbHkodGhpcywgW2ZpbHRlclZhbHVlLCAnY29udGFpbnMnLCB0YXJnZXRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNlbGxUZW1wbGF0ZSA9ICdtdWx0aXBsZVZhbHVlQ2VsbFRlbXBsYXRlJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmRhdGFGaWVsZCA9ICdfXycgKyBmaWVsZC5uYW1lICsgJ1xcdTAwMDFSb2xlX2Rpc3BsYXlOYW1lJztcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKHRoaXM6IENvbHVtbiwgZmlsdGVyVmFsdWU6IGFueSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb246IGFueSwgdGFyZ2V0OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ2hlYWRlckZpbHRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Q2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQgPSAnX18nICsgZmllbGQubmFtZSArICdcXHUwMDAxUm9sZV9uYW1lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uLmFwcGx5KHRoaXMsIFtmaWx0ZXJWYWx1ZSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb24sIHRhcmdldF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW4ubmFtZSwgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb24sIGZpbHRlclZhbHVlXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsnX18nICsgZmllbGQubmFtZSArICdcXHUwMDAxUm9sZV9uYW1lJywgc2VsZWN0ZWRGaWx0ZXJPcGVyYXRpb24sIGZpbHRlclZhbHVlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ0NVU1RPTSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlckZpbHRlci5kYXRhU291cmNlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLnNlcnZpY2UuZ2V0Q29uc3RyYWludENvbHVtbkRhdGFTb3VyY2UodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcsIGZpZWxkLm5hbWUsIGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldENvbnN0cmFpbnRFbnRyaWVzKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm5hbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcjogJ3N0b3JlJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiAnZGlzcGxheSdcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJPcGVyYXRpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmNvbmZpZy5jb25zdHJhaW50Lm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0aGlzOiBDb2x1bW4sIGZpbHRlclZhbHVlOiBhbnksIHNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uOiBhbnksIHRhcmdldDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDYWxjdWxhdGVGaWx0ZXJFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24uYXBwbHkodGhpcywgW2ZpbHRlclZhbHVlLCAnY29udGFpbnMnLCB0YXJnZXRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2VsbFRlbXBsYXRlID0gJ211bHRpcGxlVmFsdWVDZWxsVGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnVEVYVCc6XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsb3dIZWFkZXJGaWx0ZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5jZWxsVGVtcGxhdGUgPSAndGV4dENlbGxUZW1wbGF0ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1JFTEFUSU9OJzpcclxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5yZWxhdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdNQU5ZX1RPX01BTlknOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ09ORV9UT19NQU5ZJzpcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZDogZmllbGQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgY2FwdGlvbjogZmllbGQuY2FwdGlvbixcclxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6ICdsZWZ0JyxcclxuICAgICAgICAgICAgICAgICAgYWxsb3dIZWFkZXJGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnTUFOWV9UT19PTkUnOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ09ORV9UT19PTkUnOlxyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBmaWVsZC5jYXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICBhbGxvd0hlYWRlckZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdGlvbnM6IFsnPSddLFxyXG4gICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmaWVsZC52aXNpYmxlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmN1c3RvbUNvbHVtbkZuKSB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2x1bW5Gbihjb2x1bW5zKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICBrZXk6ICdvaWQnLFxyXG4gICAgICBieUtleTogKGtleTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldE9uZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIGtleSkpO1xyXG4gICAgICB9LFxyXG4gICAgICBsb2FkOiAobG9hZE9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChsb2FkT3B0aW9ucy5kYXRhRmllbGQpIHtcclxuICAgICAgICAgIC8vIOacqumHjeWGmWhlYWRlckZpbHRlcueahGRhdGFTb3VyY2Xml7bvvIxoZWFkZXJGaWx0ZXLkvJrosIPnlKhsb2Fk5pa55rOV5Yqg6L29562b6YCJ5qCR77yM6YeN5YaZ6K+l5pa55rOV5p+l6K+i6K+l6KGo5omA5pyJ5pWw5o2uXHJcbiAgICAgICAgICAvLyDor6XmlrnlvI/lrZjlnKjpo47pmanvvIzml6Dms5Xor4bliKvkuIDlrprmmK/pgJrov4doZWFkZXJGaWx0ZXLov4fmu6TmiY3lrZjlnKhkYXRhRmllbGTlj4LmlbBcclxuICAgICAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuc2VydmljZS5nZXRDb2x1bW5EYXRhU291cmNlKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcsIGxvYWRPcHRpb25zLmRhdGFGaWVsZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGFyYW1zID0gJz8nO1xyXG4gICAgICAgIGlmIChsb2FkT3B0aW9ucy5za2lwIHx8IGxvYWRPcHRpb25zLnRha2UpIHtcclxuICAgICAgICAgIHBhcmFtcyArPSAnb2Zmc2V0PScgKyBsb2FkT3B0aW9ucy5za2lwO1xyXG4gICAgICAgICAgcGFyYW1zICs9ICcmbGltaXQ9JyArIGxvYWRPcHRpb25zLnRha2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmFtcyArPSAnbGltaXQ9MCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2FkT3B0aW9ucy5zb3J0KSB7XHJcbiAgICAgICAgICBsZXQgZmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgZm9yIChjb25zdCB0aGlzU29ydCBvZiBsb2FkT3B0aW9ucy5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICAgIHBhcmFtcyArPSAnJm9yZGVyQnk9JyArIHRoaXNTb3J0LnNlbGVjdG9yO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHBhcmFtcyArPSAnLCcgKyB0aGlzU29ydC5zZWxlY3RvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpc1NvcnQuZGVzYykge1xyXG4gICAgICAgICAgICAgIHBhcmFtcyArPSAnIGRlc2MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaWx0ZXI7XHJcbiAgICAgICAgaWYgKGxvYWRPcHRpb25zLmZpbHRlcikge1xyXG4gICAgICAgICAgZmlsdGVyID0gbG9hZE9wdGlvbnMuZmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5maWx0ZXIpIHtcclxuICAgICAgICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICAgICAgZmlsdGVyID0gW2ZpbHRlciwgJ2FuZCcsIHRoaXMuZmlsdGVyXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IHRoaXMuZmlsdGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICBwYXJhbXMgKz0gJyZmaWx0ZXI9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShmaWx0ZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5zZXJ2aWNlLmdldE1hbnkodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCBwYXJhbXMgKyAnJnZpZXc9JyArICh0aGlzLnZpZXcgfHwgJycpKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29udmVydE11bHRpcGxlVmFsdWVDZWxsVGV4dChjZWxsSW5mbzogYW55KSB7XHJcbiAgICBpZiAoIWNlbGxJbmZvLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNlbGxJbmZvLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gY2VsbEluZm8udmFsdWUubWFwKChpdGVtOiBhbnkpID0+IGNlbGxJbmZvLmNvbHVtbi5sb29rdXAuY2FsY3VsYXRlQ2VsbFZhbHVlKGl0ZW0pKS5qb2luKCc8YnIgLz4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjZWxsSW5mby5jb2x1bW4ubG9va3VwLmNhbGN1bGF0ZUNlbGxWYWx1ZShjZWxsSW5mby52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGNhbGxiYWNrPzogYW55KSB7XHJcbiAgICB0aGlzLmR4RGF0YUdyaWQuaW5zdGFuY2UucmVmcmVzaCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLmR4RGF0YUdyaWQuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICAgICAgICBbc3luY0xvb2t1cEZpbHRlclZhbHVlc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCJcbiAgICAgICAgICAgICAgZGF0ZVNlcmlhbGl6YXRpb25Gb3JtYXQ9XCJ5eXl5L01NL2RkIEhIOm1tOnNzXCJcbiAgICAgICAgICAgICAgKG9uUm93RXhwYW5kaW5nKT1cIiRldmVudC5jb21wb25lbnQuY29sbGFwc2VBbGwoLTEpXCJcbj5cbiAgPGR4by1zb3J0aW5nIG1vZGU9XCJtdWx0aXBsZVwiPjwvZHhvLXNvcnRpbmc+XG4gIDxkeG8tc2VsZWN0aW9uIG1vZGU9XCJtdWx0aXBsZVwiIHNlbGVjdEFsbE1vZGU9XCJwYWdlXCI+PC9keG8tc2VsZWN0aW9uPlxuICA8ZHhvLWhlYWRlci1maWx0ZXIgW3Zpc2libGVdPVwidHJ1ZVwiPlxuICAgIDxkeG8tc2VhcmNoIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1zZWFyY2g+XG4gICAgPGR4by10ZXh0cyBbb2tdPVwiJ+ehruWumidcIj48L2R4by10ZXh0cz5cbiAgPC9keG8taGVhZGVyLWZpbHRlcj5cbiAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxuICA8ZHhvLXJlbW90ZS1vcGVyYXRpb25zIFtmaWx0ZXJpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luZ109XCJ0cnVlXCI+XG4gIDwvZHhvLXJlbW90ZS1vcGVyYXRpb25zPlxuICA8ZHhvLW1hc3Rlci1kZXRhaWwgW2VuYWJsZWRdPVwiZW5hYmxlTWFzdGVyRGV0YWlsXCIgdGVtcGxhdGU9XCJtYXN0ZXJEZXRhaWxUZW1wbGF0ZVwiPjwvZHhvLW1hc3Rlci1kZXRhaWw+XG4gIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCIxNVwiPjwvZHhvLXBhZ2luZz5cbiAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICBbc2hvd0luZm9dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgaW5mb1RleHQ9XCLnrKx7MH3pobXvvIzlhbF7MX3pobXvvIjlhbF7Mn3kuKrpobnnm67vvIlcIlxuICAgICAgICAgICAgIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJbMTUsIDMwLCA1MF1cIlxuICA+PC9keG8tcGFnZXI+XG4gIDxkeG8tc2Nyb2xsaW5nIHNob3dTY3JvbGxiYXI9XCJhbHdheXNcIj48L2R4by1zY3JvbGxpbmc+XG4gIDxkeG8tZXhwb3J0IFthbGxvd0V4cG9ydFNlbGVjdGVkRGF0YV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2ZpbGVOYW1lXT1cImNsYXNzTmFtZVwiPjwvZHhvLWV4cG9ydD5cbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCByb3dJbmZvIG9mICdtYXN0ZXJEZXRhaWxUZW1wbGF0ZSdcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1hc3RlckRldGFpbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiByb3dJbmZvfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCByb3dJbmZvIG9mICdyb3dCdXR0b25zVGVtcGxhdGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dCdXR0b25zVGVtcGxhdGUudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHJvd0luZm99XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdyb3dJbmRleFRlbXBsYXRlJ1wiPlxuICAgIHt7Y2VsbEluZm8ucm93SW5kZXggKyAxfX1cbiAgPC9kaXY+XG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ211bHRpcGxlVmFsdWVDZWxsVGVtcGxhdGUnXCI+XG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cImNvbnZlcnRNdWx0aXBsZVZhbHVlQ2VsbFRleHQoY2VsbEluZm8pXCI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICd0ZXh0Q2VsbFRlbXBsYXRlJ1wiPlxuICAgIDxkaXYgZFBvcG92ZXIgI3RleHREaXZcbiAgICAgICAgIFtjb250ZW50XT1cImNlbGxJbmZvLnZhbHVlXCJcbiAgICAgICAgIFt0cmlnZ2VyXT1cIidob3ZlcidcIlxuICAgICAgICAgW2NvbnRyb2xsZWRdPVwidGV4dERpdi5jbGllbnRXaWR0aCA8IHRleHREaXYuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgW3BvcE1heFdpZHRoXT1cIjMwMFwiXG4gICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMjQwcHg7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBvdmVyZmxvdzogaGlkZGVuO1wiXG4gICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogdGV4dERpdi5jbGllbnRXaWR0aCA8IHRleHREaXYuc2Nyb2xsV2lkdGggPyAncG9pbnRlcic6ICdkZWZhdWx0J31cIj57e2NlbGxJbmZvLnZhbHVlfX08L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ2ZpbGVDZWxsVGVtcGxhdGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsZSBvZiBjZWxsSW5mby52YWx1ZVwiPlxuICAgICAgPHJzLWZpbGUtY2VsbC10ZW1wbGF0ZSBbdGVtcGxhdGVdPVwiY2VsbEluZm9cIiBbb2lkXT1cImZpbGVcIj48L3JzLWZpbGUtY2VsbC10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2R4LWRhdGEtZ3JpZD5cbiJdfQ==