@kepler.gl/components 3.1.0-alpha.3 → 3.1.0-alpha.5

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 (198) hide show
  1. package/dist/bottom-widget.d.ts +7 -1
  2. package/dist/bottom-widget.js +2 -8
  3. package/dist/common/action-panel.d.ts +5 -6
  4. package/dist/common/action-panel.js +3 -5
  5. package/dist/common/animation-control/animation-control.d.ts +2 -1
  6. package/dist/common/animation-control/animation-control.js +4 -2
  7. package/dist/common/animation-control/animation-speed-slider.js +21 -7
  8. package/dist/common/animation-control/floating-time-display.js +1 -1
  9. package/dist/common/animation-control/play-control.js +11 -13
  10. package/dist/common/animation-control/playback-controls.d.ts +11 -20
  11. package/dist/common/animation-control/playback-controls.js +6 -4
  12. package/dist/common/animation-control/reset-control.js +11 -13
  13. package/dist/common/animation-control/speed-control.js +10 -12
  14. package/dist/common/color-legend.d.ts +4 -5
  15. package/dist/common/color-legend.js +16 -5
  16. package/dist/common/column-stats-chart.d.ts +9 -3
  17. package/dist/common/column-stats-chart.js +17 -63
  18. package/dist/common/data-table/canvas.d.ts +2 -1
  19. package/dist/common/data-table/index.d.ts +7 -7
  20. package/dist/common/data-table/index.js +4 -5
  21. package/dist/common/file-uploader/file-upload-progress.d.ts +4 -4
  22. package/dist/common/file-uploader/file-upload-progress.js +1 -2
  23. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  24. package/dist/common/file-uploader/upload-button.js +2 -2
  25. package/dist/common/flex-container.d.ts +8 -3
  26. package/dist/common/histogram-plot.js +4 -2
  27. package/dist/common/icon-button.d.ts +7 -4
  28. package/dist/common/icons/draggable-dots.d.ts +14 -0
  29. package/dist/common/icons/draggable-dots.js +85 -0
  30. package/dist/common/icons/horizontal-resize-handle.d.ts +14 -0
  31. package/dist/common/icons/horizontal-resize-handle.js +59 -0
  32. package/dist/common/icons/index.d.ts +2 -0
  33. package/dist/common/icons/index.js +15 -1
  34. package/dist/common/icons/pin.js +1 -1
  35. package/dist/common/info-helper.js +2 -2
  36. package/dist/common/item-selector/chickleted-input.d.ts +21 -17
  37. package/dist/common/item-selector/chickleted-input.js +3 -3
  38. package/dist/common/item-selector/dropdown-list.d.ts +12 -12
  39. package/dist/common/item-selector/dropdown-list.js +1 -2
  40. package/dist/common/item-selector/dropdown-select.d.ts +8 -4
  41. package/dist/common/item-selector/dropdown-select.js +2 -2
  42. package/dist/common/item-selector/item-selector.d.ts +5 -9
  43. package/dist/common/item-selector/item-selector.js +1 -1
  44. package/dist/common/item-selector/typeahead.d.ts +20 -6
  45. package/dist/common/item-selector/typeahead.js +3 -3
  46. package/dist/common/loading-spinner.d.ts +8 -4
  47. package/dist/common/loading-spinner.js +1 -1
  48. package/dist/common/modal.d.ts +12 -12
  49. package/dist/common/modal.js +3 -3
  50. package/dist/common/portaled.d.ts +22 -486
  51. package/dist/common/portaled.js +6 -3
  52. package/dist/common/range-plot.d.ts +23 -28
  53. package/dist/common/range-plot.js +38 -29
  54. package/dist/common/range-slider-timeline.js +1 -2
  55. package/dist/common/slider/slider-bar-handle.d.ts +5 -0
  56. package/dist/common/slider/slider-bar-handle.js +2 -2
  57. package/dist/common/slider/slider-handle.d.ts +9 -0
  58. package/dist/common/slider/slider-handle.js +3 -3
  59. package/dist/common/slider/slider.d.ts +2 -2
  60. package/dist/common/styled-components.d.ts +444 -92
  61. package/dist/common/styled-components.js +15 -11
  62. package/dist/common/sync-timeline-control.js +2 -2
  63. package/dist/common/time-range-slider-time-title.d.ts +4 -0
  64. package/dist/common/time-range-slider-time-title.js +1 -1
  65. package/dist/common/time-range-slider.d.ts +7 -3
  66. package/dist/common/time-range-slider.js +1 -1
  67. package/dist/common/timeline-slider.d.ts +2 -0
  68. package/dist/common/timeline-slider.js +1 -1
  69. package/dist/common/toolbar-item.js +2 -2
  70. package/dist/common/toolbar.d.ts +5 -3
  71. package/dist/common/toolbar.js +1 -1
  72. package/dist/common/vertical-toolbar.d.ts +6 -1
  73. package/dist/container.js +2 -2
  74. package/dist/dnd-context.d.ts +1 -1
  75. package/dist/effects/compact-color-picker.d.ts +1 -1
  76. package/dist/effects/effect-configurator.d.ts +4 -4
  77. package/dist/effects/effect-manager.d.ts +2 -0
  78. package/dist/effects/effect-manager.js +10 -10
  79. package/dist/effects/effect-panel-header.js +5 -5
  80. package/dist/effects/effect-time-configurator.js +2 -2
  81. package/dist/effects/effect-time-selector.d.ts +1 -6
  82. package/dist/effects/effect-time-selector.js +3 -3
  83. package/dist/effects/effect-type-dropdown-list.js +2 -2
  84. package/dist/effects/effect-type-list-item.d.ts +1 -10
  85. package/dist/effects/effect-type-list-item.js +2 -2
  86. package/dist/effects/effect-type-selector.d.ts +1 -12
  87. package/dist/effects/effect-type-selector.js +2 -2
  88. package/dist/effects/timezone-selector.d.ts +1 -9
  89. package/dist/effects/timezone-selector.js +1 -1
  90. package/dist/filters/components.d.ts +6 -3
  91. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +3 -4
  92. package/dist/filters/time-widget-top.js +2 -2
  93. package/dist/filters/types.d.ts +4 -2
  94. package/dist/filters/types.js +1 -1
  95. package/dist/geocoder/geocoder.js +2 -2
  96. package/dist/geocoder-panel.d.ts +6 -0
  97. package/dist/geocoder-panel.js +1 -1
  98. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +3 -2
  99. package/dist/hooks/use-fetch-vector-tile-metadata.js +33 -18
  100. package/dist/hooks/use-legend-position.d.ts +36 -0
  101. package/dist/hooks/use-legend-position.js +147 -0
  102. package/dist/index.d.ts +2 -1
  103. package/dist/index.js +18 -3
  104. package/dist/kepler-gl.d.ts +44 -5
  105. package/dist/kepler-gl.js +77 -4
  106. package/dist/map/layer-hover-info.d.ts +3 -1
  107. package/dist/map/map-control-panel.js +4 -3
  108. package/dist/map/map-control-toolbar.d.ts +15 -1
  109. package/dist/map/map-control-toolbar.js +1 -1
  110. package/dist/map/map-legend-panel.d.ts +10 -35
  111. package/dist/map/map-legend-panel.js +234 -128
  112. package/dist/map/map-legend.d.ts +3 -2
  113. package/dist/map/map-legend.js +7 -10
  114. package/dist/map/map-popover.js +16 -11
  115. package/dist/map-container.d.ts +10 -8
  116. package/dist/map-container.js +86 -55
  117. package/dist/modal-container.d.ts +2 -1
  118. package/dist/modal-container.js +4 -3
  119. package/dist/modals/add-map-style-modal.d.ts +3 -0
  120. package/dist/modals/add-map-style-modal.js +58 -10
  121. package/dist/modals/cloud-components/cloud-item.js +2 -2
  122. package/dist/modals/cloud-tile.d.ts +6 -1
  123. package/dist/modals/cloud-tile.js +2 -2
  124. package/dist/modals/data-table-modal.d.ts +5 -3
  125. package/dist/modals/data-table-modal.js +3 -3
  126. package/dist/modals/export-data-modal.js +4 -5
  127. package/dist/modals/export-map-modal/components.d.ts +5 -3
  128. package/dist/modals/export-map-modal/export-html-map.js +2 -2
  129. package/dist/modals/export-map-modal/export-json-map.js +3 -2
  130. package/dist/modals/modal-dialog.d.ts +3 -1
  131. package/dist/modals/modal-tabs.js +2 -2
  132. package/dist/modals/share-map-modal.d.ts +4 -4
  133. package/dist/modals/storage-map-viewer.js +3 -3
  134. package/dist/modals/tilesets-modals/common.d.ts +1 -1
  135. package/dist/modals/tilesets-modals/common.js +1 -1
  136. package/dist/modals/tilesets-modals/load-data-footer.d.ts +3 -3
  137. package/dist/modals/tilesets-modals/load-data-footer.js +16 -7
  138. package/dist/modals/tilesets-modals/load-tileset.js +5 -4
  139. package/dist/modals/tilesets-modals/tileset-vector-form.js +28 -14
  140. package/dist/plot-container.js +3 -3
  141. package/dist/side-panel/add-by-dataset-button.js +4 -1
  142. package/dist/side-panel/common/dataset-info.js +3 -3
  143. package/dist/side-panel/common/dataset-title.d.ts +1 -0
  144. package/dist/side-panel/common/dataset-title.js +5 -4
  145. package/dist/side-panel/filter-manager.d.ts +2 -2
  146. package/dist/side-panel/filter-manager.js +1 -1
  147. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +9 -1
  148. package/dist/side-panel/filter-panel/filter-panel-header.js +24 -9
  149. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +10 -1
  150. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +5 -3
  151. package/dist/side-panel/layer-panel/aggr-scale-selector.d.ts +2 -1
  152. package/dist/side-panel/layer-panel/aggr-scale-selector.js +3 -1
  153. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +2 -4
  154. package/dist/side-panel/layer-panel/channel-by-value-selector.js +9 -5
  155. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +15 -7
  156. package/dist/side-panel/layer-panel/color-breaks-panel.js +52 -20
  157. package/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  158. package/dist/side-panel/layer-panel/color-palette.d.ts +9 -4
  159. package/dist/side-panel/layer-panel/color-palette.js +13 -7
  160. package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
  161. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +3 -1
  162. package/dist/side-panel/layer-panel/color-scale-selector.js +82 -37
  163. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -6
  164. package/dist/side-panel/layer-panel/color-selector.js +52 -36
  165. package/dist/side-panel/layer-panel/custom-palette.d.ts +44 -15
  166. package/dist/side-panel/layer-panel/custom-palette.js +342 -39
  167. package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -5
  168. package/dist/side-panel/layer-panel/custom-picker.js +2 -2
  169. package/dist/side-panel/layer-panel/dimension-scale-selector.js +5 -3
  170. package/dist/side-panel/layer-panel/layer-column-mode-config.js +1 -1
  171. package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -11
  172. package/dist/side-panel/layer-panel/layer-config-group.js +2 -2
  173. package/dist/side-panel/layer-panel/layer-configurator.d.ts +7 -7
  174. package/dist/side-panel/layer-panel/layer-configurator.js +10 -10
  175. package/dist/side-panel/layer-panel/layer-list.d.ts +2 -0
  176. package/dist/side-panel/layer-panel/layer-list.js +7 -4
  177. package/dist/side-panel/layer-panel/layer-panel-header.js +5 -5
  178. package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -0
  179. package/dist/side-panel/layer-panel/layer-panel.js +8 -8
  180. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
  181. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +1 -10
  182. package/dist/side-panel/layer-panel/layer-type-list-item.js +2 -2
  183. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -8
  184. package/dist/side-panel/layer-panel/layer-type-selector.js +1 -1
  185. package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
  186. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +6 -3
  187. package/dist/side-panel/map-style-panel/map-style-selector.js +2 -2
  188. package/dist/side-panel/panel-header-action.js +2 -2
  189. package/dist/side-panel/panel-header.js +2 -2
  190. package/dist/side-panel/panel-tab.d.ts +3 -3
  191. package/dist/side-panel/panel-tab.js +2 -2
  192. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  193. package/dist/side-panel/panel-view-list-toggle.js +2 -2
  194. package/dist/side-panel/side-bar.js +2 -2
  195. package/dist/side-panel.d.ts +1 -1
  196. package/dist/types.d.ts +6 -7
  197. package/dist/types.js +1 -1
  198. package/package.json +23 -22
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { KeplerTable } from '@kepler.gl/table';
3
- import { Field } from '@kepler.gl/types';
3
+ import { Bin, Field } from '@kepler.gl/types';
4
4
  import { ColorBreak, ColorBreakOrdinal } from '@kepler.gl/utils';
