@universis/ngx-tables 0.8.4 → 6.0.0

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 (107) hide show
  1. package/bundles/universis-ngx-tables.umd.js +5806 -3707
  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 +687 -213
  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 +260 -45
  23. package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +5 -1
  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 +188 -82
  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 +27 -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 +872 -251
  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 +394 -57
  61. package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +5 -1
  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 +286 -154
  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 +2004 -663
  82. package/fesm2015/universis-ngx-tables.js.map +1 -1
  83. package/fesm5/universis-ngx-tables.js +3035 -896
  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/advanced-table.interfaces.d.ts +1 -0
  95. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +11 -11
  96. package/lib/components/column-selector/column-selector.component.d.ts +8 -9
  97. package/lib/components/table-simple-header/table-simple-header.component.d.ts +3 -3
  98. package/lib/directives/advance-search-state.directive.d.ts +3 -3
  99. package/lib/directives/advance-table-state.directive.d.ts +1 -1
  100. package/lib/directives/advanced-search-router-state.directive.d.ts +6 -6
  101. package/lib/directives/btnexp.directive.d.ts +9 -9
  102. package/lib/pipes/advanced-aggregator.pipe.d.ts +3 -3
  103. package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +5 -5
  104. package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +8 -8
  105. package/lib/tables.activated-table.service.d.ts +6 -6
  106. package/package.json +10 -4
  107. package/universis-ngx-tables.metadata.json +1 -1
@@ -1,40 +1,88 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
+ */
1
5
  import * as tslib_1 from "tslib";
