@fundamental-ngx/core 0.44.0-rc.2 → 0.44.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/avatar/avatar.component.d.ts +0 -1
  2. package/bar/directives/bar-element.directive.d.ts +6 -3
  3. package/breadcrumb/breadcrumb.component.d.ts +4 -4
  4. package/carousel/carousel.component.d.ts +8 -2
  5. package/content-density/providers/content-density-observer-providers.d.ts +1 -1
  6. package/content-density/services/content-density-observer.service.d.ts +3 -3
  7. package/date-picker/date-picker.component.d.ts +30 -9
  8. package/datetime-picker/datetime-picker.component.d.ts +28 -10
  9. package/dialog/dialog-container/dialog-container.component.d.ts +4 -4
  10. package/dialog/dialog-footer-button/dialog-footer-button.component.d.ts +2 -0
  11. package/dialog/directives/dialog-decisive-button.directive.d.ts +2 -0
  12. package/dialog/utils/dialog-config.class.d.ts +1 -1
  13. package/esm2022/action-bar/action-bar.component.mjs +10 -3
  14. package/esm2022/alert/alert-service/alert.service.mjs +12 -3
  15. package/esm2022/alert/alert-utils/alert-config.mjs +11 -3
  16. package/esm2022/alert/alert-utils/alert-container.component.mjs +11 -3
  17. package/esm2022/alert/alert-utils/alert-ref.mjs +11 -3
  18. package/esm2022/alert/alert.component.mjs +17 -3
  19. package/esm2022/alert/alert.module.mjs +11 -3
  20. package/esm2022/avatar/avatar.component.mjs +2 -2
  21. package/esm2022/bar/directives/bar-element.directive.mjs +15 -7
  22. package/esm2022/breadcrumb/breadcrumb.component.mjs +9 -11
  23. package/esm2022/carousel/carousel.component.mjs +34 -5
  24. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  25. package/esm2022/content-density/providers/content-density-observer-providers.mjs +4 -4
  26. package/esm2022/content-density/services/content-density-observer.service.mjs +13 -13
  27. package/esm2022/date-picker/date-picker.component.mjs +103 -10
  28. package/esm2022/datetime-picker/datetime-picker.component.mjs +78 -8
  29. package/esm2022/dialog/dialog-container/dialog-container.component.mjs +12 -13
  30. package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +8 -3
  31. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +1 -1
  32. package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +6 -2
  33. package/esm2022/dialog/utils/dialog-config.class.mjs +1 -1
  34. package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +23 -1
  35. package/esm2022/form/form-label/form-label.component.mjs +21 -5
  36. package/esm2022/list/list-item/list-item.component.mjs +36 -1
  37. package/esm2022/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  38. package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +6 -2
  39. package/esm2022/message-box/message-box-container/message-box-container.component.mjs +12 -15
  40. package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +8 -3
  41. package/esm2022/message-box/message-box-header/message-box-header.component.mjs +1 -1
  42. package/esm2022/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +8 -9
  43. package/esm2022/message-strip/auto-dismiss-message-strip.directive.mjs +10 -9
  44. package/esm2022/message-strip/message-strip.component.mjs +12 -1
  45. package/esm2022/multi-combobox/base-multi-combobox.class.mjs +17 -14
  46. package/esm2022/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  47. package/esm2022/multi-combobox/multi-combobox.component.mjs +44 -45
  48. package/esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.mjs +8 -10
  49. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  50. package/esm2022/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +9 -11
  51. package/esm2022/pagination/pagination.component.mjs +140 -2
  52. package/esm2022/popover/base/base-popover.class.mjs +25 -1
  53. package/esm2022/popover/popover.component.mjs +28 -17
  54. package/esm2022/product-switch/product-switch/product-switch.component.mjs +11 -1
  55. package/esm2022/quick-view/quick-view-title/quick-view-title.component.mjs +1 -1
  56. package/esm2022/segmented-button/segmented-button.component.mjs +19 -21
  57. package/esm2022/select/select.component.mjs +17 -10
  58. package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +12 -1
  59. package/esm2022/shellbar/shellbar.component.mjs +12 -11
  60. package/esm2022/side-navigation/side-navigation.component.mjs +12 -3
  61. package/esm2022/slider/slider.component.mjs +83 -13
  62. package/esm2022/split-button/split-button.component.mjs +34 -16
  63. package/esm2022/splitter/splitter-pagination/splitter-pagination.component.mjs +9 -2
  64. package/esm2022/splitter/splitter.component.mjs +16 -5
  65. package/esm2022/step-input/step-input.component.mjs +46 -24
  66. package/esm2022/switch/switch.component.mjs +25 -3
  67. package/esm2022/table/directives/table-cell.directive.mjs +5 -7
  68. package/esm2022/table/directives/table-row.directive.mjs +17 -20
  69. package/esm2022/table/table.component.mjs +10 -9
  70. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +11 -1
  71. package/esm2022/tabs/tab-list.component.mjs +40 -31
  72. package/esm2022/text/text.component.mjs +23 -1
  73. package/esm2022/time/i18n/time-i18n.mjs +2 -2
  74. package/esm2022/token/token.component.mjs +36 -14
  75. package/esm2022/toolbar/toolbar.component.mjs +33 -26
  76. package/esm2022/tree/components/tree-item/tree-item.component.mjs +21 -21
  77. package/esm2022/tree/tree.component.mjs +23 -22
  78. package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +67 -1
  79. package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +12 -1
  80. package/feed-list-item/components/item/feed-list-item.component.d.ts +8 -2
  81. package/fesm2022/fundamental-ngx-core-action-bar.mjs +9 -2
  82. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-alert.mjs +58 -13
  84. package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  86. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -6
  88. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +9 -10
  90. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-carousel.mjs +32 -3
  92. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  94. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-content-density.mjs +15 -14
  96. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-date-picker.mjs +102 -9
  98. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +77 -7
  100. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-dialog.mjs +23 -13
  102. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -0
  104. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-form.mjs +20 -4
  106. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-list.mjs +35 -0
  108. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-menu.mjs +1 -1
  110. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-message-box.mjs +24 -15
  112. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-message-strip.mjs +27 -14
  114. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +63 -64
  116. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  118. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +9 -10
  120. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-pagination.mjs +139 -1
  122. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-popover.mjs +51 -16
  124. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-product-switch.mjs +10 -0
  126. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +1 -1
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +17 -19
  130. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-select.mjs +16 -9
  132. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-shellbar.mjs +22 -10
  134. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +11 -2
  136. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-slider.mjs +82 -12
  138. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-split-button.mjs +32 -13
  140. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-splitter.mjs +23 -5
  142. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-step-input.mjs +45 -23
  144. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-switch.mjs +24 -2
  146. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-table.mjs +26 -30
  148. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-tabs.mjs +51 -31
  150. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-text.mjs +22 -0
  152. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-time.mjs +1 -1
  154. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-token.mjs +36 -13
  156. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-toolbar.mjs +31 -24
  158. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-tree.mjs +38 -38
  160. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +77 -0
  162. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  163. package/form/form-label/form-label.component.d.ts +8 -2
  164. package/fundamental-ngx-core-v0.44.0-rc.4.tgz +0 -0
  165. package/list/list-item/list-item.component.d.ts +16 -4
  166. package/message-box/directives/message-box-decisive-button.directive.d.ts +2 -0
  167. package/message-box/message-box-container/message-box-container.component.d.ts +4 -6
  168. package/message-box/message-box-footer-button/message-box-footer-button.component.d.ts +2 -0
  169. package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +1 -1
  170. package/message-strip/auto-dismiss-message-strip.directive.d.ts +3 -3
  171. package/message-strip/message-strip.component.d.ts +4 -1
  172. package/multi-combobox/base-multi-combobox.class.d.ts +30 -30
  173. package/multi-combobox/multi-combobox.component.d.ts +17 -18
  174. package/multi-combobox/select-all-toggler/select-all-toggler.component.d.ts +1 -1
  175. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +5 -6
  176. package/package.json +3 -3
  177. package/pagination/pagination.component.d.ts +44 -11
  178. package/popover/base/base-popover.class.d.ts +12 -3
  179. package/popover/popover.component.d.ts +8 -5
  180. package/product-switch/product-switch/product-switch.component.d.ts +4 -1
  181. package/schematics/add-dependencies/index.js +4 -4
  182. package/segmented-button/segmented-button.component.d.ts +6 -7
  183. package/select/select.component.d.ts +9 -6
  184. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +6 -3
  185. package/shellbar/shellbar.component.d.ts +1 -1
  186. package/slider/slider.component.d.ts +13 -4
  187. package/split-button/split-button.component.d.ts +11 -6
  188. package/splitter/splitter.component.d.ts +5 -2
  189. package/step-input/step-input.component.d.ts +12 -6
  190. package/switch/switch.component.d.ts +10 -4
  191. package/table/directives/table-row.directive.d.ts +2 -4
  192. package/table/table.component.d.ts +3 -4
  193. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +4 -1
  194. package/tabs/tab-list.component.d.ts +10 -8
  195. package/text/text.component.d.ts +8 -2
  196. package/time/i18n/time-i18n.d.ts +2 -2
  197. package/token/token.component.d.ts +13 -7
  198. package/toolbar/toolbar.component.d.ts +10 -7
  199. package/tree/components/tree-item/tree-item.component.d.ts +28 -28
  200. package/tree/tree.component.d.ts +7 -7
  201. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  202. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +6 -3
  203. package/fundamental-ngx-core-v0.44.0-rc.2.tgz +0 -0