5
5
  import HistogramPlotFactory from './histogram-plot';
6
6
  export declare const HISTOGRAM_WIDTH = 210;
@@ -22,11 +22,17 @@ export declare type ColumnStatsChartWLoadingProps = {
22
22
  colorField: Field;
23
23
  dataset: KeplerTable;
24
24
  colorBreaks: ColorBreak[] | ColorBreakOrdinal[] | null;
25
+ allBins: Bin[];
26
+ filteredBins: Bin[];
27
+ isFiltered: boolean;
28
+ histogramDomain: number[];
25
29
  onChangedUpdater: (ticks: ColorBreak[]) => void;
26
30
  };
27
31
  export declare type ColumnStatsChartProps = {
28
- field: Field;
29
- dataset: KeplerTable;
32
+ allBins: Bin[];
33
+ filteredBins: Bin[];
34
+ isFiltered: boolean;
35
+ histogramDomain: number[];
30
36
  colorBreaks: ColorBreak[];
31
37
  onChangedUpdater: (ticks: ColorBreak[]) => void;
32
38
  };
@@ -36,7 +36,6 @@ var COLOR_CHART_TICK_WRAPPER_HEIGHT = 10;
36
36
  var COLOR_CHART_TICK_HEIGHT = 8;
37
37
  var COLOR_CHART_TICK_WIDTH = 4;
38
38
  var COLOR_CHART_TICK_BORDER_COLOR = '#999999';
39
- var HISTOGRAM_BINS = 30;
40
39
  var StyledContainer = _styledComponents["default"].div.attrs({
41
40
  className: 'color-chart-loading'
42
41
  })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n height: ", "px;\n"])), HISTOGRAM_HEIGHT);
