raise-common-lib 0.0.1 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/bundles/raise-common-lib.umd.js +1130 -0
  2. package/bundles/raise-common-lib.umd.js.map +1 -0
  3. package/bundles/raise-common-lib.umd.min.js +16 -0
  4. package/bundles/raise-common-lib.umd.min.js.map +1 -0
  5. package/esm2015/lib/common-grid/index.component.js +716 -0
  6. package/esm2015/lib/constant/index.js +107 -0
  7. package/esm2015/lib/raise-common-lib.module.js +38 -0
  8. package/esm2015/public-api.js +11 -0
  9. package/esm2015/raise-common-lib.js +10 -0
  10. package/esm5/lib/common-grid/index.component.js +865 -0
  11. package/esm5/lib/constant/index.js +107 -0
  12. package/esm5/lib/raise-common-lib.module.js +42 -0
  13. package/esm5/public-api.js +11 -0
  14. package/esm5/raise-common-lib.js +10 -0
  15. package/fesm2015/raise-common-lib.js +766 -0
  16. package/fesm2015/raise-common-lib.js.map +1 -0
  17. package/fesm5/raise-common-lib.js +917 -0
  18. package/fesm5/raise-common-lib.js.map +1 -0
  19. package/lib/common-grid/index.component.d.ts +116 -0
  20. package/lib/constant/index.d.ts +54 -0
  21. package/lib/raise-common-lib.module.d.ts +2 -0
  22. package/package.json +17 -4
  23. package/{src/public-api.ts → public-api.d.ts} +2 -5
  24. package/raise-common-lib.d.ts +4 -0
  25. package/raise-common-lib.metadata.json +1 -0
  26. package/karma.conf.js +0 -32
  27. package/ng-package.json +0 -7
  28. package/src/lib/common-grid/grid-utils.ts +0 -26
  29. package/src/lib/common-grid/index.component.html +0 -80
  30. package/src/lib/common-grid/index.component.scss +0 -230
  31. package/src/lib/common-grid/index.component.ts +0 -420
  32. package/src/lib/constant/index.ts +0 -59
  33. package/src/lib/raise-common-lib.module.ts +0 -48
  34. package/tsconfig.lib.json +0 -26
  35. package/tsconfig.spec.json +0 -17
  36. package/tslint.json +0 -17
