@ng-nest/ui 15.0.6 → 15.0.8

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 (174) hide show
  1. package/core/config/config.d.ts +1 -0
  2. package/core/functions/date.d.ts +1 -0
  3. package/date-picker/date-picker.property.d.ts +129 -3
  4. package/date-picker/date-range-portal.component.d.ts +9 -8
  5. package/date-picker/date-range.component.d.ts +12 -10
  6. package/date-picker/picker-date.component.d.ts +15 -6
  7. package/esm2020/core/config/config.mjs +1 -1
  8. package/esm2020/core/functions/date.mjs +20 -29
  9. package/esm2020/date-picker/date-picker.property.mjs +23 -2
  10. package/esm2020/date-picker/date-range-portal.component.mjs +36 -33
  11. package/esm2020/date-picker/date-range.component.mjs +75 -53
  12. package/esm2020/date-picker/picker-date.component.mjs +133 -17
  13. package/esm2020/input/input.component.mjs +2 -2
  14. package/esm2020/loading/loading.component.mjs +13 -6
  15. package/esm2020/loading/loading.property.mjs +1 -1
  16. package/esm2020/switch/switch.component.mjs +13 -6
  17. package/esm2020/switch/switch.module.mjs +6 -4
  18. package/esm2020/switch/switch.property.mjs +39 -4
  19. package/esm2020/table/drag.directive.mjs +13 -5
  20. package/esm2020/table/table-head.component.mjs +22 -6
  21. package/esm2020/table/table.property.mjs +23 -2
  22. package/fesm2015/ng-nest-ui-anchor.mjs +1 -0
  23. package/fesm2015/ng-nest-ui-api.mjs +1 -0
  24. package/fesm2015/ng-nest-ui-auto-complete.mjs +1 -0
  25. package/fesm2015/ng-nest-ui-avatar.mjs +1 -0
  26. package/fesm2015/ng-nest-ui-back-top.mjs +1 -0
  27. package/fesm2015/ng-nest-ui-badge.mjs +1 -0
  28. package/fesm2015/ng-nest-ui-base-form.mjs +1 -0
  29. package/fesm2015/ng-nest-ui-border.mjs +1 -0
  30. package/fesm2015/ng-nest-ui-button.mjs +1 -0
  31. package/fesm2015/ng-nest-ui-calendar.mjs +1 -0
  32. package/fesm2015/ng-nest-ui-card.mjs +1 -0
  33. package/fesm2015/ng-nest-ui-carousel.mjs +1 -0
  34. package/fesm2015/ng-nest-ui-cascade.mjs +1 -0
  35. package/fesm2015/ng-nest-ui-checkbox.mjs +1 -0
  36. package/fesm2015/ng-nest-ui-collapse.mjs +1 -0
  37. package/fesm2015/ng-nest-ui-color-picker.mjs +1 -0
  38. package/fesm2015/ng-nest-ui-color.mjs +1 -0
  39. package/fesm2015/ng-nest-ui-comment.mjs +1 -0
  40. package/fesm2015/ng-nest-ui-container.mjs +1 -0
  41. package/fesm2015/ng-nest-ui-core.mjs +20 -29
  42. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  43. package/fesm2015/ng-nest-ui-date-picker.mjs +263 -99
  44. package/fesm2015/ng-nest-ui-date-picker.mjs.map +1 -1
  45. package/fesm2015/ng-nest-ui-dialog.mjs +1 -0
  46. package/fesm2015/ng-nest-ui-drawer.mjs +1 -0
  47. package/fesm2015/ng-nest-ui-dropdown.mjs +1 -0
  48. package/fesm2015/ng-nest-ui-find.mjs +1 -0
  49. package/fesm2015/ng-nest-ui-form.mjs +1 -0
  50. package/fesm2015/ng-nest-ui-highlight.mjs +1 -0
  51. package/fesm2015/ng-nest-ui-i18n.mjs +1 -0
  52. package/fesm2015/ng-nest-ui-icon.mjs +1 -0
  53. package/fesm2015/ng-nest-ui-image.mjs +1 -0
  54. package/fesm2015/ng-nest-ui-inner.mjs +1 -0
  55. package/fesm2015/ng-nest-ui-input-number.mjs +1 -0
  56. package/fesm2015/ng-nest-ui-input.mjs +2 -1
  57. package/fesm2015/ng-nest-ui-input.mjs.map +1 -1
  58. package/fesm2015/ng-nest-ui-link.mjs +1 -0
  59. package/fesm2015/ng-nest-ui-list.mjs +1 -0
  60. package/fesm2015/ng-nest-ui-loading.mjs +13 -5
  61. package/fesm2015/ng-nest-ui-loading.mjs.map +1 -1
  62. package/fesm2015/ng-nest-ui-menu.mjs +1 -0
  63. package/fesm2015/ng-nest-ui-message-box.mjs +1 -0
  64. package/fesm2015/ng-nest-ui-message.mjs +1 -0
  65. package/fesm2015/ng-nest-ui-notification.mjs +1 -0
  66. package/fesm2015/ng-nest-ui-pagination.mjs +1 -0
  67. package/fesm2015/ng-nest-ui-popconfirm.mjs +1 -0
  68. package/fesm2015/ng-nest-ui-popover.mjs +1 -0
  69. package/fesm2015/ng-nest-ui-progress.mjs +1 -0
  70. package/fesm2015/ng-nest-ui-radio.mjs +1 -0
  71. package/fesm2015/ng-nest-ui-rate.mjs +1 -0
  72. package/fesm2015/ng-nest-ui-result.mjs +1 -0
  73. package/fesm2015/ng-nest-ui-select.mjs +1 -0
  74. package/fesm2015/ng-nest-ui-skeleton.mjs +1 -0
  75. package/fesm2015/ng-nest-ui-slider-select.mjs +1 -0
  76. package/fesm2015/ng-nest-ui-slider.mjs +1 -0
  77. package/fesm2015/ng-nest-ui-steps.mjs +1 -0
  78. package/fesm2015/ng-nest-ui-switch.mjs +54 -11
  79. package/fesm2015/ng-nest-ui-switch.mjs.map +1 -1
  80. package/fesm2015/ng-nest-ui-table.mjs +55 -10
  81. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  82. package/fesm2015/ng-nest-ui-tabs.mjs +1 -0
  83. package/fesm2015/ng-nest-ui-tag.mjs +1 -0
  84. package/fesm2015/ng-nest-ui-text-retract.mjs +1 -0
  85. package/fesm2015/ng-nest-ui-textarea.mjs +1 -0
  86. package/fesm2015/ng-nest-ui-time-picker.mjs +1 -0
  87. package/fesm2015/ng-nest-ui-timeline.mjs +1 -0
  88. package/fesm2015/ng-nest-ui-tooltip.mjs +1 -0
  89. package/fesm2015/ng-nest-ui-transfer.mjs +1 -0
  90. package/fesm2015/ng-nest-ui-tree-file.mjs +1 -0
  91. package/fesm2015/ng-nest-ui-tree-select.mjs +1 -0
  92. package/fesm2015/ng-nest-ui-tree.mjs +1 -0
  93. package/fesm2015/ng-nest-ui-upload.mjs +1 -0
  94. package/fesm2020/ng-nest-ui-anchor.mjs +1 -0
  95. package/fesm2020/ng-nest-ui-api.mjs +1 -0
  96. package/fesm2020/ng-nest-ui-auto-complete.mjs +1 -0
  97. package/fesm2020/ng-nest-ui-avatar.mjs +1 -0
  98. package/fesm2020/ng-nest-ui-back-top.mjs +1 -0
  99. package/fesm2020/ng-nest-ui-badge.mjs +1 -0
  100. package/fesm2020/ng-nest-ui-base-form.mjs +1 -0
  101. package/fesm2020/ng-nest-ui-border.mjs +1 -0
  102. package/fesm2020/ng-nest-ui-button.mjs +1 -0
  103. package/fesm2020/ng-nest-ui-calendar.mjs +1 -0
  104. package/fesm2020/ng-nest-ui-card.mjs +1 -0
  105. package/fesm2020/ng-nest-ui-carousel.mjs +1 -0
  106. package/fesm2020/ng-nest-ui-cascade.mjs +1 -0
  107. package/fesm2020/ng-nest-ui-checkbox.mjs +1 -0
  108. package/fesm2020/ng-nest-ui-collapse.mjs +1 -0
  109. package/fesm2020/ng-nest-ui-color-picker.mjs +1 -0
  110. package/fesm2020/ng-nest-ui-color.mjs +1 -0
  111. package/fesm2020/ng-nest-ui-comment.mjs +1 -0
  112. package/fesm2020/ng-nest-ui-container.mjs +1 -0
  113. package/fesm2020/ng-nest-ui-core.mjs +20 -29
  114. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  115. package/fesm2020/ng-nest-ui-date-picker.mjs +262 -99
  116. package/fesm2020/ng-nest-ui-date-picker.mjs.map +1 -1
  117. package/fesm2020/ng-nest-ui-dialog.mjs +1 -0
  118. package/fesm2020/ng-nest-ui-drawer.mjs +1 -0
  119. package/fesm2020/ng-nest-ui-dropdown.mjs +1 -0
  120. package/fesm2020/ng-nest-ui-find.mjs +1 -0
  121. package/fesm2020/ng-nest-ui-form.mjs +1 -0
  122. package/fesm2020/ng-nest-ui-highlight.mjs +1 -0
  123. package/fesm2020/ng-nest-ui-i18n.mjs +1 -0
  124. package/fesm2020/ng-nest-ui-icon.mjs +1 -0
  125. package/fesm2020/ng-nest-ui-image.mjs +1 -0
  126. package/fesm2020/ng-nest-ui-inner.mjs +1 -0
  127. package/fesm2020/ng-nest-ui-input-number.mjs +1 -0
  128. package/fesm2020/ng-nest-ui-input.mjs +2 -1
  129. package/fesm2020/ng-nest-ui-input.mjs.map +1 -1
  130. package/fesm2020/ng-nest-ui-link.mjs +1 -0
  131. package/fesm2020/ng-nest-ui-list.mjs +1 -0
  132. package/fesm2020/ng-nest-ui-loading.mjs +13 -5
  133. package/fesm2020/ng-nest-ui-loading.mjs.map +1 -1
  134. package/fesm2020/ng-nest-ui-menu.mjs +1 -0
  135. package/fesm2020/ng-nest-ui-message-box.mjs +1 -0
  136. package/fesm2020/ng-nest-ui-message.mjs +1 -0
  137. package/fesm2020/ng-nest-ui-notification.mjs +1 -0
  138. package/fesm2020/ng-nest-ui-pagination.mjs +1 -0
  139. package/fesm2020/ng-nest-ui-popconfirm.mjs +1 -0
  140. package/fesm2020/ng-nest-ui-popover.mjs +1 -0
  141. package/fesm2020/ng-nest-ui-progress.mjs +1 -0
  142. package/fesm2020/ng-nest-ui-radio.mjs +1 -0
  143. package/fesm2020/ng-nest-ui-rate.mjs +1 -0
  144. package/fesm2020/ng-nest-ui-result.mjs +1 -0
  145. package/fesm2020/ng-nest-ui-select.mjs +1 -0
  146. package/fesm2020/ng-nest-ui-skeleton.mjs +1 -0
  147. package/fesm2020/ng-nest-ui-slider-select.mjs +1 -0
  148. package/fesm2020/ng-nest-ui-slider.mjs +1 -0
  149. package/fesm2020/ng-nest-ui-steps.mjs +1 -0
  150. package/fesm2020/ng-nest-ui-switch.mjs +54 -11
  151. package/fesm2020/ng-nest-ui-switch.mjs.map +1 -1
  152. package/fesm2020/ng-nest-ui-table.mjs +55 -10
  153. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  154. package/fesm2020/ng-nest-ui-tabs.mjs +1 -0
  155. package/fesm2020/ng-nest-ui-tag.mjs +1 -0
  156. package/fesm2020/ng-nest-ui-text-retract.mjs +1 -0
  157. package/fesm2020/ng-nest-ui-textarea.mjs +1 -0
  158. package/fesm2020/ng-nest-ui-time-picker.mjs +1 -0
  159. package/fesm2020/ng-nest-ui-timeline.mjs +1 -0
  160. package/fesm2020/ng-nest-ui-tooltip.mjs +1 -0
  161. package/fesm2020/ng-nest-ui-transfer.mjs +1 -0
  162. package/fesm2020/ng-nest-ui-tree-file.mjs +1 -0
  163. package/fesm2020/ng-nest-ui-tree-select.mjs +1 -0
  164. package/fesm2020/ng-nest-ui-tree.mjs +1 -0
  165. package/fesm2020/ng-nest-ui-upload.mjs +1 -0
  166. package/loading/loading.component.d.ts +1 -0
  167. package/loading/loading.property.d.ts +1 -1
  168. package/package.json +1 -1
  169. package/switch/switch.component.d.ts +2 -1
  170. package/switch/switch.module.d.ts +3 -1
  171. package/switch/switch.property.d.ts +47 -1
  172. package/table/drag.directive.d.ts +12 -2
  173. package/table/table-head.component.d.ts +11 -1
  174. package/table/table.property.d.ts +55 -1