@@ -77,6 +77,45 @@ export class SliderComponent {
77
77
  get tickmarksBetweenLabels() {
78
78
  return this._tickmarksBetweenLabels;
79
79
  }
80
+ /**
81
+ * slider current value verbose string.
82
+ * This will be read only once by screen reader and upon slider value change,
83
+ * this string will not be read.
84
+ * @deprecated no longer used, use i18n capabilities instead
85
+ */
86
+ set singleSliderCurrentValuePrefix(value) {
87
+ console.warn('Property singleSliderCurrentValuePrefix is deprecated. Use i18n capabilities instead.');
88
+ this._singleSliderCurrentValuePrefix = value;
89
+ }
90
+ get singleSliderCurrentValuePrefix() {
91
+ return this._singleSliderCurrentValuePrefix;
92
+ }
93
+ /**
94
+ * @hidden range slider handle 1 current value supporting string
95
+ * This will be read only once by screen reader and upon slider value change,
96
+ * this string will not be read.
97
+ * * @deprecated no longer used, use i18n capabilities instead
98
+ */
99
+ set rangeSliderHandle1CurrentValuePrefix(value) {
100
+ console.warn('Property rangeSliderHandle1CurrentValuePrefix is deprecated. Use i18n capabilities instead.');
101
+ this._rangeSliderHandle1CurrentValuePrefix = value;
102
+ }
103
+ get rangeSliderHandle1CurrentValuePrefix() {
104
+ return this._rangeSliderHandle1CurrentValuePrefix;
105
+ }
106
+ /**
107
+ * @hidden range slider handle 2 current value supporting string
108
+ * This will be read only once by screen reader and upon slider value change,
109
+ * this string will not be read.
110
+ * * @deprecated no longer used, use i18n capabilities instead
111
+ */
112
+ set rangeSliderHandle2CurrentValuePrefix(value) {
113
+ console.warn('Property rangeSliderHandle2CurrentValuePrefix is deprecated. Use i18n capabilities instead.');
114
+ this._rangeSliderHandle2CurrentValuePrefix = value;
115
+ }
116
+ get rangeSliderHandle2CurrentValuePrefix() {
117
+ return this._rangeSliderHandle2CurrentValuePrefix;
118
+ }
80
119
  /** Control value */
81
120
  set value(value) {
82
121
  this._setValue(value);
@@ -410,7 +449,10 @@ export class SliderComponent {
410
449
  this._useSliderValuePrefix = false;
411
450
  this._cdr.markForCheck();
412
451
  const stepDiffArray = this._valuesBySteps
413
- .map((stepValue) => ({ diff: Math.abs(stepValue - newValue), value: stepValue }))
452
+ .map((stepValue) => ({
453
+ diff: Math.abs(stepValue - newValue),
454
+ value: stepValue
455
+ }))
414
456
  .sort((a, b) => a.diff - b.diff);
415
457
  let value = stepDiffArray[0].value;
416
458
  if (takeCustomValue && this.customValues.length > 0) {
@@ -465,7 +507,9 @@ export class SliderComponent {
465
507
  /** @hidden */
466
508
  _constructValuesBySteps() {
467
509
  try {
468
- this._valuesBySteps = Array.from({ length: (this.max - this.min) / this.step + 1 }, (_, i) => Number((this.min + i * this.step).toFixed(2)));
510
+ this._valuesBySteps = Array.from({
511
+ length: (this.max - this.min) / this.step + 1
512
+ }, (_, i) => Number((this.min + i * this.step).toFixed(2)));
469
513
  }
470
514
  catch (e) { }
471
515
  }
@@ -490,16 +534,30 @@ export class SliderComponent {
490
534
  const tickMarksCount = total / this.step + 1;
491
535
  if (this._maxTickMarksNumber !== undefined && tickMarksCount > this._maxTickMarksNumber) {
492
536
  this._tickMarks = [
493
- { position: 0, value: 0, label: `${this.min}` },
494
- { position: 100, value: total, label: `${this.max}` }
537
+ {
538
+ position: 0,
539
+ value: 0,
540
+ label: `${this.min}`
541
+ },
542
+ {
543
+ position: 100,
544
+ value: total,
545
+ label: `${this.max}`
546
+ }
495
547
  ];
496
548
  return;
497
549
  }
498
550
  if (tickMarksCount % 1 === 0) {
499
- this._tickMarks = Array.from({ length: tickMarksCount }, (_, i) => {
551
+ this._tickMarks = Array.from({
552
+ length: tickMarksCount
553
+ }, (_, i) => {
500
554
  const value = Math.round(i * this.step * 100) / 100;
501
555
  const position = (value / (this.max - this.min)) * 100;
502
- return { value, position, label: `${this.min + value}` };
556
+ return {
557
+ value,
558
+ position,
559
+ label: `${this.min + value}`
560
+ };
503
561
  });
504
562
  }
505
563
  }
@@ -681,7 +739,9 @@ export class SliderComponent {
681
739
  registerFormItemControl(SliderComponent),
682
740
  contentDensityObserverProviders({
683
741
  defaultContentDensity: ContentDensityMode.COMPACT,
684
- modifiers: { [ContentDensityMode.COZY]: 'fd-slider--lg' }
742
+ modifiers: {
743
+ [ContentDensityMode.COZY]: 'fd-slider--lg'
744
+ }
685
745
  })
686
746
  ], viewQueries: [{ propertyName: "trackEl", first: true, predicate: ["track"], descendants: true, read: ElementRef }, { propertyName: "handle", first: true, predicate: ["handle"], descendants: true, read: ElementRef }, { propertyName: "rangeHandle1", first: true, predicate: ["rangeHandle1"], descendants: true, read: ElementRef }, { propertyName: "rangeHandle2", first: true, predicate: ["rangeHandle2"], descendants: true, read: ElementRef }, { propertyName: "_popovers", predicate: PopoverComponent, descendants: true }, { propertyName: "_sliderTooltipWrappers", predicate: ["sliderTooltipWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-slider__inner\">\n <ng-container *ngTemplateOutlet=\"_isRange ? rangeMode : singleMode\"></ng-container>\n\n <div class=\"fd-slider__track\" (click)=\"onTrackClick($event)\" #track>\n <ng-container *ngTemplateOutlet=\"_isRange ? rangeModeTrack : singleModeTrack\"></ng-container>\n </div>\n\n <div class=\"fd-slider__tick-wrapper\">\n <div class=\"fd-slider__ticks\" (click)=\"onTrackClick($event)\">\n <ng-container *ngIf=\"showTicks\">\n <ng-container *ngFor=\"let tick of _tickMarks; index as i\">\n <div\n class=\"fd-slider__tick\"\n fd-slider-position\n [position]=\"tick.position || 0\"\n [class.fd-slider__tick--in-range]=\"\n !hideProgressBar &&\n (_isRange\n ? tick.value >= _position[0] && tick.value <= _position[1]\n : tick.value <= _position)\n \"\n ></div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-slider__labels\" *ngIf=\"showTicks && showTicksLabels\">\n <ng-container *ngFor=\"let tick of _tickMarks; index as i; last as last; first as first\">\n <div\n *ngIf=\"first || last || i % tickmarksBetweenLabels === 0\"\n class=\"fd-slider__label\"\n fd-slider-position\n [position]=\"tick.position || 0\"\n >\n {{ tick.label }}\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #singleModeTrack>\n <div *ngIf=\"!hideProgressBar\" class=\"fd-slider__track-range\" [style.width.%]=\"_progress\"></div>\n</ng-template>\n\n<ng-template #rangeModeTrack>\n <div\n *ngIf=\"!hideProgressBar\"\n class=\"fd-slider__track-range\"\n [style.width.%]=\"_rangeProgress\"\n fd-slider-position\n [position]=\"_handle1Position < _handle2Position ? _handle1Position : _handle2Position\"\n ></div>\n</ng-template>\n\n<ng-template #singleMode>\n <div\n #handle\n class=\"fd-slider__handle\"\n [class.fd-slider__handle--lg]=\"_contentDensityObserver.isCozy$ | async\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n role=\"slider\"\n [attr.aria-label]=\"\n ariaLabel || 'coreSlider.singleMinMaxDetails' | fdTranslate : { min: minValue, max: maxValue }\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [fdPopoverTrigger]=\"tooltipMode ? singleSliderPopover : null\"\n [attr.aria-valuemin]=\"'coreSlider.singleValueminDetails' | fdTranslate : { value: minValue }\"\n [attr.aria-valuemax]=\"'coreSlider.singleValuemaxDetails' | fdTranslate : { value: maxValue }\"\n [attr.aria-valuenow]=\"\n _useSliderValuePrefix\n ? ('coreSlider.singleValueNowDetails'\n | fdTranslate : { value: getValuenow(_position, _sliderValueTargets.SINGLE_SLIDER) })\n : getValuenow(_position, _sliderValueTargets.SINGLE_SLIDER)\n \"\n [attr.aria-valuetext]=\"\n _useSliderValuePrefix\n ? ('coreSlider.singleValueNowDetails'\n | fdTranslate : { value: getValuenow(_position, _sliderValueTargets.SINGLE_SLIDER) })\n : getValuenow(_position, _sliderValueTargets.SINGLE_SLIDER)\n \"\n fd-slider-position\n [position]=\"_progress\"\n (mousedown)=\"onHandleClick($event); $event.stopPropagation()\"\n (focus)=\"_handleFocused$.next(true)\"\n (blur)=\"_handleFocused$.next(false)\"\n (keydown)=\"onKeyDown($event)\"\n ></div>\n\n <fd-popover\n #singleSliderPopover\n [triggers]=\"[]\"\n [closeOnOutsideClick]=\"false\"\n [appendTo]=\"handle\"\n [disabled]=\"!tooltipMode\"\n class=\"fd-popover--slider\"\n additionalBodyClass=\"fd-slider--tooltip-popover\"\n placement=\"top\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n popoverInner;\n context: { target: _sliderValueTargets.SINGLE_SLIDER, position: _position }\n \"\n ></ng-container>\n </fd-popover>\n</ng-template>\n\n<ng-template #rangeMode>\n <div\n #rangeHandle1\n class=\"fd-slider__handle\"\n [class.fd-slider__handle--lg]=\"_contentDensityObserver.isCozy$ | async\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n role=\"slider\"\n [attr.aria-label]=\"\n ariaLabel || 'coreSlider.multipleHandle1MinMaxDetails' | fdTranslate : { min: minValue, max: maxValue }\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [fdPopoverTrigger]=\"tooltipMode ? rangeSliderPopover1 : null\"\n [attr.aria-valuemin]=\"'coreSlider.multipleHandle1ValueminDetails' | fdTranslate : { value: minValue }\"\n [attr.aria-valuemax]=\"'coreSlider.multipleHandle1ValuemaxDetails' | fdTranslate : { value: maxValue }\"\n [attr.aria-valuenow]=\"\n _useSliderValuePrefix\n ? ('coreSlider.multipleHandle1ValueNowDetails'\n | fdTranslate : { value: getValuenow(_handle1Value, _sliderValueTargets.RANGE_SLIDER1) })\n : getValuenow(_handle1Value, _sliderValueTargets.RANGE_SLIDER1)\n \"\n [attr.aria-valuetext]=\"\n _useSliderValuePrefix\n ? ('coreSlider.multipleHandle1ValueNowDetails'\n | fdTranslate : { value: getValuenow(_handle1Value, _sliderValueTargets.RANGE_SLIDER1) })\n : getValuenow(_handle1Value, _sliderValueTargets.RANGE_SLIDER1)\n \"\n fd-slider-position\n [position]=\"_handle1Position\"\n (mousedown)=\"onHandleClick($event); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"_rangeHandle1Focused$.next(true)\"\n (blur)=\"_rangeHandle1Focused$.next(false)\"\n ></div>\n\n <div\n #rangeHandle2\n class=\"fd-slider__handle\"\n [class.fd-slider__handle--lg]=\"_contentDensityObserver.isCozy$ | async\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n role=\"slider\"\n [attr.aria-label]=\"\n ariaLabel || 'coreSlider.multipleHandle2MinMaxDetails' | fdTranslate : { min: minValue, max: maxValue }\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [fdPopoverTrigger]=\"tooltipMode ? rangeSliderPopover2 : null\"\n [attr.aria-valuemin]=\"'coreSlider.multipleHandle2ValueminDetails' | fdTranslate : { value: minValue }\"\n [attr.aria-valuemax]=\"'coreSlider.multipleHandle2ValuemaxDetails' | fdTranslate : { value: maxValue }\"\n [attr.aria-valuenow]=\"\n _useSliderValuePrefix\n ? ('coreSlider.multipleHandle2ValueNowDetails'\n | fdTranslate : { value: getValuenow(_handle2Value, _sliderValueTargets.RANGE_SLIDER2) })\n : getValuenow(_handle2Value, _sliderValueTargets.RANGE_SLIDER2)\n \"\n [attr.aria-valuetext]=\"\n _useSliderValuePrefix\n ? ('coreSlider.multipleHandle2ValueNowDetails'\n | fdTranslate : { value: getValuenow(_handle2Value, _sliderValueTargets.RANGE_SLIDER2) })\n : getValuenow(_handle2Value, _sliderValueTargets.RANGE_SLIDER2)\n \"\n fd-slider-position\n [position]=\"_handle2Position\"\n (mousedown)=\"onHandleClick($event); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"_rangeHandle2Focused$.next(true)\"\n (blur)=\"_rangeHandle2Focused$.next(false)\"\n ></div>\n\n <fd-popover\n #rangeSliderPopover1\n [triggers]=\"[]\"\n [closeOnOutsideClick]=\"false\"\n [appendTo]=\"rangeHandle1\"\n [disabled]=\"!tooltipMode\"\n additionalBodyClass=\"fd-slider--tooltip-popover\"\n class=\"fd-popover--slider\"\n placement=\"top\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n popoverInner;\n context: { target: _sliderValueTargets.RANGE_SLIDER1, position: _handle1Value }\n \"\n ></ng-container>\n </fd-popover>\n\n <fd-popover\n #rangeSliderPopover2\n [triggers]=\"[]\"\n [closeOnOutsideClick]=\"false\"\n [appendTo]=\"rangeHandle2\"\n [disabled]=\"!tooltipMode\"\n additionalBodyClass=\"fd-slider--tooltip-popover\"\n class=\"fd-popover--slider\"\n placement=\"top\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n popoverInner;\n context: { target: _sliderValueTargets.RANGE_SLIDER2, position: _handle2Value }\n \"\n ></ng-container>\n </fd-popover>\n</ng-template>\n\n<ng-template #popoverInner let-target=\"target\" let-position=\"position\">\n <div\n #sliderTooltipWrapper\n class=\"fd-slider--tooltip-wrapper\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (mouseenter)=\"_popoverInputFieldHovered$.next(true)\"\n (mouseleave)=\"_popoverInputFieldHovered$.next(false)\"\n >\n <div *ngIf=\"(customValues && customValues.length > 0) || tooltipMode === 'readonly'\" class=\"fd-slider--tooltip\">\n {{ customValues && customValues.length > 0 ? customValues[position].label : _popoverValueRef[target] }}\n </div>\n\n <input\n #popoverInputField\n tabindex=\"-1\"\n type=\"text\"\n [disabled]=\"disabled\"\n fdkOnlyDigits\n [decimal]=\"true\"\n [style.width.ch]=\"('' + _popoverValueRef[target]).length + 2\"\n class=\"fd-input fd-slider--tooltip {{ _popoverInputFieldClass }}\"\n *ngIf=\"customValues?.length === 0 && tooltipMode === 'editable'\"\n [(ngModel)]=\"_popoverValueRef[target]\"\n (blur)=\"_updateValueFromInput(popoverInputField.value, target)\"\n (keydown.enter)=\"_updateValueFromInput(popoverInputField.value, target)\"\n (focus)=\"_popoverInputFieldFocused$.next(true)\"\n (blur)=\"_popoverInputFieldFocused$.next(false)\"\n />\n </div>\n</ng-template>\n", styles: [".fd-slider{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:4rem;padding:0;padding:1rem calc(var(--fdSlider_Handle_Width) * .5 + .125rem);position:relative}.fd-slider:after,.fd-slider:before{box-sizing:inherit;font-size:inherit}.fd-slider.is-disabled,.fd-slider:disabled,.fd-slider[aria-disabled=true]{cursor:not-allowed}.fd-slider--lg{padding-left:calc(var(--fdSlider_Mobile_Handle_Width) * .5 + .125rem);padding-right:calc(var(--fdSlider_Mobile_Handle_Width) * .5 + .125rem)}.fd-slider__inner{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative}.fd-slider__inner:after,.fd-slider__inner:before{-webkit-box-sizing:inherit;-webkit-box-sizing:border-box;-webkit-transform:translateY(-50%);background-color:var(--fdSlider_Endpoint_Active_Background);border:0;border:var(--fdSlider_Endpoint_Active_Border);border-radius:50%;box-sizing:inherit;box-sizing:border-box;color:var(--sapTextColor);content:\"\";font-family:var(--sapFontFamily);font-size:inherit;font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdSlider_Endpoint_Size);left:-.7rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:var(--fdSlider_Endpoint_Size)}.fd-slider__inner:after:after,.fd-slider__inner:after:before,.fd-slider__inner:before:after,.fd-slider__inner:before:before{box-sizing:inherit;font-size:inherit}.fd-slider__inner:after{left:auto;right:-.7rem}.fd-slider__inner:after,.fd-slider__inner[dir=rtl]:before,[dir=rtl] .fd-slider__inner:before{background-color:var(--fdSlider_Endpoint_Background);border:var(--fdSlider_Endpoint_Border)}.fd-slider__inner[dir=rtl]:after,[dir=rtl] .fd-slider__inner:after{background-color:var(--fdSlider_Endpoint_Active_Background);border:var(--fdSlider_Endpoint_Active_Border)}.fd-slider__track{-webkit-box-sizing:border-box;-webkit-box-shadow:inset 0 0 0 var(--fdSlider_Track_Border_Width) var(--fdSlider_Track_Border_Color);background-color:var(--fdSlider_Track_Background);border:0;border-radius:var(--fdSlider_Track_BorderRadius);box-shadow:inset 0 0 0 var(--fdSlider_Track_Border_Width) var(--fdSlider_Track_Border_Color);box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdSlider_Track_Height);line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative;width:100%;z-index:1}.fd-slider__track:after,.fd-slider__track:before{box-sizing:inherit;font-size:inherit}.fd-slider__track-range{-webkit-box-sizing:border-box;-webkit-box-shadow:var(--fdSlider_Track_Active_Box_Shadow);background-color:var(--fdSlider_Track_Active_Background);border:0;border:.0625rem solid var(--fdSlider_Track_Active_Border);border-radius:.25rem;box-shadow:var(--fdSlider_Track_Active_Box_Shadow);box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative}.fd-slider__track-range:after,.fd-slider__track-range:before{box-sizing:inherit;font-size:inherit}.fd-slider__tick-wrapper{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:absolute;top:calc((var(--fdSlider_Track_Height) - var(--fdSlider_Tick_Height)) / 2);width:100%;z-index:2}.fd-slider__tick-wrapper:after,.fd-slider__tick-wrapper:before{box-sizing:inherit;font-size:inherit}.fd-slider__ticks{-webkit-box-sizing:border-box;-webkit-box-pack:justify;-ms-flex-pack:justify;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:row;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-slider__ticks:after,.fd-slider__ticks:before{box-sizing:inherit;font-size:inherit}.fd-slider__labels{-webkit-box-sizing:border-box;-webkit-box-pack:justify;-ms-flex-pack:justify;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:row;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative;top:.5rem}.fd-slider__labels:after,.fd-slider__labels:before{box-sizing:inherit;font-size:inherit}.fd-slider__tick{-webkit-box-sizing:border-box;border:0;border-left:.0625rem solid var(--fdSlider_Tick_Background);box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdSlider_Tick_Height);line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative}.fd-slider__tick:after,.fd-slider__tick:before{box-sizing:inherit;font-size:inherit}.fd-slider__tick--in-range{border-color:var(--fdSlider_Active_Tick_Background)}.fd-slider__label{-webkit-box-sizing:border-box;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_LabelColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative;width:0}.fd-slider__label:after,.fd-slider__label:before{box-sizing:inherit;font-size:inherit}.fd-slider__handle{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-transform:translate(-50%,-50%);-webkit-box-shadow:var(--fdSlider_Handle_Box_Shadow);align-items:center;background-color:var(--fdSlider_Handle_Background);border:0;border:var(--fdSlider_Handle_Border);border-radius:var(--fdSlider_Handle_Border_Radius);box-shadow:var(--fdSlider_Handle_Box_Shadow);box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdSlider_Handle_Height);justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--fdSlider_Handle_Width);z-index:3}.fd-slider__handle:after,.fd-slider__handle:before{box-sizing:inherit;font-size:inherit}.fd-slider__handle:before{-webkit-transform:translate(-50%,-50%);content:\"\";height:var(--fdSlider_Handle_Active_Height);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--fdSlider_Handle_Active_Width)}.fd-slider__handle:after{color:var(--sapContent_Selected_ForegroundColor);content:\"\\e29c\";display:var(--fdSlider_Handle_Icon_Display);font-family:SAP-icons;font-size:.875rem;line-height:1}.fd-slider__handle.is-focus,.fd-slider__handle:focus{background-color:var(--fdSlider_Active_Handle_Background);border:var(--fdSlider_Hover_Handle_Border);outline:.0625rem var(--sapContent_FocusStyle) var(--fdSlider_Focus_Handle_Outline_Color);outline-offset:.0625rem;z-index:5}.fd-slider__handle.is-hover,.fd-slider__handle:hover{-webkit-box-shadow:var(--fdSlider_Hover_Handle_Box_Shadow);background-color:var(--fdSlider_Hover_Handle_Background);border:var(--fdSlider_Hover_Handle_Border);border-color:var(--fdSlider_Handle_Border_Hover_Color);box-shadow:var(--fdSlider_Hover_Handle_Box_Shadow)}.fd-slider__handle.is-active,.fd-slider__handle:active{-webkit-box-shadow:var(--fdSlider_Active_Handle_Box_Shadow);background-color:var(--fdSlider_Active_Handle_Background);border:var(--fdSlider_Hover_Handle_Border);box-shadow:var(--fdSlider_Active_Handle_Box_Shadow)}.fd-slider__handle--lg{height:var(--fdSlider_Mobile_Handle_Height);width:var(--fdSlider_Mobile_Handle_Width)}.fd-slider__handle--lg:before{height:var(--fdSlider_Mobile_Handle_Active_Size);width:var(--fdSlider_Mobile_Handle_Active_Size)}.fd-slider--range .fd-slider__inner:after,.fd-slider--range .fd-slider__inner:before,.fd-slider--range .fd-slider__inner[dir=rtl]:after,.fd-slider--range .fd-slider__inner[dir=rtl]:before,[dir=rtl] .fd-slider--range .fd-slider__inner:after,[dir=rtl] .fd-slider--range .fd-slider__inner:before{background-color:var(--fdSlider_Endpoint_Background);border:var(--fdSlider_Endpoint_Border)}.fd-slider--range .fd-slider__inner .fd-slider__handle{-webkit-box-shadow:var(--fdSlider_Range_Handle_Box_Shadow);background-color:var(--fdSlider_Range_Handle_Background);border:var(--fdSlider_Range_Handle_Border);box-shadow:var(--fdSlider_Range_Handle_Box_Shadow)}.fd-slider--range .fd-slider__inner .fd-slider__handle.is-hover,.fd-slider--range .fd-slider__inner .fd-slider__handle:hover{-webkit-box-shadow:var(--fdSlider_Range_Hover_Handle_Box_Shadow);background-color:var(--fdSlider_Range_Hover_Handle_Background);border-color:var(--fdSlider_Range_Hover_Handle_Border_Color);box-shadow:var(--fdSlider_Range_Hover_Handle_Box_Shadow)}.fd-slider--range .fd-slider__inner .fd-slider__handle.is-active,.fd-slider--range .fd-slider__inner .fd-slider__handle:active{-webkit-box-shadow:var(--fdSlider_Range_Active_Handle_Box_Shadow);background-color:var(--fdSlider_Range_Active_Handle_Background);border-color:var(--fdSlider_Range_Active_Handle_Border_Color);box-shadow:var(--fdSlider_Range_Active_Handle_Box_Shadow)}.fd-slider--range .fd-slider__inner .fd-slider__handle.is-active:after,.fd-slider--range .fd-slider__inner .fd-slider__handle:active:after{display:none}.fd-slider--range .fd-slider__inner .fd-slider__handle.is-focus,.fd-slider--range .fd-slider__inner .fd-slider__handle:focus{-webkit-box-shadow:var(--fdSlider_Range_Focus_Handle_Box_Shadow);background-color:var(--fdSlider_Range_Focus_Handle_Background);border:var(--fdSlider_Range_Focus_Handle_Border);box-shadow:var(--fdSlider_Range_Focus_Handle_Box_Shadow);z-index:5}.fd-slider--range .fd-slider__inner .fd-slider__handle.is-focus:after,.fd-slider--range .fd-slider__inner .fd-slider__handle:focus:after{display:none}/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-input{-webkit-box-sizing:border-box;-webkit-box-shadow:none;-webkit-appearance:none;appearance:none;background:var(--sapField_BackgroundStyle, var(--sapField_BackgroundStyle));background-color:var(--sapField_Background, var(--sapField_Background));border:0;border:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor);border-radius:var(--sapField_BorderCornerRadius);box-shadow:none;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapField_TextColor);cursor:text;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.25rem;line-height:var(--sapContent_LineHeight);margin:0;margin:var(--fdInput_Field_Margin, .25rem 0);min-height:2.25rem;min-width:var(2.75rem, 2.75rem);outline:none;overflow:hidden;padding:0;padding:var(--fdInput_Field_Padding, 0 .625rem);text-overflow:ellipsis;text-shadow:var(--fdInput_Text_Shadow);white-space:nowrap;width:100%;z-index:1}.fd-input:after,.fd-input:before{box-sizing:inherit;font-size:inherit}.fd-input::placeholder{color:var(--sapField_PlaceholderTextColor);font-style:var(--fdPlaceholder_Font_Style)}.fd-input[dir=rtl]::placeholder,[dir=rtl] .fd-input::placeholder{text-indent:.125rem}.fd-input::selection{background-color:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}.fd-input::-ms-clear{display:none}.fd-input.is-hover,.fd-input:hover{-webkit-box-shadow:var(--fdInput_Box_Shadow_Hover);background:var(--sapField_Hover_BackgroundStyle, var(--sapField_Hover_BackgroundStyle));background-color:var(--sapField_Hover_Background, var(--sapField_Hover_Background));border-color:var(--sapField_Hover_BorderColor);box-shadow:var(--fdInput_Box_Shadow_Hover)}.fd-input.is-focus,.fd-input:focus{-webkit-box-shadow:none;background:var(--sapField_Focus_Background, var(--sapField_Focus_Background));box-shadow:none;outline-color:var(--fdInput_Outline_Color);outline-offset:var(--fdInput_Outline_Offset);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth);z-index:5}.fd-input[type=search]::-webkit-search-cancel-button,.fd-input[type=search]::-webkit-search-decoration,.fd-input[type=search]::-webkit-search-results-button,.fd-input[type=search]::-webkit-search-results-decoration{-webkit-appearance:none}.fd-input[aria-expanded=false]{z-index:0}.fd-input.is-expanded,.fd-input[aria-expanded=true]{z-index:4}.fd-input[class*=-compact],.fd-input[class*=-condensed],[class*=-compact] .fd-input:not([class*=-cozy]),[class*=-condensed] .fd-input:not([class*=-cozy]){box-sizing:border-box;height:1.625rem;margin:var(--fdInput_Field_Compact_Margin, .1875rem 0);min-height:1.625rem;min-width:var(--fdInput_Field_Compact_Min_Width, 2rem);padding:var(--fdInput_Field_Compact_Padding, 0 .5rem)}.fd-input--no-number-spinner{-moz-appearance:textfield}.fd-input--no-number-spinner::-webkit-inner-spin-button,.fd-input--no-number-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-input.right-align{text-align:right}.fd-input.is-success{background:var(--sapField_SuccessBackgroundStyle);background-color:var(--sapField_SuccessBackground);border:var(--sapField_SuccessColor) var(--sapField_SuccessBorderWidth) var(--sapField_SuccessBorderStyle)}.fd-input.is-success.is-hover,.fd-input.is-success:hover{-webkit-box-shadow:var(--fdInput_Success_Box_Shadow_Hover);background-color:var(--fdInput_Success_Background_Color_Hover);border-color:var(--sapField_SuccessColor);box-shadow:var(--fdInput_Success_Box_Shadow_Hover)}.fd-input.is-success.is-focus,.fd-input.is-success:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Success_Outline_Color);z-index:5}.fd-input.is-success.is-focus.is-hover,.fd-input.is-success.is-focus:hover,.fd-input.is-success:focus.is-hover,.fd-input.is-success:focus:hover{box-shadow:none}.fd-input.is-error{background:var(--sapField_InvalidBackgroundStyle);background-color:var(--sapField_InvalidBackground);border:var(--sapField_InvalidColor) var(--sapField_InvalidBorderWidth) var(--sapField_InvalidBorderStyle)}.fd-input.is-error.is-hover,.fd-input.is-error:hover{-webkit-box-shadow:var(--fdInput_Error_Box_Shadow_Hover);background-color:var(--fdInput_Error_Background_Color_Hover);border-color:var(--sapField_InvalidColor);box-shadow:var(--fdInput_Error_Box_Shadow_Hover)}.fd-input.is-error.is-focus,.fd-input.is-error:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Error_Outline_Color);z-index:5}.fd-input.is-error.is-focus.is-hover,.fd-input.is-error.is-focus:hover,.fd-input.is-error:focus.is-hover,.fd-input.is-error:focus:hover{box-shadow:none}.fd-input.is-warning{background:var(--sapField_WarningBackgroundStyle);background-color:var(--sapField_WarningBackground);border:var(--sapField_WarningColor) var(--sapField_WarningBorderWidth) var(--sapField_WarningBorderStyle)}.fd-input.is-warning.is-hover,.fd-input.is-warning:hover{-webkit-box-shadow:var(--fdInput_Warning_Box_Shadow_Hover);background-color:var(--fdInput_Warning_Background_Color_Hover);border-color:var(--sapField_WarningColor);box-shadow:var(--fdInput_Warning_Box_Shadow_Hover)}.fd-input.is-warning.is-focus,.fd-input.is-warning:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Warning_Outline_Color);z-index:5}.fd-input.is-warning.is-focus.is-hover,.fd-input.is-warning.is-focus:hover,.fd-input.is-warning:focus.is-hover,.fd-input.is-warning:focus:hover{box-shadow:none}.fd-input.is-alert{background:var(--sapField_WarningBackgroundStyle);background-color:var(--sapField_WarningBackground);border:var(--sapField_WarningColor) var(--sapField_WarningBorderWidth) var(--sapField_WarningBorderStyle)}.fd-input.is-alert.is-hover,.fd-input.is-alert:hover{-webkit-box-shadow:var(--fdInput_Warning_Box_Shadow_Hover);background-color:var(--fdInput_Warning_Background_Color_Hover);border-color:var(--sapField_WarningColor);box-shadow:var(--fdInput_Warning_Box_Shadow_Hover)}.fd-input.is-alert.is-focus,.fd-input.is-alert:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Warning_Outline_Color);z-index:5}.fd-input.is-alert.is-focus.is-hover,.fd-input.is-alert.is-focus:hover,.fd-input.is-alert:focus.is-hover,.fd-input.is-alert:focus:hover{box-shadow:none}.fd-input.is-information{background:var(--sapField_InformationBackgroundStyle);background-color:var(--sapField_InformationBackground);border:var(--sapField_InformationColor) var(--sapField_InformationBorderWidth) var(--sapField_InformationBorderStyle)}.fd-input.is-information.is-hover,.fd-input.is-information:hover{-webkit-box-shadow:var(--fdInput_Information_Box_Shadow_Hover);background-color:var(--fdInput_Information_Background_Color_Hover);border-color:var(--sapField_InformationColor);box-shadow:var(--fdInput_Information_Box_Shadow_Hover)}.fd-input.is-information.is-focus,.fd-input.is-information:focus{background:var(--sapField_Focus_Background);outline-color:var(--fdInput_Information_Outline_Color);z-index:5}.fd-input.is-information.is-focus.is-hover,.fd-input.is-information.is-focus:hover,.fd-input.is-information:focus.is-hover,.fd-input.is-information:focus:hover{box-shadow:none}.fd-input.is-alert,.fd-input.is-error,.fd-input.is-warning{font-style:var(--fdInput_State_Text_Style);font-weight:var(--fdInput_State_Font_Weight)}.fd-input.is-alert::placeholder,.fd-input.is-error::placeholder,.fd-input.is-warning::placeholder{font-weight:var(--fdInput_State_Font_Weight)}.fd-input.is-alert.is-focus,.fd-input.is-alert:focus,.fd-input.is-error.is-focus,.fd-input.is-error:focus,.fd-input.is-information.is-focus,.fd-input.is-information:focus,.fd-input.is-warning.is-focus,.fd-input.is-warning:focus{outline-offset:var(--fdInput_Outline_Offset_States);z-index:5}.fd-input.is-error::placeholder{color:var(--sapField_TextColor)}.fd-input.is-disabled,.fd-input:disabled,.fd-input[aria-disabled=true]{opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-input.is-disabled::placeholder,.fd-input:disabled::placeholder,.fd-input[aria-disabled=true]::placeholder{color:var(--fdInput_Non_Interactive_State_Placeholder_Color)}.fd-input.is-readonly,.fd-input[aria-readonly=true],.fd-input[readonly]{background:var(--sapField_ReadOnly_BackgroundStyle);background-color:var(--sapField_ReadOnly_Background);border-color:var(--sapField_ReadOnly_BorderColor);border-radius:var(--fdInput_ReadOnly_Border_Radius)}.fd-input.is-readonly::placeholder,.fd-input[aria-readonly=true]::placeholder,.fd-input[readonly]::placeholder{color:var(--fdInput_Non_Interactive_State_Placeholder_Color)}.fd-input.is-readonly.is-hover,.fd-input.is-readonly:hover,.fd-input[aria-readonly=true].is-hover,.fd-input[aria-readonly=true]:hover,.fd-input[readonly].is-hover,.fd-input[readonly]:hover{-webkit-box-shadow:none;background:var(--sapField_ReadOnly_BackgroundStyle);background-color:var(--sapField_ReadOnly_Background);border-color:var(--sapField_ReadOnly_BorderColor);border-radius:var(--fdInput_ReadOnly_Border_Radius);box-shadow:none}.fd-input.is-readonly.is-focus,.fd-input.is-readonly:focus,.fd-input[aria-readonly=true].is-focus,.fd-input[aria-readonly=true]:focus,.fd-input[readonly].is-focus,.fd-input[readonly]:focus{background:var(--sapField_ReadOnly_BackgroundStyle);background-color:var(--sapField_ReadOnly_Background);border-color:var(--sapField_ReadOnly_BorderColor);border-radius:var(--fdInput_ReadOnly_Border_Radius);z-index:5}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-popover--slider{display:block!important}.fd-popover__body.fd-slider--tooltip-popover{top:-7px!important;overflow:hidden}.fd-popover__body.fd-slider--tooltip-popover .fd-slider--tooltip{padding:.25rem;min-width:2rem;text-align:center;height:1.375rem;line-height:1;direction:ltr;box-sizing:border-box;margin:0!important;border:0;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);font-size:.875rem;font-size:var(--sapFontSize)}.fd-slider{display:block}.fd-slider.fd-slider--with-labels{padding-bottom:2rem}.fd-slider__tick-wrapper .fd-slider__label,.fd-slider__tick-wrapper .fd-slider__tick{position:absolute}.fd-slider__ticks{height:var(--fdSlider_Tick_Height)}.fd-slider__track .fd-slider__handle:focus{z-index:2;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.fd-slider__track .fd-popover-custom{display:none}.fd-slider__labels .fd-slider__label{white-space:nowrap}.fd-slider__alternative-tick-width .fd-slider__tick{width:1px}[dir=rtl] .fd-slider__handle{transform:translate(50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i6.PopoverTriggerDirective, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: ["fdPopoverTrigger"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.OnlyDigitsDirective, selector: "[fdkOnlyDigits], [fdOnlyDigits], [fd-only-digits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "directive", type: i8.SliderPositionDirective, selector: "[fd-slider-position]", inputs: ["position"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
687
747
  }
@@ -698,7 +758,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
698
758
  registerFormItemControl(SliderComponent),
699
759
  contentDensityObserverProviders({
700
760
  defaultContentDensity: ContentDensityMode.COMPACT,
701
- modifiers: { [ContentDensityMode.COZY]: 'fd-slider--lg' }
761
+ modifiers: {
762
+ [ContentDensityMode.COZY]: 'fd-slider--lg'
763
+ }
702
764
  })
703
765
  ], host: {
704
766
  '(mouseenter)': 'this._componentHovered$.next(true)',
@@ -752,16 +814,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
752
814
  type: Input
753
815
  }], trackEl: [{
754
816
  type: ViewChild,
755
- args: ['track', { read: ElementRef }]
817
+ args: ['track', {
818
+ read: ElementRef
819
+ }]
756
820
  }], handle: [{
757
821
  type: ViewChild,
758
- args: ['handle', { read: ElementRef }]
822
+ args: ['handle', {
823
+ read: ElementRef
824
+ }]
759
825
  }], rangeHandle1: [{
760
826
  type: ViewChild,
761
- args: ['rangeHandle1', { read: ElementRef }]
827
+ args: ['rangeHandle1', {
828
+ read: ElementRef
829
+ }]
762
830
  }], rangeHandle2: [{
763
831
  type: ViewChild,
764
- args: ['rangeHandle2', { read: ElementRef }]
832
+ args: ['rangeHandle2', {
833
+ read: ElementRef
834
+ }]
765
835
  }], _popovers: [{
766
836
  type: ViewChildren,
767
837
  args: [PopoverComponent]
@@ -772,4 +842,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
772
842
  type: HostBinding,
773
843
  args: ['class.fd-slider--range']
774
844
  }], buildComponentCssClass: [] } });
775
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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TixTQUFTO3NCQURSLEtBQUs7Z0JBS0YsR0FBRztzQkFETixLQUFLO2dCQWVGLEdBQUc7c0JBRE4sS0FBSztnQkFlRixJQUFJO3NCQURQLEtBQUs7Z0JBZUYsSUFBSTtzQkFEUCxLQUFLO2dCQVVGLHNCQUFzQjtzQkFEekIsS0FBSztnQkFjTixJQUFJO3NCQURILEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBVU4sOEJBQThCO3NCQUQ3QixLQUFLO2dCQVVOLG9DQUFvQztzQkFEbkMsS0FBSztnQkFVTixvQ0FBb0M7c0JBRG5DLEtBQUs7Z0JBUUYsS0FBSztzQkFEUixLQUFLO2dCQWVOLE9BQU87c0JBRE4sU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt4QyxNQUFNO3NCQURMLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLekMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSy9DLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUs5QixzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQVdwQyxRQUFRO3NCQURQLFdBQVc7dUJBQUMsd0JBQXdCO2dCQXlKckMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBtYXAsXG4gICAgbWFwVG8sXG4gICAgc2tpcCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBTbGlkZXJDb250cm9sVmFsdWUsXG4gICAgU2xpZGVyQ3VzdG9tVmFsdWUsXG4gICAgU2xpZGVyUmFuZ2VIYW5kbGVzLFxuICAgIFNsaWRlclRpY2tNYXJrLFxuICAgIFNsaWRlclZhbHVlVGFyZ2V0c1xufSBmcm9tICcuL3NsaWRlci5tb2RlbCc7XG5pbXBvcnQgeyBNSU5fRElTVEFOQ0VfQkVUV0VFTl9USUNLUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFwcGx5Q3NzQ2xhc3MsIENzc0NsYXNzQnVpbGRlciwgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZvcm1JdGVtQ29udHJvbCwgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmV4cG9ydCBjb25zdCBTTElERVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxubGV0IHNsaWRlcklkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zbGlkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFNMSURFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU2xpZGVyQ29tcG9uZW50KSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNULFxuICAgICAgICAgICAgbW9kaWZpZXJzOiB7IFtDb250ZW50RGVuc2l0eU1vZGUuQ09aWV06ICdmZC1zbGlkZXItLWxnJyB9XG4gICAgICAgIH0pXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcobW91c2VlbnRlciknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dCh0cnVlKScsXG4gICAgICAgICcobW91c2VsZWF2ZSknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dChmYWxzZSknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvblRvdWNoZWQoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIENzc0NsYXNzQnVpbGRlciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFNsaWRlciBpZCwgaXQgaGFzIHNvbWUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0LCAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSAnZmQtc2xpZGVyLWlkLScgKyBzbGlkZXJJZCsrO1xuXG4gICAgLyoqIFVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBJZCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVscyBzbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgc2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIE1pbmltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWluKTtcbiAgICAgICAgaWYgKCgodGhpcy5tYXggLSBuZXdWYWx1ZSkgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG5cbiAgICAvKiogTWF4aW11bSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9tYXgpO1xuICAgICAgICBpZiAoKChuZXdWYWx1ZSAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCkgJSAxICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBTdGVwIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9zdGVwKTtcbiAgICAgICAgaWYgKCgodGhpcy5tYXggLSB0aGlzLm1pbikgLyBuZXdWYWx1ZSkgJSAxICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKiBKdW1wIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGp1bXAodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9qdW1wID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX2p1bXApO1xuICAgIH1cbiAgICBnZXQganVtcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcDtcbiAgICB9XG5cbiAgICAvKiogUHV0IGEgbGFiZWwgb24gZXZlcnkgTi10aCB0aWNrbWFyay4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzKTtcbiAgICB9XG4gICAgZ2V0IHRpY2ttYXJrc0JldHdlZW5MYWJlbHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpZGVyIG1vZGUuXG4gICAgICogT3B0aW9ucyBpbmNsdWRlOiAnc2luZ2xlJyB8ICdyYW5nZSdcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gJ3NpbmdsZSdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vZGU6ICdzaW5nbGUnIHwgJ3JhbmdlJyA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrcyA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrIGxhYmVscy4gTXVzdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJ3Nob3dUaWNrcycgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrc0xhYmVscyA9IGZhbHNlO1xuXG4gICAgLyoqIEFycmF5IG9mIGN1c3RvbSB2YWx1ZXMgdG8gdXNlIGZvciBTbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21WYWx1ZXM6IFNsaWRlckN1c3RvbVZhbHVlW10gPSBbXTtcblxuICAgIC8qKiBUb29sdGlwIGNhbiBiZSB0d28gdHlwZXMsICdyZWFkb25seScgdG8gZGlzcGxheSB2YWx1ZSBhbmQgJ2VkaXRhYmxlJyB0byBtYWtlIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZGlzcGxheSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvb2x0aXBNb2RlOiAncmVhZG9ubHknIHwgJ2VkaXRhYmxlJztcblxuICAgIC8qKiBIaWRlcyBkaXNwbGF5IG9mIGNvbG9yZWQgcHJvZ3Jlc3MgYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZVByb2dyZXNzQmFyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzbGlkZXIgY3VycmVudCB2YWx1ZSB2ZXJib3NlIHN0cmluZy5cbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gcmFuZ2Ugc2xpZGVyIGhhbmRsZSAxIGN1cnJlbnQgdmFsdWUgc3VwcG9ydGluZyBzdHJpbmdcbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogKiBAZGVwcmVjYXRlZCBubyBsb25nZXIgdXNlZCwgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlU2xpZGVySGFuZGxlMUN1cnJlbnRWYWx1ZVByZWZpeDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiByYW5nZSBzbGlkZXIgaGFuZGxlIDIgY3VycmVudCB2YWx1ZSBzdXBwb3J0aW5nIHN0cmluZ1xuICAgICAqIFRoaXMgd2lsbCBiZSByZWFkIG9ubHkgb25jZSBieSBzY3JlZW4gcmVhZGVyIGFuZCB1cG9uIHNsaWRlciB2YWx1ZSBjaGFuZ2UsXG4gICAgICogdGhpcyBzdHJpbmcgd2lsbCBub3QgYmUgcmVhZC5cbiAgICAgKiAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciB1c2VkLCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10gPSAwO1xuXG4gICAgLyoqIENvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IFNsaWRlckNvbnRyb2xWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3ZlclZhbHVlUmVmKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXIsIHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgdHJhY2tFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hhbmRsZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGhhbmRsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JhbmdlSGFuZGxlMScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHJhbmdlSGFuZGxlMTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JhbmdlSGFuZGxlMicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHJhbmdlSGFuZGxlMjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oUG9wb3ZlckNvbXBvbmVudClcbiAgICBfcG9wb3ZlcnM6IFF1ZXJ5TGlzdDxQb3BvdmVyQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbignc2xpZGVyVG9vbHRpcFdyYXBwZXInKVxuICAgIF9zbGlkZXJUb29sdGlwV3JhcHBlcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF92YWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsgfCBTbGlkZXJUaWNrTWFya1tdIHwgbnVtYmVyW10gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXNsaWRlci0tcmFuZ2UnKVxuICAgIF9pc1JhbmdlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUxUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMlBvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTFWYWx1ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUyVmFsdWUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmFuZ2VQcm9ncmVzcyA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90aWNrTWFya3M6IFNsaWRlclRpY2tNYXJrW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NsaWRlclZhbHVlVGFyZ2V0cyA9IFNsaWRlclZhbHVlVGFyZ2V0cztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3BvcG92ZXJJbnB1dEZpZWxkQ2xhc3MgPSBgZmQtc2xpZGVyLXBvcG92ZXItaW5wdXQtJHtzbGlkZXJJZH1gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNSdGwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiB3aGV0aGVyIHRvIHVzZSB2YWx1ZSB3aXRoIGEgcHJlZml4IGZvciBhbm5vdW5jaW5nXG4gICAgICovXG4gICAgX3VzZVNsaWRlclZhbHVlUHJlZml4ID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWluID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4ID0gMTAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGVwID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfanVtcCA9IDEwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90aWNrbWFya3NCZXR3ZWVuTGFiZWxzID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsdWVzQnlTdGVwczogbnVtYmVyW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9jb21wb25lbnRIb3ZlcmVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfaGFuZGxlRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3JhbmdlSGFuZGxlMUZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yYW5nZUhhbmRsZTJGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9SdGwoKTtcbiAgICAgICAgdGhpcy5fYXR0YWNoUmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5fb25SZXNpemUoKTtcblxuICAgICAgICBpZiAodGhpcy5fdmFsdWVzQnlTdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgICAgICB0aGlzLl9jaGVja0lzSW5SYW5nZU1vZGUoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0VGlja01hcmtzKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTtcbiAgICAgICAgdGhpcy5fcmVjYWxjSGFuZGxlUG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvSW50ZXJhY3Rpb25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldFZhbHVlbm93KHBvc2l0aW9uOiBudW1iZXIgfCBudW1iZXJbXSwgc2xpZGVyVmFsdWVUYXJnZXQ6IFNsaWRlclZhbHVlVGFyZ2V0cyk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRoaXMuY3VzdG9tVmFsdWVzW3Bvc2l0aW9uIGFzIG51bWJlcl0ubGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fcG9wb3ZlclZhbHVlUmVmW3NsaWRlclZhbHVlVGFyZ2V0XTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBtaW5WYWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMubWluIGFzIG51bWJlcl0ubGFiZWwgOiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBtYXhWYWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMubWF4IGFzIG51bWJlcl0ubGFiZWwgOiB0aGlzLm1heDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2ZkLXNsaWRlcicsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID8gJ2lzLWRpc2FibGVkJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNSYW5nZSA/ICdmZC1zbGlkZXItLXJhbmdlJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5zaG93VGlja3MgJiYgdGhpcy5zaG93VGlja3NMYWJlbHMgPyAnZmQtc2xpZGVyLS13aXRoLWxhYmVscycgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuY2xhc3MsXG4gICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybS5FREdFIHx8IHRoaXMuX3BsYXRmb3JtLlRSSURFTlQgPyAnZmQtc2xpZGVyX19hbHRlcm5hdGl2ZS10aWNrLXdpZHRoJyA6ICcnXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRyYWNrQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0VmFsdWUodGhpcy5fY2FsY3VsYXRlVmFsdWVGcm9tUG9pbnRlclBvc2l0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5oYW5kbGUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25IYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZW1vdmUnLCAobW92ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihtb3ZlRXZlbnQpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXM7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTIubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihtb3ZlRXZlbnQsIGZhbHNlKSBhcyBudW1iZXI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIHZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUodGhpcy5fY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZUZyb21Nb3VzZXVwID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZUZyb21Nb3VzZXVwKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxvd2VkS2V5czogbnVtYmVyW10gPSBbTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XLCBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0VdO1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBhbGxvd2VkS2V5cykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGRpZmYgPSBldmVudC5zaGlmdEtleSA/IHRoaXMuanVtcCA6IHRoaXMuc3RlcDtcbiAgICAgICAgbGV0IG5ld1ZhbHVlOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgcHJldlZhbHVlID0gdGhpcy5fcG9zaXRpb24gYXMgbnVtYmVyO1xuICAgICAgICBsZXQgaGFuZGxlSW5kZXg6IFNsaWRlclJhbmdlSGFuZGxlcyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUxLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwcmV2VmFsdWUgPSB0aGlzLl9oYW5kbGUxVmFsdWU7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTIubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHByZXZWYWx1ZSA9IHRoaXMuX2hhbmRsZTJWYWx1ZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNSdGwoKSkge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBwcmV2VmFsdWUgKyBkaWZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSAtIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlICsgZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUobmV3VmFsdWUgYXMgbnVtYmVyLCAhdGhpcy5faXNSYW5nZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihoYW5kbGVJbmRleCwgbmV3VmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91cGRhdGVWYWx1ZUZyb21JbnB1dCh2YWx1ZTogc3RyaW5nLCB0YXJnZXQ6IFNsaWRlclZhbHVlVGFyZ2V0cyk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX3Byb2Nlc3NOZXdWYWx1ZSgrdmFsdWUpIGFzIG51bWJlcjtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1JhbmdlICYmIHRhcmdldCA9PT0gU2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gU2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VIYW5kbGUxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5yYW5nZUhhbmRsZTIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0VmFsdWUodGhpcy5fY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCkpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFZhbHVlKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUsIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGUoKHZhbHVlID8/IFswLjBdKSBhcyBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZSgodmFsdWUgPz8gMCkgYXMgbnVtYmVyIHwgU2xpZGVyVGlja01hcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX3BvcG92ZXJzLmZvckVhY2goKHBvcG92ZXIpID0+IHBvcG92ZXIucmVmcmVzaFBvc2l0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmFsdWVGcm9tUG9pbnRlclBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCB0YWtlQ3VzdG9tVmFsdWUgPSB0cnVlKTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsge1xuICAgICAgICBjb25zdCB7IGxlZnQsIHdpZHRoIH0gPSB0aGlzLnRyYWNrRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAoZXZlbnQuY2xpZW50WCAtIGxlZnQpIC8gd2lkdGg7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzUnRsKSB7XG4gICAgICAgICAgICBwZXJjZW50YWdlID0gMSAtIHBlcmNlbnRhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMubWluICsgcGVyY2VudGFnZSAqICh0aGlzLm1heCAtIHRoaXMubWluKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlLCB0YWtlQ3VzdG9tVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlOiBudW1iZXIsIHRha2VDdXN0b21WYWx1ZSA9IHRydWUpOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgY29uc3Qgc3RlcERpZmZBcnJheSA9IHRoaXMuX3ZhbHVlc0J5U3RlcHNcbiAgICAgICAgICAgIC5tYXAoKHN0ZXBWYWx1ZSkgPT4gKHsgZGlmZjogTWF0aC5hYnMoc3RlcFZhbHVlIC0gbmV3VmFsdWUpLCB2YWx1ZTogc3RlcFZhbHVlIH0pKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlmZiAtIGIuZGlmZik7XG4gICAgICAgIGxldCB2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBudW1iZXIgPSBzdGVwRGlmZkFycmF5WzBdLnZhbHVlO1xuXG4gICAgICAgIGlmICh0YWtlQ3VzdG9tVmFsdWUgJiYgdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmN1c3RvbVZhbHVlc1t2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXg6IFNsaWRlclJhbmdlSGFuZGxlcywgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2NhbGNQcm9ncmVzcyh2YWx1ZSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTFWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFuZGxlSW5kZXggPT09IFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMlBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yYW5nZVByb2dyZXNzID0gTWF0aC5hYnModGhpcy5faGFuZGxlMlBvc2l0aW9uIC0gdGhpcy5faGFuZGxlMVBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpOiBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10ge1xuICAgICAgICBsZXQgcmFuZ2VMb3dlclZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICAgIGxldCByYW5nZUhpZ2hlclZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICAgIGxldCByYW5nZVZhbHVlOiBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10gPSBbXG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLl9oYW5kbGUxVmFsdWUsIHRoaXMuX2hhbmRsZTJWYWx1ZSksXG4gICAgICAgICAgICBNYXRoLm1heCh0aGlzLl9oYW5kbGUxVmFsdWUsIHRoaXMuX2hhbmRsZTJWYWx1ZSlcbiAgICAgICAgXTtcblxuICAgICAgICByYW5nZUxvd2VyVmFsdWUgPSByYW5nZVZhbHVlWzBdO1xuICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXTtcblxuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5jdXN0b21WYWx1ZXNbcmFuZ2VWYWx1ZVswXV0gfHwgdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLmN1c3RvbVZhbHVlc1tyYW5nZVZhbHVlWzFdXSB8fCB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgcmFuZ2VWYWx1ZSA9IFttaW4sIG1heF07XG4gICAgICAgICAgICByYW5nZUxvd2VyVmFsdWUgPSByYW5nZVZhbHVlWzBdLmxhYmVsO1xuICAgICAgICAgICAgcmFuZ2VIaWdoZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMV0ubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSgncmFuZ2UgdmFsdWUgYmV0d2VlbiAnICsgcmFuZ2VMb3dlclZhbHVlICsgJyBhbmQgJyArIHJhbmdlSGlnaGVyVmFsdWUsICdwb2xpdGUnKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hdHRhY2hSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vblJlc2l6ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RUaWNrTWFya3MoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0VmFsdWVzQnlTdGVwcygpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc0J5U3RlcHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAodGhpcy5tYXggLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXAgKyAxIH0sIChfLCBpKSA9PlxuICAgICAgICAgICAgICAgIE51bWJlcigodGhpcy5taW4gKyBpICogdGhpcy5zdGVwKS50b0ZpeGVkKDIpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFRpY2tNYXJrcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykge1xuICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gW107XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gMDtcbiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21WYWx1ZXNMZW5ndGggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gdGhpcy5jdXN0b21WYWx1ZXMubWFwKChpdGVtLCBpKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICgxMDAgLyBjdXN0b21WYWx1ZXNMZW5ndGgpICogaVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuICAgICAgICAgICAgY29uc3QgdGlja01hcmtzQ291bnQgPSB0b3RhbCAvIHRoaXMuc3RlcCArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF4VGlja01hcmtzTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgdGlja01hcmtzQ291bnQgPiB0aGlzLl9tYXhUaWNrTWFya3NOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgcG9zaXRpb246IDAsIHZhbHVlOiAwLCBsYWJlbDogYCR7dGhpcy5taW59YCB9LFxuICAgICAgICAgICAgICAgICAgICB7IHBvc2l0aW9uOiAxMDAsIHZhbHVlOiB0b3RhbCwgbGFiZWw6IGAke3RoaXMubWF4fWAgfVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aWNrTWFya3NDb3VudCAlIDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aWNrTWFya3NDb3VudCB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE1hdGgucm91bmQoaSAqIHRoaXMuc3RlcCAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKHZhbHVlIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgcG9zaXRpb24sIGxhYmVsOiBgJHt0aGlzLm1pbiArIHZhbHVlfWAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX21heFRpY2tNYXJrc051bWJlcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMudHJhY2tFbCB8fCAhdGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudHJhY2tFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gTUlOX0RJU1RBTkNFX0JFVFdFRU5fVElDS1MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY1Byb2dyZXNzKHZhbHVlOiBudW1iZXIsIHNraXBSdGwgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIGxldCBwcm9ncmVzcyA9ICgodmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuXG4gICAgICAgIGlmICghc2tpcFJ0bCAmJiB0aGlzLl9pc1J0bCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDAgLSBwcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9ncmVzcyA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVjYWxjSGFuZGxlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX2hhbmRsZTFWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyUG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5faGFuZGxlMlZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5fcG9zaXRpb24gYXMgbnVtYmVyLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrSXNJblJhbmdlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNSYW5nZSA9IHRoaXMubW9kZSA9PT0gJ3JhbmdlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSdGwgY2hhbmdlIHN1YnNjcmlwdGlvbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvUnRsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGlzUnRsOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc1J0bCA9IGlzUnRsO1xuICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaW5nZU1vZGUodmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0U2luZ2VNb2RlV2l0aEN1c3RvbVZhbHVlKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZURlZmF1bHQoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMubWluKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlRGVmYXVsdCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZVdpdGhDdXN0b21WYWx1ZShzbGlkZXJUaWNrTWFyazogU2xpZGVyVGlja01hcmspOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcy5fZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24oc2xpZGVyVGlja01hcmspIGFzIG51bWJlcikgfHwgdGhpcy5taW47XG5cbiAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZSh2YWx1ZTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlV2l0aEN1c3RvbVZhbHVlcyh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFya1tdKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RIYW5kbGUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZVswXSwgdGhpcy5taW4pO1xuICAgICAgICBjb25zdCBzZWNvbmRIYW5kbGUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZVsxXSwgdGhpcy5tYXgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVEZWZhdWx0KFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlRGVmYXVsdChbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV06IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdO1xuXG4gICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QsIGZpcnN0SGFuZGxlKTtcbiAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQsIHNlY29uZEhhbmRsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlV2l0aEN1c3RvbVZhbHVlcyhbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV06IFNsaWRlclRpY2tNYXJrW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbihbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV0pIHx8IFt0aGlzLm1pbiwgdGhpcy5tYXhdO1xuXG4gICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVEZWZhdWx0KHZhbHVlIGFzIG51bWJlcltdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9uKHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10pOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgICAgIHRoaXMubWluID0gMDtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb25zKHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10pOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2UgPyBbMCwgdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV0gOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlT2ZDdXN0b21WYWx1ZShmaXJzdEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZSA9IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlT2ZDdXN0b21WYWx1ZShzZWNvbmRIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgc2Vjb25kSGFuZGxlID0gdGhpcy5jdXN0b21WYWx1ZXNbdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SGFuZGxlUG9zaXRpb24gPSB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZpcnN0SGFuZGxlLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZVBvc2l0aW9uID0gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBzZWNvbmRIYW5kbGUudmFsdWUpO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlUG9zaXRpb24gPj0gMCA/IGZpcnN0SGFuZGxlUG9zaXRpb24gOiAwLFxuICAgICAgICAgICAgICAgIHNlY29uZEhhbmRsZVBvc2l0aW9uID49IDAgPyBzZWNvbmRIYW5kbGVQb3NpdGlvbiA6IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHJldHVybiBpbmRleGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGZpcnN0SGFuZGxlID0gdmFsdWUgYXMgU2xpZGVyVGlja01hcms7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlT2ZDdXN0b21WYWx1ZShmaXJzdEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZSA9IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBmaXJzdEhhbmRsZS52YWx1ZSkgfHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VPZkN1c3RvbVZhbHVlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIFNsaWRlckN1c3RvbVZhbHVlIHtcbiAgICAgICAgcmV0dXJuICEhb2JqZWN0ICYmICd2YWx1ZScgaW4gb2JqZWN0ICYmICdsYWJlbCcgaW4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9JbnRlcmFjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9yYW5nZUhhbmRsZTFGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlSGFuZGxlMkZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEhvdmVyZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHN0YXRlcykgPT4gc3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBmb2N1c2VkLCBjaGVjayBmb3IgdGhlIGVkZ2UgY2FzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBob3ZlciBpcyBvbiB0aGUgZmQtcG9wb3Zlci1ib2R5LCB0aGF0IGlzIGEgcGFyZW50IGZvciB0aGUgdG9vbHRpcC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNQb3BvdmVySG92ZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLm9wZW4oKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRQcmVmaXgoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcnMuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXNldCBkZWZhdWx0IHByZWZpeCBvbiBsZWF2aW5nIHRoZSBzbGlkZXIgKi9cbiAgICBwcml2YXRlIF9yZXNldFByZWZpeCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcmVzZXQgcHJlZml4IHN0cmluZyBmb3Igc2xpZGVyIGN1cnJlbnQgdmFsdWUgdGhhdCBuZWVkIHRvIGJlIGFubm91bmNlZFxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgaW5wdXQgcG9wb3ZlciBlbGVtZW50IGlzIGhvdmVyZWQuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAqIElmIHllcywgcmV0dXJucyBcInRydWVcIiBpbnN0YW50bHkgYW5kIFwiZmFsc2VcIiBvbmNlIGl0J3Mgbm90IGhvdmVyZWQgYW55bW9yZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1BvcG92ZXJIb3ZlcmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwb3BvdmVyQm9keSA9IHRoaXMuX3NsaWRlclRvb2x0aXBXcmFwcGVycy5maXJzdD8ubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmZC1wb3BvdmVyLWJvZHknKTtcbiAgICAgICAgaWYgKHBvcG92ZXJCb2R5Py5tYXRjaGVzKCc6aG92ZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudChwb3BvdmVyQm9keSwgJ21vdXNlbGVhdmUnKS5waXBlKG1hcFRvKGZhbHNlKSwgdGFrZSgxKSwgc3RhcnRXaXRoKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2lubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9pc1JhbmdlID8gcmFuZ2VNb2RlIDogc2luZ2xlTW9kZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2tcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIiAjdHJhY2s+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfaXNSYW5nZSA/IHJhbmdlTW9kZVRyYWNrIDogc2luZ2xlTW9kZVRyYWNrXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190aWNrLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdGlja3NcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGlja3NcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWNrIG9mIF90aWNrTWFya3M7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwidGljay5wb3NpdGlvbiB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX3RpY2stLWluLXJhbmdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlUHJvZ3Jlc3NCYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2lzUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aWNrLnZhbHVlID49IF9wb3NpdGlvblswXSAmJiB0aWNrLnZhbHVlIDw9IF9wb3NpdGlvblsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRpY2sudmFsdWUgPD0gX3Bvc2l0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2xhYmVsc1wiICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dUaWNrc0xhYmVsc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGljayBvZiBfdGlja01hcmtzOyBpbmRleCBhcyBpOyBsYXN0IGFzIGxhc3Q7IGZpcnN0IGFzIGZpcnN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpcnN0IHx8IGxhc3QgfHwgaSAlIHRpY2ttYXJrc0JldHdlZW5MYWJlbHMgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInRpY2sucG9zaXRpb24gfHwgMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlVHJhY2s+XG4gICAgPGRpdiAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIiBbc3R5bGUud2lkdGguJV09XCJfcHJvZ3Jlc3NcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlVHJhY2s+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIlxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIlxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCJfcmFuZ2VQcm9ncmVzc1wiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTFQb3NpdGlvbiA8IF9oYW5kbGUyUG9zaXRpb24gPyBfaGFuZGxlMVBvc2l0aW9uIDogX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI2hhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLnNpbmdsZU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHNpbmdsZVNsaWRlclBvcG92ZXIgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9wcm9ncmVzc1wiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3NpbmdsZVNsaWRlclBvcG92ZXJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiaGFuZGxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIsIHBvc2l0aW9uOiBfcG9zaXRpb24gfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI3JhbmdlSGFuZGxlMVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHJhbmdlU2xpZGVyUG9wb3ZlcjEgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSkgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSlcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMVBvc2l0aW9uXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9yYW5nZUhhbmRsZTFGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX3JhbmdlSGFuZGxlMUZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICNyYW5nZUhhbmRsZTJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX2hhbmRsZS0tbGddPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCB8fCAnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJNaW5NYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgW2ZkUG9wb3ZlclRyaWdnZXJdPVwidG9vbHRpcE1vZGUgPyByYW5nZVNsaWRlclBvcG92ZXIyIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtaW5EZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWluVmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWF4VmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJfcmFuZ2VIYW5kbGUyRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9yYW5nZUhhbmRsZTJGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3JhbmdlU2xpZGVyUG9wb3ZlcjFcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwicmFuZ2VIYW5kbGUxXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtcG9wb3ZlclwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEsIHBvc2l0aW9uOiBfaGFuZGxlMVZhbHVlIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXBvcG92ZXI+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjcmFuZ2VTbGlkZXJQb3BvdmVyMlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJyYW5nZUhhbmRsZTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMiwgcG9zaXRpb246IF9oYW5kbGUyVmFsdWUgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlcklubmVyIGxldC10YXJnZXQ9XCJ0YXJnZXRcIiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICAgIDxkaXZcbiAgICAgICAgI3NsaWRlclRvb2x0aXBXcmFwcGVyXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXdyYXBwZXJcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIoY3VzdG9tVmFsdWVzICYmIGN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB8fCB0b29sdGlwTW9kZSA9PT0gJ3JlYWRvbmx5J1wiIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwXCI+XG4gICAgICAgICAgICB7eyBjdXN0b21WYWx1ZXMgJiYgY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyBjdXN0b21WYWx1ZXNbcG9zaXRpb25dLmxhYmVsIDogX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3BvcG92ZXJJbnB1dEZpZWxkXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBmZGtPbmx5RGlnaXRzXG4gICAgICAgICAgICBbZGVjaW1hbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5jaF09XCIoJycgKyBfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF0pLmxlbmd0aCArIDJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dCBmZC1zbGlkZXItLXRvb2x0aXAge3sgX3BvcG92ZXJJbnB1dEZpZWxkQ2xhc3MgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21WYWx1ZXM/Lmxlbmd0aCA9PT0gMCAmJiB0b29sdGlwTW9kZSA9PT0gJ2VkaXRhYmxlJ1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIl9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfdXBkYXRlVmFsdWVGcm9tSW5wdXQocG9wb3ZlcklucHV0RmllbGQudmFsdWUsIHRhcmdldClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHBvcG92ZXJJbnB1dEZpZWxkLnZhbHVlLCB0YXJnZXQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJfcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
845
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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QjtzQkFEakMsS0FBSztnQkFrQkYsb0NBQW9DO3NCQUR2QyxLQUFLO2dCQWtCRixvQ0FBb0M7c0JBRHZDLEtBQUs7Z0JBZ0JGLEtBQUs7c0JBRFIsS0FBSztnQkFpQk4sT0FBTztzQkFITixTQUFTO3VCQUFDLE9BQU8sRUFBRTt3QkFDaEIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELE1BQU07c0JBSEwsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFPRCxZQUFZO3NCQUhYLFNBQVM7dUJBQUMsY0FBYyxFQUFFO3dCQUN2QixJQUFJLEVBQUUsVUFBVTtxQkFDbkI7Z0JBT0QsWUFBWTtzQkFIWCxTQUFTO3VCQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQUtELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBSzlCLHNCQUFzQjtzQkFEckIsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBV3BDLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBd0pyQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBtYXAsXG4gICAgbWFwVG8sXG4gICAgc2tpcCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgU2xpZGVyQ29udHJvbFZhbHVlLFxuICAgIFNsaWRlckN1c3RvbVZhbHVlLFxuICAgIFNsaWRlclJhbmdlSGFuZGxlcyxcbiAgICBTbGlkZXJUaWNrTWFyayxcbiAgICBTbGlkZXJWYWx1ZVRhcmdldHNcbn0gZnJvbSAnLi9zbGlkZXIubW9kZWwnO1xuaW1wb3J0IHsgTUlOX0RJU1RBTkNFX0JFVFdFRU5fVElDS1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzLCBDc3NDbGFzc0J1aWxkZXIsIEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgY29uc3QgU0xJREVSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5sZXQgc2xpZGVySWQgPSAwO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zbGlkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFNMSURFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU2xpZGVyQ29tcG9uZW50KSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNULFxuICAgICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT1pZXTogJ2ZkLXNsaWRlci0tbGcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcobW91c2VlbnRlciknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dCh0cnVlKScsXG4gICAgICAgICcobW91c2VsZWF2ZSknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dChmYWxzZSknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvblRvdWNoZWQoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIENzc0NsYXNzQnVpbGRlciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFNsaWRlciBpZCwgaXQgaGFzIHNvbWUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0LCAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSAnZmQtc2xpZGVyLWlkLScgKyBzbGlkZXJJZCsrO1xuXG4gICAgLyoqIFVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVscyBzbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgc2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIE1pbmltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWluKTtcbiAgICAgICAgaWYgKCgodGhpcy5tYXggLSBuZXdWYWx1ZSkgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIE1heGltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgaWYgKCgobmV3VmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIFN0ZXAgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX3N0ZXApO1xuICAgICAgICBpZiAoKCh0aGlzLm1heCAtIHRoaXMubWluKSAvIG5ld1ZhbHVlKSAlIDEgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKiBKdW1wIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGp1bXAodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9qdW1wID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX2p1bXApO1xuICAgIH1cbiAgICBnZXQganVtcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcDtcbiAgICB9XG5cbiAgICAvKiogUHV0IGEgbGFiZWwgb24gZXZlcnkgTi10aCB0aWNrbWFyay4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzKTtcbiAgICB9XG4gICAgZ2V0IHRpY2ttYXJrc0JldHdlZW5MYWJlbHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpZGVyIG1vZGUuXG4gICAgICogT3B0aW9ucyBpbmNsdWRlOiAnc2luZ2xlJyB8ICdyYW5nZSdcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gJ3NpbmdsZSdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vZGU6ICdzaW5nbGUnIHwgJ3JhbmdlJyA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrcyA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrIGxhYmVscy4gTXVzdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJ3Nob3dUaWNrcycgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrc0xhYmVscyA9IGZhbHNlO1xuXG4gICAgLyoqIEFycmF5IG9mIGN1c3RvbSB2YWx1ZXMgdG8gdXNlIGZvciBTbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21WYWx1ZXM6IFNsaWRlckN1c3RvbVZhbHVlW10gPSBbXTtcblxuICAgIC8qKiBUb29sdGlwIGNhbiBiZSB0d28gdHlwZXMsICdyZWFkb25seScgdG8gZGlzcGxheSB2YWx1ZSBhbmQgJ2VkaXRhYmxlJyB0byBtYWtlIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZGlzcGxheSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvb2x0aXBNb2RlOiAncmVhZG9ubHknIHwgJ2VkaXRhYmxlJztcblxuICAgIC8qKiBIaWRlcyBkaXNwbGF5IG9mIGNvbG9yZWQgcHJvZ3Jlc3MgYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZVByb2dyZXNzQmFyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzbGlkZXIgY3VycmVudCB2YWx1ZSB2ZXJib3NlIHN0cmluZy5cbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBzaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3NpbmdsZVNsaWRlckN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMSBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSByYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMUN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMiBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSByYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10gPSAwO1xuXG4gICAgLyoqIENvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IFNsaWRlckNvbnRyb2xWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3ZlclZhbHVlUmVmKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXIsIHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICB0cmFja0VsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaGFuZGxlJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBoYW5kbGU6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTEnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIHJhbmdlSGFuZGxlMTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JhbmdlSGFuZGxlMicsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgcmFuZ2VIYW5kbGUyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF9wb3BvdmVyczogUXVlcnlMaXN0PFBvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCdzbGlkZXJUb29sdGlwV3JhcHBlcicpXG4gICAgX3NsaWRlclRvb2x0aXBXcmFwcGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ZhbHVlOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10gfCBudW1iZXJbXSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9ncmVzcyA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtc2xpZGVyLS1yYW5nZScpXG4gICAgX2lzUmFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTFQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUyUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMVZhbHVlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTJWYWx1ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yYW5nZVByb2dyZXNzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RpY2tNYXJrczogU2xpZGVyVGlja01hcmtbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2xpZGVyVmFsdWVUYXJnZXRzID0gU2xpZGVyVmFsdWVUYXJnZXRzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9wb3ZlcklucHV0RmllbGRDbGFzcyA9IGBmZC1zbGlkZXItcG9wb3Zlci1pbnB1dC0ke3NsaWRlcklkfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHdoZXRoZXIgdG8gdXNlIHZhbHVlIHdpdGggYSBwcmVmaXggZm9yIGFubm91bmNpbmdcbiAgICAgKi9cbiAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXggPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW4gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXggPSAxMDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0ZXAgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9qdW1wID0gMTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RpY2ttYXJrc0JldHdlZW5MYWJlbHMgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZXNCeVN0ZXBzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2NvbXBvbmVudEhvdmVyZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9oYW5kbGVGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmFuZ2VIYW5kbGUxRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3JhbmdlSGFuZGxlMkZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgICAgICB0aGlzLl9hdHRhY2hSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLl9vblJlc2l6ZSgpO1xuICAgICAgICBpZiAodGhpcy5fdmFsdWVzQnlTdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tJc0luUmFuZ2VNb2RlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIHRoaXMuX3JlY2FsY0hhbmRsZVBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRWYWx1ZW5vdyhwb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10sIHNsaWRlclZhbHVlVGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmN1c3RvbVZhbHVlc1twb3NpdGlvbiBhcyBudW1iZXJdLmxhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX3BvcG92ZXJWYWx1ZVJlZltzbGlkZXJWYWx1ZVRhcmdldF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWluVmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1pbiBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5taW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWF4VmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1heCBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1zbGlkZXInLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA/ICdpcy1kaXNhYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2UgPyAnZmQtc2xpZGVyLS1yYW5nZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpY2tzICYmIHRoaXMuc2hvd1RpY2tzTGFiZWxzID8gJ2ZkLXNsaWRlci0td2l0aC1sYWJlbHMnIDogJycsXG4gICAgICAgICAgICB0aGlzLmNsYXNzLFxuICAgICAgICAgICAgdGhpcy5fcGxhdGZvcm0uRURHRSB8fCB0aGlzLl9wbGF0Zm9ybS5UUklERU5UID8gJ2ZkLXNsaWRlcl9fYWx0ZXJuYXRpdmUtdGljay13aWR0aCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24oZXZlbnQpKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmhhbmRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZW1vdmUnLCAobW92ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXM7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTIubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50LCBmYWxzZSkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4LCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZUZyb21Nb3VzZXVwID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZUZyb21Nb3VzZXVwKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXM6IG51bWJlcltdID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVywgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFXTtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgYWxsb3dlZEtleXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5qdW1wIDogdGhpcy5zdGVwO1xuICAgICAgICBsZXQgbmV3VmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBwcmV2VmFsdWUgPSB0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXI7XG4gICAgICAgIGxldCBoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHByZXZWYWx1ZSA9IHRoaXMuX2hhbmRsZTFWYWx1ZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlZhbHVlID0gdGhpcy5faGFuZGxlMlZhbHVlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1J0bCgpKSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSAtIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUobmV3VmFsdWUgYXMgbnVtYmVyLCAhdGhpcy5faXNSYW5nZSk7XG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIG5ld1ZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHZhbHVlOiBzdHJpbmcsIHRhcmdldDogU2xpZGVyVmFsdWVUYXJnZXRzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKCt2YWx1ZSkgYXMgbnVtYmVyO1xuICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UgJiYgdGFyZ2V0ID09PSBTbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gU2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0VmFsdWUodGhpcy5fY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCkpO1xuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlLCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlKCh2YWx1ZSA/PyBbMC4wXSkgYXMgbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGUoKHZhbHVlID8/IDApIGFzIG51bWJlciB8IFNsaWRlclRpY2tNYXJrKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLnJlZnJlc2hQb3NpdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudDogTW91c2VFdmVudCwgdGFrZUN1c3RvbVZhbHVlID0gdHJ1ZSk6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCB3aWR0aCB9ID0gdGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBwZXJjZW50YWdlID0gKGV2ZW50LmNsaWVudFggLSBsZWZ0KSAvIHdpZHRoO1xuICAgICAgICBpZiAodGhpcy5faXNSdGwpIHtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxIC0gcGVyY2VudGFnZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMubWluICsgcGVyY2VudGFnZSAqICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZSwgdGFrZUN1c3RvbVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZTogbnVtYmVyLCB0YWtlQ3VzdG9tVmFsdWUgPSB0cnVlKTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsge1xuICAgICAgICBpZiAobmV3VmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnN0IHN0ZXBEaWZmQXJyYXkgPSB0aGlzLl92YWx1ZXNCeVN0ZXBzXG4gICAgICAgICAgICAubWFwKChzdGVwVmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgZGlmZjogTWF0aC5hYnMoc3RlcFZhbHVlIC0gbmV3VmFsdWUpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGVwVmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlmZiAtIGIuZGlmZik7XG4gICAgICAgIGxldCB2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBudW1iZXIgPSBzdGVwRGlmZkFycmF5WzBdLnZhbHVlO1xuICAgICAgICBpZiAodGFrZUN1c3RvbVZhbHVlICYmIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jdXN0b21WYWx1ZXNbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTFWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCk6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSB7XG4gICAgICAgIGxldCByYW5nZUxvd2VyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlSGlnaGVyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlVmFsdWU6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSA9IFtcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKSxcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKVxuICAgICAgICBdO1xuICAgICAgICByYW5nZUxvd2VyVmFsdWUgPSByYW5nZVZhbHVlWzBdO1xuICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuY3VzdG9tVmFsdWVzW3JhbmdlVmFsdWVbMF1dIHx8IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5jdXN0b21WYWx1ZXNbcmFuZ2VWYWx1ZVsxXV0gfHwgdGhpcy5jdXN0b21WYWx1ZXNbdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICByYW5nZVZhbHVlID0gW21pbiwgbWF4XTtcbiAgICAgICAgICAgIHJhbmdlTG93ZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMF0ubGFiZWw7XG4gICAgICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKCdyYW5nZSB2YWx1ZSBiZXR3ZWVuICcgKyByYW5nZUxvd2VyVmFsdWUgKyAnIGFuZCAnICsgcmFuZ2VIaWdoZXJWYWx1ZSwgJ3BvbGl0ZScpO1xuICAgICAgICByZXR1cm4gcmFuZ2VWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uUmVzaXplKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzQnlTdGVwcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6ICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCArIDFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChfLCBpKSA9PiBOdW1iZXIoKHRoaXMubWluICsgaSAqIHRoaXMuc3RlcCkudG9GaXhlZCgyKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RUaWNrTWFya3MoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gMDtcbiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21WYWx1ZXNMZW5ndGggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gdGhpcy5jdXN0b21WYWx1ZXMubWFwKChpdGVtLCBpKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICgxMDAgLyBjdXN0b21WYWx1ZXNMZW5ndGgpICogaVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuICAgICAgICAgICAgY29uc3QgdGlja01hcmtzQ291bnQgPSB0b3RhbCAvIHRoaXMuc3RlcCArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF4VGlja01hcmtzTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgdGlja01hcmtzQ291bnQgPiB0aGlzLl9tYXhUaWNrTWFya3NOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5taW59YFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubWF4fWBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpY2tNYXJrc0NvdW50ICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogdGlja01hcmtzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZChpICogdGhpcy5zdGVwICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKHZhbHVlIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubWluICsgdmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9tYXhUaWNrTWFya3NOdW1iZXIoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYWNrRWwgfHwgIXRoaXMudHJhY2tFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyBNSU5fRElTVEFOQ0VfQkVUV0VFTl9USUNLUyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjUHJvZ3Jlc3ModmFsdWU6IG51bWJlciwgc2tpcFJ0bCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHByb2dyZXNzID0gKCh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG4gICAgICAgIGlmICghc2tpcFJ0bCAmJiB0aGlzLl9pc1J0bCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDAgLSBwcm9ncmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvZ3Jlc3MgPiAxMDApIHtcbiAgICAgICAgICAgIHJldHVybiAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVjYWxjSGFuZGxlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX2hhbmRsZTFWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyUG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5faGFuZGxlMlZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0lzSW5SYW5nZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzUmFuZ2UgPSB0aGlzLm1vZGUgPT09ICdyYW5nZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzUnRsID0gaXNSdGw7XG4gICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZSh2YWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmspOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWUodmFsdWUgYXMgU2xpZGVyVGlja01hcmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVEZWZhdWx0KGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLm1pbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX2NhbGNQcm9ncmVzcyh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlV2l0aEN1c3RvbVZhbHVlKHNsaWRlclRpY2tNYXJrOiBTbGlkZXJUaWNrTWFyayk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbihzbGlkZXJUaWNrTWFyaykgYXMgbnVtYmVyKSB8fCB0aGlzLm1pbjtcbiAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZSh2YWx1ZTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlV2l0aEN1c3RvbVZhbHVlcyh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzBdLCB0aGlzLm1pbik7XG4gICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzFdLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVEZWZhdWx0KFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlRGVmYXVsdChbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV06IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdO1xuICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBmaXJzdEhhbmRsZSk7XG4gICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kLCBzZWNvbmRIYW5kbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZVdpdGhDdXN0b21WYWx1ZXMoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdOiBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24oW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdKSB8fCBbdGhpcy5taW4sIHRoaXMubWF4XTtcbiAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZURlZmF1bHQodmFsdWUgYXMgbnVtYmVyW10pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24odmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb25zKHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10pOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2UgPyBbMCwgdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV0gOiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoZmlyc3RIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKHNlY29uZEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SGFuZGxlUG9zaXRpb24gPSB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZpcnN0SGFuZGxlLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZVBvc2l0aW9uID0gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBzZWNvbmRIYW5kbGUudmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhlcyA9IFtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZVBvc2l0aW9uID49IDAgPyBmaXJzdEhhbmRsZVBvc2l0aW9uIDogMCxcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGVQb3NpdGlvbiA+PSAwID8gc2Vjb25kSGFuZGxlUG9zaXRpb24gOiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZmlyc3RIYW5kbGUgPSB2YWx1ZSBhcyBTbGlkZXJUaWNrTWFyaztcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKGZpcnN0SGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlID0gdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBmaXJzdEhhbmRsZS52YWx1ZSkgfHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VPZkN1c3RvbVZhbHVlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIFNsaWRlckN1c3RvbVZhbHVlIHtcbiAgICAgICAgcmV0dXJuICEhb2JqZWN0ICYmICd2YWx1ZScgaW4gb2JqZWN0ICYmICdsYWJlbCcgaW4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9JbnRlcmFjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9yYW5nZUhhbmRsZTFGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlSGFuZGxlMkZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEhvdmVyZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHN0YXRlcykgPT4gc3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBmb2N1c2VkLCBjaGVjayBmb3IgdGhlIGVkZ2UgY2FzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBob3ZlciBpcyBvbiB0aGUgZmQtcG9wb3Zlci1ib2R5LCB0aGF0IGlzIGEgcGFyZW50IGZvciB0aGUgdG9vbHRpcC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNQb3BvdmVySG92ZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLm9wZW4oKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRQcmVmaXgoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcnMuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXNldCBkZWZhdWx0IHByZWZpeCBvbiBsZWF2aW5nIHRoZSBzbGlkZXIgKi9cbiAgICBwcml2YXRlIF9yZXNldFByZWZpeCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcmVzZXQgcHJlZml4IHN0cmluZyBmb3Igc2xpZGVyIGN1cnJlbnQgdmFsdWUgdGhhdCBuZWVkIHRvIGJlIGFubm91bmNlZFxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgaW5wdXQgcG9wb3ZlciBlbGVtZW50IGlzIGhvdmVyZWQuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAqIElmIHllcywgcmV0dXJucyBcInRydWVcIiBpbnN0YW50bHkgYW5kIFwiZmFsc2VcIiBvbmNlIGl0J3Mgbm90IGhvdmVyZWQgYW55bW9yZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1BvcG92ZXJIb3ZlcmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwb3BvdmVyQm9keSA9IHRoaXMuX3NsaWRlclRvb2x0aXBXcmFwcGVycy5maXJzdD8ubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmZC1wb3BvdmVyLWJvZHknKTtcbiAgICAgICAgaWYgKHBvcG92ZXJCb2R5Py5tYXRjaGVzKCc6aG92ZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudChwb3BvdmVyQm9keSwgJ21vdXNlbGVhdmUnKS5waXBlKG1hcFRvKGZhbHNlKSwgdGFrZSgxKSwgc3RhcnRXaXRoKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2lubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9pc1JhbmdlID8gcmFuZ2VNb2RlIDogc2luZ2xlTW9kZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2tcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIiAjdHJhY2s+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfaXNSYW5nZSA/IHJhbmdlTW9kZVRyYWNrIDogc2luZ2xlTW9kZVRyYWNrXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190aWNrLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdGlja3NcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGlja3NcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWNrIG9mIF90aWNrTWFya3M7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwidGljay5wb3NpdGlvbiB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX3RpY2stLWluLXJhbmdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlUHJvZ3Jlc3NCYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2lzUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aWNrLnZhbHVlID49IF9wb3NpdGlvblswXSAmJiB0aWNrLnZhbHVlIDw9IF9wb3NpdGlvblsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRpY2sudmFsdWUgPD0gX3Bvc2l0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2xhYmVsc1wiICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dUaWNrc0xhYmVsc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGljayBvZiBfdGlja01hcmtzOyBpbmRleCBhcyBpOyBsYXN0IGFzIGxhc3Q7IGZpcnN0IGFzIGZpcnN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpcnN0IHx8IGxhc3QgfHwgaSAlIHRpY2ttYXJrc0JldHdlZW5MYWJlbHMgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInRpY2sucG9zaXRpb24gfHwgMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlVHJhY2s+XG4gICAgPGRpdiAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIiBbc3R5bGUud2lkdGguJV09XCJfcHJvZ3Jlc3NcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlVHJhY2s+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIlxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIlxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCJfcmFuZ2VQcm9ncmVzc1wiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTFQb3NpdGlvbiA8IF9oYW5kbGUyUG9zaXRpb24gPyBfaGFuZGxlMVBvc2l0aW9uIDogX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI2hhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLnNpbmdsZU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHNpbmdsZVNsaWRlclBvcG92ZXIgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9wcm9ncmVzc1wiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3NpbmdsZVNsaWRlclBvcG92ZXJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiaGFuZGxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIsIHBvc2l0aW9uOiBfcG9zaXRpb24gfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI3JhbmdlSGFuZGxlMVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHJhbmdlU2xpZGVyUG9wb3ZlcjEgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSkgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSlcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMVBvc2l0aW9uXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9yYW5nZUhhbmRsZTFGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX3JhbmdlSGFuZGxlMUZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICNyYW5nZUhhbmRsZTJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX2hhbmRsZS0tbGddPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCB8fCAnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJNaW5NYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgW2ZkUG9wb3ZlclRyaWdnZXJdPVwidG9vbHRpcE1vZGUgPyByYW5nZVNsaWRlclBvcG92ZXIyIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtaW5EZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWluVmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWF4VmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJfcmFuZ2VIYW5kbGUyRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9yYW5nZUhhbmRsZTJGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3JhbmdlU2xpZGVyUG9wb3ZlcjFcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwicmFuZ2VIYW5kbGUxXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtcG9wb3ZlclwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEsIHBvc2l0aW9uOiBfaGFuZGxlMVZhbHVlIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXBvcG92ZXI+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjcmFuZ2VTbGlkZXJQb3BvdmVyMlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJyYW5nZUhhbmRsZTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMiwgcG9zaXRpb246IF9oYW5kbGUyVmFsdWUgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlcklubmVyIGxldC10YXJnZXQ9XCJ0YXJnZXRcIiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICAgIDxkaXZcbiAgICAgICAgI3NsaWRlclRvb2x0aXBXcmFwcGVyXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXdyYXBwZXJcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIoY3VzdG9tVmFsdWVzICYmIGN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB8fCB0b29sdGlwTW9kZSA9PT0gJ3JlYWRvbmx5J1wiIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwXCI+XG4gICAgICAgICAgICB7eyBjdXN0b21WYWx1ZXMgJiYgY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyBjdXN0b21WYWx1ZXNbcG9zaXRpb25dLmxhYmVsIDogX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3BvcG92ZXJJbnB1dEZpZWxkXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBmZGtPbmx5RGlnaXRzXG4gICAgICAgICAgICBbZGVjaW1hbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5jaF09XCIoJycgKyBfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF0pLmxlbmd0aCArIDJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dCBmZC1zbGlkZXItLXRvb2x0aXAge3sgX3BvcG92ZXJJbnB1dEZpZWxkQ2xhc3MgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21WYWx1ZXM/Lmxlbmd0aCA9PT0gMCAmJiB0b29sdGlwTW9kZSA9PT0gJ2VkaXRhYmxlJ1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIl9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfdXBkYXRlVmFsdWVGcm9tSW5wdXQocG9wb3ZlcklucHV0RmllbGQudmFsdWUsIHRhcmdldClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHBvcG92ZXJJbnB1dEZpZWxkLnZhbHVlLCB0YXJnZXQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJfcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=