@@ -162,9 +161,10 @@ var ColorChartTick = exports.ColorChartTick = function ColorChartTick(_ref2) {
162
161
  ColumnStatsChartFactory.deps = [_histogramPlot["default"]];
163
162
  function ColumnStatsChartFactory(HistogramPlot) {
164
163
  var ColumnStatsChart = function ColumnStatsChart(_ref3) {
165
- var _field$filterProps;
166
- var field = _ref3.field,
167
- dataset = _ref3.dataset,
164
+ var allBins = _ref3.allBins,
165
+ filteredBins = _ref3.filteredBins,
166
+ isFiltered = _ref3.isFiltered,
167
+ histogramDomain = _ref3.histogramDomain,
168
168
  colorBreaks = _ref3.colorBreaks,
169
169
  onChangedUpdater = _ref3.onChangedUpdater;
170
170
  var _useState5 = (0, _react.useState)(colorBreaks),
@@ -184,34 +184,6 @@ function ColumnStatsChartFactory(HistogramPlot) {
184
184
  // reset isTickChanging once histogram domain is recomputed
185
185
  isTickChangingRef.current = false;
186
186
  }, [ticks]);
187
- var valueAccessor = (0, _react.useMemo)(function () {
188
- return function (idx) {
189
- return dataset.getValue(field.name, idx);
190
- };
191
- }, [dataset, field.name]);
192
- var columnStats = (_field$filterProps = field.filterProps) === null || _field$filterProps === void 0 ? void 0 : _field$filterProps.columnStats;
193
-
194
- // get bins with allIndexes
195
- var allBins = (0, _react.useMemo)(function () {
196
- if (columnStats !== null && columnStats !== void 0 && columnStats.bins) {
197
- return columnStats === null || columnStats === void 0 ? void 0 : columnStats.bins;
198
- }
199
- return (0, _utils.histogramFromValues)(dataset.allIndexes, HISTOGRAM_BINS, valueAccessor);
200
- }, [columnStats, dataset.allIndexes, valueAccessor]);
201
- var isFiltered = dataset.filteredIndexForDomain.length !== dataset.allIndexes.length;
202
-
203
- // get filteredBins
204
- var filteredBins = (0, _react.useMemo)(function () {
205
- if (!isFiltered) {
206
- return allBins;
207
- }
208
- // get threholds
209
- var filterEmptyBins = false;
210
- var threholds = allBins.map(function (b) {
211
- return b.x0;
212
- });
213
- return (0, _utils.histogramFromThreshold)(threholds, dataset.filteredIndexForDomain, valueAccessor, filterEmptyBins);
214
- }, [dataset, valueAccessor, allBins, isFiltered]);
215
187
 
216
188
  // histograms used by histogram-plot.js
217
189
  var histogramsByGroup = (0, _react.useMemo)(function () {
@@ -221,29 +193,6 @@ function ColumnStatsChartFactory(HistogramPlot) {
221
193
  };
222
194
  }, [allBins, filteredBins]);
223
195
 
224
- // get domain (min, max) of histogram
225
- var histogramDomain = (0, _react.useMemo)(function () {
226
- if (columnStats && columnStats.quantiles && columnStats.mean) {
227
- // no need to recalcuate min/max/mean if its already in columnStats
228
- return [columnStats.quantiles[0].value, columnStats.quantiles[columnStats.quantiles.length - 1].value, columnStats.mean];
229
- }
230
- var domainMin = Number.POSITIVE_INFINITY;
231
- var domainMax = Number.NEGATIVE_INFINITY;
232
- var nValid = 0;
233
- var domainSum = 0;
234
- dataset.allIndexes.forEach(function (x, i) {
235
- var val = valueAccessor(x);
236
- if ((0, _utils.isNumber)(val)) {
237
- if (val < domainMin) domainMin = val;
238
- if (val > domainMax) domainMax = val;
239
- domainSum += val;
240
- nValid += 1;
241
- }
242
- });
243
- var histogramMean = nValid > 0 ? domainSum / nValid : 0;
244
- return [domainMin, domainMax, histogramMean];
245
- }, [dataset, valueAccessor, columnStats]);
246
-
247
196
  // get colors from colorBreaks
248
197
  var domainColors = (0, _react.useMemo)(function () {
249
198
  return colorBreaks ? colorBreaks.map(function (c) {
@@ -333,27 +282,32 @@ function ColumnStatsChartFactory(HistogramPlot) {
333
282
  var colorField = _ref4.colorField,
334
283
  dataset = _ref4.dataset,
335
284
  colorBreaks = _ref4.colorBreaks,
285
+ allBins = _ref4.allBins,
286
+ filteredBins = _ref4.filteredBins,
287
+ isFiltered = _ref4.isFiltered,
288
+ histogramDomain = _ref4.histogramDomain,
336
289
  onChangedUpdater = _ref4.onChangedUpdater;
337
- var fieldName = colorField.name;
290
+ var fieldName = colorField === null || colorField === void 0 ? void 0 : colorField.name;
338
291
  var field = (0, _react.useMemo)(function () {
339
- return dataset.getColumnField(fieldName);
292
+ return fieldName ? dataset.getColumnField(fieldName) : null;
340
293
  }, [dataset, fieldName]);
341
- var isLoading = field === null || field === void 0 ? void 0 : field.isLoadingStats;
342
- if (!(0, _utils.isNumericColorBreaks)(colorBreaks) || !field) {
294
+ if (!(0, _utils.isNumericColorBreaks)(colorBreaks)) {
343
295
  // TODO: implement display for ordinal breaks
344
296
  return null;
345
297
  }
346
- if (isLoading) {
298
+ if (field !== null && field !== void 0 && field.isLoadingStats) {
347
299
  return /*#__PURE__*/_react["default"].createElement(StyledContainer, null, /*#__PURE__*/_react["default"].createElement(_loadingSpinner["default"], null));
348
300
  }
349
301
  return /*#__PURE__*/_react["default"].createElement(ColumnStatsChart, {
350
302
  colorBreaks: colorBreaks,
351
- field: field,
352
- dataset: dataset,
303
+ allBins: allBins,
304
+ filteredBins: filteredBins,
305
+ isFiltered: isFiltered,
306
+ histogramDomain: histogramDomain,
353
307
  onChangedUpdater: onChangedUpdater
354
308
  });
355
309
  };
356
310
  return ColumnStatsChartWLoading;
357
311
  }
358
312
  var _default = exports["default"] = ColumnStatsChartFactory;
359
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNGb3JtYXQiLCJyZXF1aXJlIiwiX2QzU2NhbGUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9jb2xvclBhbGV0dGUiLCJfaGlzdG9ncmFtUGxvdCIsIl9sb2FkaW5nU3Bpbm5lciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJISVNUT0dSQU1fV0lEVEgiLCJleHBvcnRzIiwiSElTVE9HUkFNX0hFSUdIVCIsIkhJU1RPR1JBTV9NQVJHSU4iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJDT0xPUl9DSEFSVF9USUNLX1dSQVBQRVJfSEVJR0hUIiwiQ09MT1JfQ0hBUlRfVElDS19IRUlHSFQiLCJDT0xPUl9DSEFSVF9USUNLX1dJRFRIIiwiQ09MT1JfQ0hBUlRfVElDS19CT1JERVJfQ09MT1IiLCJISVNUT0dSQU1fQklOUyIsIlN0eWxlZENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJDb2xvckNoYXJ0Q29udGFpbmVyIiwiQ29sb3JDaGFydEhlYWRlcldyYXBwZXIiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yIiwiQ29sb3JDaGFydEhlYWRlckl0ZW0iLCJDb2xvckNoYXJ0V3JhcHBlciIsIkNvbG9yUGFsZXR0ZVdyYXBwZXIiLCJIaXN0b2dyYW1XcmFwcGVyIiwiQ29sb3JDaGFydFRpY2tDb250YWluZXIiLCJDb2xvckNoYXJ0SGVhZGVyIiwiX3JlZiIsIm1pblZhbCIsIm1lYW5WYWwiLCJtYXhWYWwiLCJjcmVhdGVFbGVtZW50IiwidGl0bGUiLCJkM0Zvcm1hdCIsInN0eWxlIiwidGV4dEFsaWduIiwiQ29sb3JDaGFydFRpY2siLCJfcmVmMiIsImNvbG9ycyIsInBvc2l0aW9ucyIsImhpc3RvZ3JhbVdpZHRoIiwib25UaWNrTW92aW5nIiwib25UaWNrQ2hhbmdlZCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInN0YXRlUG9zaXRpb25zIiwic2V0UG9zaXRpb25zIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJkcmFnVGljayIsInNldERyYWdUaWNrIiwiY29udGFpbmVyUmVmIiwidXNlUmVmIiwidXNlRWZmZWN0Iiwib25Nb3VzZU1vdmUiLCJ1c2VDYWxsYmFjayIsIm9mZnNldFgiLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwieCIsImNsaWVudFgiLCJsZWZ0Qm91bmQiLCJyaWdodEJvdW5kIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm9uTW91c2VVcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwib25Nb3VzZURvd24iLCJ0aWNrSW5kZXgiLCJpc051bWJlciIsInJlZiIsIm9uTW91c2VMZWF2ZSIsIm1hcCIsImNvbG9yIiwiaW5kZXgiLCJkcmFnZ2FibGUiLCJrZXkiLCJjb25jYXQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY3Vyc29yIiwiQ29sdW1uU3RhdHNDaGFydEZhY3RvcnkiLCJkZXBzIiwiSGlzdG9ncmFtUGxvdEZhY3RvcnkiLCJIaXN0b2dyYW1QbG90IiwiQ29sdW1uU3RhdHNDaGFydCIsIl9yZWYzIiwiX2ZpZWxkJGZpbHRlclByb3BzIiwiZmllbGQiLCJkYXRhc2V0IiwiY29sb3JCcmVha3MiLCJvbkNoYW5nZWRVcGRhdGVyIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0aWNrcyIsInNldFRpY2tzIiwiX3VzZURpbWVuc2lvbnMiLCJ1c2VEaW1lbnNpb25zIiwiX3VzZURpbWVuc2lvbnMyIiwic2l6ZSIsImlzVGlja0NoYW5naW5nUmVmIiwiUmVhY3QiLCJ2YWx1ZUFjY2Vzc29yIiwidXNlTWVtbyIsImlkeCIsImdldFZhbHVlIiwibmFtZSIsImNvbHVtblN0YXRzIiwiZmlsdGVyUHJvcHMiLCJhbGxCaW5zIiwiYmlucyIsImhpc3RvZ3JhbUZyb21WYWx1ZXMiLCJhbGxJbmRleGVzIiwiaXNGaWx0ZXJlZCIsImZpbHRlcmVkSW5kZXhGb3JEb21haW4iLCJmaWx0ZXJlZEJpbnMiLCJmaWx0ZXJFbXB0eUJpbnMiLCJ0aHJlaG9sZHMiLCJiIiwieDAiLCJoaXN0b2dyYW1Gcm9tVGhyZXNob2xkIiwiaGlzdG9ncmFtc0J5R3JvdXAiLCJoaXN0b2dyYW1Eb21haW4iLCJxdWFudGlsZXMiLCJtZWFuIiwidmFsdWUiLCJkb21haW5NaW4iLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImRvbWFpbk1heCIsIk5FR0FUSVZFX0lORklOSVRZIiwiblZhbGlkIiwiZG9tYWluU3VtIiwidmFsIiwiaGlzdG9ncmFtTWVhbiIsImRvbWFpbkNvbG9ycyIsImMiLCJkYXRhIiwidGlja1Bvc2l0aW9ucyIsIl9oaXN0b2dyYW1Eb21haW4iLCJ2YWx1ZU1pbiIsInZhbHVlTWF4Iiwid2lkdGhTY2FsZSIsInNjYWxlTGluZWFyIiwiZG9tYWluIiwicmFuZ2UiLCJzbGljZSIsImNiIiwicG9zIiwiZG9tYWluQ29sb3JXaWR0aHMiLCJ3aWR0aHMiLCJvblRpY2tNb3ZpbmdIYW5kbGVyIiwibmV3VGlja1Bvc2l0aW9ucyIsIl9oaXN0b2dyYW1Eb21haW4yIiwidmFsdWVSYW5nZSIsImJyZWFrcyIsImVsZW1lbnQiLCJsZWZ0VmFsdWUiLCJyaWdodFZhbHVlIiwiaW5wdXRzIiwibGFiZWwiLCJvblRpY2tDaGFuZ2VkSGFuZGxlciIsImNvbG9yV2lkdGhzIiwiY29sb3JzQnlHcm91cCIsImlzTWFza2VkIiwiSElTVE9HUkFNX01BU0tfTU9ERSIsIk1hc2tXaXRoT3ZlcmxheSIsIk1hc2siLCJtYXJnaW4iLCJicmVha0xpbmVzIiwiQ29sdW1uU3RhdHNDaGFydFdMb2FkaW5nIiwiX3JlZjQiLCJjb2xvckZpZWxkIiwiZmllbGROYW1lIiwiZ2V0Q29sdW1uRmllbGQiLCJpc0xvYWRpbmciLCJpc0xvYWRpbmdTdGF0cyIsImlzTnVtZXJpY0NvbG9yQnJlYWtzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL2NvbHVtbi1zdGF0cy1jaGFydC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtmb3JtYXQgYXMgZDNGb3JtYXR9IGZyb20gJ2QzLWZvcm1hdCc7XG5pbXBvcnQge3NjYWxlTGluZWFyfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0ZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIENvbG9yQnJlYWssXG4gIENvbG9yQnJlYWtPcmRpbmFsLFxuICBoaXN0b2dyYW1Gcm9tVGhyZXNob2xkLFxuICBoaXN0b2dyYW1Gcm9tVmFsdWVzLFxuICBpc051bWJlcixcbiAgaXNOdW1lcmljQ29sb3JCcmVha3MsXG4gIHVzZURpbWVuc2lvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCBDb2xvclBhbGV0dGUgZnJvbSAnLi4vc2lkZS1wYW5lbC9sYXllci1wYW5lbC9jb2xvci1wYWxldHRlJztcbmltcG9ydCBIaXN0b2dyYW1QbG90RmFjdG9yeSwge0hJU1RPR1JBTV9NQVNLX01PREV9IGZyb20gJy4vaGlzdG9ncmFtLXBsb3QnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJy4vbG9hZGluZy1zcGlubmVyJztcblxuZXhwb3J0IGNvbnN0IEhJU1RPR1JBTV9XSURUSCA9IDIxMDtcbmV4cG9ydCBjb25zdCBISVNUT0dSQU1fSEVJR0hUID0gODA7XG5jb25zdCBISVNUT0dSQU1fTUFSR0lOID0ge3RvcDogMTAsIGJvdHRvbTogOCwgbGVmdDogMTAsIHJpZ2h0OiAyMH07XG5jb25zdCBDT0xPUl9DSEFSVF9USUNLX1dSQVBQRVJfSEVJR0hUID0gMTA7XG5jb25zdCBDT0xPUl9DSEFSVF9USUNLX0hFSUdIVCA9IDg7XG5jb25zdCBDT0xPUl9DSEFSVF9USUNLX1dJRFRIID0gNDtcbmNvbnN0IENPTE9SX0NIQVJUX1RJQ0tfQk9SREVSX0NPTE9SID0gJyM5OTk5OTknO1xuY29uc3QgSElTVE9HUkFNX0JJTlMgPSAzMDtcblxuY29uc3QgU3R5bGVkQ29udGFpbmVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LWxvYWRpbmcnXG59KWBcbiAgaGVpZ2h0OiAke0hJU1RPR1JBTV9IRUlHSFR9cHg7XG5gO1xuXG4vLyBoZWlnaHQgMTQyID0gMTggKyAxMTAgKyAxMFxuY29uc3QgQ29sb3JDaGFydENvbnRhaW5lciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdjb2xvci1jaGFydC1jb250YWluZXInXG59KWBcbiAgbWFyZ2luLXRvcDogOHB4O1xuYDtcblxuY29uc3QgQ29sb3JDaGFydEhlYWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnY29sb3ItY2hhcnQtaGVhZGVyJ1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBtYXJnaW4tbGVmdDogJHtISVNUT0dSQU1fTUFSR0lOLmxlZnR9cHg7XG4gIG1hcmdpbi1yaWdodDogJHtISVNUT0dSQU1fTUFSR0lOLnJpZ2h0fXB4O1xuICBmb250LXNpemU6IDlweDtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRIZWFkZXJJdGVtID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDMzJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LXdyYXBwZXInXG59KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6ICR7SElTVE9HUkFNX0hFSUdIVCArIDMwfXB4O1xuYDtcblxuY29uc3QgQ29sb3JQYWxldHRlV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdjb2xvci1jaGFydC1wYWxldHRlJ1xufSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLXRvcDogJHtISVNUT0dSQU1fTUFSR0lOLnRvcH1weDtcbiAgbWFyZ2luLWxlZnQ6ICR7SElTVE9HUkFNX01BUkdJTi5sZWZ0fXB4O1xuICBtYXJnaW4tcmlnaHQ6ICR7SElTVE9HUkFNX01BUkdJTi5yaWdodH1weDtcbmA7XG5cbmNvbnN0IEhpc3RvZ3JhbVdyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnY29sb3ItY2hhcnQtaGlzdG9ncmFtJ1xufSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRUaWNrQ29udGFpbmVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LXRpY2stY29udGFpbmVyJ1xufSlgXG4gIGhlaWdodDogJHtDT0xPUl9DSEFSVF9USUNLX1dSQVBQRVJfSEVJR0hUfXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1sZWZ0OiAke0hJU1RPR1JBTV9NQVJHSU4ubGVmdH1weDtcbiAgbWFyZ2luLXJpZ2h0OiAke0hJU1RPR1JBTV9NQVJHSU4ucmlnaHR9cHg7XG5gO1xuXG5leHBvcnQgY29uc3QgQ29sb3JDaGFydEhlYWRlciA9ICh7bWluVmFsLCBtZWFuVmFsLCBtYXhWYWx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENvbG9yQ2hhcnRIZWFkZXJXcmFwcGVyPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttaW5WYWx9Pk1JTjoge21pblZhbH08L0NvbG9yQ2hhcnRIZWFkZXJJdGVtPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttZWFuVmFsfT5NRUFOOiB7ZDNGb3JtYXQoJy40fnInKShtZWFuVmFsKX08L0NvbG9yQ2hhcnRIZWFkZXJJdGVtPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttYXhWYWx9IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+XG4gICAgICAgIE1BWDoge21heFZhbH1cbiAgICAgIDwvQ29sb3JDaGFydEhlYWRlckl0ZW0+XG4gICAgPC9Db2xvckNoYXJ0SGVhZGVyV3JhcHBlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbG9yQ2hhcnRUaWNrUHJvcHMgPSB7XG4gIGNvbG9yczogc3RyaW5nW107XG4gIHBvc2l0aW9uczogbnVtYmVyW107XG4gIG9uVGlja01vdmluZzogKHBvc2l0aW9uczogbnVtYmVyW10sIGRyYWdUaWNrOiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uVGlja0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIGhpc3RvZ3JhbVdpZHRoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgQ29sb3JDaGFydFRpY2s6IFJlYWN0LkZDPENvbG9yQ2hhcnRUaWNrUHJvcHM+ID0gKHtcbiAgY29sb3JzLFxuICBwb3NpdGlvbnMsXG4gIGhpc3RvZ3JhbVdpZHRoLFxuICBvblRpY2tNb3ZpbmcsXG4gIG9uVGlja0NoYW5nZWRcbn0pID0+IHtcbiAgY29uc3QgW3N0YXRlUG9zaXRpb25zLCBzZXRQb3NpdGlvbnNdID0gdXNlU3RhdGUocG9zaXRpb25zKTtcbiAgY29uc3QgW2RyYWdUaWNrLCBzZXREcmFnVGlja10gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICBzZXREcmFnVGljayhkcmFnVGljayk7XG4gIH0sIFtwb3NpdGlvbnMsIGRyYWdUaWNrXSk7XG5cbiAgY29uc3Qgb25Nb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICBlID0+IHtcbiAgICAgIGlmIChkcmFnVGljayA+PSAwKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG4gICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IGUuY2xpZW50WCAtIChvZmZzZXRYID8/IDApO1xuICAgICAgICBjb25zdCBsZWZ0Qm91bmQgPSBkcmFnVGljayA9PT0gMCA/IDAgOiBzdGF0ZVBvc2l0aW9uc1tkcmFnVGljayAtIDFdICsgMTtcbiAgICAgICAgY29uc3QgcmlnaHRCb3VuZCA9XG4gICAgICAgICAgZHJhZ1RpY2sgPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxID8gaGlzdG9ncmFtV2lkdGggOiBzdGF0ZVBvc2l0aW9uc1tkcmFnVGljayArIDFdIC0gMTtcblxuICAgICAgICAvLyByZXN0cmljdCB1c2VyIGRyYWctbi1tb3ZlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgbmVpZ2hib3JpbmcgdGlja3NcbiAgICAgICAgaWYgKHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA8IGxlZnRCb3VuZCkge1xuICAgICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IGxlZnRCb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGVQb3NpdGlvbnNbZHJhZ1RpY2tdID4gcmlnaHRCb3VuZCkge1xuICAgICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IHJpZ2h0Qm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UG9zaXRpb25zKFsuLi5zdGF0ZVBvc2l0aW9uc10pO1xuICAgICAgICBvblRpY2tNb3Zpbmcoc3RhdGVQb3NpdGlvbnMsIGRyYWdUaWNrKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkcmFnVGljaywgb25UaWNrTW92aW5nLCBwb3NpdGlvbnMubGVuZ3RoLCBzdGF0ZVBvc2l0aW9ucywgaGlzdG9ncmFtV2lkdGhdXG4gICk7XG5cbiAgY29uc3Qgb25Nb3VzZVVwID0gdXNlQ2FsbGJhY2soXG4gICAgZSA9PiB7XG4gICAgICBpZiAoZHJhZ1RpY2sgPj0gMCkge1xuICAgICAgICBvblRpY2tDaGFuZ2VkKCk7XG4gICAgICAgIHNldERyYWdUaWNrKC0xKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2RyYWdUaWNrLCBvblRpY2tDaGFuZ2VkXVxuICApO1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gdXNlQ2FsbGJhY2soKGUsIHRpY2tJbmRleCkgPT4ge1xuICAgIGlmIChpc051bWJlcih0aWNrSW5kZXgpKSB7XG4gICAgICBzZXREcmFnVGljayh0aWNrSW5kZXgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxDb2xvckNoYXJ0VGlja0NvbnRhaW5lclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICBvbk1vdXNlVXA9e29uTW91c2VVcH1cbiAgICAgIG9uTW91c2VMZWF2ZT17b25Nb3VzZVVwfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvciwgaW5kZXgpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRyYWdnYWJsZT17dHJ1ZX1cbiAgICAgICAgICBrZXk9e2Bjb2xvci1jaGFydC10aWNrLSR7Y29sb3J9LSR7aW5kZXh9YH1cbiAgICAgICAgICBvbk1vdXNlRG93bj17ZSA9PiBvbk1vdXNlRG93bihlLCBpbmRleCl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICBsZWZ0OiBgJHtzdGF0ZVBvc2l0aW9uc1tpbmRleF0gLSBDT0xPUl9DSEFSVF9USUNLX1dJRFRIIC8gMiAtIDF9cHhgLFxuICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGAxcHhgLFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogQ09MT1JfQ0hBUlRfVElDS19CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHtDT0xPUl9DSEFSVF9USUNLX1dJRFRIfXB4YCxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Q09MT1JfQ0hBUlRfVElDS19IRUlHSFR9cHhgLFxuICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcidcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9Db2xvckNoYXJ0VGlja0NvbnRhaW5lcj5cbiAgKTtcbn07XG5cbi8vIG9ubHkgZm9yIG51bWV0aWMgZmllbGRcbkNvbHVtblN0YXRzQ2hhcnRGYWN0b3J5LmRlcHMgPSBbSGlzdG9ncmFtUGxvdEZhY3RvcnldO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5TdGF0c0NoYXJ0V0xvYWRpbmdQcm9wcyA9IHtcbiAgY29sb3JGaWVsZDogRmllbGQ7XG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlO1xuICBjb2xvckJyZWFrczogQ29sb3JCcmVha1tdIHwgQ29sb3JCcmVha09yZGluYWxbXSB8IG51bGw7XG4gIG9uQ2hhbmdlZFVwZGF0ZXI6ICh0aWNrczogQ29sb3JCcmVha1tdKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU3RhdHNDaGFydFByb3BzID0ge1xuICBmaWVsZDogRmllbGQ7XG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlO1xuICBjb2xvckJyZWFrczogQ29sb3JCcmVha1tdO1xuICBvbkNoYW5nZWRVcGRhdGVyOiAodGlja3M6IENvbG9yQnJlYWtbXSkgPT4gdm9pZDtcbn07XG5mdW5jdGlvbiBDb2x1bW5TdGF0c0NoYXJ0RmFjdG9yeShcbiAgSGlzdG9ncmFtUGxvdDogUmV0dXJuVHlwZTx0eXBlb2YgSGlzdG9ncmFtUGxvdEZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxDb2x1bW5TdGF0c0NoYXJ0V0xvYWRpbmdQcm9wcz4ge1xuICBjb25zdCBDb2x1bW5TdGF0c0NoYXJ0OiBSZWFjdC5GQzxDb2x1bW5TdGF0c0NoYXJ0UHJvcHM+ID0gKHtcbiAgICBmaWVsZCxcbiAgICBkYXRhc2V0LFxuICAgIGNvbG9yQnJlYWtzLFxuICAgIG9uQ2hhbmdlZFVwZGF0ZXJcbiAgfSkgPT4ge1xuICAgIGNvbnN0IFt0aWNrcywgc2V0VGlja3NdID0gdXNlU3RhdGUoY29sb3JCcmVha3MpO1xuICAgIGNvbnN0IFtyZWYsIHNpemVdID0gdXNlRGltZW5zaW9uczxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBjb25zdCBoaXN0b2dyYW1XaWR0aCA9IHNpemVcbiAgICAgID8gc2l6ZS53aWR0aCAtIEhJU1RPR1JBTV9NQVJHSU4ubGVmdCAtIEhJU1RPR1JBTV9NQVJHSU4ucmlnaHRcbiAgICAgIDogSElTVE9HUkFNX1dJRFRIO1xuXG4gICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwcm9wcy5jb2xvckJyZWFrcyBhbmQgc3RhdGVzLnRpY2tzXG4gICAgY29uc3QgaXNUaWNrQ2hhbmdpbmdSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHNldFRpY2tzKHRpY2tzKTtcbiAgICAgIC8vIHJlc2V0IGlzVGlja0NoYW5naW5nIG9uY2UgaGlzdG9ncmFtIGRvbWFpbiBpcyByZWNvbXB1dGVkXG4gICAgICBpc1RpY2tDaGFuZ2luZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSwgW3RpY2tzXSk7XG5cbiAgICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICByZXR1cm4gaWR4ID0+IGRhdGFzZXQuZ2V0VmFsdWUoZmllbGQubmFtZSwgaWR4KTtcbiAgICB9LCBbZGF0YXNldCwgZmllbGQubmFtZV0pO1xuXG4gICAgY29uc3QgY29sdW1uU3RhdHMgPSBmaWVsZC5maWx0ZXJQcm9wcz8uY29sdW1uU3RhdHM7XG5cbiAgICAvLyBnZXQgYmlucyB3aXRoIGFsbEluZGV4ZXNcbiAgICBjb25zdCBhbGxCaW5zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoY29sdW1uU3RhdHM/LmJpbnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtblN0YXRzPy5iaW5zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhpc3RvZ3JhbUZyb21WYWx1ZXMoZGF0YXNldC5hbGxJbmRleGVzLCBISVNUT0dSQU1fQklOUywgdmFsdWVBY2Nlc3Nvcik7XG4gICAgfSwgW2NvbHVtblN0YXRzLCBkYXRhc2V0LmFsbEluZGV4ZXMsIHZhbHVlQWNjZXNzb3JdKTtcblxuICAgIGNvbnN0IGlzRmlsdGVyZWQgPSBkYXRhc2V0LmZpbHRlcmVkSW5kZXhGb3JEb21haW4ubGVuZ3RoICE9PSBkYXRhc2V0LmFsbEluZGV4ZXMubGVuZ3RoO1xuXG4gICAgLy8gZ2V0IGZpbHRlcmVkQmluc1xuICAgIGNvbnN0IGZpbHRlcmVkQmlucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCFpc0ZpbHRlcmVkKSB7XG4gICAgICAgIHJldHVybiBhbGxCaW5zO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRocmVob2xkc1xuICAgICAgY29uc3QgZmlsdGVyRW1wdHlCaW5zID0gZmFsc2U7XG4gICAgICBjb25zdCB0aHJlaG9sZHMgPSBhbGxCaW5zLm1hcChiID0+IGIueDApO1xuICAgICAgcmV0dXJuIGhpc3RvZ3JhbUZyb21UaHJlc2hvbGQoXG4gICAgICAgIHRocmVob2xkcyxcbiAgICAgICAgZGF0YXNldC5maWx0ZXJlZEluZGV4Rm9yRG9tYWluLFxuICAgICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgICBmaWx0ZXJFbXB0eUJpbnNcbiAgICAgICk7XG4gICAgfSwgW2RhdGFzZXQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbnMsIGlzRmlsdGVyZWRdKTtcblxuICAgIC8vIGhpc3RvZ3JhbXMgdXNlZCBieSBoaXN0b2dyYW0tcGxvdC5qc1xuICAgIGNvbnN0IGhpc3RvZ3JhbXNCeUdyb3VwID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGJpbnM6IGFsbEJpbnMsXG4gICAgICAgIGZpbHRlcmVkQmluc1xuICAgICAgfSksXG4gICAgICBbYWxsQmlucywgZmlsdGVyZWRCaW5zXVxuICAgICk7XG5cbiAgICAvLyBnZXQgZG9tYWluIChtaW4sIG1heCkgb2YgaGlzdG9ncmFtXG4gICAgY29uc3QgaGlzdG9ncmFtRG9tYWluID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoY29sdW1uU3RhdHMgJiYgY29sdW1uU3RhdHMucXVhbnRpbGVzICYmIGNvbHVtblN0YXRzLm1lYW4pIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byByZWNhbGN1YXRlIG1pbi9tYXgvbWVhbiBpZiBpdHMgYWxyZWFkeSBpbiBjb2x1bW5TdGF0c1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGNvbHVtblN0YXRzLnF1YW50aWxlc1swXS52YWx1ZSxcbiAgICAgICAgICBjb2x1bW5TdGF0cy5xdWFudGlsZXNbY29sdW1uU3RhdHMucXVhbnRpbGVzLmxlbmd0aCAtIDFdLnZhbHVlLFxuICAgICAgICAgIGNvbHVtblN0YXRzLm1lYW5cbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGxldCBkb21haW5NaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICBsZXQgZG9tYWluTWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgbGV0IG5WYWxpZCA9IDA7XG4gICAgICBsZXQgZG9tYWluU3VtID0gMDtcbiAgICAgIGRhdGFzZXQuYWxsSW5kZXhlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHZhbHVlQWNjZXNzb3IoeCk7XG4gICAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgICAgaWYgKHZhbCA8IGRvbWFpbk1pbikgZG9tYWluTWluID0gdmFsO1xuICAgICAgICAgIGlmICh2YWwgPiBkb21haW5NYXgpIGRvbWFpbk1heCA9IHZhbDtcbiAgICAgICAgICBkb21haW5TdW0gKz0gdmFsO1xuICAgICAgICAgIG5WYWxpZCArPSAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGhpc3RvZ3JhbU1lYW4gPSBuVmFsaWQgPiAwID8gZG9tYWluU3VtIC8gblZhbGlkIDogMDtcblxuICAgICAgcmV0dXJuIFtkb21haW5NaW4sIGRvbWFpbk1heCwgaGlzdG9ncmFtTWVhbl07XG4gICAgfSwgW2RhdGFzZXQsIHZhbHVlQWNjZXNzb3IsIGNvbHVtblN0YXRzXSk7XG5cbiAgICAvLyBnZXQgY29sb3JzIGZyb20gY29sb3JCcmVha3NcbiAgICBjb25zdCBkb21haW5Db2xvcnMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKGNvbG9yQnJlYWtzID8gY29sb3JCcmVha3MubWFwKGMgPT4gYy5kYXRhKSA6IFtdKSxcbiAgICAgIFtjb2xvckJyZWFrc11cbiAgICApO1xuXG4gICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCFpc1RpY2tDaGFuZ2luZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldFRpY2tzKGNvbG9yQnJlYWtzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3ZhbHVlTWluLCB2YWx1ZU1heF0gPSBoaXN0b2dyYW1Eb21haW47XG4gICAgICBjb25zdCB3aWR0aFNjYWxlID0gc2NhbGVMaW5lYXIoKS5kb21haW4oW3ZhbHVlTWluLCB2YWx1ZU1heF0pLnJhbmdlKFswLCBoaXN0b2dyYW1XaWR0aF0pO1xuICAgICAgcmV0dXJuIHRpY2tzLnNsaWNlKDAsIC0xKS5tYXAoY2IgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSB3aWR0aFNjYWxlKGNiLnJhbmdlWzFdKTtcbiAgICAgICAgaWYgKHBvcyA8IDApIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmIChwb3MgPiBoaXN0b2dyYW1XaWR0aCkgcmV0dXJuIGhpc3RvZ3JhbVdpZHRoO1xuICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgfSk7XG4gICAgfSwgW2hpc3RvZ3JhbURvbWFpbiwgdGlja3MsIGNvbG9yQnJlYWtzLCBoaXN0b2dyYW1XaWR0aF0pO1xuXG4gICAgY29uc3QgZG9tYWluQ29sb3JXaWR0aHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0aWNrUG9zaXRpb25zLmxlbmd0aDtcbiAgICAgIGNvbnN0IHdpZHRocyA9IFt0aWNrUG9zaXRpb25zWzBdXTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHdpZHRocy5wdXNoKHRpY2tQb3NpdGlvbnNbaV0gLSB0aWNrUG9zaXRpb25zW2kgLSAxXSk7XG4gICAgICB9XG4gICAgICB3aWR0aHMucHVzaChoaXN0b2dyYW1XaWR0aCAtIHRpY2tQb3NpdGlvbnNbbiAtIDFdKTtcbiAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfSwgW3RpY2tQb3NpdGlvbnMsIGhpc3RvZ3JhbVdpZHRoXSk7XG5cbiAgICAvLyBoYW5kbGUgdGljayBkcmFnLW4tbW92ZVxuICAgIGNvbnN0IG9uVGlja01vdmluZ0hhbmRsZXIgPSB1c2VDYWxsYmFjayhcbiAgICAgIChuZXdUaWNrUG9zaXRpb25zLCB0aWNrSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW3ZhbHVlTWluLCB2YWx1ZU1heF0gPSBoaXN0b2dyYW1Eb21haW47XG4gICAgICAgIGNvbnN0IHZhbHVlUmFuZ2UgPSB2YWx1ZU1heCAtIHZhbHVlTWluO1xuICAgICAgICBjb25zdCBicmVha3MgPSBbdmFsdWVNaW5dO1xuICAgICAgICBuZXdUaWNrUG9zaXRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgYnJlYWtzLnB1c2godmFsdWVNaW4gKyAodmFsdWVSYW5nZSAqIGVsZW1lbnQpIC8gaGlzdG9ncmFtV2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWtzLnB1c2godmFsdWVNYXgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlja3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjb25zdCBsZWZ0VmFsdWUgPSBpID09PSB0aWNrSW5kZXggKyAxID8gYnJlYWtzW2ldIDogdGlja3NbaV0ucmFuZ2VbMF07XG4gICAgICAgICAgY29uc3QgcmlnaHRWYWx1ZSA9IGkgKyAxID09PSB0aWNrSW5kZXggKyAxID8gYnJlYWtzW2kgKyAxXSA6IHRpY2tzW2ldLnJhbmdlWzFdO1xuXG4gICAgICAgICAgdGlja3NbaV0gPSB7XG4gICAgICAgICAgICAuLi50aWNrc1tpXSxcbiAgICAgICAgICAgIHJhbmdlOiBbbGVmdFZhbHVlLCByaWdodFZhbHVlXSxcbiAgICAgICAgICAgIGlucHV0czogW2xlZnRWYWx1ZSwgcmlnaHRWYWx1ZV0sXG4gICAgICAgICAgICBsYWJlbDogYCR7ZDNGb3JtYXQoJy4yZicpKGJyZWFrc1tpXSl9IHRvICR7ZDNGb3JtYXQoJy4yZicpKGJyZWFrc1tpICsgMV0pfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlzVGlja0NoYW5naW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZXRUaWNrcyhbLi4udGlja3NdKTtcbiAgICAgIH0sXG4gICAgICBbaGlzdG9ncmFtRG9tYWluLCB0aWNrcywgaGlzdG9ncmFtV2lkdGhdXG4gICAgKTtcblxuICAgIC8vIHVwZGF0ZSBwYXJlbnQgYW5kIHNpYmxpbmcgY29tcG9uZW50cyB3aGVuIHRpY2sgZHJhZ2dpbmcgZW5kZWRcbiAgICBjb25zdCBvblRpY2tDaGFuZ2VkSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIG9uQ2hhbmdlZFVwZGF0ZXIodGlja3MpO1xuICAgIH0sIFtvbkNoYW5nZWRVcGRhdGVyLCB0aWNrc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb2xvckNoYXJ0Q29udGFpbmVyIHJlZj17cmVmfT5cbiAgICAgICAgPENvbG9yQ2hhcnRIZWFkZXJcbiAgICAgICAgICBtaW5WYWw9e2hpc3RvZ3JhbURvbWFpblswXX1cbiAgICAgICAgICBtYXhWYWw9e2hpc3RvZ3JhbURvbWFpblsxXX1cbiAgICAgICAgICBtZWFuVmFsPXtoaXN0b2dyYW1Eb21haW5bMl19XG4gICAgICAgIC8+XG4gICAgICAgIDxDb2xvckNoYXJ0V3JhcHBlcj5cbiAgICAgICAgICA8Q29sb3JQYWxldHRlV3JhcHBlcj5cbiAgICAgICAgICAgIDxDb2xvclBhbGV0dGVcbiAgICAgICAgICAgICAgY29sb3JzPXtkb21haW5Db2xvcnN9XG4gICAgICAgICAgICAgIGNvbG9yV2lkdGhzPXtkb21haW5Db2xvcldpZHRoc31cbiAgICAgICAgICAgICAgaGVpZ2h0PXtISVNUT0dSQU1fSEVJR0hUICsgMTZ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvQ29sb3JQYWxldHRlV3JhcHBlcj5cbiAgICAgICAgICA8SGlzdG9ncmFtV3JhcHBlcj5cbiAgICAgICAgICAgIDxIaXN0b2dyYW1QbG90XG4gICAgICAgICAgICAgIGhpc3RvZ3JhbXNCeUdyb3VwPXtoaXN0b2dyYW1zQnlHcm91cH1cbiAgICAgICAgICAgICAgY29sb3JzQnlHcm91cD17bnVsbH1cbiAgICAgICAgICAgICAgaXNNYXNrZWQ9e2lzRmlsdGVyZWQgPyBISVNUT0dSQU1fTUFTS19NT0RFLk1hc2tXaXRoT3ZlcmxheSA6IEhJU1RPR1JBTV9NQVNLX01PREUuTWFza31cbiAgICAgICAgICAgICAgdmFsdWU9e2hpc3RvZ3JhbURvbWFpbn1cbiAgICAgICAgICAgICAgd2lkdGg9e2hpc3RvZ3JhbVdpZHRofVxuICAgICAgICAgICAgICBoZWlnaHQ9e0hJU1RPR1JBTV9IRUlHSFR9XG4gICAgICAgICAgICAgIG1hcmdpbj17SElTVE9HUkFNX01BUkdJTn1cbiAgICAgICAgICAgICAgYnJlYWtMaW5lcz17dGlja1Bvc2l0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9IaXN0b2dyYW1XcmFwcGVyPlxuICAgICAgICA8L0NvbG9yQ2hhcnRXcmFwcGVyPlxuICAgICAgICA8Q29sb3JDaGFydFRpY2tcbiAgICAgICAgICBjb2xvcnM9e2RvbWFpbkNvbG9ycy5zbGljZSgwLCAtMSl9XG4gICAgICAgICAgcG9zaXRpb25zPXt0aWNrUG9zaXRpb25zfVxuICAgICAgICAgIGhpc3RvZ3JhbVdpZHRoPXtoaXN0b2dyYW1XaWR0aH1cbiAgICAgICAgICBvblRpY2tNb3Zpbmc9e29uVGlja01vdmluZ0hhbmRsZXJ9XG4gICAgICAgICAgb25UaWNrQ2hhbmdlZD17b25UaWNrQ2hhbmdlZEhhbmRsZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L0NvbG9yQ2hhcnRDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBDb2x1bW5TdGF0c0NoYXJ0V0xvYWRpbmc6IFJlYWN0LkZDPENvbHVtblN0YXRzQ2hhcnRXTG9hZGluZ1Byb3BzPiA9ICh7XG4gICAgY29sb3JGaWVsZCxcbiAgICBkYXRhc2V0LFxuICAgIGNvbG9yQnJlYWtzLFxuICAgIG9uQ2hhbmdlZFVwZGF0ZXJcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTmFtZSA9IGNvbG9yRmllbGQubmFtZTtcbiAgICBjb25zdCBmaWVsZCA9IHVzZU1lbW8oKCkgPT4gZGF0YXNldC5nZXRDb2x1bW5GaWVsZChmaWVsZE5hbWUpLCBbZGF0YXNldCwgZmllbGROYW1lXSk7XG5cbiAgICBjb25zdCBpc0xvYWRpbmcgPSBmaWVsZD8uaXNMb2FkaW5nU3RhdHM7XG5cbiAgICBpZiAoIWlzTnVtZXJpY0NvbG9yQnJlYWtzKGNvbG9yQnJlYWtzKSB8fCAhZmllbGQpIHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBkaXNwbGF5IGZvciBvcmRpbmFsIGJyZWFrc1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZENvbnRhaW5lcj5cbiAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgPC9TdHlsZWRDb250YWluZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29sdW1uU3RhdHNDaGFydFxuICAgICAgICBjb2xvckJyZWFrcz17Y29sb3JCcmVha3N9XG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZGF0YXNldD17ZGF0YXNldH1cbiAgICAgICAgb25DaGFuZ2VkVXBkYXRlcj17b25DaGFuZ2VkVXBkYXRlcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ29sdW1uU3RhdHNDaGFydFdMb2FkaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2x1bW5TdGF0c0NoYXJ0RmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUwsT0FBQTtBQUlBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQVVBLElBQUFPLGFBQUEsR0FBQUYsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFRLGNBQUEsR0FBQUwsdUJBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFTLGVBQUEsR0FBQUosc0JBQUEsQ0FBQUwsT0FBQTtBQUErQyxJQUFBVSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBdEIvQztBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFoQix3QkFBQWdCLENBQUEsRUFB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
313
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNGb3JtYXQiLCJyZXF1aXJlIiwiX2QzU2NhbGUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9jb2xvclBhbGV0dGUiLCJfaGlzdG9ncmFtUGxvdCIsIl9sb2FkaW5nU3Bpbm5lciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJISVNUT0dSQU1fV0lEVEgiLCJleHBvcnRzIiwiSElTVE9HUkFNX0hFSUdIVCIsIkhJU1RPR1JBTV9NQVJHSU4iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJDT0xPUl9DSEFSVF9USUNLX1dSQVBQRVJfSEVJR0hUIiwiQ09MT1JfQ0hBUlRfVElDS19IRUlHSFQiLCJDT0xPUl9DSEFSVF9USUNLX1dJRFRIIiwiQ09MT1JfQ0hBUlRfVElDS19CT1JERVJfQ09MT1IiLCJTdHlsZWRDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiQ29sb3JDaGFydENvbnRhaW5lciIsIkNvbG9yQ2hhcnRIZWFkZXJXcmFwcGVyIiwicHJvcHMiLCJ0aGVtZSIsInRleHRDb2xvciIsIkNvbG9yQ2hhcnRIZWFkZXJJdGVtIiwiQ29sb3JDaGFydFdyYXBwZXIiLCJDb2xvclBhbGV0dGVXcmFwcGVyIiwiSGlzdG9ncmFtV3JhcHBlciIsIkNvbG9yQ2hhcnRUaWNrQ29udGFpbmVyIiwiQ29sb3JDaGFydEhlYWRlciIsIl9yZWYiLCJtaW5WYWwiLCJtZWFuVmFsIiwibWF4VmFsIiwiY3JlYXRlRWxlbWVudCIsInRpdGxlIiwiZDNGb3JtYXQiLCJzdHlsZSIsInRleHRBbGlnbiIsIkNvbG9yQ2hhcnRUaWNrIiwiX3JlZjIiLCJjb2xvcnMiLCJwb3NpdGlvbnMiLCJoaXN0b2dyYW1XaWR0aCIsIm9uVGlja01vdmluZyIsIm9uVGlja0NoYW5nZWQiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJzdGF0ZVBvc2l0aW9ucyIsInNldFBvc2l0aW9ucyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZHJhZ1RpY2siLCJzZXREcmFnVGljayIsImNvbnRhaW5lclJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsIm9uTW91c2VNb3ZlIiwidXNlQ2FsbGJhY2siLCJvZmZzZXRYIiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJjbGllbnRYIiwibGVmdEJvdW5kIiwicmlnaHRCb3VuZCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJvbk1vdXNlVXAiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsIm9uTW91c2VEb3duIiwidGlja0luZGV4IiwiaXNOdW1iZXIiLCJyZWYiLCJvbk1vdXNlTGVhdmUiLCJtYXAiLCJjb2xvciIsImluZGV4IiwiZHJhZ2dhYmxlIiwia2V5IiwiY29uY2F0IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsImN1cnNvciIsIkNvbHVtblN0YXRzQ2hhcnRGYWN0b3J5IiwiZGVwcyIsIkhpc3RvZ3JhbVBsb3RGYWN0b3J5IiwiSGlzdG9ncmFtUGxvdCIsIkNvbHVtblN0YXRzQ2hhcnQiLCJfcmVmMyIsImFsbEJpbnMiLCJmaWx0ZXJlZEJpbnMiLCJpc0ZpbHRlcmVkIiwiaGlzdG9ncmFtRG9tYWluIiwiY29sb3JCcmVha3MiLCJvbkNoYW5nZWRVcGRhdGVyIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0aWNrcyIsInNldFRpY2tzIiwiX3VzZURpbWVuc2lvbnMiLCJ1c2VEaW1lbnNpb25zIiwiX3VzZURpbWVuc2lvbnMyIiwic2l6ZSIsImlzVGlja0NoYW5naW5nUmVmIiwiUmVhY3QiLCJoaXN0b2dyYW1zQnlHcm91cCIsInVzZU1lbW8iLCJiaW5zIiwiZG9tYWluQ29sb3JzIiwiYyIsImRhdGEiLCJ0aWNrUG9zaXRpb25zIiwiX2hpc3RvZ3JhbURvbWFpbiIsInZhbHVlTWluIiwidmFsdWVNYXgiLCJ3aWR0aFNjYWxlIiwic2NhbGVMaW5lYXIiLCJkb21haW4iLCJyYW5nZSIsInNsaWNlIiwiY2IiLCJwb3MiLCJkb21haW5Db2xvcldpZHRocyIsIndpZHRocyIsIm9uVGlja01vdmluZ0hhbmRsZXIiLCJuZXdUaWNrUG9zaXRpb25zIiwiX2hpc3RvZ3JhbURvbWFpbjIiLCJ2YWx1ZVJhbmdlIiwiYnJlYWtzIiwiZWxlbWVudCIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJpbnB1dHMiLCJsYWJlbCIsIm9uVGlja0NoYW5nZWRIYW5kbGVyIiwiY29sb3JXaWR0aHMiLCJjb2xvcnNCeUdyb3VwIiwiaXNNYXNrZWQiLCJISVNUT0dSQU1fTUFTS19NT0RFIiwiTWFza1dpdGhPdmVybGF5IiwiTWFzayIsInZhbHVlIiwibWFyZ2luIiwiYnJlYWtMaW5lcyIsIkNvbHVtblN0YXRzQ2hhcnRXTG9hZGluZyIsIl9yZWY0IiwiY29sb3JGaWVsZCIsImRhdGFzZXQiLCJmaWVsZE5hbWUiLCJuYW1lIiwiZmllbGQiLCJnZXRDb2x1bW5GaWVsZCIsImlzTnVtZXJpY0NvbG9yQnJlYWtzIiwiaXNMb2FkaW5nU3RhdHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vY29sdW1uLXN0YXRzLWNoYXJ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Zvcm1hdCBhcyBkM0Zvcm1hdH0gZnJvbSAnZDMtZm9ybWF0JztcbmltcG9ydCB7c2NhbGVMaW5lYXJ9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7QmluLCBGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBDb2xvckJyZWFrLFxuICBDb2xvckJyZWFrT3JkaW5hbCxcbiAgaXNOdW1iZXIsXG4gIGlzTnVtZXJpY0NvbG9yQnJlYWtzLFxuICB1c2VEaW1lbnNpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQgQ29sb3JQYWxldHRlIGZyb20gJy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3ItcGFsZXR0ZSc7XG5pbXBvcnQgSGlzdG9ncmFtUGxvdEZhY3RvcnksIHtISVNUT0dSQU1fTUFTS19NT0RFfSBmcm9tICcuL2hpc3RvZ3JhbS1wbG90JztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICcuL2xvYWRpbmctc3Bpbm5lcic7XG5cbmV4cG9ydCBjb25zdCBISVNUT0dSQU1fV0lEVEggPSAyMTA7XG5leHBvcnQgY29uc3QgSElTVE9HUkFNX0hFSUdIVCA9IDgwO1xuY29uc3QgSElTVE9HUkFNX01BUkdJTiA9IHt0b3A6IDEwLCBib3R0b206IDgsIGxlZnQ6IDEwLCByaWdodDogMjB9O1xuY29uc3QgQ09MT1JfQ0hBUlRfVElDS19XUkFQUEVSX0hFSUdIVCA9IDEwO1xuY29uc3QgQ09MT1JfQ0hBUlRfVElDS19IRUlHSFQgPSA4O1xuY29uc3QgQ09MT1JfQ0hBUlRfVElDS19XSURUSCA9IDQ7XG5jb25zdCBDT0xPUl9DSEFSVF9USUNLX0JPUkRFUl9DT0xPUiA9ICcjOTk5OTk5JztcblxuY29uc3QgU3R5bGVkQ29udGFpbmVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LWxvYWRpbmcnXG59KWBcbiAgaGVpZ2h0OiAke0hJU1RPR1JBTV9IRUlHSFR9cHg7XG5gO1xuXG4vLyBoZWlnaHQgMTQyID0gMTggKyAxMTAgKyAxMFxuY29uc3QgQ29sb3JDaGFydENvbnRhaW5lciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdjb2xvci1jaGFydC1jb250YWluZXInXG59KWBcbiAgbWFyZ2luLXRvcDogOHB4O1xuYDtcblxuY29uc3QgQ29sb3JDaGFydEhlYWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnY29sb3ItY2hhcnQtaGVhZGVyJ1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBtYXJnaW4tbGVmdDogJHtISVNUT0dSQU1fTUFSR0lOLmxlZnR9cHg7XG4gIG1hcmdpbi1yaWdodDogJHtISVNUT0dSQU1fTUFSR0lOLnJpZ2h0fXB4O1xuICBmb250LXNpemU6IDlweDtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRIZWFkZXJJdGVtID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDMzJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LXdyYXBwZXInXG59KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6ICR7SElTVE9HUkFNX0hFSUdIVCArIDMwfXB4O1xuYDtcblxuY29uc3QgQ29sb3JQYWxldHRlV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdjb2xvci1jaGFydC1wYWxldHRlJ1xufSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLXRvcDogJHtISVNUT0dSQU1fTUFSR0lOLnRvcH1weDtcbiAgbWFyZ2luLWxlZnQ6ICR7SElTVE9HUkFNX01BUkdJTi5sZWZ0fXB4O1xuICBtYXJnaW4tcmlnaHQ6ICR7SElTVE9HUkFNX01BUkdJTi5yaWdodH1weDtcbmA7XG5cbmNvbnN0IEhpc3RvZ3JhbVdyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnY29sb3ItY2hhcnQtaGlzdG9ncmFtJ1xufSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbmA7XG5cbmNvbnN0IENvbG9yQ2hhcnRUaWNrQ29udGFpbmVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2NvbG9yLWNoYXJ0LXRpY2stY29udGFpbmVyJ1xufSlgXG4gIGhlaWdodDogJHtDT0xPUl9DSEFSVF9USUNLX1dSQVBQRVJfSEVJR0hUfXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1sZWZ0OiAke0hJU1RPR1JBTV9NQVJHSU4ubGVmdH1weDtcbiAgbWFyZ2luLXJpZ2h0OiAke0hJU1RPR1JBTV9NQVJHSU4ucmlnaHR9cHg7XG5gO1xuXG5leHBvcnQgY29uc3QgQ29sb3JDaGFydEhlYWRlciA9ICh7bWluVmFsLCBtZWFuVmFsLCBtYXhWYWx9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENvbG9yQ2hhcnRIZWFkZXJXcmFwcGVyPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttaW5WYWx9Pk1JTjoge21pblZhbH08L0NvbG9yQ2hhcnRIZWFkZXJJdGVtPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttZWFuVmFsfT5NRUFOOiB7ZDNGb3JtYXQoJy40fnInKShtZWFuVmFsKX08L0NvbG9yQ2hhcnRIZWFkZXJJdGVtPlxuICAgICAgPENvbG9yQ2hhcnRIZWFkZXJJdGVtIHRpdGxlPXttYXhWYWx9IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+XG4gICAgICAgIE1BWDoge21heFZhbH1cbiAgICAgIDwvQ29sb3JDaGFydEhlYWRlckl0ZW0+XG4gICAgPC9Db2xvckNoYXJ0SGVhZGVyV3JhcHBlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbG9yQ2hhcnRUaWNrUHJvcHMgPSB7XG4gIGNvbG9yczogc3RyaW5nW107XG4gIHBvc2l0aW9uczogbnVtYmVyW107XG4gIG9uVGlja01vdmluZzogKHBvc2l0aW9uczogbnVtYmVyW10sIGRyYWdUaWNrOiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uVGlja0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIGhpc3RvZ3JhbVdpZHRoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgQ29sb3JDaGFydFRpY2s6IFJlYWN0LkZDPENvbG9yQ2hhcnRUaWNrUHJvcHM+ID0gKHtcbiAgY29sb3JzLFxuICBwb3NpdGlvbnMsXG4gIGhpc3RvZ3JhbVdpZHRoLFxuICBvblRpY2tNb3ZpbmcsXG4gIG9uVGlja0NoYW5nZWRcbn0pID0+IHtcbiAgY29uc3QgW3N0YXRlUG9zaXRpb25zLCBzZXRQb3NpdGlvbnNdID0gdXNlU3RhdGUocG9zaXRpb25zKTtcbiAgY29uc3QgW2RyYWdUaWNrLCBzZXREcmFnVGlja10gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICBzZXREcmFnVGljayhkcmFnVGljayk7XG4gIH0sIFtwb3NpdGlvbnMsIGRyYWdUaWNrXSk7XG5cbiAgY29uc3Qgb25Nb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICBlID0+IHtcbiAgICAgIGlmIChkcmFnVGljayA+PSAwKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG4gICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IGUuY2xpZW50WCAtIChvZmZzZXRYID8/IDApO1xuICAgICAgICBjb25zdCBsZWZ0Qm91bmQgPSBkcmFnVGljayA9PT0gMCA/IDAgOiBzdGF0ZVBvc2l0aW9uc1tkcmFnVGljayAtIDFdICsgMTtcbiAgICAgICAgY29uc3QgcmlnaHRCb3VuZCA9XG4gICAgICAgICAgZHJhZ1RpY2sgPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxID8gaGlzdG9ncmFtV2lkdGggOiBzdGF0ZVBvc2l0aW9uc1tkcmFnVGljayArIDFdIC0gMTtcblxuICAgICAgICAvLyByZXN0cmljdCB1c2VyIGRyYWctbi1tb3ZlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgbmVpZ2hib3JpbmcgdGlja3NcbiAgICAgICAgaWYgKHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA8IGxlZnRCb3VuZCkge1xuICAgICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IGxlZnRCb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGVQb3NpdGlvbnNbZHJhZ1RpY2tdID4gcmlnaHRCb3VuZCkge1xuICAgICAgICAgIHN0YXRlUG9zaXRpb25zW2RyYWdUaWNrXSA9IHJpZ2h0Qm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UG9zaXRpb25zKFsuLi5zdGF0ZVBvc2l0aW9uc10pO1xuICAgICAgICBvblRpY2tNb3Zpbmcoc3RhdGVQb3NpdGlvbnMsIGRyYWdUaWNrKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkcmFnVGljaywgb25UaWNrTW92aW5nLCBwb3NpdGlvbnMubGVuZ3RoLCBzdGF0ZVBvc2l0aW9ucywgaGlzdG9ncmFtV2lkdGhdXG4gICk7XG5cbiAgY29uc3Qgb25Nb3VzZVVwID0gdXNlQ2FsbGJhY2soXG4gICAgZSA9PiB7XG4gICAgICBpZiAoZHJhZ1RpY2sgPj0gMCkge1xuICAgICAgICBvblRpY2tDaGFuZ2VkKCk7XG4gICAgICAgIHNldERyYWdUaWNrKC0xKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2RyYWdUaWNrLCBvblRpY2tDaGFuZ2VkXVxuICApO1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gdXNlQ2FsbGJhY2soKGUsIHRpY2tJbmRleCkgPT4ge1xuICAgIGlmIChpc051bWJlcih0aWNrSW5kZXgpKSB7XG4gICAgICBzZXREcmFnVGljayh0aWNrSW5kZXgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxDb2xvckNoYXJ0VGlja0NvbnRhaW5lclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICBvbk1vdXNlVXA9e29uTW91c2VVcH1cbiAgICAgIG9uTW91c2VMZWF2ZT17b25Nb3VzZVVwfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvciwgaW5kZXgpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRyYWdnYWJsZT17dHJ1ZX1cbiAgICAgICAgICBrZXk9e2Bjb2xvci1jaGFydC10aWNrLSR7Y29sb3J9LSR7aW5kZXh9YH1cbiAgICAgICAgICBvbk1vdXNlRG93bj17ZSA9PiBvbk1vdXNlRG93bihlLCBpbmRleCl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICBsZWZ0OiBgJHtzdGF0ZVBvc2l0aW9uc1tpbmRleF0gLSBDT0xPUl9DSEFSVF9USUNLX1dJRFRIIC8gMiAtIDF9cHhgLFxuICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGAxcHhgLFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogQ09MT1JfQ0hBUlRfVElDS19CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHtDT0xPUl9DSEFSVF9USUNLX1dJRFRIfXB4YCxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Q09MT1JfQ0hBUlRfVElDS19IRUlHSFR9cHhgLFxuICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcidcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9Db2xvckNoYXJ0VGlja0NvbnRhaW5lcj5cbiAgKTtcbn07XG5cbi8vIG9ubHkgZm9yIG51bWV0aWMgZmllbGRcbkNvbHVtblN0YXRzQ2hhcnRGYWN0b3J5LmRlcHMgPSBbSGlzdG9ncmFtUGxvdEZhY3RvcnldO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5TdGF0c0NoYXJ0V0xvYWRpbmdQcm9wcyA9IHtcbiAgY29sb3JGaWVsZDogRmllbGQ7XG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlO1xuICBjb2xvckJyZWFrczogQ29sb3JCcmVha1tdIHwgQ29sb3JCcmVha09yZGluYWxbXSB8IG51bGw7XG4gIGFsbEJpbnM6IEJpbltdO1xuICBmaWx0ZXJlZEJpbnM6IEJpbltdO1xuICBpc0ZpbHRlcmVkOiBib29sZWFuO1xuICBoaXN0b2dyYW1Eb21haW46IG51bWJlcltdO1xuICBvbkNoYW5nZWRVcGRhdGVyOiAodGlja3M6IENvbG9yQnJlYWtbXSkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbHVtblN0YXRzQ2hhcnRQcm9wcyA9IHtcbiAgYWxsQmluczogQmluW107XG4gIGZpbHRlcmVkQmluczogQmluW107XG4gIGlzRmlsdGVyZWQ6IGJvb2xlYW47XG4gIGhpc3RvZ3JhbURvbWFpbjogbnVtYmVyW107XG4gIGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrW107XG4gIG9uQ2hhbmdlZFVwZGF0ZXI6ICh0aWNrczogQ29sb3JCcmVha1tdKSA9PiB2b2lkO1xufTtcbmZ1bmN0aW9uIENvbHVtblN0YXRzQ2hhcnRGYWN0b3J5KFxuICBIaXN0b2dyYW1QbG90OiBSZXR1cm5UeXBlPHR5cGVvZiBIaXN0b2dyYW1QbG90RmFjdG9yeT5cbik6IFJlYWN0LkZDPENvbHVtblN0YXRzQ2hhcnRXTG9hZGluZ1Byb3BzPiB7XG4gIGNvbnN0IENvbHVtblN0YXRzQ2hhcnQ6IFJlYWN0LkZDPENvbHVtblN0YXRzQ2hhcnRQcm9wcz4gPSAoe1xuICAgIGFsbEJpbnMsXG4gICAgZmlsdGVyZWRCaW5zLFxuICAgIGlzRmlsdGVyZWQsXG4gICAgaGlzdG9ncmFtRG9tYWluLFxuICAgIGNvbG9yQnJlYWtzLFxuICAgIG9uQ2hhbmdlZFVwZGF0ZXJcbiAgfSkgPT4ge1xuICAgIGNvbnN0IFt0aWNrcywgc2V0VGlja3NdID0gdXNlU3RhdGUoY29sb3JCcmVha3MpO1xuICAgIGNvbnN0IFtyZWYsIHNpemVdID0gdXNlRGltZW5zaW9uczxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBjb25zdCBoaXN0b2dyYW1XaWR0aCA9IHNpemVcbiAgICAgID8gc2l6ZS53aWR0aCAtIEhJU1RPR1JBTV9NQVJHSU4ubGVmdCAtIEhJU1RPR1JBTV9NQVJHSU4ucmlnaHRcbiAgICAgIDogSElTVE9HUkFNX1dJRFRIO1xuXG4gICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwcm9wcy5jb2xvckJyZWFrcyBhbmQgc3RhdGVzLnRpY2tzXG4gICAgY29uc3QgaXNUaWNrQ2hhbmdpbmdSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHNldFRpY2tzKHRpY2tzKTtcbiAgICAgIC8vIHJlc2V0IGlzVGlja0NoYW5naW5nIG9uY2UgaGlzdG9ncmFtIGRvbWFpbiBpcyByZWNvbXB1dGVkXG4gICAgICBpc1RpY2tDaGFuZ2luZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSwgW3RpY2tzXSk7XG5cbiAgICAvLyBoaXN0b2dyYW1zIHVzZWQgYnkgaGlzdG9ncmFtLXBsb3QuanNcbiAgICBjb25zdCBoaXN0b2dyYW1zQnlHcm91cCA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoe1xuICAgICAgICBiaW5zOiBhbGxCaW5zLFxuICAgICAgICBmaWx0ZXJlZEJpbnNcbiAgICAgIH0pLFxuICAgICAgW2FsbEJpbnMsIGZpbHRlcmVkQmluc11cbiAgICApO1xuXG4gICAgLy8gZ2V0IGNvbG9ycyBmcm9tIGNvbG9yQnJlYWtzXG4gICAgY29uc3QgZG9tYWluQ29sb3JzID0gdXNlTWVtbyhcbiAgICAgICgpID0+IChjb2xvckJyZWFrcyA/IGNvbG9yQnJlYWtzLm1hcChjID0+IGMuZGF0YSkgOiBbXSksXG4gICAgICBbY29sb3JCcmVha3NdXG4gICAgKTtcblxuICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICghaXNUaWNrQ2hhbmdpbmdSZWYuY3VycmVudCkge1xuICAgICAgICBzZXRUaWNrcyhjb2xvckJyZWFrcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt2YWx1ZU1pbiwgdmFsdWVNYXhdID0gaGlzdG9ncmFtRG9tYWluO1xuICAgICAgY29uc3Qgd2lkdGhTY2FsZSA9IHNjYWxlTGluZWFyKCkuZG9tYWluKFt2YWx1ZU1pbiwgdmFsdWVNYXhdKS5yYW5nZShbMCwgaGlzdG9ncmFtV2lkdGhdKTtcbiAgICAgIHJldHVybiB0aWNrcy5zbGljZSgwLCAtMSkubWFwKGNiID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gd2lkdGhTY2FsZShjYi5yYW5nZVsxXSk7XG4gICAgICAgIGlmIChwb3MgPCAwKSByZXR1cm4gMDtcbiAgICAgICAgZWxzZSBpZiAocG9zID4gaGlzdG9ncmFtV2lkdGgpIHJldHVybiBoaXN0b2dyYW1XaWR0aDtcbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICAgIH0pO1xuICAgIH0sIFtoaXN0b2dyYW1Eb21haW4sIHRpY2tzLCBjb2xvckJyZWFrcywgaGlzdG9ncmFtV2lkdGhdKTtcblxuICAgIGNvbnN0IGRvbWFpbkNvbG9yV2lkdGhzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBuID0gdGlja1Bvc2l0aW9ucy5sZW5ndGg7XG4gICAgICBjb25zdCB3aWR0aHMgPSBbdGlja1Bvc2l0aW9uc1swXV07XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG47ICsraSkge1xuICAgICAgICB3aWR0aHMucHVzaCh0aWNrUG9zaXRpb25zW2ldIC0gdGlja1Bvc2l0aW9uc1tpIC0gMV0pO1xuICAgICAgfVxuICAgICAgd2lkdGhzLnB1c2goaGlzdG9ncmFtV2lkdGggLSB0aWNrUG9zaXRpb25zW24gLSAxXSk7XG4gICAgICByZXR1cm4gd2lkdGhzO1xuICAgIH0sIFt0aWNrUG9zaXRpb25zLCBoaXN0b2dyYW1XaWR0aF0pO1xuXG4gICAgLy8gaGFuZGxlIHRpY2sgZHJhZy1uLW1vdmVcbiAgICBjb25zdCBvblRpY2tNb3ZpbmdIYW5kbGVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAobmV3VGlja1Bvc2l0aW9ucywgdGlja0luZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZU1pbiwgdmFsdWVNYXhdID0gaGlzdG9ncmFtRG9tYWluO1xuICAgICAgICBjb25zdCB2YWx1ZVJhbmdlID0gdmFsdWVNYXggLSB2YWx1ZU1pbjtcbiAgICAgICAgY29uc3QgYnJlYWtzID0gW3ZhbHVlTWluXTtcbiAgICAgICAgbmV3VGlja1Bvc2l0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGJyZWFrcy5wdXNoKHZhbHVlTWluICsgKHZhbHVlUmFuZ2UgKiBlbGVtZW50KSAvIGhpc3RvZ3JhbVdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrcy5wdXNoKHZhbHVlTWF4KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgbGVmdFZhbHVlID0gaSA9PT0gdGlja0luZGV4ICsgMSA/IGJyZWFrc1tpXSA6IHRpY2tzW2ldLnJhbmdlWzBdO1xuICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBpICsgMSA9PT0gdGlja0luZGV4ICsgMSA/IGJyZWFrc1tpICsgMV0gOiB0aWNrc1tpXS5yYW5nZVsxXTtcblxuICAgICAgICAgIHRpY2tzW2ldID0ge1xuICAgICAgICAgICAgLi4udGlja3NbaV0sXG4gICAgICAgICAgICByYW5nZTogW2xlZnRWYWx1ZSwgcmlnaHRWYWx1ZV0sXG4gICAgICAgICAgICBpbnB1dHM6IFtsZWZ0VmFsdWUsIHJpZ2h0VmFsdWVdLFxuICAgICAgICAgICAgbGFiZWw6IGAke2QzRm9ybWF0KCcuMmYnKShicmVha3NbaV0pfSB0byAke2QzRm9ybWF0KCcuMmYnKShicmVha3NbaSArIDFdKX1gXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpc1RpY2tDaGFuZ2luZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgc2V0VGlja3MoWy4uLnRpY2tzXSk7XG4gICAgICB9LFxuICAgICAgW2hpc3RvZ3JhbURvbWFpbiwgdGlja3MsIGhpc3RvZ3JhbVdpZHRoXVxuICAgICk7XG5cbiAgICAvLyB1cGRhdGUgcGFyZW50IGFuZCBzaWJsaW5nIGNvbXBvbmVudHMgd2hlbiB0aWNrIGRyYWdnaW5nIGVuZGVkXG4gICAgY29uc3Qgb25UaWNrQ2hhbmdlZEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBvbkNoYW5nZWRVcGRhdGVyKHRpY2tzKTtcbiAgICB9LCBbb25DaGFuZ2VkVXBkYXRlciwgdGlja3NdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q29sb3JDaGFydENvbnRhaW5lciByZWY9e3JlZn0+XG4gICAgICAgIDxDb2xvckNoYXJ0SGVhZGVyXG4gICAgICAgICAgbWluVmFsPXtoaXN0b2dyYW1Eb21haW5bMF19XG4gICAgICAgICAgbWF4VmFsPXtoaXN0b2dyYW1Eb21haW5bMV19XG4gICAgICAgICAgbWVhblZhbD17aGlzdG9ncmFtRG9tYWluWzJdfVxuICAgICAgICAvPlxuICAgICAgICA8Q29sb3JDaGFydFdyYXBwZXI+XG4gICAgICAgICAgPENvbG9yUGFsZXR0ZVdyYXBwZXI+XG4gICAgICAgICAgICA8Q29sb3JQYWxldHRlXG4gICAgICAgICAgICAgIGNvbG9ycz17ZG9tYWluQ29sb3JzfVxuICAgICAgICAgICAgICBjb2xvcldpZHRocz17ZG9tYWluQ29sb3JXaWR0aHN9XG4gICAgICAgICAgICAgIGhlaWdodD17SElTVE9HUkFNX0hFSUdIVCArIDE2fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0NvbG9yUGFsZXR0ZVdyYXBwZXI+XG4gICAgICAgICAgPEhpc3RvZ3JhbVdyYXBwZXI+XG4gICAgICAgICAgICA8SGlzdG9ncmFtUGxvdFxuICAgICAgICAgICAgICBoaXN0b2dyYW1zQnlHcm91cD17aGlzdG9ncmFtc0J5R3JvdXB9XG4gICAgICAgICAgICAgIGNvbG9yc0J5R3JvdXA9e251bGx9XG4gICAgICAgICAgICAgIGlzTWFza2VkPXtpc0ZpbHRlcmVkID8gSElTVE9HUkFNX01BU0tfTU9ERS5NYXNrV2l0aE92ZXJsYXkgOiBISVNUT0dSQU1fTUFTS19NT0RFLk1hc2t9XG4gICAgICAgICAgICAgIHZhbHVlPXtoaXN0b2dyYW1Eb21haW59XG4gICAgICAgICAgICAgIHdpZHRoPXtoaXN0b2dyYW1XaWR0aH1cbiAgICAgICAgICAgICAgaGVpZ2h0PXtISVNUT0dSQU1fSEVJR0hUfVxuICAgICAgICAgICAgICBtYXJnaW49e0hJU1RPR1JBTV9NQVJHSU59XG4gICAgICAgICAgICAgIGJyZWFrTGluZXM9e3RpY2tQb3NpdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvSGlzdG9ncmFtV3JhcHBlcj5cbiAgICAgICAgPC9Db2xvckNoYXJ0V3JhcHBlcj5cbiAgICAgICAgPENvbG9yQ2hhcnRUaWNrXG4gICAgICAgICAgY29sb3JzPXtkb21haW5Db2xvcnMuc2xpY2UoMCwgLTEpfVxuICAgICAgICAgIHBvc2l0aW9ucz17dGlja1Bvc2l0aW9uc31cbiAgICAgICAgICBoaXN0b2dyYW1XaWR0aD17aGlzdG9ncmFtV2lkdGh9XG4gICAgICAgICAgb25UaWNrTW92aW5nPXtvblRpY2tNb3ZpbmdIYW5kbGVyfVxuICAgICAgICAgIG9uVGlja0NoYW5nZWQ9e29uVGlja0NoYW5nZWRIYW5kbGVyfVxuICAgICAgICAvPlxuICAgICAgPC9Db2xvckNoYXJ0Q29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgQ29sdW1uU3RhdHNDaGFydFdMb2FkaW5nOiBSZWFjdC5GQzxDb2x1bW5TdGF0c0NoYXJ0V0xvYWRpbmdQcm9wcz4gPSAoe1xuICAgIGNvbG9yRmllbGQsXG4gICAgZGF0YXNldCxcbiAgICBjb2xvckJyZWFrcyxcbiAgICBhbGxCaW5zLFxuICAgIGZpbHRlcmVkQmlucyxcbiAgICBpc0ZpbHRlcmVkLFxuICAgIGhpc3RvZ3JhbURvbWFpbixcbiAgICBvbkNoYW5nZWRVcGRhdGVyXG4gIH0pID0+IHtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBjb2xvckZpZWxkPy5uYW1lO1xuICAgIGNvbnN0IGZpZWxkID0gdXNlTWVtbyhcbiAgICAgICgpID0+IChmaWVsZE5hbWUgPyBkYXRhc2V0LmdldENvbHVtbkZpZWxkKGZpZWxkTmFtZSkgOiBudWxsKSxcbiAgICAgIFtkYXRhc2V0LCBmaWVsZE5hbWVdXG4gICAgKTtcblxuICAgIGlmICghaXNOdW1lcmljQ29sb3JCcmVha3MoY29sb3JCcmVha3MpKSB7XG4gICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgZGlzcGxheSBmb3Igb3JkaW5hbCBicmVha3NcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8uaXNMb2FkaW5nU3RhdHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRDb250YWluZXI+XG4gICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgIDwvU3R5bGVkQ29udGFpbmVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbHVtblN0YXRzQ2hhcnRcbiAgICAgICAgY29sb3JCcmVha3M9e2NvbG9yQnJlYWtzfVxuICAgICAgICBhbGxCaW5zPXthbGxCaW5zfVxuICAgICAgICBmaWx0ZXJlZEJpbnM9e2ZpbHRlcmVkQmluc31cbiAgICAgICAgaXNGaWx0ZXJlZD17aXNGaWx0ZXJlZH1cbiAgICAgICAgaGlzdG9ncmFtRG9tYWluPXtoaXN0b2dyYW1Eb21haW59XG4gICAgICAgIG9uQ2hhbmdlZFVwZGF0ZXI9e29uQ2hhbmdlZFVwZGF0ZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIENvbHVtblN0YXRzQ2hhcnRXTG9hZGluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sdW1uU3RhdHNDaGFydEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFNBQUEsR0FB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
@@ -1,2 +1,3 @@
1
- declare const _default: import("styled-components").StyledComponent<"canvas", any, {}, never>;
1
+ /// <reference types="react" />
2
+ declare const _default: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("react").DetailedHTMLProps<import("react").CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>, never>>;
2
3
  export default _default;
@@ -7,13 +7,13 @@ import { DataContainerInterface } from '@kepler.gl/utils';
7
7
  declare type ContainerProps = {
8
8
  hasCustomScrollBarStyle?: boolean;
9
9
  };
10
- export declare const Container: import("styled-components").StyledComponent<"div", any, ContainerProps, never>;
10
+ export declare const Container: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, ContainerProps>>;
11
11
  export declare type SortColumn = {
12
12
  column?: string;
13
13
  mode?: string;
14
14
  };
15
15
  interface GetRowCellProps {
16
- dataContainer: DataContainerInterface;
16
+ dataContainer: DataContainerInterface | null;
17
17
  columns: (string & {
18
18
  ghost?: boolean;
19
19
  })[];
@@ -32,8 +32,8 @@ interface TableSectionProps {
32
32
  ghost?: boolean;
33
33
  })[];
34
34
  headerGridProps?: any;
35
- fixedWidth?: number;
36
- fixedHeight?: number;
35
+ fixedWidth?: number | null;
36
+ fixedHeight?: number | null;
37
37
  onScroll?: (params: OnScrollParams) => void;
38
38
  scrollTop?: number;
39
39
  dataGridProps: {
@@ -55,10 +55,10 @@ export interface DataTableProps {
55
55
  columns: (string & {
56
56
  ghost?: boolean;
57
57
  })[];
58
- fixedWidth?: number;
58
+ fixedWidth?: number | null;
59
59
  theme?: any;
60
- dataContainer: DataContainerInterface;
61
- fixedHeight?: number;
60
+ dataContainer: DataContainerInterface | null;
61
+ fixedHeight?: number | null;
62
62
  colMeta: ColMeta;
63
63
  sortColumn: SortColumn;
64
64
  sortTableColumn: (column: string, mode?: string) => void;