2
- import { Component, Input, EventEmitter, ViewEncapsulation, ChangeDetectorRef, ViewChild, ElementRef } from '@angular/core';
6
+ import { Component, Input, EventEmitter, ViewEncapsulation, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';
3
7
  import { FormControl } from '@angular/forms';
4
8
  import { ActivatedRoute, Router } from '@angular/router';
5
- import { TranslateService } from '@ngx-translate/core';
6
9
  import { RouterModalOkCancel } from '@universis/common/routing';
7
10
  import { BsModalRef } from 'ngx-bootstrap/modal';
8
11
  var ColumnSelectorComponent = /** @class */ (function (_super) {
9
12
  tslib_1.__extends(ColumnSelectorComponent, _super);
10
- function ColumnSelectorComponent(router, activatedRoute, _modalRef, ref, _translateService) {
13
+ function ColumnSelectorComponent(router, activatedRoute, _modalRef, _changeDetector) {
11
14
  var _this = _super.call(this, router, activatedRoute) || this;
12
15
  _this._modalRef = _modalRef;
13
- _this.ref = ref;
14
- _this._translateService = _translateService;
16
+ _this._changeDetector = _changeDetector;
15
17
  _this.dismiss = new EventEmitter();
16
18
  _this.availableColumnsControl = new FormControl();
17
19
  _this.selectedColumnsControl = new FormControl();
20
+ _this.changing = false;
18
21
  return _this;
19
22
  }
20
- ColumnSelectorComponent.prototype.ok = function () {
21
- this._modalRef.hide();
22
- this.applyChanges();
23
+ /**
24
+ * @return {?}
25
+ */
26
+ ColumnSelectorComponent.prototype.ok = /**
27
+ * @return {?}
28
+ */
29
+ function () {
30
+ var _this = this;
31
+ this._changeDetector.detectChanges();
32
+ setTimeout(function () {
33
+ _this.changing = true;
34
+ _this._modalRef.hide();
35
+ }, 0);
36
+ try {
37
+ this.applyChanges();
38
+ }
39
+ catch (err) {
40
+ throw err;
41
+ }
42
+ finally {
43
+ this.changing = false;
44
+ }
23
45
  this.dismiss.emit('ok');
24
46
  return Promise.resolve('ok');
25
47
  };
26
- ColumnSelectorComponent.prototype.cancel = function () {
48
+ /**
49
+ * @return {?}
50
+ */
51
+ ColumnSelectorComponent.prototype.cancel = /**
52
+ * @return {?}
53
+ */
54
+ function () {
27
55
  this._modalRef.hide();
28
56
  this.dismiss.emit('cancel');
29
57
  return Promise.resolve('cancel');
30
58
  };
31
- ColumnSelectorComponent.prototype.ngOnChanges = function (changes) {
59
+ /**
60
+ * @param {?} changes
61
+ * @return {?}
62
+ */
63
+ ColumnSelectorComponent.prototype.ngOnChanges = /**
64
+ * @param {?} changes
65
+ * @return {?}
66
+ */
67
+ function (changes) {
32
68
  //
33
69
  };
34
- ColumnSelectorComponent.prototype.ngOnDestroy = function () {
70
+ /**
71
+ * @return {?}
72
+ */
73
+ ColumnSelectorComponent.prototype.ngOnDestroy = /**
74
+ * @return {?}
75
+ */
76
+ function () {
35
77
  //
36
78
  };
37
- ColumnSelectorComponent.prototype.ngOnInit = function () {
79
+ /**
80
+ * @return {?}
81
+ */
82
+ ColumnSelectorComponent.prototype.ngOnInit = /**
83
+ * @return {?}
84
+ */
85
+ function () {
38
86
  if (Array.isArray(this.columns)) {
39
87
  this.selectedColumns = this.columns.filter(function (item) {
40
88
  return item.visible;
@@ -54,184 +102,247 @@ var ColumnSelectorComponent = /** @class */ (function (_super) {
54
102
  });
55
103
  }
56
104
  };
57
- ColumnSelectorComponent.prototype.applyChanges = function () {
105
+ /**
106
+ * @return {?}
107
+ */
108
+ ColumnSelectorComponent.prototype.applyChanges = /**
109
+ * @return {?}
110
+ */
111
+ function () {
58
112
  var e_1, _a;
59
- var moveIndex = this.selectedColumns.length - 1;
60
- var _loop_1 = function (column) {
61
- var findIndex = this_1.selectedColumns.findIndex(function (item) {
62
- return item.key === column.key;
63
- });
64
- if (findIndex < 0) {
65
- column.visible = false;
66
- moveIndex += 1;
67
- column.index = moveIndex;
68
- }
69
- else {
70
- column.visible = true;
71
- column.index = findIndex;
72
- }
73
- };
74
- var this_1 = this;
75
- try {
76
- for (var _b = tslib_1.__values(this.columns), _c = _b.next(); !_c.done; _c = _b.next()) {
77
- var column = _c.value;
78
- _loop_1(column);
79
- }
80
- }
81
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
82
- finally {
83
- try {
84
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
85
- }
86
- finally { if (e_1) throw e_1.error; }
87
- }
88
- };
89
- ColumnSelectorComponent.prototype.removeColumns = function () {
90
- var e_2, _a;
91
- var selected = this.selectedColumnsControl.value;
92
- if (selected.length > 0) {
93
- var _loop_2 = function (value) {
94
- var findIndex = this_2.selectedColumns.findIndex(function (item) {
95
- return item.key === value;
113
+ if (this.selectedColumns && this.columns) {
114
+ /** @type {?} */
115
+ var moveIndex = this.selectedColumns.length - 1;
116
+ var _loop_1 = function (column) {
117
+ /** @type {?} */
118
+ var findIndex = this_1.selectedColumns.findIndex(function (item) {
119
+ return item.key === column.key;
96
120
  });
97
- if (findIndex >= 0) {
98
- this_2.selectedColumns.splice(findIndex, 1);
121
+ if (findIndex < 0) {
122
+ column.visible = false;
123
+ moveIndex += 1;
124
+ column.index = moveIndex;
125
+ }
126
+ else {
127
+ column.visible = true;
128
+ column.index = findIndex;
99
129
  }
100
130
  };
101
- var this_2 = this;
131
+ var this_1 = this;
102
132
  try {
103
- for (var selected_1 = tslib_1.__values(selected), selected_1_1 = selected_1.next(); !selected_1_1.done; selected_1_1 = selected_1.next()) {
104
- var value = selected_1_1.value;
105
- _loop_2(value);
133
+ for (var _b = tslib_1.__values(this.columns), _c = _b.next(); !_c.done; _c = _b.next()) {
134
+ var column = _c.value;
135
+ _loop_1(column);
106
136
  }
107
137
  }
108
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
138
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
109
139
  finally {
110
140
  try {
111
- if (selected_1_1 && !selected_1_1.done && (_a = selected_1.return)) _a.call(selected_1);
141
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
112
142
  }
113
- finally { if (e_2) throw e_2.error; }
143
+ finally { if (e_1) throw e_1.error; }
114
144
  }
115
- // reset column
116
- this.selectedColumnsControl.reset();
117
145
  }
118
146
  };
119
- ColumnSelectorComponent.prototype.addColumns = function () {
120
- var e_3, _a;
121
- var selected = this.availableColumnsControl.value;
122
- if (selected.length > 0) {
123
- var _loop_3 = function (value) {
124
- var findColumn = this_3.columns.find(function (item) {
125
- return item.key === value;
126
- });
127
- if (findColumn) {
128
- var findIndex = this_3.selectedColumns.findIndex(function (item) {
147
+ /**
148
+ * @return {?}
149
+ */
150
+ ColumnSelectorComponent.prototype.removeColumns = /**
151
+ * @return {?}
152
+ */
153
+ function () {
154
+ var e_2, _a;
155
+ if (this.selectedColumns) {
156
+ /** @type {?} */
157
+ var selected = /** @type {?} */ (this.selectedColumnsControl.value);
158
+ if (selected.length > 0) {
159
+ var _loop_2 = function (value) {
160
+ /** @type {?} */
161
+ var findIndex = this_2.selectedColumns.findIndex(function (item) {
129
162
  return item.key === value;
130
163
  });
131
- if (findIndex < 0) {
132
- this_3.selectedColumns.push({
133
- key: findColumn.key,
134
- title: findColumn.title
135
- });
164
+ if (findIndex >= 0) {
165
+ this_2.selectedColumns.splice(findIndex, 1);
166
+ }
167
+ };
168
+ var this_2 = this;
169
+ try {
170
+ for (var selected_1 = tslib_1.__values(selected), selected_1_1 = selected_1.next(); !selected_1_1.done; selected_1_1 = selected_1.next()) {
171
+ var value = selected_1_1.value;
172
+ _loop_2(value);
136
173
  }
137
174
  }
138
- };
139
- var this_3 = this;
140
- try {
141
- for (var selected_2 = tslib_1.__values(selected), selected_2_1 = selected_2.next(); !selected_2_1.done; selected_2_1 = selected_2.next()) {
142
- var value = selected_2_1.value;
143
- _loop_3(value);
175
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
176
+ finally {
177
+ try {
178
+ if (selected_1_1 && !selected_1_1.done && (_a = selected_1.return)) _a.call(selected_1);
179
+ }
180
+ finally { if (e_2) throw e_2.error; }
144
181
  }
182
+ // reset column
183
+ this.selectedColumnsControl.reset();
145
184
  }
146
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
147
- finally {
185
+ }
186
+ };
187
+ /**
188
+ * @return {?}
189
+ */
190
+ ColumnSelectorComponent.prototype.addColumns = /**
191
+ * @return {?}
192
+ */
193
+ function () {
194
+ var e_3, _a;
195
+ if (this.columns && this.selectedColumns) {
196
+ /** @type {?} */
197
+ var selected_3 = /** @type {?} */ (this.availableColumnsControl.value);
198
+ if (selected_3.length > 0) {
199
+ var _loop_3 = function (value) {
200
+ /** @type {?} */
201
+ var findColumn = this_3.columns.find(function (item) {
202
+ return item.key === value;
203
+ });
204
+ if (findColumn) {
205
+ /** @type {?} */
206
+ var findIndex = this_3.selectedColumns.findIndex(function (item) {
207
+ return item.key === value;
208
+ });
209
+ if (findIndex < 0) {
210
+ this_3.selectedColumns.push({
211
+ key: findColumn.key,
212
+ title: findColumn.title
213
+ });
214
+ }
215
+ }
216
+ };
217
+ var this_3 = this;
148
218
  try {
149
- if (selected_2_1 && !selected_2_1.done && (_a = selected_2.return)) _a.call(selected_2);
219
+ for (var selected_2 = tslib_1.__values(selected_3), selected_2_1 = selected_2.next(); !selected_2_1.done; selected_2_1 = selected_2.next()) {
220
+ var value = selected_2_1.value;
221
+ _loop_3(value);
222
+ }
223
+ }
224
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
225
+ finally {
226
+ try {
227
+ if (selected_2_1 && !selected_2_1.done && (_a = selected_2.return)) _a.call(selected_2);
228
+ }
229
+ finally { if (e_3) throw e_3.error; }
230
+ }
231
+ /** @type {?} */
232
+ var lastSelectedIndex = this.columns.findIndex(function (item) {
233
+ return item.key === selected_3[selected_3.length - 1];
234
+ });
235
+ // reset control
236
+ this.availableColumnsControl.reset();
237
+ if (lastSelectedIndex > -1 && lastSelectedIndex < this.columns.length - 1) {
238
+ this.availableColumnsControl.patchValue([
239
+ this.columns[lastSelectedIndex + 1].key
240
+ ]);
150
241
  }
151
- finally { if (e_3) throw e_3.error; }
152
- }
153
- // find the last index of the selected items
154
- var lastSelectedIndex = this.columns.findIndex(function (item) {
155
- return item.key === selected[selected.length - 1];
156
- });
157
- // reset control
158
- this.availableColumnsControl.reset();
159
- if (lastSelectedIndex > -1 && lastSelectedIndex < this.columns.length - 1) {
160
- this.availableColumnsControl.patchValue([
161
- this.columns[lastSelectedIndex + 1].key
162
- ]);
163
242
  }
164
243
  }
165
244
  };
166
- ColumnSelectorComponent.prototype.moveUp = function () {
245
+ /**
246
+ * @return {?}
247
+ */
248
+ ColumnSelectorComponent.prototype.moveUp = /**
249
+ * @return {?}
250
+ */
251
+ function () {
167
252
  var e_4, _a;
168
- this.moveUpButton.nativeElement.disabled = true;
169
- var selected = this.selectedColumnsControl.value;
170
- if (selected.length > 0) {
171
- var _loop_4 = function (value) {
172
- var findIndex = this_4.selectedColumns.findIndex(function (item) {
173
- return item.key === value;
174
- });
175
- if (findIndex > 0) {
176
- var column = this_4.selectedColumns[findIndex];
177
- this_4.selectedColumns.splice(findIndex, 1);
178
- this_4.selectedColumns.splice(findIndex - 1, 0, column);
179
- }
180
- };
181
- var this_4 = this;
182
- try {
183
- for (var selected_3 = tslib_1.__values(selected), selected_3_1 = selected_3.next(); !selected_3_1.done; selected_3_1 = selected_3.next()) {
184
- var value = selected_3_1.value;
185
- _loop_4(value);
186
- }
187
- }
188
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
189
- finally {
253
+ if (this.moveUpButton) {
254
+ this.moveUpButton.nativeElement.disabled = true;
255
+ }
256
+ if (this.selectedColumns) {
257
+ /** @type {?} */
258
+ var selected = /** @type {?} */ (this.selectedColumnsControl.value);
259
+ if (selected.length > 0) {
260
+ var _loop_4 = function (value) {
261
+ /** @type {?} */
262
+ var findIndex = this_4.selectedColumns.findIndex(function (item) {
263
+ return item.key === value;
264
+ });
265
+ if (findIndex > 0) {
266
+ /** @type {?} */
267
+ var column = this_4.selectedColumns[findIndex];
268
+ this_4.selectedColumns.splice(findIndex, 1);
269
+ this_4.selectedColumns.splice(findIndex - 1, 0, column);
270
+ }
271
+ };
272
+ var this_4 = this;
190
273
  try {
191
- if (selected_3_1 && !selected_3_1.done && (_a = selected_3.return)) _a.call(selected_3);
274
+ for (var selected_4 = tslib_1.__values(selected), selected_4_1 = selected_4.next(); !selected_4_1.done; selected_4_1 = selected_4.next()) {
275
+ var value = selected_4_1.value;
276
+ _loop_4(value);
277
+ }
278
+ }
279
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
280
+ finally {
281
+ try {
282
+ if (selected_4_1 && !selected_4_1.done && (_a = selected_4.return)) _a.call(selected_4);
283
+ }
284
+ finally { if (e_4) throw e_4.error; }
192
285
  }
193
- finally { if (e_4) throw e_4.error; }
194
286
  }
195
287
  }
196
- this.moveUpButton.nativeElement.disabled = false;
288
+ if (this.moveUpButton) {
289
+ this.moveUpButton.nativeElement.disabled = false;
290
+ }
197
291
  };
198
- ColumnSelectorComponent.prototype.moveDown = function () {
292
+ /**
293
+ * @return {?}
294
+ */
295
+ ColumnSelectorComponent.prototype.moveDown = /**
296
+ * @return {?}
297
+ */
298
+ function () {
199
299
  var e_5, _a;
200
- this.moveDownButton.nativeElement.disabled = true;
201
- var selected = this.selectedColumnsControl.value;
202
- if (selected.length > 0) {
203
- var _loop_5 = function (value) {
204
- var findIndex = this_5.selectedColumns.findIndex(function (item) {
205
- return item.key === value;
206
- });
207
- var length_1 = this_5.columns.length;
208
- if (findIndex >= 0 && findIndex < length_1) {
209
- var column = this_5.selectedColumns[findIndex];
210
- this_5.selectedColumns.splice(findIndex, 1);
211
- this_5.selectedColumns.splice(findIndex + 1, 0, column);
212
- }
213
- };
214
- var this_5 = this;
215
- try {
216
- for (var selected_4 = tslib_1.__values(selected), selected_4_1 = selected_4.next(); !selected_4_1.done; selected_4_1 = selected_4.next()) {
217
- var value = selected_4_1.value;
218
- _loop_5(value);
219
- }
220
- }
221
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
222
- finally {
300
+ if (this.moveDownButton) {
301
+ this.moveDownButton.nativeElement.disabled = true;
302
+ }
303
+ if (this.selectedColumns && this.columns) {
304
+ /** @type {?} */
305
+ var selected = /** @type {?} */ (this.selectedColumnsControl.value);
306
+ if (selected.length > 0) {
307
+ var _loop_5 = function (value) {
308
+ /** @type {?} */
309
+ var findIndex = this_5.selectedColumns.findIndex(function (item) {
310
+ return item.key === value;
311
+ });
312
+ /** @type {?} */
313
+ var length_1 = this_5.columns.length;
314
+ if (findIndex >= 0 && findIndex < length_1) {
315
+ /** @type {?} */
316
+ var column = this_5.selectedColumns[findIndex];
317
+ this_5.selectedColumns.splice(findIndex, 1);
318
+ this_5.selectedColumns.splice(findIndex + 1, 0, column);
319
+ }
320
+ };
321
+ var this_5 = this;
223
322
  try {
224
- if (selected_4_1 && !selected_4_1.done && (_a = selected_4.return)) _a.call(selected_4);
323
+ for (var selected_5 = tslib_1.__values(selected), selected_5_1 = selected_5.next(); !selected_5_1.done; selected_5_1 = selected_5.next()) {
324
+ var value = selected_5_1.value;
325
+ _loop_5(value);
326
+ }
327
+ }
328
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
329
+ finally {
330
+ try {
331
+ if (selected_5_1 && !selected_5_1.done && (_a = selected_5.return)) _a.call(selected_5);
332
+ }
333
+ finally { if (e_5) throw e_5.error; }
225
334
  }
226
- finally { if (e_5) throw e_5.error; }
227
335
  }
228
336
  }
229
- this.moveDownButton.nativeElement.disabled = false;
337
+ if (this.moveDownButton) {
338
+ this.moveDownButton.nativeElement.disabled = false;
339
+ }
230
340
  };
231
341
  ColumnSelectorComponent.decorators = [
232
342
  { type: Component, args: [{
343
+ // tslint:disable-next-line:component-selector
233
344
  selector: 'app-column-selector',
234
- template: "<div>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{'Tables.SelectColumns' | translate}}</h5>\n <button (click)=\"cancel()\"\n type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body pt-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [translate]=\"'Tables.SelectColumnHelp'\"></p>\n <p [translate]=\"'Tables.MoveColumnHelp'\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-4\">\n <select [formControl]=\"availableColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"columns\">\n <ng-container *ngFor=\"let column of columns | orderBy: ['title']\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n </div>\n <div class=\"col-4 d-flex justify-content-center align-items-center\">\n <div class=\"col-9\">\n <div>\n <button [disabled]=\"!(availableColumnsControl.value && availableColumnsControl.value.length)\" (click)=\"addColumns()\" type=\"button\" class=\"btn btn-primary btn-block\">\n <i class=\"fas fa-plus mr-2\"></i><span [translate]=\"'Tables.AddColumn'\"></span>\n </button>\n </div>\n <div class=\"mt-3\">\n <button [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"removeColumns()\" type=\"button\" class=\"btn btn-secondary btn-block\">\n <i class=\"fas fa-minus mr-2\"></i><span [translate]=\"'Tables.RemoveColumn'\"></span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-4\">\n <select [formControl]=\"selectedColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"selectedColumns\">\n <ng-container *ngFor=\"let column of selectedColumns\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"btn-group mt-4\">\n <button #moveUpButton (click)=\"moveUp()\" type=\"button\" class=\"btn btn-primary\">\n <i class=\"fas fa-chevron-up mr-2\"></i><span [translate]=\"'Tables.MoveUp'\"></span>\n </button>\n <button #moveDownButton (click)=\"moveDown()\" type=\"button\" class=\"btn btn-primary ml-2\">\n <i class=\"fas fa-chevron-down mr-2\"></i><span [translate]=\"'Tables.MoveDown'\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n \n </div>\n <div class=\"modal-footer justify-content-end\">\n <button [disabled]=\"okButtonDisabled\" (click)=\"ok()\"\n type=\"button\" class=\"btn btn-primary\">\n {{'OK' | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled\"\n (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\" data-dismiss=\"modal\">\n {{'Cancel' | translate}}\n </button>\n </div>\n </div>\n ",
345
+ template: "<div>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{'Tables.SelectColumns' | translate}}</h5>\n <button (click)=\"cancel()\"\n type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body pt-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [translate]=\"'Tables.SelectColumnHelp'\"></p>\n <p [translate]=\"'Tables.MoveColumnHelp'\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-4\">\n <select [formControl]=\"availableColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"columns\">\n <ng-container *ngFor=\"let column of columns | orderBy: ['title']\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n </div>\n <div class=\"col-4 d-flex justify-content-center align-items-center\">\n <div class=\"col-9\">\n <div>\n <button [disabled]=\"!(availableColumnsControl.value && availableColumnsControl.value.length)\" (click)=\"addColumns()\" type=\"button\" class=\"btn btn-primary btn-block\">\n <i class=\"fas fa-plus mr-2\"></i><span [translate]=\"'Tables.AddColumn'\"></span>\n </button>\n </div>\n <div class=\"mt-3\">\n <button [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"removeColumns()\" type=\"button\" class=\"btn btn-secondary btn-block\">\n <i class=\"fas fa-minus mr-2\"></i><span [translate]=\"'Tables.RemoveColumn'\"></span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-4\">\n <select [formControl]=\"selectedColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"selectedColumns\">\n <ng-container *ngFor=\"let column of selectedColumns\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"btn-group mt-4\">\n <button #moveUpButton (click)=\"moveUp()\" type=\"button\" class=\"btn btn-primary\">\n <i class=\"fas fa-chevron-up mr-2\"></i><span [translate]=\"'Tables.MoveUp'\"></span>\n </button>\n <button #moveDownButton (click)=\"moveDown()\" type=\"button\" class=\"btn btn-primary ml-2\">\n <i class=\"fas fa-chevron-down mr-2\"></i><span [translate]=\"'Tables.MoveDown'\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n \n </div>\n <div class=\"modal-footer justify-content-end\">\n\n <button [disabled]=\"okButtonDisabled\" (click)=\"ok()\"\n type=\"button\" class=\"btn btn-primary\">\n <i *ngIf=\"changing\" class=\"fa fa-spinner fa-spin mr-1\"></i>\n {{'OK' | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled\"\n (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\" data-dismiss=\"modal\">\n {{'Cancel' | translate}}\n </button>\n </div>\n </div>\n ",
235
346
  encapsulation: ViewEncapsulation.Emulated,
236
347
  styles: ["\n .form-select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 5px;\n }\n .form-select * {\n padding: 5px 5px;\n }\n .btn.disabled, .btn:disabled {\n border-color: transparent !important;\n }\n "]
237
348
  }] }
@@ -241,8 +352,7 @@ var ColumnSelectorComponent = /** @class */ (function (_super) {
241
352
  { type: Router },
242
353
  { type: ActivatedRoute },
243
354
  { type: BsModalRef },
244
- { type: ChangeDetectorRef },
245
- { type: TranslateService }
355
+ { type: ChangeDetectorRef }
246
356
  ]; };
247
357
  ColumnSelectorComponent.propDecorators = {
248
358
  columns: [{ type: Input }],
@@ -253,5 +363,27 @@ var ColumnSelectorComponent = /** @class */ (function (_super) {
253
363
  return ColumnSelectorComponent;
254
364
  }(RouterModalOkCancel));
255
365
  export { ColumnSelectorComponent };
366
+ if (false) {
367
+ /** @type {?} */
368
+ ColumnSelectorComponent.prototype.columns;
369
+ /** @type {?} */
370
+ ColumnSelectorComponent.prototype.dismiss;
371
+ /** @type {?} */
372
+ ColumnSelectorComponent.prototype.selectedColumns;
373
+ /** @type {?} */
374
+ ColumnSelectorComponent.prototype.moveUpButton;
375
+ /** @type {?} */
376
+ ColumnSelectorComponent.prototype.moveDownButton;
377
+ /** @type {?} */
378
+ ColumnSelectorComponent.prototype.availableColumnsControl;
379
+ /** @type {?} */
380
+ ColumnSelectorComponent.prototype.selectedColumnsControl;
381
+ /** @type {?} */
382
+ ColumnSelectorComponent.prototype.changing;
383
+ /** @type {?} */
384
+ ColumnSelectorComponent.prototype._modalRef;
385
+ /** @type {?} */
386
+ ColumnSelectorComponent.prototype._changeDetector;
387
+ }
256
388
 
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUE0QixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pLLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRDtJQXFCNkMsbURBQW1CO0lBeUI5RCxpQ0FBWSxNQUFjLEVBQ3hCLGNBQThCLEVBQ3RCLFNBQXFCLEVBQ3JCLEdBQXNCLEVBQ3RCLGlCQUFtQztRQUo3QyxZQUtNLGtCQUFNLE1BQU0sRUFBRSxjQUFjLENBQUMsU0FDaEM7UUFKTyxlQUFTLEdBQVQsU0FBUyxDQUFZO1FBQ3JCLFNBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLHVCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUExQnBDLGFBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU92RCw2QkFBdUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLDRCQUFzQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7O0lBb0IzQyxDQUFDO0lBbEJELG9DQUFFLEdBQUY7UUFDSSxJQUFJLENBQUMs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QUFBOzRCQUFMLEtBQUs7aUJBVWY7Ozs7Ozs7OztTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN2RCxDQUFDOztnQkFyTEosU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLHlrSEFBK0M7b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFROzZCQUV2QywwU0FhQztpQkFFSjs7OztnQkF4QndCLE1BQU07Z0JBQXRCLGNBQWM7Z0JBR2QsVUFBVTtnQkFMc0YsaUJBQWlCO2dCQUdqSCxnQkFBZ0I7OzswQkEwQnBCLEtBQUs7a0NBR0wsS0FBSzsrQkFFTCxTQUFTLFNBQUMsY0FBYztpQ0FDeEIsU0FBUyxTQUFDLGdCQUFnQjs7SUEySi9CLDhCQUFDO0NBQUEsQUF4TEQsQ0FxQjZDLG1CQUFtQixHQW1LL0Q7U0FuS1ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2x1bW4tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAuZm9ybS1zZWxlY3Qge1xuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgIH1cbiAgICAuZm9ybS1zZWxlY3QgKiB7XG4gICAgICAgIHBhZGRpbmc6IDVweCA1cHg7XG4gICAgfVxuICAgIC5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBcbiAgICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH1bXTtcbiAgICBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKSBzZWxlY3RlZENvbHVtbnM6IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ21vdmVEb3duQnV0dG9uJykgbW92ZURvd25CdXR0b246IEVsZW1lbnRSZWY7XG5cbiAgICBhdmFpbGFibGVDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHNlbGVjdGVkQ29sdW1uc0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAgIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkgeyBcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGEuaW5kZXggPiBiLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Q2hhbmdlcygpIHtcbiAgICAgICAgbGV0IG1vdmVJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBjb2x1bW4ua2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmluZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgY29sdW1uLmluZGV4ID0gbW92ZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29sdW1uLmluZGV4ID0gZmluZEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXNldCBjb2x1bW5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGxldCBmaW5kQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZmluZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaW5kQ29sdW1uLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZmluZENvbHVtbi50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmaW5kIHRoZSBsYXN0IGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gcmVzZXQgY29udHJvbFxuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKGxhc3RTZWxlY3RlZEluZGV4ID4gLTEgJiYgbGFzdFNlbGVjdGVkSW5kZXggPCB0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wucGF0Y2hWYWx1ZShbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIHRoaXMubW92ZVVwQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tmaW5kSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdmVVcEJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIHRoaXMubW92ZURvd25CdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICBcblxufVxuIl19
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBNEIsU0FBUyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0lBdUJKLG1EQUFtQjtJQXFDOUQsaUNBQVksTUFBYyxFQUN4QixjQUE4QixFQUN0QixXQUNBO1FBSFYsWUFJTSxrQkFBTSxNQUFNLEVBQUUsY0FBYyxDQUFDLFNBQ2hDO1FBSE8sZUFBUyxHQUFULFNBQVM7UUFDVCxxQkFBZSxHQUFmLGVBQWU7d0JBckNhLElBQUksWUFBWSxFQUFFO3dDQU81QixJQUFJLFdBQVcsRUFBRTt1Q0FDbEIsSUFBSSxXQUFXLEVBQUU7eUJBRXhCLEtBQUs7O0tBNkJ0Qjs7OztJQTNCRCxvQ0FBRTs7O0lBQUY7UUFBQSxpQkFlQztRQWRHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckMsVUFBVSxDQUFDO1lBQ1AsS0FBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QixFQUFFLENBQUMsQ0FBQyxDQUFD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QUFJLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxHQUFHLFFBQU0sRUFBRTs7d0JBQ3RDLElBQU0sTUFBTSxHQUFHLE9BQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMvQyxPQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMxQyxPQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQzFEOzs7O29CQVRMLEtBQW9CLElBQUEsYUFBQSxpQkFBQSxRQUFRLENBQUEsa0NBQUE7d0JBQXZCLElBQU0sS0FBSyxxQkFBQTtnQ0FBTCxLQUFLO3FCQVVmOzs7Ozs7Ozs7YUFDSjtTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdEQ7S0FDSjs7Z0JBbk5KLFNBQVMsU0FBQzs7b0JBRVQsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsMHBIQUErQztvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7NkJBRXZDLDBTQWFDO2lCQUVKOzs7O2dCQXhCd0IsTUFBTTtnQkFBdEIsY0FBYztnQkFFZCxVQUFVO2dCQUo2RyxpQkFBaUI7OzswQkE2QjVJLEtBQUs7a0NBR0wsS0FBSzsrQkFFTCxTQUFTLFNBQUMsY0FBYztpQ0FDeEIsU0FBUyxTQUFDLGdCQUFnQjs7a0NBcEMvQjtFQTRCNkMsbUJBQW1CO1NBQW5ELHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1jb2x1bW4tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAuZm9ybS1zZWxlY3Qge1xuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgIH1cbiAgICAuZm9ybS1zZWxlY3QgKiB7XG4gICAgICAgIHBhZGRpbmc6IDVweCA1cHg7XG4gICAgfVxuICAgIC5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM/OiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH1bXTtcbiAgICBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKSBzZWxlY3RlZENvbHVtbnM/OiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIH1bXTtcblxuICAgIEBWaWV3Q2hpbGQoJ21vdmVVcEJ1dHRvbicpIG1vdmVVcEJ1dHRvbj86IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbW92ZURvd25CdXR0b24nKSBtb3ZlRG93bkJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgICBhdmFpbGFibGVDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHNlbGVjdGVkQ29sdW1uc0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAgIHB1YmxpYyBjaGFuZ2luZyA9IGZhbHNlO1xuXG4gICAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdvaycpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCdvaycpO1xuICAgIH1cbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB0aGlzLmRpc21pc3MuZW1pdCgnY2FuY2VsJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ2NhbmNlbCcpO1xuICAgIH1cblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfbW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvL1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmlzaWJsZTtcbiAgICAgICAgICAgIH0pLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYS5pbmRleCA8IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYS5pbmRleCA+IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSkubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Q2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgbGV0IG1vdmVJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBjb2x1bW4ua2V5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaW5kZXggPSBtb3ZlSW5kZXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaW5kZXggPSBmaW5kSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc2V0IGNvbHVtblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpbmRDb2x1bW4ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZmluZENvbHVtbi50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGxhc3QgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gc2VsZWN0ZWRbc2VsZWN0ZWQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29udHJvbFxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFNlbGVjdGVkSW5kZXggPiAtMSAmJiBsYXN0U2VsZWN0ZWRJbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wucGF0Y2hWYWx1ZShbXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNbbGFzdFNlbGVjdGVkSW5kZXggKyAxXS5rZXlcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZVVwKCkge1xuICAgICAgICBpZiAodGhpcy5tb3ZlVXBCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVVwQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggLSAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlVXBCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVVwQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdmVEb3duKCkge1xuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID49IDAgJiYgZmluZEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tmaW5kSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4ICsgMSAsIDAsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW92ZURvd25CdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMubW92ZURvd25CdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19