@universis/ngx-tables 0.8.5 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/bundles/universis-ngx-tables.umd.js +5816 -3756
  2. package/bundles/universis-ngx-tables.umd.js.map +1 -1
  3. package/bundles/universis-ngx-tables.umd.min.js +1 -1
  4. package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
  5. package/esm2015/lib/actions/table.actions.js +48 -7
  6. package/esm2015/lib/advanced-aggregator.js +5 -1
  7. package/esm2015/lib/components/add-items/add-items.component.js +93 -26
  8. package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +75 -5
  9. package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +39 -12
  10. package/esm2015/lib/components/advanced-list/advanced-list.component.js +105 -33
  11. package/esm2015/lib/components/advanced-row-action/advanced-row-action.component.js +97 -16
  12. package/esm2015/lib/components/advanced-search-form/advanced-search-form.component.js +87 -16
  13. package/esm2015/lib/components/advanced-select/advanced-select.component.js +33 -1
  14. package/esm2015/lib/components/advanced-select/advanced-select.service.js +20 -3
  15. package/esm2015/lib/components/advanced-table/advanced-filter-value-provider.service.js +23 -2
  16. package/esm2015/lib/components/advanced-table/advanced-table-resolvers.js +37 -9
  17. package/esm2015/lib/components/advanced-table/advanced-table-search-base.js +22 -1
  18. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +223 -31
  19. package/esm2015/lib/components/advanced-table/advanced-table-settings.component.js +90 -8
  20. package/esm2015/lib/components/advanced-table/advanced-table.component.js +577 -127
  21. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +36 -1
  22. package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +257 -44
  23. package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +4 -0
  24. package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +211 -55
  25. package/esm2015/lib/components/column-selector/column-selector.component.js +167 -73
  26. package/esm2015/lib/components/column-selector/column-selector.service.js +19 -2
  27. package/esm2015/lib/components/table-simple-header/table-simple-header.component.js +31 -7
  28. package/esm2015/lib/directives/advance-search-state.directive.js +49 -10
  29. package/esm2015/lib/directives/advance-table-state.directive.js +26 -3
  30. package/esm2015/lib/directives/advanced-search-router-state.directive.js +35 -8
  31. package/esm2015/lib/directives/advanced-table-editor.directive.js +43 -13
  32. package/esm2015/lib/directives/btnexp.directive.js +85 -42
  33. package/esm2015/lib/i18n/tables.el.js +6 -3
  34. package/esm2015/lib/i18n/tables.en.js +6 -3
  35. package/esm2015/lib/pipes/advanced-aggregator.pipe.js +12 -8
  36. package/esm2015/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +19 -7
  37. package/esm2015/lib/reducers/index.js +32 -1
  38. package/esm2015/lib/services/advanced-aggregator/advanced-aggregator.service.js +37 -15
  39. package/esm2015/lib/tables.activated-table.service.js +41 -6
  40. package/esm2015/lib/tables.module.js +18 -4
  41. package/esm2015/public_api.js +33 -29
  42. package/esm2015/universis-ngx-tables.js +6 -2
  43. package/esm5/lib/actions/table.actions.js +37 -7
  44. package/esm5/lib/advanced-aggregator.js +5 -1
  45. package/esm5/lib/components/add-items/add-items.component.js +124 -34
  46. package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +111 -15
  47. package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +54 -11
  48. package/esm5/lib/components/advanced-list/advanced-list.component.js +125 -37
  49. package/esm5/lib/components/advanced-row-action/advanced-row-action.component.js +124 -24
  50. package/esm5/lib/components/advanced-search-form/advanced-search-form.component.js +109 -22
  51. package/esm5/lib/components/advanced-select/advanced-select.component.js +36 -4
  52. package/esm5/lib/components/advanced-select/advanced-select.service.js +22 -4
  53. package/esm5/lib/components/advanced-table/advanced-filter-value-provider.service.js +37 -5
  54. package/esm5/lib/components/advanced-table/advanced-table-resolvers.js +43 -11
  55. package/esm5/lib/components/advanced-table/advanced-table-search-base.js +29 -4
  56. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +323 -58
  57. package/esm5/lib/components/advanced-table/advanced-table-settings.component.js +112 -15
  58. package/esm5/lib/components/advanced-table/advanced-table.component.js +762 -165
  59. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +36 -1
  60. package/esm5/lib/components/advanced-table/advanced-table.formatters.js +392 -57
  61. package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +4 -0
  62. package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +311 -70
  63. package/esm5/lib/components/column-selector/column-selector.component.js +264 -145
  64. package/esm5/lib/components/column-selector/column-selector.service.js +21 -3
  65. package/esm5/lib/components/table-simple-header/table-simple-header.component.js +44 -10
  66. package/esm5/lib/directives/advance-search-state.directive.js +68 -15
  67. package/esm5/lib/directives/advance-table-state.directive.js +26 -4
  68. package/esm5/lib/directives/advanced-search-router-state.directive.js +39 -12
  69. package/esm5/lib/directives/advanced-table-editor.directive.js +66 -18
  70. package/esm5/lib/directives/btnexp.directive.js +171 -39
  71. package/esm5/lib/i18n/tables.el.js +6 -3
  72. package/esm5/lib/i18n/tables.en.js +6 -3
  73. package/esm5/lib/pipes/advanced-aggregator.pipe.js +32 -6
  74. package/esm5/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +34 -8
  75. package/esm5/lib/reducers/index.js +32 -1
  76. package/esm5/lib/services/advanced-aggregator/advanced-aggregator.service.js +75 -13
  77. package/esm5/lib/tables.activated-table.service.js +39 -8
  78. package/esm5/lib/tables.module.js +19 -5
  79. package/esm5/public_api.js +33 -29
  80. package/esm5/universis-ngx-tables.js +6 -2
  81. package/fesm2015/universis-ngx-tables.js +1871 -570
  82. package/fesm2015/universis-ngx-tables.js.map +1 -1
  83. package/fesm5/universis-ngx-tables.js +2903 -803
  84. package/fesm5/universis-ngx-tables.js.map +1 -1
  85. package/lib/components/add-items/add-items.component.d.ts +9 -16
  86. package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +5 -5
  87. package/lib/components/advanced-list/advanced-list.component.d.ts +11 -11
  88. package/lib/components/advanced-row-action/advanced-row-action.component.d.ts +11 -16
  89. package/lib/components/advanced-search-form/advanced-search-form.component.d.ts +3 -3
  90. package/lib/components/advanced-table/advanced-table-search.component.d.ts +5 -5
  91. package/lib/components/advanced-table/advanced-table-settings.component.d.ts +5 -6
  92. package/lib/components/advanced-table/advanced-table.component.d.ts +14 -15
  93. package/lib/components/advanced-table/advanced-table.formatters.d.ts +11 -11
  94. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +11 -11
  95. package/lib/components/column-selector/column-selector.component.d.ts +4 -4
  96. package/lib/components/table-simple-header/table-simple-header.component.d.ts +3 -3
  97. package/lib/directives/advance-search-state.directive.d.ts +3 -3
  98. package/lib/directives/advance-table-state.directive.d.ts +1 -1
  99. package/lib/directives/advanced-search-router-state.directive.d.ts +6 -6
  100. package/lib/directives/btnexp.directive.d.ts +9 -9
  101. package/lib/pipes/advanced-aggregator.pipe.d.ts +3 -3
  102. package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +5 -5
  103. package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +8 -8
  104. package/lib/tables.activated-table.service.d.ts +6 -6
  105. package/package.json +10 -4
  106. package/universis-ngx-tables.metadata.json +1 -1
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
+ */
1
5
  import { Component, ElementRef, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
6
  import { AdvancedTableComponent } from './advanced-table.component';
3
7
  import { ActivatedRoute } from '@angular/router';
@@ -7,10 +11,9 @@ import { ActivatedTableService } from '../../tables.activated-table.service';
7
11
  import { UserStorageService } from '@universis/common';
8
12
  import { FormArray, FormBuilder, FormControl } from '@angular/forms';
9
13
  var AdvancedTableSettingsComponent = /** @class */ (function () {
10
- function AdvancedTableSettingsComponent(_context, _activatedRoute, elRef, modalService, userStorage, formBuilder, _activatedTable) {
14
+ function AdvancedTableSettingsComponent(_context, _activatedRoute, modalService, userStorage, formBuilder, _activatedTable) {
11
15
  this._context = _context;
12
16
  this._activatedRoute = _activatedRoute;
13
- this.elRef = elRef;
14
17
  this.modalService = modalService;
15
18
  this.userStorage = userStorage;
16
19
  this.formBuilder = formBuilder;
@@ -18,11 +21,23 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
18
21
  this.params = this._activatedRoute.params;
19
22
  this.columns = [];
20
23
  }
21
- AdvancedTableSettingsComponent.prototype.ngOnInit = function () {
24
+ /**
25
+ * @return {?}
26
+ */
27
+ AdvancedTableSettingsComponent.prototype.ngOnInit = /**
28
+ * @return {?}
29
+ */
30
+ function () {
22
31
  };
23
- AdvancedTableSettingsComponent.prototype.ngAfterViewInit = function () {
32
+ /**
33
+ * @return {?}
34
+ */
35
+ AdvancedTableSettingsComponent.prototype.ngAfterViewInit = /**
36
+ * @return {?}
37
+ */
38
+ function () {
24
39
  var _this = this;
25
- this.activeTableConfig = this._activatedTable.activeTable.getConfig();
40
+ this.activeTableConfig = this._activatedTable.activeTable && this._activatedTable.activeTable.getConfig();
26
41
  this.storageKey = 'registrar/settings/' + this.activeTableConfig.title + '/table/columns';
27
42
  this.form = this.formBuilder.group({ columns: new FormArray([], this.minSelectedColumns(1)) });
28
43
  this.userStorage.getItem(this.storageKey).then(function (data) {
@@ -37,11 +52,18 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
37
52
  }
38
53
  });
39
54
  };
40
- AdvancedTableSettingsComponent.prototype.addCheckboxes = function () {
55
+ /**
56
+ * @return {?}
57
+ */
58
+ AdvancedTableSettingsComponent.prototype.addCheckboxes = /**
59
+ * @return {?}
60
+ */
61
+ function () {
41
62
  var _this = this;
42
63
  this.tableColumns = this.activeTableConfig.columns.slice(1);
43
64
  this.tableColumns.forEach(function (column, i) {
44
65
  if (!column.hidden) {
66
+ /** @type {?} */
45
67
  var control = {
46
68
  id: column.name,
47
69
  name: column.title
@@ -55,16 +77,37 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
55
77
  column.check = _this.savedTableSettings.includes(column.id);
56
78
  });
57
79
  this.columns.map(function (column, i) {
80
+ /** @type {?} */
58
81
  var control = new FormControl(column.check);
59
- _this.form.controls.columns.push(control);
82
+ if (_this.form) {
83
+ (/** @type {?} */ (_this.form.controls["columns"])).push(control);
84
+ }
60
85
  });
61
86
  }
62
87
  };
63
- AdvancedTableSettingsComponent.prototype.openTableSettings = function (table_settings_modal) {
88
+ /**
89
+ * @param {?} table_settings_modal
90
+ * @return {?}
91
+ */
92
+ AdvancedTableSettingsComponent.prototype.openTableSettings = /**
93
+ * @param {?} table_settings_modal
94
+ * @return {?}
95
+ */
96
+ function (table_settings_modal) {
64
97
  this.modalRef = this.modalService.show(table_settings_modal);
65
98
  };
66
- AdvancedTableSettingsComponent.prototype.saveTableSettings = function () {
99
+ /**
100
+ * @return {?}
101
+ */
102
+ AdvancedTableSettingsComponent.prototype.saveTableSettings = /**
103
+ * @return {?}
104
+ */
105
+ function () {
67
106
  var _this = this;
107
+ if (this.form == null) {
108
+ return;
109
+ }
110
+ /** @type {?} */
68
111
  var selectedColumnsIds = this.form.value.columns
69
112
  .map(function (v, i) { return v ? _this.columns[i].id : null; })
70
113
  .filter(function (v) { return v !== null; });
@@ -72,14 +115,34 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
72
115
  if (this._activatedTable.activeTable) {
73
116
  this._activatedTable.activeTable.handleColumns(selectedColumnsIds);
74
117
  }
75
- this.modalRef.hide();
118
+ if (this.modalRef) {
119
+ this.modalRef.hide();
120
+ }
76
121
  };
77
- AdvancedTableSettingsComponent.prototype.dismiss = function () {
78
- this.modalRef.hide();
122
+ /**
123
+ * @return {?}
124
+ */
125
+ AdvancedTableSettingsComponent.prototype.dismiss = /**
126
+ * @return {?}
127
+ */
128
+ function () {
129
+ if (this.modalRef) {
130
+ this.modalRef.hide();
131
+ }
79
132
  };
80
- AdvancedTableSettingsComponent.prototype.minSelectedColumns = function (min) {
133
+ /**
134
+ * @param {?=} min
135
+ * @return {?}
136
+ */
137
+ AdvancedTableSettingsComponent.prototype.minSelectedColumns = /**
138
+ * @param {?=} min
139
+ * @return {?}
140
+ */
141
+ function (min) {
81
142
  if (min === void 0) { min = 1; }
143
+ /** @type {?} */
82
144
  var validator = function (formArray) {
145
+ /** @type {?} */
83
146
  var totalSelected = formArray.controls
84
147
  .map(function (control) { return control.value; })
85
148
  .reduce(function (prev, next) { return next ? prev + next : prev; }, 0);
@@ -89,6 +152,7 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
89
152
  };
90
153
  AdvancedTableSettingsComponent.decorators = [
91
154
  { type: Component, args: [{
155
+ // tslint:disable-next-line:component-selector
92
156
  selector: 'app-advanced-table-settings',
93
157
  template: "<i class=\"fa fa-edit fa-lg advanced-table-settings\" (click)=\"openTableSettings(modal_settings_template)\"></i>\r\n<ng-template #modal_settings_template>\r\n <div class=\"modal-header\">\r\n <h3 class=\"modal-title\" [translate]=\"'Tables.ColumnDisplay'\"></h3>\r\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"dismiss()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <form class=\"form-group p-3 text-left\" [formGroup]=\"form\" (ngSubmit)=\"saveTableSettings()\">\r\n <div class=\"modal-body\">\r\n <p [translate]=\"'Tables.ColumnDisplayInfo'\"></p>\r\n <!-- <div *ngFor=\"let column of form.controls.columns.controls; let i = index\">\r\n <div formArrayName=\"columns\">\r\n <input class=\"checkbox checkbox-primary\" type=\"checkbox\" [formControlName]=\"i\" id=\"checkbox{{i}}\">\r\n <label for=\"checkbox{{i}}\">\r\n {{columns[i].name | translate}}\r\n </label>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-light\" (click)=\"dismiss()\" [translate]=\"'Tables.Cancel'\"> </button>\r\n <button type=\"submit\" class=\"btn btn-success\" [translate]=\"'Tables.Save'\"></button>\r\n </div>\r\n </form>\r\n</ng-template>\r\n",
94
158
  encapsulation: ViewEncapsulation.None
@@ -98,7 +162,6 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
98
162
  AdvancedTableSettingsComponent.ctorParameters = function () { return [
99
163
  { type: AngularDataContext },
100
164
  { type: ActivatedRoute },
101
- { type: ElementRef },
102
165
  { type: BsModalService },
103
166
  { type: UserStorageService },
104
167
  { type: FormBuilder },
@@ -111,5 +174,39 @@ var AdvancedTableSettingsComponent = /** @class */ (function () {
111
174
  return AdvancedTableSettingsComponent;
112
175
  }());
113
176
  export { AdvancedTableSettingsComponent };
177
+ if (false) {
178
+ /** @type {?} */
179
+ AdvancedTableSettingsComponent.prototype.table;
180
+ /** @type {?} */
181
+ AdvancedTableSettingsComponent.prototype.modal_settings_template;
182
+ /** @type {?} */
183
+ AdvancedTableSettingsComponent.prototype.modalRef;
184
+ /** @type {?} */
185
+ AdvancedTableSettingsComponent.prototype.storageKey;
186
+ /** @type {?} */
187
+ AdvancedTableSettingsComponent.prototype.params;
188
+ /** @type {?} */
189
+ AdvancedTableSettingsComponent.prototype.savedTableSettings;
190
+ /** @type {?} */
191
+ AdvancedTableSettingsComponent.prototype.form;
192
+ /** @type {?} */
193
+ AdvancedTableSettingsComponent.prototype.columns;
194
+ /** @type {?} */
195
+ AdvancedTableSettingsComponent.prototype.tableColumns;
196
+ /** @type {?} */
197
+ AdvancedTableSettingsComponent.prototype.activeTableConfig;
198
+ /** @type {?} */
199
+ AdvancedTableSettingsComponent.prototype._context;
200
+ /** @type {?} */
201
+ AdvancedTableSettingsComponent.prototype._activatedRoute;
202
+ /** @type {?} */
203
+ AdvancedTableSettingsComponent.prototype.modalService;
204
+ /** @type {?} */
205
+ AdvancedTableSettingsComponent.prototype.userStorage;
206
+ /** @type {?} */
207
+ AdvancedTableSettingsComponent.prototype.formBuilder;
208
+ /** @type {?} */
209
+ AdvancedTableSettingsComponent.prototype._activatedTable;
210
+ }
114
211
 
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBRTNGO0lBbUJFLHdDQUFzQixRQUE0QixFQUM1QixlQUErQixFQUNqQyxLQUFpQixFQUNqQixZQUE0QixFQUM1QixXQUErQixFQUMvQixXQUF3QixFQUN4QixlQUFzQztRQU5wQyxhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDakMsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFB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T0FBTyxhQUFhLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7O2dCQWpHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsczlDQUF1RDtvQkFDdkQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzs7O2dCQVhRLGtCQUFrQjtnQkFEbEIsY0FBYztnQkFUckIsVUFBVTtnQkFZSCxjQUFjO2dCQUVmLGtCQUFrQjtnQkFDUCxXQUFXO2dCQUZ0QixxQkFBcUI7Ozt3QkFZMUIsS0FBSzswQ0FDTCxTQUFTLFNBQUMseUJBQXlCOztJQXlGdEMscUNBQUM7Q0FBQSxBQWxHRCxJQWtHQztTQTVGWSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkVGFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1VzZXJTdG9yYWdlU2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1zZXR0aW5ncycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGUnKSBtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZTogRWxlbWVudFJlZjtcclxuICBtb2RhbFJlZjogQnNNb2RhbFJlZjtcclxuICBzdG9yYWdlS2V5OiBhbnk7XHJcbiAgcGFyYW1zOiBhbnkgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5wYXJhbXM7XHJcbiAgcHJpdmF0ZSBzYXZlZFRhYmxlU2V0dGluZ3M6IGFueTtcclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgY29sdW1ucyA9IFtdO1xyXG4gIHRhYmxlQ29sdW1uczogYW55O1xyXG4gIGFjdGl2ZVRhYmxlQ29uZmlnOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdXNlclN0b3JhZ2U6IFVzZXJTdG9yYWdlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRUYWJsZTogQWN0aXZhdGVkVGFibGVTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnID0gdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuZ2V0Q29uZmlnKCk7XHJcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSAncmVnaXN0cmFyL3NldHRpbmdzLycgKyB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnLnRpdGxlICsgJy90YWJsZS9jb2x1bW5zJztcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe2NvbHVtbnM6IG5ldyBGb3JtQXJyYXkoW10sIHRoaXMubWluU2VsZWN0ZWRDb2x1bW5zKDEpKX0pO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRDaGVja2JveGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFkZENoZWNrYm94ZXMoKSB7XHJcbiAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMuYWN0aXZlVGFibGVDb25maWcuY29sdW1ucy5zbGljZSgxKTtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgaWYgKCFjb2x1bW4uaGlkZGVuKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHtcclxuICAgICAgICAgIGlkOiBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIG5hbWU6IGNvbHVtbi50aXRsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoICgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29sdW1uLmNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmNoZWNrID0gdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MuaW5jbHVkZXMoY29sdW1uLmlkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woY29sdW1uLmNoZWNrKTtcclxuICAgICAgICAodGhpcy5mb3JtLmNvbnRyb2xzLmNvbHVtbnMgYXMgRm9ybUFycmF5KS5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZVNldHRpbmdzKHRhYmxlX3NldHRpbmdzX21vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0YWJsZV9zZXR0aW5nc19tb2RhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFibGVTZXR0aW5ncygpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uc0lkcyA9IHRoaXMuZm9ybS52YWx1ZS5jb2x1bW5zXHJcbiAgICAgIC5tYXAoKHYsIGkpID0+IHYgPyB0aGlzLmNvbHVtbnNbaV0uaWQgOiBudWxsKVxyXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCBzZWxlY3RlZENvbHVtbnNJZHMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnMoc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIH1cclxuICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgZGlzbWlzcygpIHtcclxuICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgbWluU2VsZWN0ZWRDb2x1bW5zKG1pbiA9IDEpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZm9ybUFycmF5OiBGb3JtQXJyYXkpID0+IHtcclxuICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IGZvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAgIC5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKVxyXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIG5leHQpID0+IG5leHQgPyBwcmV2ICsgbmV4dCA6IHByZXYsIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbWluID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcbn1cclxuIl19
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFzQjNGLHdDQUFzQixRQUE0QixFQUM1QixlQUErQixFQUNqQyxjQUNBLGFBQ0EsYUFDQTtRQUxFLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVk7UUFDWixnQkFBVyxHQUFYLFdBQVc7UUFDWCxnQkFBVyxHQUFYLFdBQVc7UUFDWCxvQkFBZSxHQUFmLGVBQWU7c0JBWnJCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTt1QkFHeEIsRUFBRTtLQVVsQjs7OztJQUNELGlEQUFROzs7SUFBUjtLQUNDOzs7O0lBQ0Qsd0RBQWU7OztJQUFmO1FBQUEsaUJBZUM7UUFkQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1FBQzFGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtZQUNsRCxJQUFJLElBQUksRUFBRTtnQkFDUixLQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckMsSUFBSSxLQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQzNCLElBQUksS0FBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUU7d0JBQ3BDLEtBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztxQkFDekU7aUJBQ0Y7Z0JBQ0QsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3RCO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7Ozs7SUFDTyxzREFBYTs7Ozs7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBRSxVQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFOztnQkFDbEIsSUFBTSxPQUFPLEdBQUc7b0JBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNmLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSztpQkFDbkIsQ0FBQztnQkFDRixLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1QjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFFLFVBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzVELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLENBQUM7O2dCQUN6QixJQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLElBQUksS0FBSSxDQUFDLElBQUksRUFBRTtvQkFDYixtQkFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsV0FBcUIsRUFBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDekQ7YUFDRixDQUFDLENBQUM7U0FDSjs7Ozs7O0lBR0gsMERBQWlCOzs7O0lBQWpCLFVBQWtCLG9CQUFzQztRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FDOUQ7Ozs7SUFFRCwwREFBaUI7OztJQUFqQjtRQUFBLGlCQWNDO1FBYkMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtZQUNyQixPQUFPO1NBQ1I7O1FBQ0QsSUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2FBQy9DLEdBQUcsQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQTdCLENBQTZCLENBQUM7YUFDNUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxLQUFLLElBQUksRUFBVixDQUFVLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3RCO0tBQ0Y7Ozs7SUFFRCxnREFBTzs7O0lBQVA7UUFDRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QjtLQUNGOzs7OztJQUVELDJEQUFrQjs7OztJQUFsQixVQUFtQixHQUFPO1FBQVAsb0JBQUEsRUFBQSxPQUFPOztRQUN4QixJQUFNLFNBQVMsR0FBZ0IsVUFBQyxTQUFvQjs7WUFDbEQsSUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVE7aUJBQ3JDLEdBQUcsQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLE9BQU8sQ0FBQyxLQUFLLEVBQWIsQ0FBYSxDQUFDO2lCQUM3QixNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUUsSUFBSSxJQUFLLE9BQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQXpCLENBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFeEQsT0FBTyxhQUFhLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3pELENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQztLQUNsQjs7Z0JBMUdGLFNBQVMsU0FBQzs7b0JBRVQsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsczlDQUF1RDtvQkFDdkQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzs7O2dCQVhRLGtCQUFrQjtnQkFEbEIsY0FBYztnQkFFZCxjQUFjO2dCQUVkLGtCQUFrQjtnQkFDUCxXQUFXO2dCQUZ0QixxQkFBcUI7Ozt3QkFhM0IsS0FBSzswQ0FDTCxTQUFTLFNBQUMseUJBQXlCOzt5Q0E1QnRDOztTQXlCYSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGUnKSBtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZT86IEVsZW1lbnRSZWY7XHJcbiAgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xyXG4gIHN0b3JhZ2VLZXk6IGFueTtcclxuICBwYXJhbXM6IGFueSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnBhcmFtcztcclxuICBwcml2YXRlIHNhdmVkVGFibGVTZXR0aW5nczogYW55O1xyXG4gIGZvcm0/OiBGb3JtR3JvdXA7XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0YWJsZUNvbHVtbnM6IGFueTtcclxuICBhY3RpdmVUYWJsZUNvbmZpZzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVGFibGVDb25maWcgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSAmJiB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5nZXRDb25maWcoKTtcclxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICdyZWdpc3RyYXIvc2V0dGluZ3MvJyArIHRoaXMuYWN0aXZlVGFibGVDb25maWcudGl0bGUgKyAnL3RhYmxlL2NvbHVtbnMnO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7Y29sdW1uczogbmV3IEZvcm1BcnJheShbXSwgdGhpcy5taW5TZWxlY3RlZENvbHVtbnMoMSkpfSk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnModGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkQ2hlY2tib3hlcygpIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpO1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0ge1xyXG4gICAgICAgICAgaWQ6IGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgbmFtZTogY29sdW1uLnRpdGxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncy5pbmNsdWRlcyhjb2x1bW4uaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChjb2x1bW4uY2hlY2spO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuY29sdW1ucyBhcyBGb3JtQXJyYXkpLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZVNldHRpbmdzKHRhYmxlX3NldHRpbmdzX21vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0YWJsZV9zZXR0aW5nc19tb2RhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFibGVTZXR0aW5ncygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnNJZHMgPSB0aGlzLmZvcm0udmFsdWUuY29sdW1uc1xyXG4gICAgICAubWFwKCh2LCBpKSA9PiB2ID8gdGhpcy5jb2x1bW5zW2ldLmlkIDogbnVsbClcclxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHNlbGVjdGVkQ29sdW1uc0lkcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc21pc3MoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pblNlbGVjdGVkQ29sdW1ucyhtaW4gPSAxKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGZvcm1BcnJheTogRm9ybUFycmF5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBmb3JtQXJyYXkuY29udHJvbHNcclxuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcclxuICAgICAgICAucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBuZXh0ID8gcHJldiArIG5leHQgOiBwcmV2LCAwKTtcclxuXHJcbiAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IG1pbiA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgfVxyXG59XHJcbiJdfQ==