@@ -2,7 +2,7 @@ import { XPortalConnectedPosition } from '@ng-nest/ui/portal';
2
2
  import { Subject } from 'rxjs';
3
3
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild } from '@angular/core';
4
4
  import { XDateRangePrefix, XDateRangeProperty } from './date-picker.property';
5
- import { XIsEmpty, XIsDate, XIsNumber, XIsChange, XClearClass, XIsString, XIsUndefined } from '@ng-nest/ui/core';
5
+ import { XIsEmpty, XIsDate, XIsNumber, XIsChange, XClearClass, XIsString, XIsUndefined, XIsNull } from '@ng-nest/ui/core';
6
6
  import { DatePipe } from '@angular/common';
7
7
  import { takeUntil } from 'rxjs/operators';
8
8
  import { XValueAccessor } from '@ng-nest/ui/base-form';
@@ -27,6 +27,7 @@ export class XDateRangeComponent extends XDateRangeProperty {
27
27
  this.overlay = overlay;
28
28
  this.modelType = 'date';
29
29
  this.isInput = false;
30
+ this.showClearable = false;
30
31
  this.enter = false;
31
32
  this.inputClearable = false;
32
33
  this.animating = false;
@@ -37,24 +38,22 @@ export class XDateRangeComponent extends XDateRangeProperty {
37
38
  this.valueChange = new Subject();
38
39
  this.dataChange = new Subject();
39
40
  this.positionChange = new Subject();
40
- this.inputActiveChange = new Subject();
41
41
  this.closeSubject = new Subject();
42
+ this.activeTypeChange = new Subject();
42
43
  this.startDisplay = '';
43
44
  this.endDisplay = '';
44
- this.startActive = false;
45
- this.endActive = false;
46
45
  this._unSubject = new Subject();
47
46
  }
48
47
  get getRequired() {
49
48
  return this.required && XIsEmpty(this.value);
50
49
  }
51
50
  writeValue(value) {
52
- if (XIsUndefined(value))
51
+ if (XIsUndefined(value) || XIsNull(value))
53
52
  value = [];
54
53
  if (value.length > 0) {
55
54
  if (XIsDate(value[0])) {
56
55
  this.modelType = 'date';
57
- this.numberValue = value.getTime();
56
+ this.numberValue = value.map((x) => x.getTime());
58
57
  }
59
58
  else if (XIsNumber(value[0])) {
60
59
  this.modelType = 'number';
@@ -119,32 +118,41 @@ export class XDateRangeComponent extends XDateRangeProperty {
119
118
  }
120
119
  }
121
120
  menter() {
122
- if (this.disabled)
121
+ if (this.disabled || !this.clearable)
123
122
  return;
124
123
  this.enter = true;
125
124
  if (!XIsEmpty(this.numberValue)) {
126
125
  this.icon = '';
127
- this.inputClearable = true;
126
+ this.showClearable = true;
128
127
  this.cdr.detectChanges();
129
128
  }
130
129
  }
131
130
  mleave() {
132
- if (this.disabled)
131
+ if (this.disabled || !this.clearable)
133
132
  return;
134
133
  this.enter = false;
135
- if (this.inputClearable) {
134
+ if (this.clearable) {
136
135
  this.icon = 'fto-calendar';
137
- this.inputClearable = false;
136
+ this.showClearable = false;
138
137
  this.cdr.detectChanges();
139
138
  }
140
139
  }
141
140
  clearEmit() {
142
141
  this.value = [];
143
142
  this.numberValue = [];
144
- this.displayValue = [];
143
+ this.startDisplay = '';
144
+ this.endDisplay = '';
145
145
  this.mleave();
146
146
  this.valueChange.next(this.numberValue);
147
147
  this.modelChange();
148
+ this.inputStartCom.inputFocus();
149
+ this.cdr.detectChanges();
150
+ }
151
+ onIconClick(event) {
152
+ if (this.icon === 'fto-x') {
153
+ this.clearEmit();
154
+ }
155
+ event.stopPropagation();
148
156
  }
149
157
  modelChange() {
150
158
  if (this.onChange) {
@@ -158,6 +166,13 @@ export class XDateRangeComponent extends XDateRangeProperty {
158
166
  ? this.numberValue.map((x) => this.datePipe.transform(x, this.format))
159
167
  : this.numberValue;
160
168
  }
169
+ getNumberValue() {
170
+ return this.modelType === 'date'
171
+ ? this.value.map((x) => x.getTime())
172
+ : this.modelType === 'string'
173
+ ? this.value.map((x) => new Date(x).getTime())
174
+ : this.value;
175
+ }
161
176
  portalAttached() {
162
177
  return this.portal?.overlayRef?.hasAttached();
163
178
  }
@@ -165,8 +180,17 @@ export class XDateRangeComponent extends XDateRangeProperty {
165
180
  if (this.portalAttached()) {
166
181
  this.portal?.overlayRef?.detach();
167
182
  this.active = false;
168
- this.startActive = false;
169
- this.endActive = false;
183
+ if (!this.numberValue || this.numberValue.length === 0 || this.numberValue.includes(null)) {
184
+ if (!this.value || this.value.length === 0) {
185
+ this.startDisplay = '';
186
+ this.endDisplay = '';
187
+ this.numberValue = [];
188
+ }
189
+ else {
190
+ this.numberValue = this.getNumberValue();
191
+ this.setDisplayValue(this.numberValue);
192
+ }
193
+ }
170
194
  this.cdr.detectChanges();
171
195
  return true;
172
196
  }
@@ -179,10 +203,8 @@ export class XDateRangeComponent extends XDateRangeProperty {
179
203
  type && $event.stopPropagation();
180
204
  if (this.disabled || this.animating)
181
205
  return;
182
- this.startActive = type === 'start';
183
- this.endActive = type === 'end';
184
- this.activeType = type;
185
- this.activeType && this.inputActiveChange.next(this.activeType);
206
+ this.activeType = type || 'start';
207
+ this.activeTypeChange.next(this.activeType);
186
208
  if (this.active)
187
209
  return;
188
210
  this.active = true;
@@ -203,7 +225,6 @@ export class XDateRangeComponent extends XDateRangeProperty {
203
225
  .subscribe((event) => {
204
226
  const clickTarget = event.target;
205
227
  if (clickTarget !== this.inputStartCom.inputRef.nativeElement && clickTarget !== this.inputEndCom.inputRef.nativeElement) {
206
- this.setDisplayValue(this.numberValue);
207
228
  this.closeSubject.next();
208
229
  }
209
230
  });
@@ -227,58 +248,59 @@ export class XDateRangeComponent extends XDateRangeProperty {
227
248
  preset: this.preset,
228
249
  valueChange: this.valueChange,
229
250
  positionChange: this.positionChange,
230
- inputActiveChange: this.inputActiveChange,
231
251
  activeType: this.activeType,
252
+ activeTypeChange: this.activeTypeChange,
232
253
  closePortal: () => this.closeSubject.next(),
233
254
  destroyPortal: () => this.destroyPortal(),
234
- nodeEmit: (dates, sure = true) => this.onNodeClick(dates, sure),
235
- startNodeEmit: (node) => this.startNodeClick(node),
236
- endNodeEmit: (node) => this.endNodeClick(node),
255
+ nodeEmit: (dates, close = true) => this.onNodeClick(dates, close),
256
+ startNodeEmit: (node, close = false) => this.startNodeClick(node, close),
257
+ endNodeEmit: (node, close = false) => this.endNodeClick(node, close),
237
258
  animating: (ing) => (this.animating = ing)
238
259
  });
239
260
  componentRef.changeDetectorRef.detectChanges();
240
261
  }
241
- startNodeClick(node) {
242
- this.startDisplay = this.datePipe.transform(node, this.format);
243
- this.startActive = false;
244
- this.endActive = true;
245
- this.inputEndCom.inputFocus('after');
262
+ startNodeClick(node, close = false) {
263
+ this.startDisplay = !node ? '' : this.datePipe.transform(node, this.format);
264
+ if (!close) {
265
+ this.inputEndCom.inputFocus('after');
266
+ this.activeTypeChange.next('end');
267
+ }
246
268
  this.cdr.detectChanges();
247
269
  }
248
- endNodeClick(node) {
249
- this.endDisplay = this.datePipe.transform(node, this.format);
270
+ endNodeClick(node, close = false) {
271
+ this.endDisplay = !node ? '' : this.datePipe.transform(node, this.format);
272
+ if (!close) {
273
+ this.inputStartCom.inputFocus('after');
274
+ this.activeTypeChange.next('start');
275
+ }
250
276
  this.cdr.detectChanges();
251
277
  }
252
- onNodeClick(dates, sure = true) {
278
+ onNodeClick(dates, close = true) {
253
279
  this.isInput = false;
254
- if (sure) {
255
- this.numberValue = dates.map((x) => x.getTime());
256
- this.value = this.getValue();
257
- this.setDisplayValue(this.numberValue);
280
+ this.numberValue = dates.map((x) => x.getTime());
281
+ this.value = this.getValue();
282
+ this.setDisplayValue(this.numberValue);
283
+ if (close) {
258
284
  this.closeSubject.next();
259
- this.modelChange();
260
- this.nodeEmit.emit(this.numberValue);
261
- }
262
- else {
263
- this.setDisplayValue(dates.map((x) => x.getTime()));
264
- this.cdr.markForCheck();
265
285
  }
286
+ this.modelChange();
266
287
  }
267
288
  onInput() {
268
289
  this.isInput = true;
269
290
  }
291
+ onFocus(type) {
292
+ this.activeType = type;
293
+ this.activeChange.next(this.activeType);
294
+ }
270
295
  setDisplayValue(dateNumber) {
271
- // if (this.isInput && isNaN(this.startDisplay) && !isNaN(Date.parse(this.displayValue))) {
272
- // this.displayValue = this.datePipe.transform(this.displayValue, this.format);
273
- // this.numberValue = new Date(this.displayValue).getTime();
274
- // this.value = this.getValue();
275
- // this.modelChange();
276
- // this.isInput = false;
277
- // } else {
278
296
  if (!dateNumber)
279
297
  return;
280
- this.displayValue = dateNumber.map((x) => this.datePipe.transform(x, this.format));
281
- // }
298
+ if (!XIsNull(dateNumber[0])) {
299
+ this.startDisplay = this.datePipe.transform(dateNumber[0], this.format);
300
+ }
301
+ if (!XIsNull(dateNumber[1])) {
302
+ this.endDisplay = this.datePipe.transform(dateNumber[1], this.format);
303
+ }
282
304
  }
283
305
  setPlacement() {
284
306
  return this.portalService.setPlacement({
@@ -300,10 +322,10 @@ export class XDateRangeComponent extends XDateRangeProperty {
300
322
  }
301
323
  }
302
324
  /** @nocollapse */ XDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangeComponent, deps: [{ token: i0.Renderer2 }, { token: i1.XConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.DatePipe }, { token: i4.Overlay }], target: i0.ɵɵFactoryTarget.Component });
303
- /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }, { propertyName: "inputStartCom", first: true, predicate: ["inputStartCom"], descendants: true, static: true }, { propertyName: "inputEndCom", first: true, predicate: ["inputEndCom"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-active]=\"active\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n [class.x-input-active]=\"startActive\"\r\n type=\"text\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'start')\"\r\n (xFocus)=\"startActive = true\"\r\n (xBlur)=\"startActive = false\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n [class.x-input-active]=\"endActive\"\r\n type=\"text\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'end')\"\r\n (xFocus)=\"endActive = true\"\r\n (xBlur)=\"endActive = false\"\r\n [(ngModel)]=\"endDisplay\"\r\n ></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input{width:6rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;margin-left:.4rem;margin-right:.4rem;border-radius:0;border-bottom:var(--x-border-width) var(--x-border-style) transparent}.x-date-range-group .x-input-group>x-input .x-input-active input{border-color:var(--x-primary)}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}\n"], dependencies: [{ kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.XInputComponent, selector: "x-input" }, { kind: "component", type: i6.XInputGroupComponent, selector: "x-input-group" }, { kind: "component", type: i7.XIconComponent, selector: "x-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
325
+ /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }, { propertyName: "inputStartCom", first: true, predicate: ["inputStartCom"], descendants: true, static: true }, { propertyName: "inputEndCom", first: true, predicate: ["inputEndCom"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n #dateRange\r\n class=\"x-date-range\"\r\n [class.x-date-range-active]=\"active\"\r\n [class.x-date-range-active-start]=\"activeType === 'start'\"\r\n [class.x-date-range-active-end]=\"activeType === 'end'\"\r\n>\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" (mouseenter)=\"menter()\" (mouseleave)=\"mleave()\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n class=\"x-data-range-input-start\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (xFocus)=\"onFocus('start')\"\r\n (xClick)=\"showPortal($event, 'start')\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon class=\"x-date-range-icon\" type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n class=\"x-data-range-input-end\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (xFocus)=\"onFocus('end')\"\r\n (xClick)=\"showPortal($event, 'end')\"\r\n [(ngModel)]=\"endDisplay\"\r\n [icon]=\"icon\"\r\n (clearEmit)=\"clearEmit()\"\r\n [clearable]=\"showClearable\"\r\n ></x-input>\r\n <div *ngIf=\"active\" class=\"x-date-range-active-bar\"></div>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center;position:relative}.x-date-range-group .x-input-group .x-date-range-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;font-size:1rem;width:1.8rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;background-color:transparent;margin-left:.4rem;margin-right:.4rem;border-radius:0}.x-date-range-group .x-input-group>x-input.x-data-range-input-start{width:6rem}.x-date-range-group .x-input-group>x-input.x-data-range-input-end{width:7.8rem}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active-bar{position:absolute;height:.125rem;margin-left:.4rem;bottom:-.0625rem;width:calc(50% - 2.2rem);background-color:var(--x-primary);transition:var(--x-animation-duration-base)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}.x-date-range-active-start .x-date-range-active-bar{left:0}.x-date-range-active-end .x-date-range-active-bar{left:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.XInputComponent, selector: "x-input" }, { kind: "component", type: i6.XInputGroupComponent, selector: "x-input-group" }, { kind: "component", type: i7.XIconComponent, selector: "x-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
304
326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangeComponent, decorators: [{
305
327
  type: Component,
306
- args: [{ selector: `${XDateRangePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XDateRangeComponent), DatePipe], template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-active]=\"active\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n [class.x-input-active]=\"startActive\"\r\n type=\"text\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'start')\"\r\n (xFocus)=\"startActive = true\"\r\n (xBlur)=\"startActive = false\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n [class.x-input-active]=\"endActive\"\r\n type=\"text\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'end')\"\r\n (xFocus)=\"endActive = true\"\r\n (xBlur)=\"endActive = false\"\r\n [(ngModel)]=\"endDisplay\"\r\n ></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input{width:6rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;margin-left:.4rem;margin-right:.4rem;border-radius:0;border-bottom:var(--x-border-width) var(--x-border-style) transparent}.x-date-range-group .x-input-group>x-input .x-input-active input{border-color:var(--x-primary)}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}\n"] }]
328
+ args: [{ selector: `${XDateRangePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XDateRangeComponent), DatePipe], template: "<div\r\n #dateRange\r\n class=\"x-date-range\"\r\n [class.x-date-range-active]=\"active\"\r\n [class.x-date-range-active-start]=\"activeType === 'start'\"\r\n [class.x-date-range-active-end]=\"activeType === 'end'\"\r\n>\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" (mouseenter)=\"menter()\" (mouseleave)=\"mleave()\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n class=\"x-data-range-input-start\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (xFocus)=\"onFocus('start')\"\r\n (xClick)=\"showPortal($event, 'start')\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon class=\"x-date-range-icon\" type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n class=\"x-data-range-input-end\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (xFocus)=\"onFocus('end')\"\r\n (xClick)=\"showPortal($event, 'end')\"\r\n [(ngModel)]=\"endDisplay\"\r\n [icon]=\"icon\"\r\n (clearEmit)=\"clearEmit()\"\r\n [clearable]=\"showClearable\"\r\n ></x-input>\r\n <div *ngIf=\"active\" class=\"x-date-range-active-bar\"></div>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center;position:relative}.x-date-range-group .x-input-group .x-date-range-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;font-size:1rem;width:1.8rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;background-color:transparent;margin-left:.4rem;margin-right:.4rem;border-radius:0}.x-date-range-group .x-input-group>x-input.x-data-range-input-start{width:6rem}.x-date-range-group .x-input-group>x-input.x-data-range-input-end{width:7.8rem}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active-bar{position:absolute;height:.125rem;margin-left:.4rem;bottom:-.0625rem;width:calc(50% - 2.2rem);background-color:var(--x-primary);transition:var(--x-animation-duration-base)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}.x-date-range-active-start .x-date-range-active-bar{left:0}.x-date-range-active-end .x-date-range-active-bar{left:50%}\n"] }]
307
329
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.XConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.XPortalService }, { type: i0.ViewContainerRef }, { type: i3.DatePipe }, { type: i4.Overlay }]; }, propDecorators: { dateRange: [{
308
330
  type: ViewChild,
309
331
  args: ['dateRange', { static: true }]
@@ -317,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
317
339
  type: ViewChild,
318
340
  args: ['inputEndCom', { static: true }]
319
341
  }] } });
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kYXRlLXBpY2tlci9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBTXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUNMLFFBQVEsRUFDUixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUVULFlBQVksRUFFYixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFVMUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQXlEekQsWUFDUyxRQUFtQixFQUNuQixhQUE2QixFQUNwQixHQUFzQixFQUM5QixhQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsUUFBa0IsRUFDbEIsT0FBZ0I7UUFFeEIsS0FBSyxFQUFFLENBQUM7UUFSRCxhQUFRLEdB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QUVELFdBQVc7UUFDVCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7bUlBblRVLG1CQUFtQjt1SEFBbkIsbUJBQW1CLHVDQUZuQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQywrZkN6QzVELCtrQ0E0QkE7MkZEZWEsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLEdBQUcsZ0JBQWdCLEVBQUUsaUJBR2hCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLHFCQUFxQixFQUFFLFFBQVEsQ0FBQztzUUFHaEIsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLFVBQVU7c0JBQXBELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSyxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWFBvcnRhbFNlcnZpY2UsIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYRGF0ZVBpY2tlck1vZGVsVHlwZSwgWERhdGVSYW5nZVByZWZpeCwgWERhdGVSYW5nZVByb3BlcnR5IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7XHJcbiAgWElzRW1wdHksXHJcbiAgWElzRGF0ZSxcclxuICBYSXNOdW1iZXIsXHJcbiAgWElzQ2hhbmdlLFxyXG4gIFhDb3JuZXIsXHJcbiAgWENsZWFyQ2xhc3MsXHJcbiAgWElzU3RyaW5nLFxyXG4gIFhDb25maWdTZXJ2aWNlLFxyXG4gIFhJc1VuZGVmaW5lZCxcclxuICBYQm9vbGVhblxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQsIFhJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWERhdGVSYW5nZVBvcnRhbENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1yYW5nZS1wb3J0YWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYRGF0ZVJhbmdlUHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhEYXRlUmFuZ2VDb21wb25lbnQpLCBEYXRlUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFhEYXRlUmFuZ2VDb21wb25lbnQgZXh0ZW5kcyBYRGF0ZVJhbmdlUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlJywgeyBzdGF0aWM6IHRydWUgfSkgZGF0ZVJhbmdlITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXAhOiBYSW5wdXRHcm91cENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbnB1dFN0YXJ0Q29tJywgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXRTdGFydENvbSE6IFhJbnB1dENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbnB1dEVuZENvbScsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0RW5kQ29tITogWElucHV0Q29tcG9uZW50O1xyXG5cclxuICBtb2RlbFR5cGU6IFhEYXRlUGlja2VyTW9kZWxUeXBlID0gJ2RhdGUnO1xyXG4gIG51bWJlclZhbHVlITogbnVtYmVyW107XHJcbiAgaXNJbnB1dCA9IGZhbHNlO1xyXG5cclxuICBnZXQgZ2V0UmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCAmJiBYSXNFbXB0eSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh2YWx1ZSkpIHZhbHVlID0gW107XHJcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoWElzRGF0ZSh2YWx1ZVswXSkpIHtcclxuICAgICAgICB0aGlzLm1vZGVsVHlwZSA9ICdkYXRlJztcclxuICAgICAgICB0aGlzLm51bWJlclZhbHVlID0gdmFsdWUuZ2V0VGltZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKFhJc051bWJlcih2YWx1ZVswXSkpIHtcclxuICAgICAgICB0aGlzLm1vZGVsVHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfSBlbHNlIGlmIChYSXNTdHJpbmcodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICBjb25zdCB2YWx1ZVRpbWUgPSB2YWx1ZS5tYXAoKHg6IHN0cmluZykgPT4gbmV3IERhdGUoeCkuZ2V0VGltZSgpKTtcclxuICAgICAgICB0aGlzLm51bWJlclZhbHVlID0gIWlzTmFOKHZhbHVlVGltZVswXSkgPyB2YWx1ZVRpbWUgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBlbnRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlucHV0Q2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgZGlzcGxheVZhbHVlOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQ+O1xyXG4gIGljb246IHN0cmluZyA9ICdmdG8tY2FsZW5kYXInO1xyXG4gIGJveCE6IERPTVJlY3Q7XHJcbiAgcHJvdGFsSGVpZ2h0ITogbnVtYmVyO1xyXG4gIG1heE5vZGVzOiBudW1iZXIgPSA2O1xyXG4gIHByb3RhbFRvYm90dG9tOiBib29sZWFuID0gdHJ1ZTtcclxuICB2YWx1ZUNoYW5nZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBkYXRhQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHBvc2l0aW9uQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGlucHV0QWN0aXZlQ2hhbmdlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNsb3NlU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgc3RhcnREaXNwbGF5OiBzdHJpbmcgfCBudW1iZXIgPSAnJztcclxuICBlbmREaXNwbGF5OiBzdHJpbmcgfCBudW1iZXIgPSAnJztcclxuICBzdGFydEFjdGl2ZTogWEJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmRBY3RpdmU6IFhCb29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlVHlwZT86ICdzdGFydCcgfCAnZW5kJztcclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBvcnRhbFNlcnZpY2U6IFhQb3J0YWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RmxleCh0aGlzLmRhdGVSYW5nZS5uYXRpdmVFbGVtZW50LCB0aGlzLnJlbmRlcmVyLCB0aGlzLmp1c3RpZnksIHRoaXMuYWxpZ24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuc2V0Rm9ybWF0KCk7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UG9ydGFsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHR5cGUgfSA9IGNoYW5nZXM7XHJcbiAgICBpZiAoWElzQ2hhbmdlKHR5cGUpKSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybWF0KCk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdWJqZWN0KCkge1xyXG4gICAgdGhpcy5jbG9zZVN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXQgIT09ICd5eXl5LU1NLWRkJykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0nO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLXRpbWUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLWhvdXInKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEgnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLW1pbnV0ZScpIHtcclxuICAgICAgdGhpcy5mb3JtYXQgPSAneXl5eS1NTS1kZCBISDptbSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZW50ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRlciA9IHRydWU7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMubnVtYmVyVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuZW50ZXIgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmlucHV0Q2xlYXJhYmxlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmdG8tY2FsZW5kYXInO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRW1pdCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIHRoaXMubnVtYmVyVmFsdWUgPSBbXTtcclxuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gW107XHJcbiAgICB0aGlzLm1sZWF2ZSgpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbW9kZWxDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsVHlwZSA9PT0gJ2RhdGUnXHJcbiAgICAgID8gdGhpcy5udW1iZXJWYWx1ZS5tYXAoKHgpID0+IG5ldyBEYXRlKHgpKVxyXG4gICAgICA6IHRoaXMubW9kZWxUeXBlID09PSAnc3RyaW5nJ1xyXG4gICAgICA/IHRoaXMubnVtYmVyVmFsdWUubWFwKCh4KSA9PiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LCB0aGlzLmZvcm1hdCkpXHJcbiAgICAgIDogdGhpcy5udW1iZXJWYWx1ZTtcclxuICB9XHJcblxyXG4gIHBvcnRhbEF0dGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQb3J0YWwoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kZXRhY2goKTtcclxuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGFydEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVuZEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UG9ydGFsKCRldmVudDogRXZlbnQsIHR5cGU/OiAnc3RhcnQnIHwgJ2VuZCcpIHtcclxuICAgIHR5cGUgJiYgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5hbmltYXRpbmcpIHJldHVybjtcclxuICAgIHRoaXMuc3RhcnRBY3RpdmUgPSB0eXBlID09PSAnc3RhcnQnO1xyXG4gICAgdGhpcy5lbmRBY3RpdmUgPSB0eXBlID09PSAnZW5kJztcclxuICAgIHRoaXMuYWN0aXZlVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmFjdGl2ZVR5cGUgJiYgdGhpcy5pbnB1dEFjdGl2ZUNoYW5nZS5uZXh0KHRoaXMuYWN0aXZlVHlwZSk7XHJcbiAgICBpZiAodGhpcy5hY3RpdmUpIHJldHVybjtcclxuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGNvbmZpZzogT3ZlcmxheUNvbmZpZyA9IHtcclxuICAgICAgYmFja2Ryb3BDbGFzczogJycsXHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuc2V0UGxhY2VtZW50KCksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcclxuICAgIH07XHJcbiAgICB0aGlzLnNldFBvc2l0aW9uKGNvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsU2VydmljZS5hdHRhY2goe1xyXG4gICAgICBjb250ZW50OiBYRGF0ZVJhbmdlUG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRhbC5vdmVybGF5UmVmXHJcbiAgICAgID8ub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBjbGlja1RhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoY2xpY2tUYXJnZXQgIT09IHRoaXMuaW5wdXRTdGFydENvbS5pbnB1dFJlZi5uYXRpdmVFbGVtZW50ICYmIGNsaWNrVGFyZ2V0ICE9PSB0aGlzLmlucHV0RW5kQ29tLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKS5zdWJzY3JpYmUoKHBvczogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBsYWNlID0gWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLmdldChwb3MuY29ubmVjdGlvblBhaXIpIGFzIFhDb3JuZXI7XHJcbiAgICAgIHBsYWNlICE9PSB0aGlzLnBsYWNlbWVudCAmJiB0aGlzLnBvc2l0aW9uQ2hhbmdlLm5leHQocGxhY2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbnN0YW5jZSgpIHtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSB0aGlzLnBvcnRhbD8uY29tcG9uZW50UmVmO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYpIHJldHVybjtcclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCB7XHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgdmFsdWU6IHRoaXMubnVtYmVyVmFsdWUsXHJcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXHJcbiAgICAgIHByZXNldDogdGhpcy5wcmVzZXQsXHJcbiAgICAgIHZhbHVlQ2hhbmdlOiB0aGlzLnZhbHVlQ2hhbmdlLFxyXG4gICAgICBwb3NpdGlvbkNoYW5nZTogdGhpcy5wb3NpdGlvbkNoYW5nZSxcclxuICAgICAgaW5wdXRBY3RpdmVDaGFuZ2U6IHRoaXMuaW5wdXRBY3RpdmVDaGFuZ2UsXHJcbiAgICAgIGFjdGl2ZVR5cGU6IHRoaXMuYWN0aXZlVHlwZSxcclxuICAgICAgY2xvc2VQb3J0YWw6ICgpID0+IHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKSxcclxuICAgICAgZGVzdHJveVBvcnRhbDogKCkgPT4gdGhpcy5kZXN0cm95UG9ydGFsKCksXHJcbiAgICAgIG5vZGVFbWl0OiAoZGF0ZXM6IERhdGVbXSwgc3VyZSA9IHRydWUpID0+IHRoaXMub25Ob2RlQ2xpY2soZGF0ZXMsIHN1cmUpLFxyXG4gICAgICBzdGFydE5vZGVFbWl0OiAobm9kZTogRGF0ZSkgPT4gdGhpcy5zdGFydE5vZGVDbGljayhub2RlKSxcclxuICAgICAgZW5kTm9kZUVtaXQ6IChub2RlOiBEYXRlKSA9PiB0aGlzLmVuZE5vZGVDbGljayhub2RlKSxcclxuICAgICAgYW5pbWF0aW5nOiAoaW5nOiBib29sZWFuKSA9PiAodGhpcy5hbmltYXRpbmcgPSBpbmcpXHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydE5vZGVDbGljayhub2RlOiBEYXRlKSB7XHJcbiAgICB0aGlzLnN0YXJ0RGlzcGxheSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5vZGUsIHRoaXMuZm9ybWF0KSBhcyBzdHJpbmc7XHJcbiAgICB0aGlzLnN0YXJ0QWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmVuZEFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmlucHV0RW5kQ29tLmlucHV0Rm9jdXMoJ2FmdGVyJyk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBlbmROb2RlQ2xpY2sobm9kZTogRGF0ZSkge1xyXG4gICAgdGhpcy5lbmREaXNwbGF5ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obm9kZSwgdGhpcy5mb3JtYXQpIGFzIHN0cmluZztcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uTm9kZUNsaWNrKGRhdGVzOiBEYXRlW10sIHN1cmUgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzSW5wdXQgPSBmYWxzZTtcclxuICAgIGlmIChzdXJlKSB7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSBkYXRlcy5tYXAoKHgpID0+IHguZ2V0VGltZSgpKTtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZSgpO1xyXG4gICAgICB0aGlzLm5vZGVFbWl0LmVtaXQodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldERpc3BsYXlWYWx1ZShkYXRlcy5tYXAoKHgpID0+IHguZ2V0VGltZSgpKSk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dCgpIHtcclxuICAgIHRoaXMuaXNJbnB1dCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXREaXNwbGF5VmFsdWUoZGF0ZU51bWJlcjogbnVtYmVyW10pIHtcclxuICAgIC8vIGlmICh0aGlzLmlzSW5wdXQgJiYgaXNOYU4odGhpcy5zdGFydERpc3BsYXkpICYmICFpc05hTihEYXRlLnBhcnNlKHRoaXMuZGlzcGxheVZhbHVlKSkpIHtcclxuICAgIC8vICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRpc3BsYXlWYWx1ZSwgdGhpcy5mb3JtYXQpO1xyXG4gICAgLy8gICB0aGlzLm51bWJlclZhbHVlID0gbmV3IERhdGUodGhpcy5kaXNwbGF5VmFsdWUpLmdldFRpbWUoKTtcclxuICAgIC8vICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbENoYW5nZSgpO1xyXG4gICAgLy8gICB0aGlzLmlzSW5wdXQgPSBmYWxzZTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICBpZiAoIWRhdGVOdW1iZXIpIHJldHVybjtcclxuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gZGF0ZU51bWJlci5tYXAoKHgpID0+IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgsIHRoaXMuZm9ybWF0KSkgYXMgc3RyaW5nW107XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBzZXRQbGFjZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlbWVudCh7XHJcbiAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaW5wdXRHcm91cC5lbGVtZW50UmVmLFxyXG4gICAgICBwbGFjZW1lbnQ6IFt0aGlzLnBsYWNlbWVudCBhcyBYQ29ybmVyLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbS1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcC1lbmQnXSxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luT246ICd4LWRhdGUtcmFuZ2UtcG9ydGFsJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3J0YWwoKSB7XHJcbiAgICB0aGlzLnBvcnRhbEF0dGFjaGVkKCkgJiYgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5zZXRQbGFjZW1lbnQoKSk7XHJcbiAgfVxyXG5cclxuICBzZXRDbGFzc01hcCgpIHtcclxuICAgIFhDbGVhckNsYXNzKHRoaXMubGFiZWxNYXApO1xyXG4gICAgdGhpcy5sYWJlbE1hcFtgeC10ZXh0LWFsaWduLSR7dGhpcy5sYWJlbEFsaWdufWBdID0gdGhpcy5sYWJlbEFsaWduID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9ybUNvbnRyb2xDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNkYXRlUmFuZ2UgY2xhc3M9XCJ4LWRhdGUtcmFuZ2VcIiBbY2xhc3MueC1kYXRlLXJhbmdlLWFjdGl2ZV09XCJhY3RpdmVcIj5cclxuICA8ZGl2IGNsYXNzPVwieC1kYXRlLXJhbmdlLXJvd1wiPlxyXG4gICAgPHgtaW5wdXQtZ3JvdXAgI2lucHV0R3JvdXAgY2xhc3M9XCJ4LWRhdGUtcmFuZ2UtZ3JvdXBcIiBib3JkZXJlZD1cImZhbHNlXCIgKGNsaWNrKT1cInNob3dQb3J0YWwoJGV2ZW50KVwiPlxyXG4gICAgICA8eC1pbnB1dFxyXG4gICAgICAgICNpbnB1dFN0YXJ0Q29tXHJcbiAgICAgICAgW2NsYXNzLngtaW5wdXQtYWN0aXZlXT1cInN0YXJ0QWN0aXZlXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLlvIDlp4vml6XmnJ9cIlxyXG4gICAgICAgIChjbGljayk9XCJzaG93UG9ydGFsKCRldmVudCwgJ3N0YXJ0JylcIlxyXG4gICAgICAgICh4Rm9jdXMpPVwic3RhcnRBY3RpdmUgPSB0cnVlXCJcclxuICAgICAgICAoeEJsdXIpPVwic3RhcnRBY3RpdmUgPSBmYWxzZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzdGFydERpc3BsYXlcIlxyXG4gICAgICA+PC94LWlucHV0PlxyXG4gICAgICA8eC1pY29uIHR5cGU9XCJmdG8tYXJyb3ctcmlnaHRcIj48L3gtaWNvbj5cclxuICAgICAgPHgtaW5wdXRcclxuICAgICAgICAjaW5wdXRFbmRDb21cclxuICAgICAgICBbY2xhc3MueC1pbnB1dC1hY3RpdmVdPVwiZW5kQWN0aXZlXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLnu5PmnZ/ml6XmnJ9cIlxyXG4gICAgICAgIChjbGljayk9XCJzaG93UG9ydGFsKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICAoeEZvY3VzKT1cImVuZEFjdGl2ZSA9IHRydWVcIlxyXG4gICAgICAgICh4Qmx1cik9XCJlbmRBY3RpdmUgPSBmYWxzZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJlbmREaXNwbGF5XCJcclxuICAgICAgPjwveC1pbnB1dD5cclxuICAgICAgPHgtaWNvbiBbdHlwZV09XCJpY29uXCI+PC94LWljb24+XHJcbiAgICA8L3gtaW5wdXQtZ3JvdXA+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kYXRlLXBpY2tlci9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBTXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUNMLFFBQVEsRUFDUixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUVULFlBQVksRUFDWixPQUFPLEVBQ1IsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7O0FBVTFFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUF3RHpELFlBQ1MsUUFBbUIsRUFDbkIsYUFBNkIsRUFDcEIsR0FBc0IsRUFDOUIsYUFBNkIsRUFDN0IsZ0JBQWtDLEVBQ2xDLFFBQWtCLEVBQ2xCLE9BQWdCO1FBRXhCLEtBQUssRUFBRSxDQUFDO1FB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V0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxVQUFVO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ssYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNBLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFhQb3J0YWxTZXJ2aWNlLCBYUG9ydGFsT3ZlcmxheVJlZiwgWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uIH0gZnJvbSAnQG5nLW5lc3QvdWkvcG9ydGFsJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWERhdGVQaWNrZXJNb2RlbFR5cGUsIFhEYXRlUmFuZ2VQcmVmaXgsIFhEYXRlUmFuZ2VQcm9wZXJ0eSB9IGZyb20gJy4vZGF0ZS1waWNrZXIucHJvcGVydHknO1xyXG5pbXBvcnQge1xyXG4gIFhJc0VtcHR5LFxyXG4gIFhJc0RhdGUsXHJcbiAgWElzTnVtYmVyLFxyXG4gIFhJc0NoYW5nZSxcclxuICBYQ29ybmVyLFxyXG4gIFhDbGVhckNsYXNzLFxyXG4gIFhJc1N0cmluZyxcclxuICBYQ29uZmlnU2VydmljZSxcclxuICBYSXNVbmRlZmluZWQsXHJcbiAgWElzTnVsbFxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQsIFhJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSwgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWERhdGVSYW5nZVBvcnRhbENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1yYW5nZS1wb3J0YWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYRGF0ZVJhbmdlUHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhEYXRlUmFuZ2VDb21wb25lbnQpLCBEYXRlUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFhEYXRlUmFuZ2VDb21wb25lbnQgZXh0ZW5kcyBYRGF0ZVJhbmdlUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlJywgeyBzdGF0aWM6IHRydWUgfSkgZGF0ZVJhbmdlITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXAhOiBYSW5wdXRHcm91cENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbnB1dFN0YXJ0Q29tJywgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXRTdGFydENvbSE6IFhJbnB1dENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbnB1dEVuZENvbScsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0RW5kQ29tITogWElucHV0Q29tcG9uZW50O1xyXG5cclxuICBtb2RlbFR5cGU6IFhEYXRlUGlja2VyTW9kZWxUeXBlID0gJ2RhdGUnO1xyXG4gIG51bWJlclZhbHVlITogKG51bWJlciB8IG51bGwpW107XHJcbiAgaXNJbnB1dCA9IGZhbHNlO1xyXG4gIHNob3dDbGVhcmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGdldFJlcXVpcmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWQgJiYgWElzRW1wdHkodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodmFsdWUpIHx8IFhJc051bGwodmFsdWUpKSB2YWx1ZSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKFhJc0RhdGUodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9IHZhbHVlLm1hcCgoeDogRGF0ZSkgPT4geC5nZXRUaW1lKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKFhJc051bWJlcih2YWx1ZVswXSkpIHtcclxuICAgICAgICB0aGlzLm1vZGVsVHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfSBlbHNlIGlmIChYSXNTdHJpbmcodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICBjb25zdCB2YWx1ZVRpbWUgPSB2YWx1ZS5tYXAoKHg6IHN0cmluZykgPT4gbmV3IERhdGUoeCkuZ2V0VGltZSgpKTtcclxuICAgICAgICB0aGlzLm51bWJlclZhbHVlID0gIWlzTmFOKHZhbHVlVGltZVswXSkgPyB2YWx1ZVRpbWUgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBlbnRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlucHV0Q2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgZGlzcGxheVZhbHVlOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQ+O1xyXG4gIGljb246IHN0cmluZyA9ICdmdG8tY2FsZW5kYXInO1xyXG4gIGJveCE6IERPTVJlY3Q7XHJcbiAgcHJvdGFsSGVpZ2h0ITogbnVtYmVyO1xyXG4gIG1heE5vZGVzOiBudW1iZXIgPSA2O1xyXG4gIHByb3RhbFRvYm90dG9tOiBib29sZWFuID0gdHJ1ZTtcclxuICB2YWx1ZUNoYW5nZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBkYXRhQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHBvc2l0aW9uQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNsb3NlU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgYWN0aXZlVHlwZUNoYW5nZSA9IG5ldyBTdWJqZWN0PCdzdGFydCcgfCAnZW5kJz4oKTtcclxuICBzdGFydERpc3BsYXk6IHN0cmluZyB8IG51bWJlciA9ICcnO1xyXG4gIGVuZERpc3BsYXk6IHN0cmluZyB8IG51bWJlciA9ICcnO1xyXG4gIGFjdGl2ZVR5cGU/OiAnc3RhcnQnIHwgJ2VuZCc7XHJcbiAgcHJpdmF0ZSBfdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBYQ29uZmlnU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBwb3J0YWxTZXJ2aWNlOiBYUG9ydGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldEZsZXgodGhpcy5kYXRlUmFuZ2UubmF0aXZlRWxlbWVudCwgdGhpcy5yZW5kZXJlciwgdGhpcy5qdXN0aWZ5LCB0aGlzLmFsaWduLCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB0aGlzLnNldEZvcm1hdCgpO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gICAgdGhpcy5zZXRTdWJqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldFBvcnRhbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgeyB0eXBlIH0gPSBjaGFuZ2VzO1xyXG4gICAgaWYgKFhJc0NoYW5nZSh0eXBlKSkge1xyXG4gICAgICB0aGlzLnNldEZvcm1hdCgpO1xyXG4gICAgICB0aGlzLnNldERpc3BsYXlWYWx1ZSh0aGlzLm51bWJlclZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMuX3VuU3ViamVjdC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ViamVjdCgpIHtcclxuICAgIHRoaXMuY2xvc2VTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3J0YWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybWF0ICE9PSAneXl5eS1NTS1kZCcpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5LU1NLWRkJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAneWVhcicpIHtcclxuICAgICAgdGhpcy5mb3JtYXQgPSAneXl5eSc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5LU1NJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0ZS10aW1lJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5LU1NLWRkIEhIOm1tOnNzJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0ZS1ob3VyJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5LU1NLWRkIEhIJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0ZS1taW51dGUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW0nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVudGVyKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuY2xlYXJhYmxlKSByZXR1cm47XHJcbiAgICB0aGlzLmVudGVyID0gdHJ1ZTtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy5udW1iZXJWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5pY29uID0gJyc7XHJcbiAgICAgIHRoaXMuc2hvd0NsZWFyYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1sZWF2ZSgpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmNsZWFyYWJsZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRlciA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY2xlYXJhYmxlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmdG8tY2FsZW5kYXInO1xyXG4gICAgICB0aGlzLnNob3dDbGVhcmFibGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJFbWl0KCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgdGhpcy5udW1iZXJWYWx1ZSA9IFtdO1xyXG4gICAgdGhpcy5zdGFydERpc3BsYXkgPSAnJztcclxuICAgIHRoaXMuZW5kRGlzcGxheSA9ICcnO1xyXG4gICAgdGhpcy5tbGVhdmUoKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLm51bWJlclZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICAgIHRoaXMuaW5wdXRTdGFydENvbS5pbnB1dEZvY3VzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkljb25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmljb24gPT09ICdmdG8teCcpIHtcclxuICAgICAgdGhpcy5jbGVhckVtaXQoKTtcclxuICAgIH1cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgbW9kZWxDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsVHlwZSA9PT0gJ2RhdGUnXHJcbiAgICAgID8gdGhpcy5udW1iZXJWYWx1ZS5tYXAoKHgpID0+IG5ldyBEYXRlKHghKSlcclxuICAgICAgOiB0aGlzLm1vZGVsVHlwZSA9PT0gJ3N0cmluZydcclxuICAgICAgPyB0aGlzLm51bWJlclZhbHVlLm1hcCgoeCkgPT4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeCwgdGhpcy5mb3JtYXQpKVxyXG4gICAgICA6IHRoaXMubnVtYmVyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXROdW1iZXJWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsVHlwZSA9PT0gJ2RhdGUnXHJcbiAgICAgID8gdGhpcy52YWx1ZS5tYXAoKHg6IERhdGUpID0+IHguZ2V0VGltZSgpKVxyXG4gICAgICA6IHRoaXMubW9kZWxUeXBlID09PSAnc3RyaW5nJ1xyXG4gICAgICA/IHRoaXMudmFsdWUubWFwKCh4OiBzdHJpbmcpID0+IG5ldyBEYXRlKHgpLmdldFRpbWUoKSlcclxuICAgICAgOiB0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMubnVtYmVyVmFsdWUgfHwgdGhpcy5udW1iZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgdGhpcy5udW1iZXJWYWx1ZS5pbmNsdWRlcyhudWxsKSkge1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydERpc3BsYXkgPSAnJztcclxuICAgICAgICAgIHRoaXMuZW5kRGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm51bWJlclZhbHVlID0gdGhpcy5nZXROdW1iZXJWYWx1ZSgpO1xyXG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHNob3dQb3J0YWwoJGV2ZW50OiBFdmVudCwgdHlwZT86ICdzdGFydCcgfCAnZW5kJykge1xyXG4gICAgdHlwZSAmJiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmFuaW1hdGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5hY3RpdmVUeXBlID0gdHlwZSB8fCAnc3RhcnQnO1xyXG4gICAgdGhpcy5hY3RpdmVUeXBlQ2hhbmdlLm5leHQodGhpcy5hY3RpdmVUeXBlKTtcclxuICAgIGlmICh0aGlzLmFjdGl2ZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQsXHJcbiAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcclxuICAgICAgb3ZlcmxheUNvbmZpZzogY29uZmlnXHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGFsLm92ZXJsYXlSZWZcclxuICAgICAgPy5vdXRzaWRlUG9pbnRlckV2ZW50cygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChjbGlja1RhcmdldCAhPT0gdGhpcy5pbnB1dFN0YXJ0Q29tLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQgJiYgY2xpY2tUYXJnZXQgIT09IHRoaXMuaW5wdXRFbmRDb20uaW5wdXRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKS5zdWJzY3JpYmUoKHBvczogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBsYWNlID0gWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLmdldChwb3MuY29ubmVjdGlvblBhaXIpIGFzIFhDb3JuZXI7XHJcbiAgICAgIHBsYWNlICE9PSB0aGlzLnBsYWNlbWVudCAmJiB0aGlzLnBvc2l0aW9uQ2hhbmdlLm5leHQocGxhY2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbnN0YW5jZSgpIHtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSB0aGlzLnBvcnRhbD8uY29tcG9uZW50UmVmO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYpIHJldHVybjtcclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCB7XHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgdmFsdWU6IHRoaXMubnVtYmVyVmFsdWUsXHJcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXHJcbiAgICAgIHByZXNldDogdGhpcy5wcmVzZXQsXHJcbiAgICAgIHZhbHVlQ2hhbmdlOiB0aGlzLnZhbHVlQ2hhbmdlLFxyXG4gICAgICBwb3NpdGlvbkNoYW5nZTogdGhpcy5wb3NpdGlvbkNoYW5nZSxcclxuICAgICAgYWN0aXZlVHlwZTogdGhpcy5hY3RpdmVUeXBlLFxyXG4gICAgICBhY3RpdmVUeXBlQ2hhbmdlOiB0aGlzLmFjdGl2ZVR5cGVDaGFuZ2UsXHJcbiAgICAgIGNsb3NlUG9ydGFsOiAoKSA9PiB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCksXHJcbiAgICAgIGRlc3Ryb3lQb3J0YWw6ICgpID0+IHRoaXMuZGVzdHJveVBvcnRhbCgpLFxyXG4gICAgICBub2RlRW1pdDogKGRhdGVzOiBEYXRlW10sIGNsb3NlID0gdHJ1ZSkgPT4gdGhpcy5vbk5vZGVDbGljayhkYXRlcywgY2xvc2UpLFxyXG4gICAgICBzdGFydE5vZGVFbWl0OiAobm9kZTogRGF0ZSwgY2xvc2UgPSBmYWxzZSkgPT4gdGhpcy5zdGFydE5vZGVDbGljayhub2RlLCBjbG9zZSksXHJcbiAgICAgIGVuZE5vZGVFbWl0OiAobm9kZTogRGF0ZSwgY2xvc2UgPSBmYWxzZSkgPT4gdGhpcy5lbmROb2RlQ2xpY2sobm9kZSwgY2xvc2UpLFxyXG4gICAgICBhbmltYXRpbmc6IChpbmc6IGJvb2xlYW4pID0+ICh0aGlzLmFuaW1hdGluZyA9IGluZylcclxuICAgIH0pO1xyXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0Tm9kZUNsaWNrKG5vZGU/OiBEYXRlLCBjbG9zZSA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnN0YXJ0RGlzcGxheSA9ICFub2RlID8gJycgOiAodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obm9kZSwgdGhpcy5mb3JtYXQpIGFzIHN0cmluZyk7XHJcbiAgICBpZiAoIWNsb3NlKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRFbmRDb20uaW5wdXRGb2N1cygnYWZ0ZXInKTtcclxuICAgICAgdGhpcy5hY3RpdmVUeXBlQ2hhbmdlLm5leHQoJ2VuZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZW5kTm9kZUNsaWNrKG5vZGU/OiBEYXRlLCBjbG9zZSA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmVuZERpc3BsYXkgPSAhbm9kZSA/ICcnIDogKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5vZGUsIHRoaXMuZm9ybWF0KSBhcyBzdHJpbmcpO1xyXG4gICAgaWYgKCFjbG9zZSkge1xyXG4gICAgICB0aGlzLmlucHV0U3RhcnRDb20uaW5wdXRGb2N1cygnYWZ0ZXInKTtcclxuICAgICAgdGhpcy5hY3RpdmVUeXBlQ2hhbmdlLm5leHQoJ3N0YXJ0Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbk5vZGVDbGljayhkYXRlczogRGF0ZVtdLCBjbG9zZSA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNJbnB1dCA9IGZhbHNlO1xyXG4gICAgdGhpcy5udW1iZXJWYWx1ZSA9IGRhdGVzLm1hcCgoeCkgPT4geC5nZXRUaW1lKCkpO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXQoKSB7XHJcbiAgICB0aGlzLmlzSW5wdXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyh0eXBlOiAnc3RhcnQnIHwgJ2VuZCcpIHtcclxuICAgIHRoaXMuYWN0aXZlVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZS5uZXh0KHRoaXMuYWN0aXZlVHlwZSk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNwbGF5VmFsdWUoZGF0ZU51bWJlcjogKG51bWJlciB8IG51bGwpW10pIHtcclxuICAgIGlmICghZGF0ZU51bWJlcikgcmV0dXJuO1xyXG4gICAgaWYgKCFYSXNOdWxsKGRhdGVOdW1iZXJbMF0pKSB7XHJcbiAgICAgIHRoaXMuc3RhcnREaXNwbGF5ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZU51bWJlclswXSwgdGhpcy5mb3JtYXQpIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIGlmICghWElzTnVsbChkYXRlTnVtYmVyWzFdKSkge1xyXG4gICAgICB0aGlzLmVuZERpc3BsYXkgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlTnVtYmVyWzFdLCB0aGlzLmZvcm1hdCkgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0UGxhY2VtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsU2VydmljZS5zZXRQbGFjZW1lbnQoe1xyXG4gICAgICBlbGVtZW50UmVmOiB0aGlzLmlucHV0R3JvdXAuZWxlbWVudFJlZixcclxuICAgICAgcGxhY2VtZW50OiBbdGhpcy5wbGFjZW1lbnQgYXMgWENvcm5lciwgJ2JvdHRvbS1zdGFydCcsICdib3R0b20tZW5kJywgJ3RvcC1zdGFydCcsICd0b3AtZW5kJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC1kYXRlLXJhbmdlLXBvcnRhbCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWxBdHRhY2hlZCgpICYmIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuc2V0UGxhY2VtZW50KCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2xhc3NNYXAoKSB7XHJcbiAgICBYQ2xlYXJDbGFzcyh0aGlzLmxhYmVsTWFwKTtcclxuICAgIHRoaXMubGFiZWxNYXBbYHgtdGV4dC1hbGlnbi0ke3RoaXMubGFiZWxBbGlnbn1gXSA9IHRoaXMubGFiZWxBbGlnbiA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZvcm1Db250cm9sQ2hhbmdlcygpIHtcclxuICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNkYXRlUmFuZ2VcclxuICBjbGFzcz1cIngtZGF0ZS1yYW5nZVwiXHJcbiAgW2NsYXNzLngtZGF0ZS1yYW5nZS1hY3RpdmVdPVwiYWN0aXZlXCJcclxuICBbY2xhc3MueC1kYXRlLXJhbmdlLWFjdGl2ZS1zdGFydF09XCJhY3RpdmVUeXBlID09PSAnc3RhcnQnXCJcclxuICBbY2xhc3MueC1kYXRlLXJhbmdlLWFjdGl2ZS1lbmRdPVwiYWN0aXZlVHlwZSA9PT0gJ2VuZCdcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cIngtZGF0ZS1yYW5nZS1yb3dcIj5cclxuICAgIDx4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIGNsYXNzPVwieC1kYXRlLXJhbmdlLWdyb3VwXCIgKG1vdXNlZW50ZXIpPVwibWVudGVyKClcIiAobW91c2VsZWF2ZSk9XCJtbGVhdmUoKVwiIChjbGljayk9XCJzaG93UG9ydGFsKCRldmVudClcIj5cclxuICAgICAgPHgtaW5wdXRcclxuICAgICAgICAjaW5wdXRTdGFydENvbVxyXG4gICAgICAgIGNsYXNzPVwieC1kYXRhLXJhbmdlLWlucHV0LXN0YXJ0XCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgYm9yZGVyZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLlvIDlp4vml6XmnJ9cIlxyXG4gICAgICAgICh4Rm9jdXMpPVwib25Gb2N1cygnc3RhcnQnKVwiXHJcbiAgICAgICAgKHhDbGljayk9XCJzaG93UG9ydGFsKCRldmVudCwgJ3N0YXJ0JylcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic3RhcnREaXNwbGF5XCJcclxuICAgICAgPjwveC1pbnB1dD5cclxuICAgICAgPHgtaWNvbiBjbGFzcz1cIngtZGF0ZS1yYW5nZS1pY29uXCIgdHlwZT1cImZ0by1hcnJvdy1yaWdodFwiPjwveC1pY29uPlxyXG4gICAgICA8eC1pbnB1dFxyXG4gICAgICAgICNpbnB1dEVuZENvbVxyXG4gICAgICAgIGNsYXNzPVwieC1kYXRhLXJhbmdlLWlucHV0LWVuZFwiXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGJvcmRlcmVkPVwiZmFsc2VcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwi57uT5p2f5pel5pyfXCJcclxuICAgICAgICAoeEZvY3VzKT1cIm9uRm9jdXMoJ2VuZCcpXCJcclxuICAgICAgICAoeENsaWNrKT1cInNob3dQb3J0YWwoJGV2ZW50LCAnZW5kJylcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZW5kRGlzcGxheVwiXHJcbiAgICAgICAgW2ljb25dPVwiaWNvblwiXHJcbiAgICAgICAgKGNsZWFyRW1pdCk9XCJjbGVhckVtaXQoKVwiXHJcbiAgICAgICAgW2NsZWFyYWJsZV09XCJzaG93Q2xlYXJhYmxlXCJcclxuICAgICAgPjwveC1pbnB1dD5cclxuICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVwiIGNsYXNzPVwieC1kYXRlLXJhbmdlLWFjdGl2ZS1iYXJcIj48L2Rpdj5cclxuICAgIDwveC1pbnB1dC1ncm91cD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==