@@ -0,0 +1,865 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/common-grid/index.component.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import * as tslib_1 from "tslib";
7
+ import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild, ChangeDetectorRef, } from '@angular/core';
8
+ import { GridComponent } from '@syncfusion/ej2-angular-grids';
9
+ var CommonGridComponent = /** @class */ (function () {
10
+ function CommonGridComponent(ref) {
11
+ this.ref = ref;
12
+ this.showCheckBox = true;
13
+ this.loaded = true;
14
+ this.hiddenLoaded = false;
15
+ this.authorized = true; // Dataset是否授权,未授权则显示权限错误提示
16
+ // Dataset是否授权,未授权则显示权限错误提示
17
+ // only use for local data pagination
18
+ this.selectedDiffKey = '';
19
+ this.gridHeight = '';
20
+ // 这玩意必填,不然filter columnChooser都会报错
21
+ this.gridId = 'grid';
22
+ this.resizeSettings = { mode: 'Auto' };
23
+ this.filterSettings = { type: 'Menu' };
24
+ this.fields = [];
25
+ this.dataSource = [];
26
+ this.allowPaging = true;
27
+ this.clipMode = 'EllipsisWithTooltip';
28
+ this.checkBoxWidth = 32; // col 数量过少的时候,check宽度会拉伸,这时候设置null
29
+ /**
30
+ * Sample: [
31
+ * {
32
+ * text: "Preview",
33
+ * target: ".e-content",
34
+ * id: "preview-icon",
35
+ * iconCss: "preview",
36
+ * },
37
+ * {
38
+ * text: "Download",
39
+ * target: ".e-content",
40
+ * id: "download-icon",
41
+ * iconCss: "download",
42
+ * }
43
+ * ]
44
+ * 用于定义row中 点击事件
45
+ */
46
+ this.contextMenuItems = [];
47
+ // @Input() selectionSettings = { checkboxOnly: true, type: "Multiple" };
48
+ this.selectionSettings = {
49
+ type: 'Multiple',
50
+ // persistSelection: true,
51
+ checkboxOnly: true,
52
+ };
53
+ this.alwaysShowCheckbox = false;
54
+ this.disableSystemRow = false; // 禁用IsSytem = true的整行
55
+ // 禁用IsSytem = true的整行
56
+ this.recordDoubleClick = new EventEmitter();
57
+ this.actionComplete = new EventEmitter();
58
+ this.rowSelected = new EventEmitter();
59
+ this.rowDeselected = new EventEmitter();
60
+ this.onContextMenu = new EventEmitter();
61
+ this.actionHandler = new EventEmitter();
62
+ this.queryCellInfo = new EventEmitter();
63
+ this.recordClick = new EventEmitter();
64
+ this.actionBegin = new EventEmitter();
65
+ this.rowDataBound = new EventEmitter();
66
+ this.dataBound = new EventEmitter();
67
+ this.exportQueryCellInfo = new EventEmitter();
68
+ this.rowSelecting = new EventEmitter();
69
+ this.selectId = [];
70
+ this.startPaging = false;
71
+ this.indexList = [];
72
+ this.className = 'grid-loading';
73
+ this.translation = JSON.parse(localStorage.getItem('translation'));
74
+ }
75
+ /**
76
+ * @return {?}
77
+ */
78
+ CommonGridComponent.prototype.ngOnInit = /**
79
+ * @return {?}
80
+ */
81
+ function () {
82
+ if (this.hiddenLoaded)
83
+ this.className = '';
84
+ this.ref && this.ref.markForCheck();
85
+ };
86
+ /**
87
+ * @param {?} index
88
+ * @param {?} item
89
+ * @return {?}
90
+ */
91
+ CommonGridComponent.prototype.trackByFn = /**
92
+ * @param {?} index
93
+ * @param {?} item
94
+ * @return {?}
95
+ */
96
+ function (index, item) {
97
+ return index; // or a unique identifier in your object
98
+ };
99
+ /**
100
+ * @param {?} changes
101
+ * @return {?}
102
+ */
103
+ CommonGridComponent.prototype.ngOnChanges = /**
104
+ * @param {?} changes
105
+ * @return {?}
106
+ */
107
+ function (changes) {
108
+ if (changes.dataSource && changes.dataSource.currentValue) {
109
+ if (this.allowPaging &&
110
+ changes.dataSource.currentValue.length &&
111
+ !this.pageSettings) {
112
+ this.pageSettings =
113
+ changes.dataSource.currentValue.length > 9
114
+ ? {
115
+ pageSizes: ['All', '25', '50', '100'],
116
+ pageSize: 50,
117
+ }
118
+ : null;
119
+ }
120
+ }
121
+ };
122
+ /**
123
+ * @return {?}
124
+ */
125
+ CommonGridComponent.prototype._load = /**
126
+ * @return {?}
127
+ */
128
+ function () {
129
+ if (!this.authorized) {
130
+ ((/** @type {?} */ (this.grid.localeObj))).localeStrings.EmptyRecord =
131
+ this.translation.YOU_DO_NOT_HAVE_THE_DATASET_PERMISSION ||
132
+ "You don't have the dataset permission to view the record.";
133
+ }
134
+ };
135
+ /**
136
+ * @param {?} args
137
+ * @return {?}
138
+ */
139
+ CommonGridComponent.prototype._dataBound = /**
140
+ * @param {?} args
141
+ * @return {?}
142
+ */
143
+ function (args) {
144
+ var _this = this;
145
+ // 整个组件加载完成时的回调函数
146
+ /** @type {?} */
147
+ var pagerContainer = document.querySelector('.e-pagercontainer');
148
+ if (pagerContainer) {
149
+ /** @type {?} */
150
+ var linkElements = pagerContainer.querySelectorAll('.e-link');
151
+ linkElements.forEach((/**
152
+ * @param {?} element
153
+ * @return {?}
154
+ */
155
+ function (element) {
156
+ element.removeAttribute('href'); // SMP2-10310 删除分页器的href属性
157
+ }));
158
+ }
159
+ if (this.selectedDiffKey) {
160
+ setTimeout((/**
161
+ * @return {?}
162
+ */
163
+ function () {
164
+ _this.chooseRecords();
165
+ }));
166
+ }
167
+ this.dataBound.emit(args);
168
+ };
169
+ /**
170
+ * @param {?} args
171
+ * @return {?}
172
+ */
173
+ CommonGridComponent.prototype._exportQueryCellInfo = /**
174
+ * @param {?} args
175
+ * @return {?}
176
+ */
177
+ function (args) {
178
+ this.exportQueryCellInfo.emit(args);
179
+ };
180
+ /**
181
+ * @param {?} $event
182
+ * @return {?}
183
+ */
184
+ CommonGridComponent.prototype._recordDoubleClick = /**
185
+ * @param {?} $event
186
+ * @return {?}
187
+ */
188
+ function ($event) {
189
+ this.recordDoubleClick.emit($event);
190
+ };
191
+ /**
192
+ * [selectionSettings]="{ checkboxOnly: true }"
193
+ [showCheckBox]="true"
194
+ 控件使用时,必须配置上面两个属性,否则,全选会失效
195
+ */
196
+ /**
197
+ * [selectionSettings]="{ checkboxOnly: true }"
198
+ * [showCheckBox]="true"
199
+ * 控件使用时,必须配置上面两个属性,否则,全选会失效
200
+ * @param {?} $event
201
+ * @return {?}
202
+ */
203
+ CommonGridComponent.prototype._rowSelected = /**
204
+ * [selectionSettings]="{ checkboxOnly: true }"
205
+ * [showCheckBox]="true"
206
+ * 控件使用时,必须配置上面两个属性,否则,全选会失效
207
+ * @param {?} $event
208
+ * @return {?}
209
+ */
210
+ function ($event) {
211
+ var _this = this;
212
+ if (this.selectedDiffKey) {
213
+ if ($event.isHeaderCheckboxClicked && Array.isArray($event.data)) {
214
+ if ($event.data && $event.data.length) {
215
+ $event.data.forEach((/**
216
+ * @param {?} item
217
+ * @return {?}
218
+ */
219
+ function (item) {
220
+ item.isSelected = true;
221
+ _this.selectId.push(item);
222
+ }));
223
+ this.dataSource.forEach((/**
224
+ * @param {?} data
225
+ * @return {?}
226
+ */
227
+ function (data) {
228
+ $event.data.forEach((/**
229
+ * @param {?} _data
230
+ * @return {?}
231
+ */
232
+ function (_data) {
233
+ if (_data[_this.selectedDiffKey] === data[_this.selectedDiffKey]) {
234
+ data.isSelected = true;
235
+ }
236
+ }));
237
+ }));
238
+ }
239
+ }
240
+ else {
241
+ $event.data.isSelected = true;
242
+ this.selectId.push($event.data);
243
+ this.dataSource.forEach((/**
244
+ * @param {?} data
245
+ * @return {?}
246
+ */
247
+ function (data) {
248
+ if (data[_this.selectedDiffKey] === $event.data[_this.selectedDiffKey]) {
249
+ data.isSelected = true;
250
+ }
251
+ }));
252
+ }
253
+ this.ref && this.ref.markForCheck();
254
+ }
255
+ this.rowSelected.emit($event);
256
+ };
257
+ /**
258
+ * @param {?} $event
259
+ * @return {?}
260
+ */
261
+ CommonGridComponent.prototype._rowDeselected = /**
262
+ * @param {?} $event
263
+ * @return {?}
264
+ */
265
+ function ($event) {
266
+ var _this = this;
267
+ if (this.selectedDiffKey) {
268
+ if (this.startPaging) {
269
+ return;
270
+ }
271
+ if ($event.isHeaderCheckboxClicked && Array.isArray($event.data)) {
272
+ $event.data.forEach((/**
273
+ * @param {?} item
274
+ * @return {?}
275
+ */
276
+ function (item) {
277
+ item.isSelected = false;
278
+ }));
279
+ this.selectId = [];
280
+ this.dataSource.forEach((/**
281
+ * @param {?} data
282
+ * @return {?}
283
+ */
284
+ function (data) {
285
+ $event.data.forEach((/**
286
+ * @param {?} _data
287
+ * @return {?}
288
+ */
289
+ function (_data) {
290
+ if (_data[_this.selectedDiffKey] === data[_this.selectedDiffKey]) {
291
+ data.isSelected = false;
292
+ }
293
+ }));
294
+ }));
295
+ }
296
+ else {
297
+ $event.data.isSelected = false;
298
+ this.selectId = this.selectId.filter((/**
299
+ * @param {?} item
300
+ * @return {?}
301
+ */
302
+ function (item) {
303
+ return item[_this.selectedDiffKey] !== $event.data[_this.selectedDiffKey];
304
+ }));
305
+ this.dataSource.forEach((/**
306
+ * @param {?} data
307
+ * @return {?}
308
+ */
309
+ function (data) {
310
+ if (data[_this.selectedDiffKey] === $event.data[_this.selectedDiffKey]) {
311
+ data.isSelected = false;
312
+ }
313
+ }));
314
+ }
315
+ this.ref && this.ref.markForCheck();
316
+ }
317
+ this.rowDeselected.emit($event);
318
+ };
319
+ /**
320
+ * @param {?} args
321
+ * @return {?}
322
+ */
323
+ CommonGridComponent.prototype._onContextMenu = /**
324
+ * @param {?} args
325
+ * @return {?}
326
+ */
327
+ function (args) {
328
+ this.onContextMenu.emit(args);
329
+ };
330
+ /**
331
+ * @param {?} args
332
+ * @return {?}
333
+ */
334
+ CommonGridComponent.prototype._actionBegin = /**
335
+ * @param {?} args
336
+ * @return {?}
337
+ */
338
+ function (args) {
339
+ if (this.selectedDiffKey &&
340
+ (args.requestType === 'paging' ||
341
+ args.requestType === 'searching' ||
342
+ args.requestType === 'filtering' ||
343
+ args.requestType === 'sorting')) {
344
+ this.startPaging = true;
345
+ }
346
+ this.actionBegin.emit(args);
347
+ };
348
+ /**
349
+ * @param {?} keywords
350
+ * @return {?}
351
+ */
352
+ CommonGridComponent.prototype.search = /**
353
+ * @param {?} keywords
354
+ * @return {?}
355
+ */
356
+ function (keywords) {
357
+ this.grid.search(keywords);
358
+ };
359
+ /**
360
+ * @param {?} indexList
361
+ * @return {?}
362
+ */
363
+ CommonGridComponent.prototype.selectRows = /**
364
+ * @param {?} indexList
365
+ * @return {?}
366
+ */
367
+ function (indexList) {
368
+ this.grid.selectRows(indexList);
369
+ };
370
+ /**
371
+ * @param {?} index
372
+ * @return {?}
373
+ */
374
+ CommonGridComponent.prototype.selectRow = /**
375
+ * @param {?} index
376
+ * @return {?}
377
+ */
378
+ function (index) {
379
+ this.grid.selectRow(index);
380
+ };
381
+ /**
382
+ * @return {?}
383
+ */
384
+ CommonGridComponent.prototype.getCurrentViewRecords = /**
385
+ * @return {?}
386
+ */
387
+ function () {
388
+ return this.grid.getCurrentViewRecords();
389
+ };
390
+ /**
391
+ * @param {?} $event
392
+ * @return {?}
393
+ */
394
+ CommonGridComponent.prototype.customiseCell = /**
395
+ * @param {?} $event
396
+ * @return {?}
397
+ */
398
+ function ($event) {
399
+ this.queryCellInfo.emit($event);
400
+ };
401
+ /**
402
+ * @param {?=} args
403
+ * @return {?}
404
+ */
405
+ CommonGridComponent.prototype.contextMenuOpen = /**
406
+ * @param {?=} args
407
+ * @return {?}
408
+ */
409
+ function (args) {
410
+ /** @type {?} */
411
+ var data = ((/** @type {?} */ (args))).rowInfo.rowData;
412
+ if (!data) {
413
+ args.cancel = true;
414
+ return;
415
+ }
416
+ /** @type {?} */
417
+ var enableItems = [];
418
+ /** @type {?} */
419
+ var hideItems = [];
420
+ this.grid.contextMenuModule.contextMenu.refresh(); // 每次点击按钮弹窗前需再次初始化状态 否则不更新;
421
+ this.contextMenuItems.forEach((/**
422
+ * @param {?} item
423
+ * @return {?}
424
+ */
425
+ function (item) {
426
+ // 用于处理部分按钮disabled的情况
427
+ if (item.disabled ||
428
+ (data.disableItem && data.disableItem.includes(item.iconCss))) {
429
+ enableItems.push(item.text);
430
+ // this.grid.contextMenuModule.contextMenu.enableItems(
431
+ // [item.text],
432
+ // false
433
+ // );
434
+ }
435
+ // 用于处理部分按钮需要hide的情况
436
+ if (item.isHide ||
437
+ (data.hideItem && data.hideItem.includes(item.iconCss))) {
438
+ hideItems.push(item.text);
439
+ // this.grid.contextMenuModule.contextMenu.hideItems(
440
+ // [item.text],
441
+ // false
442
+ // );
443
+ }
444
+ }));
445
+ this.grid.contextMenuModule.contextMenu.enableItems(enableItems, false);
446
+ this.grid.contextMenuModule.contextMenu.hideItems(hideItems, false);
447
+ };
448
+ /**
449
+ * @param {?} $event
450
+ * @return {?}
451
+ */
452
+ CommonGridComponent.prototype._actionHandler = /**
453
+ * @param {?} $event
454
+ * @return {?}
455
+ */
456
+ function ($event) {
457
+ var _this = this;
458
+ if (this.selectedDiffKey &&
459
+ ($event.requestType === 'paging' ||
460
+ $event.requestType === 'searching' ||
461
+ $event.requestType === 'filtering' ||
462
+ $event.requestType === 'sorting')) {
463
+ this.indexList = [];
464
+ setTimeout((/**
465
+ * @return {?}
466
+ */
467
+ function () {
468
+ _this.chooseRecords();
469
+ _this.startPaging = false;
470
+ _this.ref && _this.ref.detectChanges();
471
+ _this.ref && _this.ref.markForCheck();
472
+ }));
473
+ }
474
+ this.actionHandler.emit($event);
475
+ this.actionComplete.emit($event);
476
+ };
477
+ /**
478
+ * @private
479
+ * @return {?}
480
+ */
481
+ CommonGridComponent.prototype.chooseRecords = /**
482
+ * @private
483
+ * @return {?}
484
+ */
485
+ function () {
486
+ var _this = this;
487
+ this.indexList = [];
488
+ this.dataSource.forEach((/**
489
+ * @param {?} data
490
+ * @return {?}
491
+ */
492
+ function (data) {
493
+ _this.grid.getCurrentViewRecords().forEach((/**
494
+ * @param {?} row
495
+ * @param {?} i
496
+ * @return {?}
497
+ */
498
+ function (row, i) {
499
+ if (row &&
500
+ data[_this.selectedDiffKey] === row[_this.selectedDiffKey] &&
501
+ data.isSelected) {
502
+ _this.indexList.push(i);
503
+ }
504
+ }));
505
+ }));
506
+ this.grid.selectRows(this.indexList);
507
+ };
508
+ /**
509
+ * @param {?} $event
510
+ * @return {?}
511
+ */
512
+ CommonGridComponent.prototype._recordClick = /**
513
+ * @param {?} $event
514
+ * @return {?}
515
+ */
516
+ function ($event) {
517
+ this.recordClick.emit($event);
518
+ };
519
+ /**
520
+ * @return {?}
521
+ */
522
+ CommonGridComponent.prototype.refresh = /**
523
+ * @return {?}
524
+ */
525
+ function () {
526
+ this.grid.refresh();
527
+ };
528
+ /**
529
+ * @param {?} e
530
+ * @return {?}
531
+ */
532
+ CommonGridComponent.prototype._rowSelecting = /**
533
+ * @param {?} e
534
+ * @return {?}
535
+ */
536
+ function (e) {
537
+ this.rowSelecting.emit(e);
538
+ };
539
+ /**
540
+ * @return {?}
541
+ */
542
+ CommonGridComponent.prototype.refreshColumns = /**
543
+ * @return {?}
544
+ */
545
+ function () {
546
+ this.grid.refreshColumns();
547
+ };
548
+ /**
549
+ * @return {?}
550
+ */
551
+ CommonGridComponent.prototype.refreshHeader = /**
552
+ * @return {?}
553
+ */
554
+ function () {
555
+ this.grid.refreshHeader();
556
+ };
557
+ /**
558
+ * @param {?=} excelExportProperties
559
+ * @return {?}
560
+ */
561
+ CommonGridComponent.prototype.export = /**
562
+ * @param {?=} excelExportProperties
563
+ * @return {?}
564
+ */
565
+ function (excelExportProperties) {
566
+ this.grid.excelExport(excelExportProperties);
567
+ };
568
+ /**
569
+ * @return {?}
570
+ */
571
+ CommonGridComponent.prototype.getSelectedRecords = /**
572
+ * @return {?}
573
+ */
574
+ function () {
575
+ return this.grid.getSelectedRecords();
576
+ };
577
+ /**
578
+ * @param {?} $event
579
+ * @return {?}
580
+ */
581
+ CommonGridComponent.prototype._rowDataBound = /**
582
+ * @param {?} $event
583
+ * @return {?}
584
+ */
585
+ function ($event) {
586
+ if (this.disableSystemRow && $event.data && $event.data.IsSystem) {
587
+ $event.row.classList.add('e-disabled');
588
+ }
589
+ this.rowDataBound.emit($event);
590
+ };
591
+ /**
592
+ * @return {?}
593
+ */
594
+ CommonGridComponent.prototype.clearSelection = /**
595
+ * @return {?}
596
+ */
597
+ function () {
598
+ this.grid.clearSelection();
599
+ };
600
+ /**
601
+ * @return {?}
602
+ */
603
+ CommonGridComponent.prototype.excelExport = /**
604
+ * @return {?}
605
+ */
606
+ function () {
607
+ this.grid.excelExport();
608
+ };
609
+ /**
610
+ * @return {?}
611
+ */
612
+ CommonGridComponent.prototype.addItem = /**
613
+ * @return {?}
614
+ */
615
+ function () {
616
+ var _this = this;
617
+ this.grid.addRecord(tslib_1.__assign({}, this.defaultRecord, { isNew: true }), 0);
618
+ setTimeout((/**
619
+ * @return {?}
620
+ */
621
+ function () {
622
+ _this.grid.selectRow(0);
623
+ _this.grid.startEdit();
624
+ }), 30);
625
+ };
626
+ /**
627
+ * @return {?}
628
+ */
629
+ CommonGridComponent.prototype.saveItem = /**
630
+ * @return {?}
631
+ */
632
+ function () {
633
+ this.grid.endEdit();
634
+ };
635
+ /**
636
+ * @param {?} index
637
+ * @return {?}
638
+ */
639
+ CommonGridComponent.prototype.editItem = /**
640
+ * @param {?} index
641
+ * @return {?}
642
+ */
643
+ function (index) {
644
+ var _this = this;
645
+ setTimeout((/**
646
+ * @return {?}
647
+ */
648
+ function () {
649
+ _this.grid.selectRow(Number(index));
650
+ _this.grid.startEdit();
651
+ }), 30);
652
+ };
653
+ /**
654
+ * @param {?} index
655
+ * @return {?}
656
+ */
657
+ CommonGridComponent.prototype.deleteItem = /**
658
+ * @param {?} index
659
+ * @return {?}
660
+ */
661
+ function (index) {
662
+ this.grid.selectRow(Number(index));
663
+ /** @type {?} */
664
+ var selectedRecord = (/** @type {?} */ (this.grid.getSelectedRecords()[0]));
665
+ this.grid.deleteRecord((/** @type {?} */ (selectedRecord)));
666
+ };
667
+ /**
668
+ * @param {?} index
669
+ * @return {?}
670
+ */
671
+ CommonGridComponent.prototype.cancelItem = /**
672
+ * @param {?} index
673
+ * @return {?}
674
+ */
675
+ function (index) {
676
+ this.grid.closeEdit();
677
+ this.deleteItem(index);
678
+ };
679
+ /**
680
+ * @return {?}
681
+ */
682
+ CommonGridComponent.prototype.showLoading = /**
683
+ * @return {?}
684
+ */
685
+ function () {
686
+ this.className = 'grid-loading';
687
+ this.ref && this.ref.markForCheck();
688
+ this.ref && this.ref.detectChanges();
689
+ };
690
+ /**
691
+ * @return {?}
692
+ */
693
+ CommonGridComponent.prototype.hideLoading = /**
694
+ * @return {?}
695
+ */
696
+ function () {
697
+ this.className = '';
698
+ this.ref && this.ref.markForCheck();
699
+ this.ref && this.ref.detectChanges();
700
+ };
701
+ CommonGridComponent.decorators = [
702
+ { type: Component, args: [{
703
+ selector: 'kt-common-grid',
704
+ template: "<ejs-grid\r\n\t#grid\r\n\t[id]=\"gridId\"\r\n\t[ngClass]=\"{\r\n\t\t'hide-Check-box': !alwaysShowCheckbox,\r\n\t\t'grid-loading': className === 'grid-loading'\r\n\t}\"\r\n\t[dataSource]=\"dataSource\"\r\n\t[allowPaging]=\"allowPaging && pageSettings\"\r\n\t[allowResizing]=\"true\"\r\n\t[pageSettings]=\"pageSettings\"\r\n\t[showColumnMenu]=\"true\"\r\n\t[allowSorting]=\"true\"\r\n\t[allowFiltering]=\"true\"\r\n\t[allowExcelExport]=\"true\"\r\n\t[filterSettings]=\"filterSettings\"\r\n\t[resizeSettings]=\"resizeSettings\"\r\n\t[allowSelection]=\"true\"\r\n\t[editSettings]=\"editSettings\"\r\n\t[childGrid]=\"childGrid\"\r\n\t[contextMenuItems]=\"\r\n\t\tdataSource && dataSource.length ? contextMenuItems : null\r\n\t\"\r\n\t[selectionSettings]=\"selectionSettings\"\r\n\t(recordClick)=\"_recordClick($event)\"\r\n\t(recordDoubleClick)=\"_recordDoubleClick($event)\"\r\n\t(actionBegin)=\"_actionBegin($event)\"\r\n\t(actionComplete)=\"_actionHandler($event)\"\r\n\t(rowSelected)=\"_rowSelected($event)\"\r\n\t(rowDeselected)=\"_rowDeselected($event)\"\r\n\tstyle=\"border: none\"\r\n\t(contextMenuClick)=\"_onContextMenu($event)\"\r\n\t(contextMenuOpen)=\"contextMenuOpen($event)\"\r\n\t(queryCellInfo)=\"customiseCell($event)\"\r\n\t(dataBound)=\"_dataBound($event)\"\r\n\t(rowDataBound)=\"_rowDataBound($event)\"\r\n\t(rowSelecting)=\"_rowSelecting($event)\"\r\n\t(excelQueryCellInfo)=\"_exportQueryCellInfo($event)\"\r\n\t(load)=\"_load()\"\r\n>\r\n\t<e-columns>\r\n\t\t<e-column\r\n\t\t\t*ngIf=\"showCheckBox\"\r\n\t\t\ttype=\"checkbox\"\r\n\t\t\t[width]=\"checkBoxWidth\"\r\n\t\t\t[showColumnMenu]=\"false\"\r\n\t\t></e-column>\r\n\t\t<e-column\r\n\t\t\t*ngFor=\"let item of fields; trackBy: trackByFn\"\r\n\t\t\t[field]=\"item.columnName\"\r\n\t\t\t[filter]=\"item.filter ? item.filter : { type: 'CheckBox' }\"\r\n\t\t\t[customAttributes]=\"\r\n\t\t\t\titem.colName === 'entityUserList' ||\r\n\t\t\t\titem.colName === 'kycProgress'\r\n\t\t\t\t\t? { class: 'hideColumnFilterClass' }\r\n\t\t\t\t\t: {}\r\n\t\t\t\"\r\n\t\t\t[headerText]=\"item.columnDisplayName\"\r\n\t\t\t[textAlign]=\"item.textAlign\"\r\n\t\t\t[showColumnMenu]=\"item.showColumnMenu === undefined ? true : false\"\r\n\t\t\t[allowFiltering]=\"item.allowFiltering === undefined ? true : false\"\r\n\t\t\t[allowSorting]=\"item.allowSorting === undefined ? true : false\"\r\n\t\t\t[editType]=\"item.editType\"\r\n\t\t\t[validationRules]=\"item.validationRules\"\r\n\t\t\t[type]=\"item.dataType\"\r\n\t\t\t[width]=\"item.width\"\r\n\t\t\t[minWidth]=\"item.minWidth\"\r\n\t\t\t[format]=\"item.format\"\r\n\t\t\t[visible]=\"item.visible\"\r\n\t\t\t[template]=\"item.showTemplate ? columnTemplate : undefined\"\r\n\t\t\t[clipMode]=\"\r\n\t\t\t\titem.clipMode\r\n\t\t\t\t\t? item.clipMode\r\n\t\t\t\t\t: clipMode || 'EllipsisWithTooltip'\r\n\t\t\t\"\r\n\t\t\t[sortComparer]=\"item.dateComparer\"\r\n\t\t>\r\n\t\t</e-column>\r\n\t</e-columns>\r\n</ejs-grid>\r\n",
705
+ styles: [".e-grid.e-gridhover tr[role=row]:hover .e-rowcell:not(.e-cellselectionbackground):not(.e-active):not(.e-updatedtd):not(.e-indentcell){background:rgba(31,123,255,.04)!important}.e-summaryrow .e-summarycell:nth-child(2){padding-left:0!important}.e-footerpadding{padding-right:0!important}.e-footerpadding .e-summaryrow{margin-right:5px!important}.e-footerpadding .e-summaryrow .e-indentcell{background-color:unset!important}kt-common-grid{display:flex;flex:1;height:100%}kt-common-grid .e-grid{height:100%}kt-common-grid .e-grid .e-headercontent{margin-right:0!important}.e-grid td.e-active{background:#edf5ff!important}.grid-tools{height:32px;min-height:32px;display:flex;align-items:center;justify-content:space-between;padding-left:7px}.grid-tools .right-opt-group{display:flex;align-items:center;margin-right:6px}.grid-tools .tools-button{border:none;font-family:Arial;font-size:12px;color:#43566c;background:0 0;display:flex;align-items:center;padding:0;margin-right:16px}.grid-tools .tools-button.disabled-button{pointer-events:none;opacity:.5}.grid-tools .tools-button img{margin-right:4px;height:16px!important;width:16px!important}.grid-tools .tools-button .tools-font{transform:translateY(1px);display:inline-block}.grid-tools .select-num{font-size:12px;color:#43566c;margin-right:24px;white-space:nowrap}.e-rowcell{padding:0 8px 0 12px}.e-rowcell.e-gridchkbox{padding:0 0 0 8px!important}.e-headercell{padding:0}.e-headercell:first-child.e-defaultcursor+.e-headercell .e-headercelldiv{padding-left:0}.e-headercell .e-headercelldiv{margin:0;padding:0 20px 0 12px}.e-headercell .e-headerchkcelldiv{padding:0 0 0 8px!important}.e-headercell .e-columnmenu{position:absolute;right:0;float:unset;margin:0;padding:0;top:8px}.e-headercell .e-sortfilterdiv{padding-top:11px}.e-headercell.e-rightalign .e-sortfilterdiv{padding-left:5px}.e-detailheadercell{height:28px!important}.e-grid{font-family:Arial!important;display:flex;flex-direction:column;flex:1;border:none;overflow:hidden}.e-grid .e-gridcontent{flex:1}.e-grid .e-content{overflow:scroll!important}.e-grid .e-content::-webkit-scrollbar{width:5px;height:5px;background:#fff;position:static;z-index:999;border-radius:10px}.e-grid .e-content::-webkit-scrollbar-thumb{background:#eaedf0;border-radius:10px}.e-grid .e-gridheader{margin-right:5px!important;padding-right:0!important;height:30px!important}.e-grid .e-content,.e-grid .e-gridcontent{display:flex;flex-direction:column;flex:1}.e-grid .e-columnheader,.e-grid .e-headercell,.e-grid .e-rhandler{height:28px!important}.e-grid .e-headertext{font-size:10px!important}.e-grid .e-headercell .e-columnmenu{color:#929dab}.e-grid .e-row{height:26px!important;line-height:26px!important}.e-grid .e-rowcell{font-size:11px!important;color:#43566c!important;padding-top:0;padding-bottom:0;padding-right:7px}.e-grid .e-rowcell .mat-icon-button{height:26px;width:26px;line-height:26px}.e-grid .e-rowcell:empty{height:26px!important}.e-grid .e-rowcell.e-gridchkbox+.e-rowcell{padding-left:0!important}.e-grid .e-gridpager{border:none}.e-grid .e-gridpager .e-gridcontent{transform:unset}.e-grid .e-summaryrow{height:24px!important}.e-grid .e-summaryrow .e-indentcell,.e-grid .e-summaryrow .e-summarycell{background-color:#fff;border:none;font-family:Arial;font-size:11px!important;font-weight:700;color:#43566c;padding:0 12px}.e-grid .e-row:last-child .e-rowcell{border-bottom:1px solid #dee2e6}"]
706
+ }] }
707
+ ];
708
+ /** @nocollapse */
709
+ CommonGridComponent.ctorParameters = function () { return [
710
+ { type: ChangeDetectorRef }
711
+ ]; };
712
+ CommonGridComponent.propDecorators = {
713
+ grid: [{ type: ViewChild, args: ['grid', { static: false },] }],
714
+ showCheckBox: [{ type: Input }],
715
+ loaded: [{ type: Input }],
716
+ hiddenLoaded: [{ type: Input }],
717
+ authorized: [{ type: Input }],
718
+ selectedDiffKey: [{ type: Input }],
719
+ gridHeight: [{ type: Input }],
720
+ gridId: [{ type: Input }],
721
+ resizeSettings: [{ type: Input }],
722
+ filterSettings: [{ type: Input }],
723
+ template: [{ type: Input }],
724
+ fields: [{ type: Input }],
725
+ dataSource: [{ type: Input }],
726
+ editSettings: [{ type: Input }],
727
+ columnTemplate: [{ type: Input }],
728
+ pageSettings: [{ type: Input }],
729
+ allowPaging: [{ type: Input }],
730
+ clipMode: [{ type: Input }],
731
+ checkBoxWidth: [{ type: Input }],
732
+ childGrid: [{ type: Input }],
733
+ contextMenuItems: [{ type: Input }],
734
+ selectionSettings: [{ type: Input }],
735
+ alwaysShowCheckbox: [{ type: Input }],
736
+ defaultRecord: [{ type: Input }],
737
+ disableSystemRow: [{ type: Input }],
738
+ recordDoubleClick: [{ type: Output }],
739
+ actionComplete: [{ type: Output }],
740
+ rowSelected: [{ type: Output }],
741
+ rowDeselected: [{ type: Output }],
742
+ onContextMenu: [{ type: Output }],
743
+ actionHandler: [{ type: Output }],
744
+ queryCellInfo: [{ type: Output }],
745
+ recordClick: [{ type: Output }],
746
+ actionBegin: [{ type: Output }],
747
+ rowDataBound: [{ type: Output }],
748
+ dataBound: [{ type: Output }],
749
+ exportQueryCellInfo: [{ type: Output }],
750
+ rowSelecting: [{ type: Output }]
751
+ };
752
+ return CommonGridComponent;
753
+ }());
754
+ export { CommonGridComponent };
755
+ if (false) {
756
+ /** @type {?} */
757
+ CommonGridComponent.prototype.grid;
758
+ /** @type {?} */
759
+ CommonGridComponent.prototype.showCheckBox;
760
+ /** @type {?} */
761
+ CommonGridComponent.prototype.loaded;
762
+ /** @type {?} */
763
+ CommonGridComponent.prototype.hiddenLoaded;
764
+ /** @type {?} */
765
+ CommonGridComponent.prototype.authorized;
766
+ /** @type {?} */
767
+ CommonGridComponent.prototype.selectedDiffKey;
768
+ /** @type {?} */
769
+ CommonGridComponent.prototype.gridHeight;
770
+ /** @type {?} */
771
+ CommonGridComponent.prototype.gridId;
772
+ /** @type {?} */
773
+ CommonGridComponent.prototype.resizeSettings;
774
+ /** @type {?} */
775
+ CommonGridComponent.prototype.filterSettings;
776
+ /** @type {?} */
777
+ CommonGridComponent.prototype.template;
778
+ /** @type {?} */
779
+ CommonGridComponent.prototype.fields;
780
+ /** @type {?} */
781
+ CommonGridComponent.prototype.dataSource;
782
+ /** @type {?} */
783
+ CommonGridComponent.prototype.editSettings;
784
+ /** @type {?} */
785
+ CommonGridComponent.prototype.columnTemplate;
786
+ /** @type {?} */
787
+ CommonGridComponent.prototype.pageSettings;
788
+ /** @type {?} */
789
+ CommonGridComponent.prototype.allowPaging;
790
+ /** @type {?} */
791
+ CommonGridComponent.prototype.clipMode;
792
+ /** @type {?} */
793
+ CommonGridComponent.prototype.checkBoxWidth;
794
+ /** @type {?} */
795
+ CommonGridComponent.prototype.childGrid;
796
+ /**
797
+ * Sample: [
798
+ * {
799
+ * text: "Preview",
800
+ * target: ".e-content",
801
+ * id: "preview-icon",
802
+ * iconCss: "preview",
803
+ * },
804
+ * {
805
+ * text: "Download",
806
+ * target: ".e-content",
807
+ * id: "download-icon",
808
+ * iconCss: "download",
809
+ * }
810
+ * ]
811
+ * 用于定义row中 点击事件
812
+ * @type {?}
813
+ */
814
+ CommonGridComponent.prototype.contextMenuItems;
815
+ /** @type {?} */
816
+ CommonGridComponent.prototype.selectionSettings;
817
+ /** @type {?} */
818
+ CommonGridComponent.prototype.alwaysShowCheckbox;
819
+ /** @type {?} */
820
+ CommonGridComponent.prototype.defaultRecord;
821
+ /** @type {?} */
822
+ CommonGridComponent.prototype.disableSystemRow;
823
+ /** @type {?} */
824
+ CommonGridComponent.prototype.recordDoubleClick;
825
+ /** @type {?} */
826
+ CommonGridComponent.prototype.actionComplete;
827
+ /** @type {?} */
828
+ CommonGridComponent.prototype.rowSelected;
829
+ /** @type {?} */
830
+ CommonGridComponent.prototype.rowDeselected;
831
+ /** @type {?} */
832
+ CommonGridComponent.prototype.onContextMenu;
833
+ /** @type {?} */
834
+ CommonGridComponent.prototype.actionHandler;
835
+ /** @type {?} */
836
+ CommonGridComponent.prototype.queryCellInfo;
837
+ /** @type {?} */
838
+ CommonGridComponent.prototype.recordClick;
839
+ /** @type {?} */
840
+ CommonGridComponent.prototype.actionBegin;
841
+ /** @type {?} */
842
+ CommonGridComponent.prototype.rowDataBound;
843
+ /** @type {?} */
844
+ CommonGridComponent.prototype.dataBound;
845
+ /** @type {?} */
846
+ CommonGridComponent.prototype.exportQueryCellInfo;
847
+ /** @type {?} */
848
+ CommonGridComponent.prototype.rowSelecting;
849
+ /** @type {?} */
850
+ CommonGridComponent.prototype.selectId;
851
+ /** @type {?} */
852
+ CommonGridComponent.prototype.startPaging;
853
+ /** @type {?} */
854
+ CommonGridComponent.prototype.indexList;
855
+ /** @type {?} */
856
+ CommonGridComponent.prototype.className;
857
+ /** @type {?} */
858
+ CommonGridComponent.prototype.translation;
859
+ /**
860
+ * @type {?}
861
+ * @private
862
+ */
863
+ CommonGridComponent.prototype.ref;
864
+ }
865
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21tb24tZ3JpZC9pbmRleC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBRVgsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLOUQ7SUErRUUsNkJBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdkVqQyxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsZUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLDJCQUEyQjs7O1FBRTlDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxFQUFFLENBQUM7O1FBRWhCLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIsbUJBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNsQyxtQkFBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBRWxDLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBQzVCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFJaEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsYUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFvQnZELHFCQUFnQixHQUFzQixFQUFFLENBQUM7O1FBRXpDLHNCQUFpQixHQUFHO1lBQzNCLElBQUksRUFBRSxVQUFVOztZQUVoQixZQUFZLEVBQUUs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SUFDakQsNkNBQThDOztJQUM5QywwQ0FBMkM7O0lBQzNDLDRDQUE2Qzs7SUFDN0MsNENBQTZDOztJQUM3Qyw0Q0FBNkM7O0lBQzdDLDRDQUE2Qzs7SUFDN0MsMENBQTJDOztJQUMzQywwQ0FBMkM7O0lBQzNDLDJDQUE0Qzs7SUFDNUMsd0NBQXlDOztJQUN6QyxrREFBbUQ7O0lBQ25ELDJDQUE0Qzs7SUFFNUMsdUNBQWM7O0lBQ2QsMENBQW9COztJQUNwQix3Q0FBZTs7SUFDZix3Q0FBMkI7O0lBRTNCLDBDQUFtQjs7Ozs7SUFFUCxrQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRDb21wb25lbnQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1ncmlkcyc7XHJcblxyXG5pbXBvcnQgeyBCZWZvcmVPcGVuQ2xvc2VFdmVudEFyZ3MgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1pbnB1dHMnO1xyXG5pbXBvcnQgeyBJQWN0aW9uTWVudUl0ZW0sIElDb2x1bW5GaWVsZCB9IGZyb20gJy4uL2NvbnN0YW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3QtY29tbW9uLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmRleC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5kZXguY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1vbkdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBncmlkOiBHcmlkQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIHNob3dDaGVja0JveCA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGVkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoaWRkZW5Mb2FkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBhdXRob3JpemVkID0gdHJ1ZTsgLy8gRGF0YXNldOaYr+WQpuaOiOadg++8jOacquaOiOadg+WImeaYvuekuuadg+mZkOmUmeivr+aPkOekulxyXG4gIC8vIG9ubHkgdXNlIGZvciBsb2NhbCBkYXRhIHBhZ2luYXRpb25cclxuICBASW5wdXQoKSBzZWxlY3RlZERpZmZLZXkgPSAnJztcclxuICBASW5wdXQoKSBncmlkSGVpZ2h0ID0gJyc7XHJcbiAgLy8g6L+Z546p5oSP5b+F5aGr77yM5LiN54S2ZmlsdGVyIGNvbHVtbkNob29zZXLpg73kvJrmiqXplJlcclxuICBASW5wdXQoKSBncmlkSWQgPSAnZ3JpZCc7XHJcbiAgQElucHV0KCkgcmVzaXplU2V0dGluZ3MgPSB7IG1vZGU6ICdBdXRvJyB9O1xyXG4gIEBJbnB1dCgpIGZpbHRlclNldHRpbmdzID0geyB0eXBlOiAnTWVudScgfTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZTogYW55O1xyXG4gIEBJbnB1dCgpIGZpZWxkczogSUNvbHVtbkZpZWxkW10gPSBbXTtcclxuICBASW5wdXQoKSBkYXRhU291cmNlID0gW107XHJcbiAgQElucHV0KCkgZWRpdFNldHRpbmdzO1xyXG4gIEBJbnB1dCgpIGNvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2VTZXR0aW5ncztcclxuICBASW5wdXQoKSBhbGxvd1BhZ2luZyA9IHRydWU7XHJcbiAgQElucHV0KCkgY2xpcE1vZGUgPSAnRWxsaXBzaXNXaXRoVG9vbHRpcCc7XHJcbiAgQElucHV0KCkgY2hlY2tCb3hXaWR0aCA9IDMyOyAvLyBjb2wg5pWw6YeP6L+H5bCR55qE5pe25YCZ77yMY2hlY2vlrr3luqbkvJrmi4nkvLjvvIzov5nml7blgJnorr7nva5udWxsXHJcbiAgQElucHV0KCkgY2hpbGRHcmlkO1xyXG5cclxuICAvKipcclxuXHQgKiBTYW1wbGU6IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRleHQ6IFwiUHJldmlld1wiLFxyXG5cdFx0XHRcdHRhcmdldDogXCIuZS1jb250ZW50XCIsXHJcblx0XHRcdFx0aWQ6IFwicHJldmlldy1pY29uXCIsXHJcblx0XHRcdFx0aWNvbkNzczogXCJwcmV2aWV3XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0ZXh0OiBcIkRvd25sb2FkXCIsXHJcblx0XHRcdFx0dGFyZ2V0OiBcIi5lLWNvbnRlbnRcIixcclxuXHRcdFx0XHRpZDogXCJkb3dubG9hZC1pY29uXCIsXHJcblx0XHRcdFx0aWNvbkNzczogXCJkb3dubG9hZFwiLFxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0XHTnlKjkuo7lrprkuYlyb3fkuK0g54K55Ye75LqL5Lu2XHJcblx0ICovXHJcbiAgQElucHV0KCkgY29udGV4dE1lbnVJdGVtczogSUFjdGlvbk1lbnVJdGVtW10gPSBbXTtcclxuICAvLyBASW5wdXQoKSBzZWxlY3Rpb25TZXR0aW5ncyA9IHsgY2hlY2tib3hPbmx5OiB0cnVlLCB0eXBlOiBcIk11bHRpcGxlXCIgfTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25TZXR0aW5ncyA9IHtcclxuICAgIHR5cGU6ICdNdWx0aXBsZScsXHJcbiAgICAvLyBwZXJzaXN0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgY2hlY2tib3hPbmx5OiB0cnVlLFxyXG4gIH07XHJcbiAgQElucHV0KCkgYWx3YXlzU2hvd0NoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVmYXVsdFJlY29yZDogYW55O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTeXN0ZW1Sb3c6IGJvb2xlYW4gPSBmYWxzZTsgLy8g56aB55SoSXNTeXRlbSA9IHRydWXnmoTmlbTooYxcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlY29yZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RGF0YUJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQm91bmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGV4cG9ydFF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd1NlbGVjdGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgc2VsZWN0SWQgPSBbXTtcclxuICBzdGFydFBhZ2luZyA9IGZhbHNlO1xyXG4gIGluZGV4TGlzdCA9IFtdO1xyXG4gIGNsYXNzTmFtZSA9ICdncmlkLWxvYWRpbmcnO1xyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyYW5zbGF0aW9uJykpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5Mb2FkZWQpIHRoaXMuY2xhc3NOYW1lID0gJyc7XHJcbiAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xyXG4gICAgcmV0dXJuIGluZGV4OyAvLyBvciBhIHVuaXF1ZSBpZGVudGlmaWVyIGluIHlvdXIgb2JqZWN0XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLmRhdGFTb3VyY2UgJiYgY2hhbmdlcy5kYXRhU291cmNlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5hbGxvd1BhZ2luZyAmJlxyXG4gICAgICAgIGNoYW5nZXMuZGF0YVNvdXJjZS5jdXJyZW50VmFsdWUubGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMucGFnZVNldHRpbmdzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGFnZVNldHRpbmdzID1cclxuICAgICAgICAgIGNoYW5nZXMuZGF0YVNvdXJjZS5jdXJyZW50VmFsdWUubGVuZ3RoID4gOVxyXG4gICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplczogWydBbGwnLCAnMjUnLCAnNTAnLCAnMTAwJ10sXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogNTAsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9sb2FkKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dGhvcml6ZWQpIHtcclxuICAgICAgKHRoaXMuZ3JpZC5sb2NhbGVPYmogYXMgYW55KS5sb2NhbGVTdHJpbmdzLkVtcHR5UmVjb3JkID1cclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLllPVV9ET19OT1RfSEFWRV9USEVfREFUQVNFVF9QRVJNSVNTSU9OIHx8XHJcbiAgICAgICAgXCJZb3UgZG9uJ3QgaGF2ZSB0aGUgZGF0YXNldCBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIHJlY29yZC5cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9kYXRhQm91bmQoYXJnczogYW55KSB7XHJcbiAgICAvLyDmlbTkuKrnu4Tku7bliqDovb3lrozmiJDml7bnmoTlm57osIPlh73mlbBcclxuICAgIHZhciBwYWdlckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lLXBhZ2VyY29udGFpbmVyJyk7XHJcbiAgICBpZiAocGFnZXJDb250YWluZXIpIHtcclxuICAgICAgdmFyIGxpbmtFbGVtZW50cyA9IHBhZ2VyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lLWxpbmsnKTtcclxuICAgICAgbGlua0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpOyAvLyBTTVAyLTEwMzEwIOWIoOmZpOWIhumhteWZqOeahGhyZWblsZ7mgKdcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZERpZmZLZXkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaG9vc2VSZWNvcmRzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhQm91bmQuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9leHBvcnRRdWVyeUNlbGxJbmZvKGFyZ3MpIHtcclxuICAgIHRoaXMuZXhwb3J0UXVlcnlDZWxsSW5mby5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX3JlY29yZERvdWJsZUNsaWNrKCRldmVudCkge1xyXG4gICAgdGhpcy5yZWNvcmREb3VibGVDbGljay5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG4gIC8qKlxyXG5cdCAqIFtzZWxlY3Rpb25TZXR0aW5nc109XCJ7IGNoZWNrYm94T25seTogdHJ1ZSB9XCJcclxuXHQgICBbc2hvd0NoZWNrQm94XT1cInRydWVcIlxyXG5cdCAgIOaOp+S7tuS9v+eUqOaXtu+8jOW/hemhu+mFjee9ruS4iumdouS4pOS4quWxnuaAp++8jOWQpuWIme+8jOWFqOmAieS8muWkseaViFxyXG5cdCAqL1xyXG4gIF9yb3dTZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5kYXRhICYmICRldmVudC5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICRldmVudC5kYXRhLmZvckVhY2goKF9kYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKF9kYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSA9PT0gZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV0pIHtcclxuICAgICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goJGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfcm93RGVzZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAodGhpcy5zdGFydFBhZ2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAkZXZlbnQuZGF0YS5mb3JFYWNoKChfZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoX2RhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSBkYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IHRoaXMuc2VsZWN0SWQuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZERpZmZLZXldICE9PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfb25Db250ZXh0TWVudShhcmdzKSB7XHJcbiAgICB0aGlzLm9uQ29udGV4dE1lbnUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREaWZmS2V5ICYmXHJcbiAgICAgIChhcmdzLnJlcXVlc3RUeXBlID09PSAncGFnaW5nJyB8fFxyXG4gICAgICAgIGFyZ3MucmVxdWVzdFR5cGUgPT09ICdzZWFyY2hpbmcnIHx8XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0VHlwZSA9PT0gJ2ZpbHRlcmluZycgfHxcclxuICAgICAgICBhcmdzLnJlcXVlc3RUeXBlID09PSAnc29ydGluZycpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zdGFydFBhZ2luZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGlvbkJlZ2luLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2goa2V5d29yZHMpIHtcclxuICAgIHRoaXMuZ3JpZC5zZWFyY2goa2V5d29yZHMpO1xyXG4gIH1cclxuICBzZWxlY3RSb3dzKGluZGV4TGlzdDogbnVtYmVyW10pIHtcclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3dzKGluZGV4TGlzdCk7XHJcbiAgfVxyXG4gIHNlbGVjdFJvdyhpbmRleCkge1xyXG4gICAgdGhpcy5ncmlkLnNlbGVjdFJvdyhpbmRleCk7XHJcbiAgfVxyXG4gIGdldEN1cnJlbnRWaWV3UmVjb3JkcygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCk7XHJcbiAgfVxyXG5cclxuICBjdXN0b21pc2VDZWxsKCRldmVudCkge1xyXG4gICAgdGhpcy5xdWVyeUNlbGxJbmZvLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGNvbnRleHRNZW51T3BlbihhcmdzPzogQmVmb3JlT3BlbkNsb3NlRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhID0gKGFyZ3MgYXMgQmVmb3JlT3BlbkNsb3NlRXZlbnRBcmdzIHwgYW55KS5yb3dJbmZvLnJvd0RhdGE7XHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgYXJncy5jYW5jZWwgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZW5hYmxlSXRlbXMgPSBbXTtcclxuICAgIGxldCBoaWRlSXRlbXMgPSBbXTtcclxuICAgIHRoaXMuZ3JpZC5jb250ZXh0TWVudU1vZHVsZS5jb250ZXh0TWVudS5yZWZyZXNoKCk7IC8vIOavj+asoeeCueWHu+aMiemSruW8ueeql+WJjemcgOWGjeasoeWIneWni+WMlueKtuaAgSDlkKbliJnkuI3mm7TmlrDvvJtcclxuICAgIHRoaXMuY29udGV4dE1lbnVJdGVtcy5mb3JFYWNoKChpdGVtOiBJQWN0aW9uTWVudUl0ZW0pID0+IHtcclxuICAgICAgLy8g55So5LqO5aSE55CG6YOo5YiG5oyJ6ZKuZGlzYWJsZWTnmoTmg4XlhrVcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgfHxcclxuICAgICAgICAoZGF0YS5kaXNhYmxlSXRlbSAmJiBkYXRhLmRpc2FibGVJdGVtLmluY2x1ZGVzKGl0ZW0uaWNvbkNzcykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGVuYWJsZUl0ZW1zLnB1c2goaXRlbS50ZXh0KTtcclxuICAgICAgICAvLyB0aGlzLmdyaWQuY29udGV4dE1lbnVNb2R1bGUuY29udGV4dE1lbnUuZW5hYmxlSXRlbXMoXHJcbiAgICAgICAgLy8gXHRbaXRlbS50ZXh0XSxcclxuICAgICAgICAvLyBcdGZhbHNlXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDnlKjkuo7lpITnkIbpg6jliIbmjInpkq7pnIDopoFoaWRl55qE5oOF5Ya1XHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtLmlzSGlkZSB8fFxyXG4gICAgICAgIChkYXRhLmhpZGVJdGVtICYmIGRhdGEuaGlkZUl0ZW0uaW5jbHVkZXMoaXRlbS5pY29uQ3NzKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgaGlkZUl0ZW1zLnB1c2goaXRlbS50ZXh0KTtcclxuICAgICAgICAvLyB0aGlzLmdyaWQuY29udGV4dE1lbnVNb2R1bGUuY29udGV4dE1lbnUuaGlkZUl0ZW1zKFxyXG4gICAgICAgIC8vIFx0W2l0ZW0udGV4dF0sXHJcbiAgICAgICAgLy8gXHRmYWxzZVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmVuYWJsZUl0ZW1zKGVuYWJsZUl0ZW1zLCBmYWxzZSk7XHJcbiAgICB0aGlzLmdyaWQuY29udGV4dE1lbnVNb2R1bGUuY29udGV4dE1lbnUuaGlkZUl0ZW1zKGhpZGVJdGVtcywgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgX2FjdGlvbkhhbmRsZXIoJGV2ZW50KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREaWZmS2V5ICYmXHJcbiAgICAgICgkZXZlbnQucmVxdWVzdFR5cGUgPT09ICdwYWdpbmcnIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSAnc2VhcmNoaW5nJyB8fFxyXG4gICAgICAgICRldmVudC5yZXF1ZXN0VHlwZSA9PT0gJ2ZpbHRlcmluZycgfHxcclxuICAgICAgICAkZXZlbnQucmVxdWVzdFR5cGUgPT09ICdzb3J0aW5nJylcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV4TGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNob29zZVJlY29yZHMoKTtcclxuICAgICAgICB0aGlzLnN0YXJ0UGFnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uSGFuZGxlci5lbWl0KCRldmVudCk7XHJcbiAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hvb3NlUmVjb3JkcygpIHtcclxuICAgIHRoaXMuaW5kZXhMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkuZm9yRWFjaCgocm93OiBhbnksIGkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByb3cgJiZcclxuICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSByb3dbdGhpcy5zZWxlY3RlZERpZmZLZXldICYmXHJcbiAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhMaXN0LnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3dzKHRoaXMuaW5kZXhMaXN0KTtcclxuICB9XHJcblxyXG4gIF9yZWNvcmRDbGljaygkZXZlbnQpIHtcclxuICAgIHRoaXMucmVjb3JkQ2xpY2suZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2goKTtcclxuICB9XHJcbiAgX3Jvd1NlbGVjdGluZyhlKSB7XHJcbiAgICB0aGlzLnJvd1NlbGVjdGluZy5lbWl0KGUpO1xyXG4gIH1cclxuICByZWZyZXNoQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZ3JpZC5yZWZyZXNoQ29sdW1ucygpO1xyXG4gIH1cclxuICByZWZyZXNoSGVhZGVyKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2hIZWFkZXIoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydChleGNlbEV4cG9ydFByb3BlcnRpZXM/KSB7XHJcbiAgICB0aGlzLmdyaWQuZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUmVjb3JkcygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0U2VsZWN0ZWRSZWNvcmRzKCk7XHJcbiAgfVxyXG5cclxuICBfcm93RGF0YUJvdW5kKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZVN5c3RlbVJvdyAmJiAkZXZlbnQuZGF0YSAmJiAkZXZlbnQuZGF0YS5Jc1N5c3RlbSkge1xyXG4gICAgICAkZXZlbnQucm93LmNsYXNzTGlzdC5hZGQoJ2UtZGlzYWJsZWQnKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93RGF0YUJvdW5kLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5ncmlkLmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBleGNlbEV4cG9ydCgpIHtcclxuICAgIHRoaXMuZ3JpZC5leGNlbEV4cG9ydCgpO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIHRoaXMuZ3JpZC5hZGRSZWNvcmQoeyAuLi50aGlzLmRlZmF1bHRSZWNvcmQsIGlzTmV3OiB0cnVlIH0sIDApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3coMCk7XHJcbiAgICAgIHRoaXMuZ3JpZC5zdGFydEVkaXQoKTtcclxuICAgIH0sIDMwKTtcclxuICB9XHJcblxyXG4gIHNhdmVJdGVtKCkge1xyXG4gICAgdGhpcy5ncmlkLmVuZEVkaXQoKTtcclxuICB9XHJcblxyXG4gIGVkaXRJdGVtKGluZGV4KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkLnNlbGVjdFJvdyhOdW1iZXIoaW5kZXgpKTtcclxuICAgICAgdGhpcy5ncmlkLnN0YXJ0RWRpdCgpO1xyXG4gICAgfSwgMzApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbShpbmRleCkge1xyXG4gICAgdGhpcy5ncmlkLnNlbGVjdFJvdyhOdW1iZXIoaW5kZXgpKTtcclxuICAgIHZhciBzZWxlY3RlZFJlY29yZCA9IHRoaXMuZ3JpZC5nZXRTZWxlY3RlZFJlY29yZHMoKVswXSBhcyBhbnk7XHJcbiAgICB0aGlzLmdyaWQuZGVsZXRlUmVjb3JkKHNlbGVjdGVkUmVjb3JkIGFzIHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJdGVtKGluZGV4KSB7XHJcbiAgICB0aGlzLmdyaWQuY2xvc2VFZGl0KCk7XHJcbiAgICB0aGlzLmRlbGV0ZUl0ZW0oaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dMb2FkaW5nKCkge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSAnZ3JpZC1sb2FkaW5nJztcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVMb2FkaW5nKCkge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSAnJztcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iXX0=