kepler.gl 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +27 -132
  2. package/dist/src/common-utils/src/data-type.d.ts +9 -1
  3. package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
  4. package/dist/src/components/src/common/data-table/index.d.ts +1 -0
  5. package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
  6. package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
  7. package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
  8. package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
  9. package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
  10. package/dist/src/components/src/geocoder-panel.d.ts +2 -2
  11. package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  12. package/dist/src/constants/src/default-settings.d.ts +14 -1
  13. package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
  14. package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
  15. package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
  16. package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
  17. package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
  18. package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
  19. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
  20. package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
  21. package/dist/src/processors/src/data-processor.d.ts +15 -1
  22. package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
  23. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
  24. package/dist/src/table/src/dataset-utils.d.ts +1 -1
  25. package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  26. package/dist/src/utils/src/application-config.d.ts +4 -3
  27. package/dist/src/utils/src/data-utils.d.ts +9 -3
  28. package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
  29. package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
  30. package/dist/src/utils/src/map-utils.d.ts +1 -1
  31. package/dist/src/utils/src/plot.d.ts +2 -2
  32. package/package.json +5 -5
  33. package/src/actions/package.json +8 -8
  34. package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
  35. package/src/ai-assistant/package.json +7 -7
  36. package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
  37. package/src/cloud-providers/package.json +2 -2
  38. package/src/common-utils/dist/data-type.d.ts +9 -1
  39. package/src/common-utils/dist/data-type.js +50 -1
  40. package/src/common-utils/package.json +3 -3
  41. package/src/common-utils/src/data-type.ts +49 -1
  42. package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
  43. package/src/components/dist/common/data-table/header-cell.js +2 -2
  44. package/src/components/dist/common/data-table/index.d.ts +1 -0
  45. package/src/components/dist/common/data-table/index.js +5 -1
  46. package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
  47. package/src/components/dist/common/file-uploader/file-drop.js +152 -167
  48. package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
  49. package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
  50. package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
  51. package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
  52. package/src/components/dist/common/range-brush.js +3 -3
  53. package/src/components/dist/geocoder/geocoder.d.ts +7 -0
  54. package/src/components/dist/geocoder/geocoder.js +19 -11
  55. package/src/components/dist/geocoder-panel.d.ts +2 -2
  56. package/src/components/dist/geocoder-panel.js +64 -91
  57. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  58. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
  59. package/src/components/dist/hooks/use-legend-position.js +8 -4
  60. package/src/components/dist/map/map-legend-panel.js +2 -3
  61. package/src/components/dist/modal-container.js +8 -8
  62. package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
  63. package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  64. package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
  65. package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
  66. package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
  67. package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
  68. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
  69. package/src/components/package.json +16 -16
  70. package/src/components/src/common/data-table/header-cell.tsx +2 -1
  71. package/src/components/src/common/data-table/index.tsx +4 -0
  72. package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
  73. package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
  74. package/src/components/src/common/range-brush.tsx +2 -2
  75. package/src/components/src/geocoder/geocoder.tsx +16 -8
  76. package/src/components/src/geocoder-panel.tsx +95 -85
  77. package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
  78. package/src/components/src/hooks/use-legend-position.ts +5 -2
  79. package/src/components/src/map/map-legend-panel.tsx +1 -2
  80. package/src/components/src/modal-container.tsx +7 -7
  81. package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
  82. package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
  83. package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
  84. package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
  85. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
  86. package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
  87. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
  88. package/src/constants/dist/default-settings.d.ts +14 -1
  89. package/src/constants/dist/default-settings.js +20 -5
  90. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
  91. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
  92. package/src/constants/package.json +2 -2
  93. package/src/constants/src/default-settings.ts +16 -1
  94. package/src/constants/umd/keplergl.min.js +2 -2
  95. package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
  96. package/src/deckgl-arrow-layers/dist/constants.js +4 -15
  97. package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
  98. package/src/deckgl-arrow-layers/dist/index.js +1 -8
  99. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
  100. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
  101. package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
  102. package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
  103. package/src/deckgl-arrow-layers/package.json +2 -1
  104. package/src/deckgl-arrow-layers/src/constants.ts +0 -13
  105. package/src/deckgl-arrow-layers/src/index.ts +0 -2
  106. package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
  107. package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
  108. package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
  109. package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
  110. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
  111. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
  112. package/src/deckgl-layers/package.json +5 -5
  113. package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
  114. package/src/duckdb/dist/components/monaco-editor.js +4 -5
  115. package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
  116. package/src/duckdb/dist/components/preview-data-panel.js +7 -8
  117. package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
  118. package/src/duckdb/dist/components/schema-panel.js +41 -24
  119. package/src/duckdb/dist/components/sql-panel.js +245 -56
  120. package/src/duckdb/dist/init.js +20 -14
  121. package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
  122. package/src/duckdb/dist/processors/data-processor.js +4 -4
  123. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
  124. package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
  125. package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
  126. package/src/duckdb/dist/table/duckdb-table.js +153 -261
  127. package/src/duckdb/package.json +6 -6
  128. package/src/duckdb/src/components/monaco-editor.tsx +3 -3
  129. package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
  130. package/src/duckdb/src/components/schema-panel.tsx +92 -21
  131. package/src/duckdb/src/components/sql-panel.tsx +160 -22
  132. package/src/duckdb/src/init.ts +4 -1
  133. package/src/duckdb/src/processors/data-processor.ts +2 -2
  134. package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
  135. package/src/duckdb/src/table/duckdb-table.ts +61 -92
  136. package/src/effects/package.json +5 -5
  137. package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
  138. package/src/layers/dist/arc-layer/arc-layer.js +2 -3
  139. package/src/layers/dist/base-layer.d.ts +7 -6
  140. package/src/layers/dist/base-layer.js +36 -19
  141. package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
  142. package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
  143. package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
  144. package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
  145. package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
  146. package/src/layers/dist/icon-layer/icon-layer.js +19 -11
  147. package/src/layers/dist/index.d.ts +1 -1
  148. package/src/layers/dist/index.js +1 -1
  149. package/src/layers/dist/layer-text-label.d.ts +9 -0
  150. package/src/layers/dist/layer-text-label.js +51 -6
  151. package/src/layers/dist/layer-utils.d.ts +39 -30
  152. package/src/layers/dist/layer-utils.js +69 -9
  153. package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
  154. package/src/layers/dist/line-layer/line-layer.js +2 -3
  155. package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
  156. package/src/layers/dist/point-layer/point-layer.js +16 -8
  157. package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
  158. package/src/layers/dist/trip-layer/trip-layer.js +4 -2
  159. package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
  160. package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
  161. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
  162. package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
  163. package/src/layers/package.json +11 -10
  164. package/src/layers/src/arc-layer/arc-layer.ts +1 -1
  165. package/src/layers/src/base-layer.ts +50 -9
  166. package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
  167. package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
  168. package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
  169. package/src/layers/src/icon-layer/icon-layer.ts +7 -3
  170. package/src/layers/src/index.ts +1 -2
  171. package/src/layers/src/layer-text-label.ts +53 -4
  172. package/src/layers/src/layer-utils.ts +88 -9
  173. package/src/layers/src/line-layer/line-layer.ts +1 -1
  174. package/src/layers/src/point-layer/point-layer.ts +15 -11
  175. package/src/layers/src/trip-layer/trip-layer.ts +4 -2
  176. package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
  177. package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
  178. package/src/localization/package.json +1 -1
  179. package/src/processors/dist/data-processor.d.ts +15 -1
  180. package/src/processors/dist/data-processor.js +104 -11
  181. package/src/processors/package.json +8 -7
  182. package/src/processors/src/data-processor.ts +116 -13
  183. package/src/reducers/dist/export-utils.js +2 -2
  184. package/src/reducers/dist/layer-utils.js +1 -1
  185. package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
  186. package/src/reducers/dist/provider-state-updaters.js +5 -2
  187. package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
  188. package/src/reducers/dist/vis-state-updaters.js +23 -12
  189. package/src/reducers/package.json +16 -16
  190. package/src/reducers/src/export-utils.ts +1 -1
  191. package/src/reducers/src/layer-utils.ts +2 -1
  192. package/src/reducers/src/provider-state-updaters.ts +4 -1
  193. package/src/reducers/src/vis-state-updaters.ts +45 -10
  194. package/src/schemas/dist/dataset-schema.js +35 -6
  195. package/src/schemas/package.json +7 -7
  196. package/src/schemas/src/dataset-schema.ts +36 -8
  197. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
  198. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
  199. package/src/styles/package.json +2 -2
  200. package/src/styles/umd/keplergl.min.js +2 -2
  201. package/src/table/dist/dataset-utils.js +23 -14
  202. package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
  203. package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  204. package/src/table/dist/tileset/vector-tile-utils.js +122 -2
  205. package/src/table/package.json +5 -5
  206. package/src/table/src/dataset-utils.ts +16 -6
  207. package/src/table/src/tileset/vector-tile-utils.ts +131 -8
  208. package/src/tasks/package.json +2 -2
  209. package/src/types/actions.d.ts +1 -0
  210. package/src/types/layers.d.ts +1 -0
  211. package/src/types/package.json +1 -1
  212. package/src/types/types.d.ts +17 -0
  213. package/src/utils/dist/application-config.d.ts +4 -3
  214. package/src/utils/dist/application-config.js +3 -2
  215. package/src/utils/dist/data-scale-utils.js +4 -4
  216. package/src/utils/dist/data-utils.d.ts +9 -3
  217. package/src/utils/dist/data-utils.js +40 -7
  218. package/src/utils/dist/dataset-utils.js +23 -8
  219. package/src/utils/dist/indexed-data-container.d.ts +2 -2
  220. package/src/utils/dist/indexed-data-container.js +1 -1
  221. package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
  222. package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
  223. package/src/utils/dist/plot.d.ts +2 -2
  224. package/src/utils/dist/plot.js +6 -6
  225. package/src/utils/map-utils.spec.js +1 -2
  226. package/src/utils/package.json +5 -4
  227. package/src/utils/src/application-config.ts +11 -8
  228. package/src/utils/src/data-scale-utils.ts +3 -3
  229. package/src/utils/src/data-utils.ts +36 -7
  230. package/src/utils/src/dataset-utils.ts +41 -9
  231. package/src/utils/src/indexed-data-container.ts +1 -1
  232. package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
  233. package/src/utils/src/plot.ts +5 -5
  234. package/umd/keplergl.min.js +1279 -1295
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.SqlPanel = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
13
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
@@ -14,20 +15,24 @@ var _react = _interopRequireWildcard(require("react"));
14
15
  var _reactRedux = require("react-redux");
15
16
  var _styledComponents = _interopRequireDefault(require("styled-components"));
16
17
  var _reactResizablePanels = require("react-resizable-panels");
18
+ var _actions = require("@kepler.gl/actions");
19
+ var _commonUtils = require("@kepler.gl/common-utils");
20
+ var _components = require("@kepler.gl/components");
21
+ var _processors = require("@kepler.gl/processors");
22
+ var _styles = require("@kepler.gl/styles");
23
+ var _utils = require("@kepler.gl/utils");
17
24
  var _monacoEditor = _interopRequireDefault(require("./monaco-editor"));
18
25
  var _schemaPanel = require("./schema-panel");
19
26
  var _previewDataPanel = require("./preview-data-panel");
20
27
  var _init = require("../init");
21
- var _components = require("@kepler.gl/components");
22
- var _commonUtils = require("@kepler.gl/common-utils");
23
- var _actions = require("@kepler.gl/actions");
24
- var _styles = require("@kepler.gl/styles");
25
- var _utils = require("@kepler.gl/utils");
26
- var _processors = require("@kepler.gl/processors");
27
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11; // SPDX-License-Identifier: MIT
28
+ var _duckdbTableUtils = require("../table/duckdb-table-utils");
29
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12; // SPDX-License-Identifier: MIT
28
30
  // Copyright contributors to the kepler.gl project
29
31
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
30
32
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
33
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
34
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
35
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31
36
  var StyledSqlPanel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 100%;\n background-color: ", ";\n border-left: 1px solid #333;\n"])), _styles.sidePanelBg);
32
37
  var StyledSqlActions = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 0 0 50px;\n display: flex;\n padding-top: 12px;\n align-items: center;\n flex-direction: column;\n justify-content: flex-start;\n border-bottom: 1px solid #333;\n"])));
33
38
  var StyledSqlEditor = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n flex: 1;\n min-width: 0; // Prevents flex child from overflowing\n height: 100%;\n"])));
@@ -41,6 +46,11 @@ var StyledResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels
41
46
  var StyledVerticalResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels.PanelResizeHandle)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n height: 4px;\n cursor: row-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), _styles.panelBorderColor);
42
47
  var StyledLoadingContainer = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n"])));
43
48
  var StyledErrorContainer = _styledComponents["default"].pre(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 12px;\n color: red;\n font-size: 12px;\n background-color: ", ";\n height: 100%;\n overflow: auto;\n"])), _styles.sidePanelBg);
49
+ var StyledFileDropArea = (0, _styledComponents["default"])(_components.FileDrop)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n height: 100%;\n border-width: 1px;\n border: 1px ", "\n ", ";\n .file-drop-target {\n height: 100%;\n }\n"])), function (props) {
50
+ return props.dragOver ? 'solid' : 'dashed';
51
+ }, function (props) {
52
+ return props.dragOver ? props.theme.subtextColorLT : 'transparent';
53
+ });
44
54
  var SCHEMA_PANEL_STYLE = {
45
55
  overflow: 'auto'
46
56
  };
@@ -56,30 +66,43 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
56
66
  setSql = _useState2[1];
57
67
  var _useState3 = (0, _react.useState)(null),
58
68
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
59
- result = _useState4[0],
60
- setResult = _useState4[1];
61
- var _useState5 = (0, _react.useState)(null),
69
+ droppedFile = _useState4[0],
70
+ setDroppedFile = _useState4[1];
71
+ var _useState5 = (0, _react.useState)(false),
62
72
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
63
- error = _useState6[0],
64
- setError = _useState6[1];
65
- var _useState7 = (0, _react.useState)(0),
73
+ dragState = _useState6[0],
74
+ setDragState = _useState6[1];
75
+ var _useState7 = (0, _react.useState)(null),
66
76
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
67
- counter = _useState8[0],
68
- setCounter = _useState8[1];
69
- var _useState9 = (0, _react.useState)([]),
77
+ result = _useState8[0],
78
+ setResult = _useState8[1];
79
+ var _useState9 = (0, _react.useState)(0),
70
80
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
71
- tableSchema = _useState10[0],
72
- setTableSchema = _useState10[1];
73
- var _useState11 = (0, _react.useState)(false),
81
+ schemaUpdateTrigger = _useState10[0],
82
+ setSchemaUpdateTrigger = _useState10[1];
83
+ var _useState11 = (0, _react.useState)(null),
74
84
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
75
- isRunning = _useState12[0],
76
- setIsRunning = _useState12[1];
77
- var _useState13 = (0, _react.useState)(function () {
85
+ error = _useState12[0],
86
+ setError = _useState12[1];
87
+ var _useState13 = (0, _react.useState)(0),
88
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
89
+ counter = _useState14[0],
90
+ setCounter = _useState14[1];
91
+ var _useState15 = (0, _react.useState)([]),
92
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
93
+ tableSchema = _useState16[0],
94
+ setTableSchema = _useState16[1];
95
+ var _useState17 = (0, _react.useState)(false),
96
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
97
+ isRunning = _useState18[0],
98
+ setIsRunning = _useState18[1];
99
+ var _useState19 = (0, _react.useState)(function () {
78
100
  return (0, _utils.isAppleDevice)();
79
101
  }),
80
- _useState14 = (0, _slicedToArray2["default"])(_useState13, 1),
81
- isMac = _useState14[0];
102
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 1),
103
+ isMac = _useState20[0];
82
104
  var dispatch = (0, _reactRedux.useDispatch)();
105
+ var droppedFileAreaRef = (0, _react.useRef)(null);
83
106
  (0, _react.useEffect)(function () {
84
107
  var currentUrl = new URL(window.location.href);
85
108
  if (sql) {
@@ -90,61 +113,139 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
90
113
  window.history.replaceState({}, '', currentUrl.toString());
91
114
  }, [sql]);
92
115
  var runQuery = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
93
- var db, connection, arrowResult;
116
+ var adjustedQuery, db, connection, tempTableName, sqlStatements, arrowResult, tableDuckDBTypes, _iterator, _step, statement, isLastQuery, duckDbColumns, columnsToConvertToWKB, _adjustedQuery;
94
117
  return _regenerator["default"].wrap(function _callee$(_context) {
95
118
  while (1) switch (_context.prev = _context.next) {
96
119
  case 0:
97
120
  setIsRunning(true);
98
121
  _context.prev = 1;
99
- if (sql !== null && sql !== void 0 && sql.trim()) {
100
- _context.next = 5;
122
+ adjustedQuery = sql ? (0, _duckdbTableUtils.removeSQLComments)(sql) : null;
123
+ if (adjustedQuery) {
124
+ _context.next = 6;
101
125
  break;
102
126
  }
103
127
  setError(new Error('Query is empty'));
104
128
  return _context.abrupt("return");
105
- case 5:
106
- _context.next = 7;
129
+ case 6:
130
+ _context.next = 8;
107
131
  return (0, _init.getDuckDB)();
108
- case 7:
132
+ case 8:
109
133
  db = _context.sent;
110
- _context.next = 10;
134
+ _context.next = 11;
111
135
  return db.connect();
112
- case 10:
136
+ case 11:
113
137
  connection = _context.sent;
114
- _context.next = 13;
115
- return connection.query(sql);
116
- case 13:
138
+ // TODO find a cheap way to get DuckDb types with a single query to a remote resource - temp table? cte?
139
+ tempTableName = 'temp_keplergl_table'; // remove comments
140
+ sqlStatements = (0, _duckdbTableUtils.splitSqlStatements)(adjustedQuery);
141
+ arrowResult = null;
142
+ tableDuckDBTypes = {};
143
+ _iterator = _createForOfIteratorHelper(sqlStatements);
144
+ _context.prev = 17;
145
+ _iterator.s();
146
+ case 19:
147
+ if ((_step = _iterator.n()).done) {
148
+ _context.next = 48;
149
+ break;
150
+ }
151
+ statement = _step.value;
152
+ isLastQuery = statement === sqlStatements[sqlStatements.length - 1];
153
+ _context.t0 = isLastQuery;
154
+ if (!_context.t0) {
155
+ _context.next = 27;
156
+ break;
157
+ }
158
+ _context.next = 26;
159
+ return (0, _duckdbTableUtils.checkIsSelectQuery)(connection, statement);
160
+ case 26:
161
+ _context.t0 = _context.sent;
162
+ case 27:
163
+ if (!_context.t0) {
164
+ _context.next = 44;
165
+ break;
166
+ }
167
+ _context.next = 30;
168
+ return connection.query("CREATE OR REPLACE TABLE '".concat(tempTableName, "' AS ").concat(statement));
169
+ case 30:
170
+ _context.next = 32;
171
+ return (0, _duckdbTableUtils.getDuckDBColumnTypes)(connection, tempTableName);
172
+ case 32:
173
+ duckDbColumns = _context.sent;
174
+ tableDuckDBTypes = (0, _duckdbTableUtils.getDuckDBColumnTypesMap)(duckDbColumns);
175
+ columnsToConvertToWKB = (0, _duckdbTableUtils.getGeometryColumns)(duckDbColumns); // 3) query GEOMETRY columns as WKB.
176
+ _adjustedQuery = (0, _duckdbTableUtils.constructST_asWKBQuery)(tempTableName, columnsToConvertToWKB);
177
+ _context.next = 38;
178
+ return connection.query(_adjustedQuery);
179
+ case 38:
117
180
  arrowResult = _context.sent;
118
- setResult(arrowResult);
119
- setError(null);
120
- connection.close();
121
- _context.next = 22;
181
+ // 4) set geoarrow extension for the arrow table as DuckDB doesn't support the geoarrow extension.
182
+ (0, _duckdbTableUtils.setGeoArrowWKBExtension)(arrowResult, duckDbColumns);
183
+
184
+ // 5) remove temp table
185
+ _context.next = 42;
186
+ return connection.query("DROP TABLE ".concat(tempTableName, ";"));
187
+ case 42:
188
+ _context.next = 46;
122
189
  break;
123
- case 19:
124
- _context.prev = 19;
125
- _context.t0 = _context["catch"](1);
126
- setError(_context.t0);
127
- case 22:
128
- _context.prev = 22;
190
+ case 44:
191
+ _context.next = 46;
192
+ return connection.query(statement);
193
+ case 46:
194
+ _context.next = 19;
195
+ break;
196
+ case 48:
197
+ _context.next = 53;
198
+ break;
199
+ case 50:
200
+ _context.prev = 50;
201
+ _context.t1 = _context["catch"](17);
202
+ _iterator.e(_context.t1);
203
+ case 53:
204
+ _context.prev = 53;
205
+ _iterator.f();
206
+ return _context.finish(53);
207
+ case 56:
208
+ // Show preview only for the result of the last query
209
+ if (arrowResult) {
210
+ setResult({
211
+ table: arrowResult,
212
+ tableDuckDBTypes: tableDuckDBTypes
213
+ });
214
+ setError(null);
215
+ }
216
+ _context.next = 59;
217
+ return connection.close();
218
+ case 59:
219
+ _context.next = 64;
220
+ break;
221
+ case 61:
222
+ _context.prev = 61;
223
+ _context.t2 = _context["catch"](1);
224
+ setError(_context.t2);
225
+ case 64:
226
+ _context.prev = 64;
129
227
  setIsRunning(false);
130
- return _context.finish(22);
131
- case 25:
228
+ return _context.finish(64);
229
+ case 67:
230
+ // Indicate that there may be a possible change in DuckDB.
231
+ setSchemaUpdateTrigger(Date.now());
232
+ case 68:
132
233
  case "end":
133
234
  return _context.stop();
134
235
  }
135
- }, _callee, null, [[1, 19, 22, 25]]);
236
+ }, _callee, null, [[1, 61, 64, 67], [17, 50, 53, 56]]);
136
237
  })), [sql]);
137
238
  var onChange = (0, _react.useCallback)(function (value) {
138
239
  setSql(value);
139
240
  }, [setSql]);
140
241
  var onAddResultToMap = (0, _react.useCallback)(function () {
141
242
  if (!result) return;
142
- var keplerFields = (0, _processors.arrowSchemaToFields)(result.schema);
243
+ var keplerFields = (0, _processors.arrowSchemaToFields)(result.table, result.tableDuckDBTypes);
143
244
  var datasetToAdd = {
144
245
  data: {
145
246
  fields: keplerFields,
146
247
  // TODO type AddDataToMapPayload -> rows -> + arrow.Table
147
- rows: result
248
+ rows: result.table
148
249
  },
149
250
  info: {
150
251
  id: (0, _commonUtils.generateHashId)(),
@@ -157,15 +258,101 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
157
258
  }));
158
259
  setCounter(counter + 1);
159
260
  }, [result, counter, dispatch]);
261
+ var isValidFileType = (0, _react.useCallback)(function (filename) {
262
+ var fileExt = _duckdbTableUtils.SUPPORTED_DUCKDB_DROP_EXTENSIONS.find(function (ext) {
263
+ return filename.endsWith(ext);
264
+ });
265
+ return Boolean(fileExt);
266
+ }, []);
267
+ var createTableFromDroppedFile = (0, _react.useCallback)( /*#__PURE__*/function () {
268
+ var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(droppedFile) {
269
+ var _error;
270
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
271
+ while (1) switch (_context2.prev = _context2.next) {
272
+ case 0:
273
+ if (!droppedFile) {
274
+ _context2.next = 5;
275
+ break;
276
+ }
277
+ _context2.next = 3;
278
+ return (0, _duckdbTableUtils.tableFromFile)(droppedFile);
279
+ case 3:
280
+ _error = _context2.sent;
281
+ if (_error) {
282
+ setError(_error);
283
+ } else {
284
+ setError(null);
285
+ }
286
+ case 5:
287
+ setDroppedFile(null);
288
+ setDragState(false);
289
+ case 7:
290
+ case "end":
291
+ return _context2.stop();
292
+ }
293
+ }, _callee2);
294
+ }));
295
+ return function (_x) {
296
+ return _ref3.apply(this, arguments);
297
+ };
298
+ }(), []);
299
+ (0, _react.useEffect)(function () {
300
+ createTableFromDroppedFile(droppedFile);
301
+ }, [droppedFile, createTableFromDroppedFile]);
302
+ var handleFileInput = (0, _react.useCallback)(function (fileList, event) {
303
+ if (event) {
304
+ event.preventDefault();
305
+ event.stopPropagation();
306
+ }
307
+ var files = (0, _toConsumableArray2["default"])(fileList).filter(Boolean);
308
+ var disableExtensionFilter = false;
309
+ var filesToLoad = [];
310
+ var errorFiles = [];
311
+ var _iterator2 = _createForOfIteratorHelper(files),
312
+ _step2;
313
+ try {
314
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
315
+ var file = _step2.value;
316
+ if (disableExtensionFilter || isValidFileType(file.name)) {
317
+ filesToLoad.push(file);
318
+ } else {
319
+ errorFiles.push(file.name);
320
+ }
321
+ }
322
+ } catch (err) {
323
+ _iterator2.e(err);
324
+ } finally {
325
+ _iterator2.f();
326
+ }
327
+ if (filesToLoad.length > 0) {
328
+ setDroppedFile(filesToLoad[0]);
329
+ } else if (errorFiles.length > 0) {
330
+ setError(new Error("Unsupported file formats: ".concat(errorFiles.join(', '))));
331
+ }
332
+ }, [isValidFileType]);
160
333
  return /*#__PURE__*/_react["default"].createElement(StyledSqlPanel, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
161
334
  direction: "horizontal"
162
335
  }, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
163
336
  defaultSize: 20,
164
337
  minSize: 15,
165
- style: SCHEMA_PANEL_STYLE
338
+ style: SCHEMA_PANEL_STYLE,
339
+ className: "schema-panel"
340
+ }, /*#__PURE__*/_react["default"].createElement(StyledFileDropArea, {
341
+ dragOver: dragState,
342
+ onDragOver: function onDragOver() {
343
+ return setDragState(true);
344
+ },
345
+ onDragLeave: function onDragLeave() {
346
+ return setDragState(false);
347
+ },
348
+ frame: droppedFileAreaRef.current || document,
349
+ onDrop: handleFileInput,
350
+ className: "file-uploader__file-drop"
166
351
  }, /*#__PURE__*/_react["default"].createElement(_schemaPanel.SchemaPanel, {
167
- setTableSchema: setTableSchema
168
- })), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
352
+ setTableSchema: setTableSchema,
353
+ droppedFile: droppedFile,
354
+ schemaUpdateTrigger: schemaUpdateTrigger
355
+ }))), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
169
356
  minSize: 40
170
357
  }, /*#__PURE__*/_react["default"].createElement(StyledSqlEditor, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
171
358
  direction: "vertical"
@@ -191,13 +378,15 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
191
378
  onChange: onChange,
192
379
  tableSchema: tableSchema,
193
380
  code: sql
194
- })))), /*#__PURE__*/_react["default"].createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, null, isRunning ? /*#__PURE__*/_react["default"].createElement(StyledLoadingContainer, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : error ? /*#__PURE__*/_react["default"].createElement(StyledErrorContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, error.message)) : result ? /*#__PURE__*/_react["default"].createElement(StyledDataPanel, null, /*#__PURE__*/_react["default"].createElement(StyledResultActions, null, /*#__PURE__*/_react["default"].createElement(_components.Button, {
381
+ })))), /*#__PURE__*/_react["default"].createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
382
+ className: "preview-panel"
383
+ }, isRunning ? /*#__PURE__*/_react["default"].createElement(StyledLoadingContainer, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : error ? /*#__PURE__*/_react["default"].createElement(StyledErrorContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, error.message)) : result ? /*#__PURE__*/_react["default"].createElement(StyledDataPanel, null, /*#__PURE__*/_react["default"].createElement(StyledResultActions, null, /*#__PURE__*/_react["default"].createElement(_components.Button, {
195
384
  secondary: true,
196
385
  onClick: onAddResultToMap
197
- }, "Add to Map"), /*#__PURE__*/_react["default"].createElement("div", null, result.numRows, " rows")), /*#__PURE__*/_react["default"].createElement(_previewDataPanel.PreviewDataPanel, {
386
+ }, "Add to Map"), /*#__PURE__*/_react["default"].createElement("div", null, result.table.numRows, " rows")), /*#__PURE__*/_react["default"].createElement(_previewDataPanel.PreviewDataPanel, {
198
387
  result: result,
199
388
  dataTableStyle: {},
200
389
  onAddResultToMap: onAddResultToMap
201
390
  })) : null))))));
202
391
  };
203
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFJlc2l6YWJsZVBhbmVscyIsIl9tb25hY29FZGl0b3IiLCJfc2NoZW1hUGFuZWwiLCJfcHJldmlld0RhdGFQYW5lbCIsIl9pbml0IiwiX2NvbXBvbmVudHMiLCJfY29tbW9uVXRpbHMiLCJfYWN0aW9ucyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfcHJvY2Vzc29ycyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlN0eWxlZFNxbFBhbmVsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJzaWRlUGFuZWxCZyIsIlN0eWxlZFNxbEFjdGlvbnMiLCJTdHlsZWRTcWxFZGl0b3IiLCJTdHlsZWRFZGl0b3JQYW5lbCIsIlN0eWxlZERhdGFQYW5lbCIsIlN0eWxlZEVkaXRvciIsInByb3BzIiwiaXNSdW5uaW5nIiwiU3R5bGVkUmVzdWx0QWN0aW9ucyIsIlN0eWxlZFJlc2l6ZUhhbmRsZSIsIlBhbmVsUmVzaXplSGFuZGxlIiwicGFuZWxCb3JkZXJDb2xvciIsIlN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlIiwiU3R5bGVkTG9hZGluZ0NvbnRhaW5lciIsIlN0eWxlZEVycm9yQ29udGFpbmVyIiwicHJlIiwiU0NIRU1BX1BBTkVMX1NUWUxFIiwib3ZlcmZsb3ciLCJTcWxQYW5lbCIsImV4cG9ydHMiLCJfcmVmIiwiX3JlZiRpbml0aWFsU3FsIiwiaW5pdGlhbFNxbCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic3FsIiwic2V0U3FsIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJyZXN1bHQiLCJzZXRSZXN1bHQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImNvdW50ZXIiLCJzZXRDb3VudGVyIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwidGFibGVTY2hlbWEiLCJzZXRUYWJsZVNjaGVtYSIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzZXRJc1J1bm5pbmciLCJfdXNlU3RhdGUxMyIsImlzQXBwbGVEZXZpY2UiLCJfdXNlU3RhdGUxNCIsImlzTWFjIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInVzZUVmZmVjdCIsImN1cnJlbnRVcmwiLCJVUkwiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsInRvU3RyaW5nIiwicnVuUXVlcnkiLCJ1c2VDYWxsYmFjayIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiZGIiLCJjb25uZWN0aW9uIiwiYXJyb3dSZXN1bHQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidHJpbSIsIkVycm9yIiwiYWJydXB0IiwiZ2V0RHVja0RCIiwic2VudCIsImNvbm5lY3QiLCJxdWVyeSIsImNsb3NlIiwidDAiLCJmaW5pc2giLCJzdG9wIiwib25DaGFuZ2UiLCJ2YWx1ZSIsIm9uQWRkUmVzdWx0VG9NYXAiLCJrZXBsZXJGaWVsZHMiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwic2NoZW1hIiwiZGF0YXNldFRvQWRkIiwiZGF0YSIsImZpZWxkcyIsInJvd3MiLCJpbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiY29uY2F0IiwiZm9ybWF0IiwiYWRkRGF0YVRvTWFwIiwiZGF0YXNldHMiLCJjcmVhdGVFbGVtZW50IiwiUGFuZWxHcm91cCIsImRpcmVjdGlvbiIsIlBhbmVsIiwiZGVmYXVsdFNpemUiLCJtaW5TaXplIiwic3R5bGUiLCJTY2hlbWFQYW5lbCIsImNsYXNzTmFtZSIsIkljb25CdXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJJY29ucyIsIlBsYXkiLCJoZWlnaHQiLCJUb29sdGlwIiwicGxhY2UiLCJlZmZlY3QiLCJpc1JlYWRPbmx5Iiwib25SdW5RdWVyeSIsImNvZGUiLCJMb2FkaW5nU3Bpbm5lciIsIm1lc3NhZ2UiLCJCdXR0b24iLCJzZWNvbmRhcnkiLCJudW1Sb3dzIiwiUHJldmlld0RhdGFQYW5lbCIsImRhdGFUYWJsZVN0eWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvc3FsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtQYW5lbCwgUGFuZWxHcm91cCwgUGFuZWxSZXNpemVIYW5kbGV9IGZyb20gJ3JlYWN0LXJlc2l6YWJsZS1wYW5lbHMnO1xuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbH0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsfSBmcm9tICcuL3ByZXZpZXctZGF0YS1wYW5lbCc7XG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge0J1dHRvbiwgSWNvbkJ1dHRvbiwgVG9vbHRpcH0gZnJvbSAnQGtlcGxlci5nbC9jb21wb25lbnRzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtJY29ucywgTG9hZGluZ1NwaW5uZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge3NpZGVQYW5lbEJnLCBwYW5lbEJvcmRlckNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge2lzQXBwbGVEZXZpY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJvd1NjaGVtYVRvRmllbGRzfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5jb25zdCBTdHlsZWRTcWxQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzMzMztcbmA7XG5cbmNvbnN0IFN0eWxlZFNxbEFjdGlvbnMgPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAwIDAgNTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7XG5gO1xuXG5jb25zdCBTdHlsZWRTcWxFZGl0b3IgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDA7IC8vIFByZXZlbnRzIGZsZXggY2hpbGQgZnJvbSBvdmVyZmxvd2luZ1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRFZGl0b3JQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogNXB4O1xuICBmbGV4LWdyb3c6IDE7XG5gO1xuXG5jb25zdCBTdHlsZWREYXRhUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuYDtcblxuY29uc3QgU3R5bGVkRWRpdG9yID0gc3R5bGVkLmRpdjx7aXNSdW5uaW5nOiBib29sZWFufT5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDEycHggMTJweCAxMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigzMCwgMzAsIDMwKTtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuaXNSdW5uaW5nID8gMC41IDogMSl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAwOyAvLyBQcmV2ZW50cyBmbGV4IGNoaWxkIGZyb20gb3ZlcmZsb3dpbmdcbmA7XG5cbmNvbnN0IFN0eWxlZFJlc3VsdEFjdGlvbnMgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMnB4IDEycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuYDtcblxuY29uc3QgU3R5bGVkUmVzaXplSGFuZGxlID0gc3R5bGVkKFBhbmVsUmVzaXplSGFuZGxlKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwYW5lbEJvcmRlckNvbG9yfTtcbiAgd2lkdGg6IDRweDtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlID0gc3R5bGVkKFBhbmVsUmVzaXplSGFuZGxlKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwYW5lbEJvcmRlckNvbG9yfTtcbiAgaGVpZ2h0OiA0cHg7XG4gIGN1cnNvcjogcm93LXJlc2l6ZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRMb2FkaW5nQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVycm9yQ29udGFpbmVyID0gc3R5bGVkLnByZWBcbiAgcGFkZGluZzogMTJweDtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbmA7XG5cbnR5cGUgU3FsUGFuZWxQcm9wcyA9IHtcbiAgaW5pdGlhbFNxbD86IHN0cmluZztcbn07XG5cbmNvbnN0IFNDSEVNQV9QQU5FTF9TVFlMRSA9IHtvdmVyZmxvdzogJ2F1dG8nfTtcblxuZXhwb3J0IGNvbnN0IFNxbFBhbmVsOiBSZWFjdC5GQzxTcWxQYW5lbFByb3BzPiA9ICh7aW5pdGlhbFNxbCA9ICcnfSkgPT4ge1xuICBjb25zdCBbc3FsLCBzZXRTcWxdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgcmV0dXJuIHBhcmFtcy5nZXQoJ3NxbCcpIHx8IGluaXRpYWxTcWw7XG4gIH0pO1xuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8bnVsbCB8IGFycm93LlRhYmxlPihudWxsKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RhYmxlU2NoZW1hLCBzZXRUYWJsZVNjaGVtYV0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtpc1J1bm5pbmcsIHNldElzUnVubmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc01hY10gPSB1c2VTdGF0ZSgoKSA9PiBpc0FwcGxlRGV2aWNlKCkpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHNxbCkge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzcWwnLCBzcWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NxbCcpO1xuICAgIH1cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBjdXJyZW50VXJsLnRvU3RyaW5nKCkpO1xuICB9LCBbc3FsXSk7XG5cbiAgY29uc3QgcnVuUXVlcnkgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNSdW5uaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNxbD8udHJpbSgpKSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignUXVlcnkgaXMgZW1wdHknKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGIgPSBhd2FpdCBnZXREdWNrREIoKTtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICAgIGNvbnN0IGFycm93UmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShzcWwpO1xuICAgICAgc2V0UmVzdWx0KGFycm93UmVzdWx0KTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUnVubmluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbc3FsXSk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICB2YWx1ZSA9PiB7XG4gICAgICBzZXRTcWwodmFsdWUpO1xuICAgIH0sXG4gICAgW3NldFNxbF1cbiAgKTtcblxuICBjb25zdCBvbkFkZFJlc3VsdFRvTWFwID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghcmVzdWx0KSByZXR1cm47XG5cbiAgICBjb25zdCBrZXBsZXJGaWVsZHMgPSBhcnJvd1NjaGVtYVRvRmllbGRzKHJlc3VsdC5zY2hlbWEpO1xuXG4gICAgY29uc3QgZGF0YXNldFRvQWRkID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBmaWVsZHM6IGtlcGxlckZpZWxkcyxcbiAgICAgICAgLy8gVE9ETyB0eXBlIEFkZERhdGFUb01hcFBheWxvYWQgLT4gcm93cyAtPiArIGFycm93LlRhYmxlXG4gICAgICAgIHJvd3M6IHJlc3VsdCBhcyBhbnlcbiAgICAgIH0sXG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCgpLFxuICAgICAgICBsYWJlbDogYHF1ZXJ5X3Jlc3VsdCR7Y291bnRlciA+IDAgPyBgXyR7Y291bnRlcn1gIDogJyd9YCxcbiAgICAgICAgZm9ybWF0OiAnYXJyb3cnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGRpc3BhdGNoKGFkZERhdGFUb01hcCh7ZGF0YXNldHM6IFtkYXRhc2V0VG9BZGRdfSkpO1xuICAgIHNldENvdW50ZXIoY291bnRlciArIDEpO1xuICB9LCBbcmVzdWx0LCBjb3VudGVyLCBkaXNwYXRjaF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZFNxbFBhbmVsPlxuICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiPlxuICAgICAgICA8UGFuZWwgZGVmYXVsdFNpemU9ezIwfSBtaW5TaXplPXsxNX0gc3R5bGU9e1NDSEVNQV9QQU5FTF9TVFlMRX0+XG4gICAgICAgICAgPFNjaGVtYVBhbmVsIHNldFRhYmxlU2NoZW1hPXtzZXRUYWJsZVNjaGVtYX0gLz5cbiAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICA8U3R5bGVkUmVzaXplSGFuZGxlIC8+XG5cbiAgICAgICAgPFBhbmVsIG1pblNpemU9ezQwfT5cbiAgICAgICAgICA8U3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXszMH0gY2xhc3NOYW1lPVwiZWRpdG9yLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFNxbEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj1cInJ1bi1xdWVyeS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5RdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNSdW5uaW5nIHx8ICFzcWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGxheSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD1cInJ1bi1xdWVyeS10b29sdGlwXCIgcGxhY2U9XCJ0b3BcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUnVuIFF1ZXJ5ICh7aXNNYWMgPyAn4oyYRW50ZXInIDogJ0N0cmwrRW50ZXInfSBvciBTaGlmdCtFbnRlcilcbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFZGl0b3IgaXNSdW5uaW5nPXtpc1J1bm5pbmd9PlxuICAgICAgICAgICAgICAgICAgICA8TW9uYWNvRWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seT17aXNSdW5uaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUnVuUXVlcnk9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNjaGVtYT17dGFibGVTY2hlbWF9XG4gICAgICAgICAgICAgICAgICAgICAgY29kZT17c3FsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3I+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3JQYW5lbD5cbiAgICAgICAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICAgICAgICA8U3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgLz5cbiAgICAgICAgICAgICAgPFBhbmVsPlxuICAgICAgICAgICAgICAgIHtpc1J1bm5pbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTG9hZGluZ0NvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntlcnJvci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICApIDogcmVzdWx0ID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZERhdGFQYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlc3VsdEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzZWNvbmRhcnkgb25DbGljaz17b25BZGRSZXN1bHRUb01hcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gTWFwXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57cmVzdWx0Lm51bVJvd3N9IHJvd3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICA8UHJldmlld0RhdGFQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD17cmVzdWx0fVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFUYWJsZVN0eWxlPXt7fX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkFkZFJlc3VsdFRvTWFwPXtvbkFkZFJlc3VsdFRvTWFwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICA8L1BhbmVsR3JvdXA+XG4gICAgICAgICAgPC9TdHlsZWRTcWxFZGl0b3I+XG4gICAgICAgIDwvUGFuZWw+XG4gICAgICA8L1BhbmVsR3JvdXA+XG4gICAgPC9TdHlsZWRTcWxQYW5lbD5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFdBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLE9BQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLE1BQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFj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
392
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFJlc2l6YWJsZVBhbmVscyIsIl9hY3Rpb25zIiwiX2NvbW1vblV0aWxzIiwiX2NvbXBvbmVudHMiLCJfcHJvY2Vzc29ycyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfbW9uYWNvRWRpdG9yIiwiX3NjaGVtYVBhbmVsIiwiX3ByZXZpZXdEYXRhUGFuZWwiLCJfaW5pdCIsIl9kdWNrZGJUYWJsZVV0aWxzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX3RlbXBsYXRlT2JqZWN0OCIsIl90ZW1wbGF0ZU9iamVjdDkiLCJfdGVtcGxhdGVPYmplY3QxMCIsIl90ZW1wbGF0ZU9iamVjdDExIiwiX3RlbXBsYXRlT2JqZWN0MTIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiU3R5bGVkU3FsUGFuZWwiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInNpZGVQYW5lbEJnIiwiU3R5bGVkU3FsQWN0aW9ucyIsIlN0eWxlZFNxbEVkaXRvciIsIlN0eWxlZEVkaXRvclBhbmVsIiwiU3R5bGVkRGF0YVBhbmVsIiwiU3R5bGVkRWRpdG9yIiwicHJvcHMiLCJpc1J1bm5pbmciLCJTdHlsZWRSZXN1bHRBY3Rpb25zIiwiU3R5bGVkUmVzaXplSGFuZGxlIiwiUGFuZWxSZXNpemVIYW5kbGUiLCJwYW5lbEJvcmRlckNvbG9yIiwiU3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUiLCJTdHlsZWRMb2FkaW5nQ29udGFpbmVyIiwiU3R5bGVkRXJyb3JDb250YWluZXIiLCJwcmUiLCJTdHlsZWRGaWxlRHJvcEFyZWEiLCJGaWxlRHJvcCIsImRyYWdPdmVyIiwidGhlbWUiLCJzdWJ0ZXh0Q29sb3JMVCIsIlNDSEVNQV9QQU5FTF9TVFlMRSIsIm92ZXJmbG93IiwiU3FsUGFuZWwiLCJleHBvcnRzIiwiX3JlZiIsIl9yZWYkaW5pdGlhbFNxbCIsImluaXRpYWxTcWwiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNxbCIsInNldFNxbCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZHJvcHBlZEZpbGUiLCJzZXREcm9wcGVkRmlsZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZHJhZ1N0YXRlIiwic2V0RHJhZ1N0YXRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJyZXN1bHQiLCJzZXRSZXN1bHQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMTAiLCJzY2hlbWFVcGRhdGVUcmlnZ2VyIiwic2V0U2NoZW1hVXBkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImNvdW50ZXIiLCJzZXRDb3VudGVyIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsInRhYmxlU2NoZW1hIiwic2V0VGFibGVTY2hlbWEiLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4Iiwic2V0SXNSdW5uaW5nIiwiX3VzZVN0YXRlMTkiLCJpc0FwcGxlRGV2aWNlIiwiX3VzZVN0YXRlMjAiLCJpc01hYyIsImRpc3BhdGNoIiwidXNlRGlzcGF0Y2giLCJkcm9wcGVkRmlsZUFyZWFSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50VXJsIiwiVVJMIiwiaHJlZiIsInNlYXJjaFBhcmFtcyIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJydW5RdWVyeSIsInVzZUNhbGxiYWNrIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJhZGp1c3RlZFF1ZXJ5IiwiZGIiLCJjb25uZWN0aW9uIiwidGVtcFRhYmxlTmFtZSIsInNxbFN0YXRlbWVudHMiLCJhcnJvd1Jlc3VsdCIsInRhYmxlRHVja0RCVHlwZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInN0YXRlbWVudCIsImlzTGFzdFF1ZXJ5IiwiZHVja0RiQ29sdW1ucyIsImNvbHVtbnNUb0NvbnZlcnRUb1dLQiIsIl9hZGp1c3RlZFF1ZXJ5Iiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwicmVtb3ZlU1FMQ29tbWVudHMiLCJFcnJvciIsImFicnVwdCIsImdldER1Y2tEQiIsInNlbnQiLCJjb25uZWN0Iiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwidDAiLCJjaGVja0lzU2VsZWN0UXVlcnkiLCJxdWVyeSIsImNvbmNhdCIsImdldER1Y2tEQkNvbHVtblR5cGVzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAiLCJnZXRHZW9tZXRyeUNvbHVtbnMiLCJjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5Iiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJ0MSIsImZpbmlzaCIsInRhYmxlIiwiY2xvc2UiLCJ0MiIsIkRhdGUiLCJub3ciLCJzdG9wIiwib25DaGFuZ2UiLCJvbkFkZFJlc3VsdFRvTWFwIiwia2VwbGVyRmllbGRzIiwiYXJyb3dTY2hlbWFUb0ZpZWxkcyIsImRhdGFzZXRUb0FkZCIsImRhdGEiLCJmaWVsZHMiLCJyb3dzIiwiaW5mbyIsImlkIiwiZ2VuZXJhdGVIYXNoSWQiLCJsYWJlbCIsImZvcm1hdCIsImFkZERhdGFUb01hcCIsImRhdGFzZXRzIiwiaXNWYWxpZEZpbGVUeXBlIiwiZmlsZW5hbWUiLCJmaWxlRXh0IiwiU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMiLCJmaW5kIiwiZXh0IiwiZW5kc1dpdGgiLCJCb29sZWFuIiwiY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGUiLCJfcmVmMyIsIl9jYWxsZWUyIiwiX2Vycm9yIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwidGFibGVGcm9tRmlsZSIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVGaWxlSW5wdXQiLCJmaWxlTGlzdCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJmaWxlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJmaWx0ZXIiLCJkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIiwiZmlsZXNUb0xvYWQiLCJlcnJvckZpbGVzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImZpbGUiLCJwdXNoIiwiZXJyIiwiam9pbiIsImNyZWF0ZUVsZW1lbnQiLCJQYW5lbEdyb3VwIiwiZGlyZWN0aW9uIiwiUGFuZWwiLCJkZWZhdWx0U2l6ZSIsIm1pblNpemUiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm9uRHJhZ092ZXIiLCJvbkRyYWdMZWF2ZSIsImZyYW1lIiwiY3VycmVudCIsImRvY3VtZW50Iiwib25Ecm9wIiwiU2NoZW1hUGFuZWwiLCJJY29uQnV0dG9uIiwib25DbGljayIsImRpc2FibGVkIiwiSWNvbnMiLCJQbGF5IiwiaGVpZ2h0IiwiVG9vbHRpcCIsInBsYWNlIiwiZWZmZWN0IiwiaXNSZWFkT25seSIsIm9uUnVuUXVlcnkiLCJjb2RlIiwiTG9hZGluZ1NwaW5uZXIiLCJtZXNzYWdlIiwiQnV0dG9uIiwic2Vjb25kYXJ5IiwibnVtUm93cyIsIlByZXZpZXdEYXRhUGFuZWwiLCJkYXRhVGFibGVTdHlsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NxbC1wYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtQYW5lbCwgUGFuZWxHcm91cCwgUGFuZWxSZXNpemVIYW5kbGV9IGZyb20gJ3JlYWN0LXJlc2l6YWJsZS1wYW5lbHMnO1xuXG5pbXBvcnQge2FkZERhdGFUb01hcH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7QnV0dG9uLCBGaWxlRHJvcCwgSWNvbkJ1dHRvbiwgSWNvbnMsIExvYWRpbmdTcGlubmVyLCBUb29sdGlwfSBmcm9tICdAa2VwbGVyLmdsL2NvbXBvbmVudHMnO1xuaW1wb3J0IHthcnJvd1NjaGVtYVRvRmllbGRzfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtzaWRlUGFuZWxCZywgcGFuZWxCb3JkZXJDb2xvcn0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtpc0FwcGxlRGV2aWNlfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbCwgU2NoZW1hU3VnZ2VzdGlvbn0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsLCBRdWVyeVJlc3VsdH0gZnJvbSAnLi9wcmV2aWV3LWRhdGEtcGFuZWwnO1xuaW1wb3J0IHtnZXREdWNrREJ9IGZyb20gJy4uL2luaXQnO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0U1RfYXNXS0JRdWVyeSxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXMsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzTWFwLFxuICBnZXRHZW9tZXRyeUNvbHVtbnMsXG4gIHNldEdlb0Fycm93V0tCRXh0ZW5zaW9uLFxuICBzcGxpdFNxbFN0YXRlbWVudHMsXG4gIGNoZWNrSXNTZWxlY3RRdWVyeSxcbiAgcmVtb3ZlU1FMQ29tbWVudHMsXG4gIHRhYmxlRnJvbUZpbGUsXG4gIFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TXG59IGZyb20gJy4uL3RhYmxlL2R1Y2tkYi10YWJsZS11dGlscyc7XG5cbmNvbnN0IFN0eWxlZFNxbFBhbmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMzMzO1xuYDtcblxuY29uc3QgU3R5bGVkU3FsQWN0aW9ucyA9IHN0eWxlZC5kaXZgXG4gIGZsZXg6IDAgMCA1MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXRvcDogMTJweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMztcbmA7XG5cbmNvbnN0IFN0eWxlZFNxbEVkaXRvciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDsgLy8gUHJldmVudHMgZmxleCBjaGlsZCBmcm9tIG92ZXJmbG93aW5nXG4gIGhlaWdodDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVkaXRvclBhbmVsID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiA1cHg7XG4gIGZsZXgtZ3JvdzogMTtcbmA7XG5cbmNvbnN0IFN0eWxlZERhdGFQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG5gO1xuXG5jb25zdCBTdHlsZWRFZGl0b3IgPSBzdHlsZWQuZGl2PHtpc1J1bm5pbmc6IGJvb2xlYW59PmBcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMTJweCAxMnB4IDEycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDMwLCAzMCwgMzApO1xuICBvcGFjaXR5OiAke3Byb3BzID0+IChwcm9wcy5pc1J1bm5pbmcgPyAwLjUgOiAxKX07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDA7IC8vIFByZXZlbnRzIGZsZXggY2hpbGQgZnJvbSBvdmVyZmxvd2luZ1xuYDtcblxuY29uc3QgU3R5bGVkUmVzdWx0QWN0aW9ucyA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAycHggMTJweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRSZXNpemVIYW5kbGUgPSBzdHlsZWQoUGFuZWxSZXNpemVIYW5kbGUpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3BhbmVsQm9yZGVyQ29sb3J9O1xuICB3aWR0aDogNHB4O1xuICBjdXJzb3I6IGNvbC1yZXNpemU7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgPSBzdHlsZWQoUGFuZWxSZXNpemVIYW5kbGUpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3BhbmVsQm9yZGVyQ29sb3J9O1xuICBoZWlnaHQ6IDRweDtcbiAgY3Vyc29yOiByb3ctcmVzaXplO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZExvYWRpbmdDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRXJyb3JDb250YWluZXIgPSBzdHlsZWQucHJlYFxuICBwYWRkaW5nOiAxMnB4O1xuICBjb2xvcjogcmVkO1xuICBmb250LXNpemU6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuYDtcblxuaW50ZXJmYWNlIFN0eWxlZERyYWdQYW5lbFByb3BzIHtcbiAgZHJhZ092ZXI/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRGaWxlRHJvcEFyZWEgPSBzdHlsZWQoRmlsZURyb3ApPFN0eWxlZERyYWdQYW5lbFByb3BzPmBcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyOiAxcHggJHtwcm9wcyA9PiAocHJvcHMuZHJhZ092ZXIgPyAnc29saWQnIDogJ2Rhc2hlZCcpfVxuICAgICR7cHJvcHMgPT4gKHByb3BzLmRyYWdPdmVyID8gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yTFQgOiAndHJhbnNwYXJlbnQnKX07XG4gIC5maWxlLWRyb3AtdGFyZ2V0IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbmA7XG5cbnR5cGUgU3FsUGFuZWxQcm9wcyA9IHtcbiAgaW5pdGlhbFNxbD86IHN0cmluZztcbn07XG5cbmNvbnN0IFNDSEVNQV9QQU5FTF9TVFlMRSA9IHtvdmVyZmxvdzogJ2F1dG8nfTtcblxuZXhwb3J0IGNvbnN0IFNxbFBhbmVsOiBSZWFjdC5GQzxTcWxQYW5lbFByb3BzPiA9ICh7aW5pdGlhbFNxbCA9ICcnfSkgPT4ge1xuICBjb25zdCBbc3FsLCBzZXRTcWxdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgcmV0dXJuIHBhcmFtcy5nZXQoJ3NxbCcpIHx8IGluaXRpYWxTcWw7XG4gIH0pO1xuICBjb25zdCBbZHJvcHBlZEZpbGUsIHNldERyb3BwZWRGaWxlXSA9IHVzZVN0YXRlPEZpbGUgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2RyYWdTdGF0ZSwgc2V0RHJhZ1N0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc3VsdCwgc2V0UmVzdWx0XSA9IHVzZVN0YXRlPG51bGwgfCBRdWVyeVJlc3VsdD4obnVsbCk7XG4gIGNvbnN0IFtzY2hlbWFVcGRhdGVUcmlnZ2VyLCBzZXRTY2hlbWFVcGRhdGVUcmlnZ2VyXSA9IHVzZVN0YXRlPG51bWJlcj4oMCk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFt0YWJsZVNjaGVtYSwgc2V0VGFibGVTY2hlbWFdID0gdXNlU3RhdGU8U2NoZW1hU3VnZ2VzdGlvbltdPihbXSk7XG4gIGNvbnN0IFtpc1J1bm5pbmcsIHNldElzUnVubmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc01hY10gPSB1c2VTdGF0ZSgoKSA9PiBpc0FwcGxlRGV2aWNlKCkpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgY29uc3QgZHJvcHBlZEZpbGVBcmVhUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGlmIChzcWwpIHtcbiAgICAgIGN1cnJlbnRVcmwuc2VhcmNoUGFyYW1zLnNldCgnc3FsJywgc3FsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKCdzcWwnKTtcbiAgICB9XG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgY3VycmVudFVybC50b1N0cmluZygpKTtcbiAgfSwgW3NxbF0pO1xuXG4gIGNvbnN0IHJ1blF1ZXJ5ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldElzUnVubmluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IHNxbCA/IHJlbW92ZVNRTENvbW1lbnRzKHNxbCkgOiBudWxsO1xuICAgICAgaWYgKCFhZGp1c3RlZFF1ZXJ5KSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignUXVlcnkgaXMgZW1wdHknKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGIgPSBhd2FpdCBnZXREdWNrREIoKTtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICAgIC8vIFRPRE8gZmluZCBhIGNoZWFwIHdheSB0byBnZXQgRHVja0RiIHR5cGVzIHdpdGggYSBzaW5nbGUgcXVlcnkgdG8gYSByZW1vdGUgcmVzb3VyY2UgLSB0ZW1wIHRhYmxlPyBjdGU/XG4gICAgICBjb25zdCB0ZW1wVGFibGVOYW1lID0gJ3RlbXBfa2VwbGVyZ2xfdGFibGUnO1xuXG4gICAgICAvLyByZW1vdmUgY29tbWVudHNcbiAgICAgIGNvbnN0IHNxbFN0YXRlbWVudHMgPSBzcGxpdFNxbFN0YXRlbWVudHMoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgIGxldCBhcnJvd1Jlc3VsdDogYXJyb3cuVGFibGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCB0YWJsZUR1Y2tEQlR5cGVzID0ge307XG5cbiAgICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHNxbFN0YXRlbWVudHMpIHtcbiAgICAgICAgY29uc3QgaXNMYXN0UXVlcnkgPSBzdGF0ZW1lbnQgPT09IHNxbFN0YXRlbWVudHNbc3FsU3RhdGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGlzTGFzdFF1ZXJ5ICYmIChhd2FpdCBjaGVja0lzU2VsZWN0UXVlcnkoY29ubmVjdGlvbiwgc3RhdGVtZW50KSkpIHtcbiAgICAgICAgICAvLyAxKSBjcmVhdGUgdGVtcCB0YWJsZSBmcm9tIHRoZSBvcmlnaW5hbCBxdWVyeS5cbiAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBDUkVBVEUgT1IgUkVQTEFDRSBUQUJMRSAnJHt0ZW1wVGFibGVOYW1lfScgQVMgJHtzdGF0ZW1lbnR9YCk7XG5cbiAgICAgICAgICAvLyAyKSBxdWVyeSBkdWNrZGIgdHlwZXMgYW5kIGRldGVjdCBjYW5kaWRhdGUgY29sdW1ucyBmb3IgU1RfYXNXS0IgdHJhbnNmb3JtLlxuICAgICAgICAgIGNvbnN0IGR1Y2tEYkNvbHVtbnMgPSBhd2FpdCBnZXREdWNrREJDb2x1bW5UeXBlcyhjb25uZWN0aW9uLCB0ZW1wVGFibGVOYW1lKTtcbiAgICAgICAgICB0YWJsZUR1Y2tEQlR5cGVzID0gZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAoZHVja0RiQ29sdW1ucyk7XG4gICAgICAgICAgY29uc3QgY29sdW1uc1RvQ29udmVydFRvV0tCID0gZ2V0R2VvbWV0cnlDb2x1bW5zKGR1Y2tEYkNvbHVtbnMpO1xuXG4gICAgICAgICAgLy8gMykgcXVlcnkgR0VPTUVUUlkgY29sdW1ucyBhcyBXS0IuXG4gICAgICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IGNvbnN0cnVjdFNUX2FzV0tCUXVlcnkodGVtcFRhYmxlTmFtZSwgY29sdW1uc1RvQ29udmVydFRvV0tCKTtcbiAgICAgICAgICBhcnJvd1Jlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgICAgICAvLyA0KSBzZXQgZ2VvYXJyb3cgZXh0ZW5zaW9uIGZvciB0aGUgYXJyb3cgdGFibGUgYXMgRHVja0RCIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZ2VvYXJyb3cgZXh0ZW5zaW9uLlxuICAgICAgICAgIHNldEdlb0Fycm93V0tCRXh0ZW5zaW9uKGFycm93UmVzdWx0LCBkdWNrRGJDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIDUpIHJlbW92ZSB0ZW1wIHRhYmxlXG4gICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgRFJPUCBUQUJMRSAke3RlbXBUYWJsZU5hbWV9O2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoc3RhdGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaG93IHByZXZpZXcgb25seSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBxdWVyeVxuICAgICAgaWYgKGFycm93UmVzdWx0KSB7XG4gICAgICAgIHNldFJlc3VsdCh7dGFibGU6IGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzfSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUnVubmluZyhmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGVyZSBtYXkgYmUgYSBwb3NzaWJsZSBjaGFuZ2UgaW4gRHVja0RCLlxuICAgIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXIoRGF0ZS5ub3coKSk7XG4gIH0sIFtzcWxdKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIHZhbHVlID0+IHtcbiAgICAgIHNldFNxbCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0U3FsXVxuICApO1xuXG4gIGNvbnN0IG9uQWRkUmVzdWx0VG9NYXAgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyZXN1bHQpIHJldHVybjtcblxuICAgIGNvbnN0IGtlcGxlckZpZWxkcyA9IGFycm93U2NoZW1hVG9GaWVsZHMocmVzdWx0LnRhYmxlLCByZXN1bHQudGFibGVEdWNrREJUeXBlcyk7XG5cbiAgICBjb25zdCBkYXRhc2V0VG9BZGQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZpZWxkczoga2VwbGVyRmllbGRzLFxuICAgICAgICAvLyBUT0RPIHR5cGUgQWRkRGF0YVRvTWFwUGF5bG9hZCAtPiByb3dzIC0+ICsgYXJyb3cuVGFibGVcbiAgICAgICAgcm93czogcmVzdWx0LnRhYmxlIGFzIGFueVxuICAgICAgfSxcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGdlbmVyYXRlSGFzaElkKCksXG4gICAgICAgIGxhYmVsOiBgcXVlcnlfcmVzdWx0JHtjb3VudGVyID4gMCA/IGBfJHtjb3VudGVyfWAgOiAnJ31gLFxuICAgICAgICBmb3JtYXQ6ICdhcnJvdydcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtkYXRhc2V0czogW2RhdGFzZXRUb0FkZF19KSk7XG4gICAgc2V0Q291bnRlcihjb3VudGVyICsgMSk7XG4gIH0sIFtyZXN1bHQsIGNvdW50ZXIsIGRpc3BhdGNoXSk7XG5cbiAgY29uc3QgaXNWYWxpZEZpbGVUeXBlID0gdXNlQ2FsbGJhY2soZmlsZW5hbWUgPT4ge1xuICAgIGNvbnN0IGZpbGVFeHQgPSBTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUy5maW5kKGV4dCA9PiBmaWxlbmFtZS5lbmRzV2l0aChleHQpKTtcbiAgICByZXR1cm4gQm9vbGVhbihmaWxlRXh0KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNyZWF0ZVRhYmxlRnJvbURyb3BwZWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGRyb3BwZWRGaWxlOiBGaWxlIHwgbnVsbCkgPT4ge1xuICAgIGlmIChkcm9wcGVkRmlsZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0YWJsZUZyb21GaWxlKGRyb3BwZWRGaWxlKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREcm9wcGVkRmlsZShudWxsKTtcbiAgICBzZXREcmFnU3RhdGUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZShkcm9wcGVkRmlsZSk7XG4gIH0sIFtkcm9wcGVkRmlsZSwgY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGVdKTtcblxuICBjb25zdCBoYW5kbGVGaWxlSW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmZpbGVMaXN0XS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIGNvbnN0IGRpc2FibGVFeHRlbnNpb25GaWx0ZXIgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmlsZXNUb0xvYWQ6IEZpbGVbXSA9IFtdO1xuICAgICAgY29uc3QgZXJyb3JGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoZGlzYWJsZUV4dGVuc2lvbkZpbHRlciB8fCBpc1ZhbGlkRmlsZVR5cGUoZmlsZS5uYW1lKSkge1xuICAgICAgICAgIGZpbGVzVG9Mb2FkLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JGaWxlcy5wdXNoKGZpbGUubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RHJvcHBlZEZpbGUoZmlsZXNUb0xvYWRbMF0pO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmaWxlIGZvcm1hdHM6ICR7ZXJyb3JGaWxlcy5qb2luKCcsICcpfWApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc1ZhbGlkRmlsZVR5cGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU3FsUGFuZWw+XG4gICAgICA8UGFuZWxHcm91cCBkaXJlY3Rpb249XCJob3Jpem9udGFsXCI+XG4gICAgICAgIDxQYW5lbCBkZWZhdWx0U2l6ZT17MjB9IG1pblNpemU9ezE1fSBzdHlsZT17U0NIRU1BX1BBTkVMX1NUWUxFfSBjbGFzc05hbWU9XCJzY2hlbWEtcGFuZWxcIj5cbiAgICAgICAgICA8U3R5bGVkRmlsZURyb3BBcmVhXG4gICAgICAgICAgICBkcmFnT3Zlcj17ZHJhZ1N0YXRlfVxuICAgICAgICAgICAgb25EcmFnT3Zlcj17KCkgPT4gc2V0RHJhZ1N0YXRlKHRydWUpfVxuICAgICAgICAgICAgb25EcmFnTGVhdmU9eygpID0+IHNldERyYWdTdGF0ZShmYWxzZSl9XG4gICAgICAgICAgICBmcmFtZT17ZHJvcHBlZEZpbGVBcmVhUmVmLmN1cnJlbnQgfHwgZG9jdW1lbnR9XG4gICAgICAgICAgICBvbkRyb3A9e2hhbmRsZUZpbGVJbnB1dH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX2ZpbGUtZHJvcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNjaGVtYVBhbmVsXG4gICAgICAgICAgICAgIHNldFRhYmxlU2NoZW1hPXtzZXRUYWJsZVNjaGVtYX1cbiAgICAgICAgICAgICAgZHJvcHBlZEZpbGU9e2Ryb3BwZWRGaWxlfVxuICAgICAgICAgICAgICBzY2hlbWFVcGRhdGVUcmlnZ2VyPXtzY2hlbWFVcGRhdGVUcmlnZ2VyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wQXJlYT5cbiAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICA8U3R5bGVkUmVzaXplSGFuZGxlIC8+XG5cbiAgICAgICAgPFBhbmVsIG1pblNpemU9ezQwfT5cbiAgICAgICAgICA8U3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXszMH0gY2xhc3NOYW1lPVwiZWRpdG9yLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFNxbEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj1cInJ1bi1xdWVyeS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5RdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNSdW5uaW5nIHx8ICFzcWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGxheSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD1cInJ1bi1xdWVyeS10b29sdGlwXCIgcGxhY2U9XCJ0b3BcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUnVuIFF1ZXJ5ICh7aXNNYWMgPyAn4oyYRW50ZXInIDogJ0N0cmwrRW50ZXInfSBvciBTaGlmdCtFbnRlcilcbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFZGl0b3IgaXNSdW5uaW5nPXtpc1J1bm5pbmd9PlxuICAgICAgICAgICAgICAgICAgICA8TW9uYWNvRWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seT17aXNSdW5uaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUnVuUXVlcnk9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNjaGVtYT17dGFibGVTY2hlbWF9XG4gICAgICAgICAgICAgICAgICAgICAgY29kZT17c3FsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3I+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3JQYW5lbD5cbiAgICAgICAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICAgICAgICA8U3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgLz5cbiAgICAgICAgICAgICAgPFBhbmVsIGNsYXNzTmFtZT1cInByZXZpZXctcGFuZWxcIj5cbiAgICAgICAgICAgICAgICB7aXNSdW5uaW5nID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRMb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57ZXJyb3IubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IHJlc3VsdCA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2Vjb25kYXJ5IG9uQ2xpY2s9e29uQWRkUmVzdWx0VG9NYXB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIE1hcFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3Jlc3VsdC50YWJsZS5udW1Sb3dzfSByb3dzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkUmVzdWx0QWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPFByZXZpZXdEYXRhUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9e3Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhVGFibGVTdHlsZT17e319XG4gICAgICAgICAgICAgICAgICAgICAgb25BZGRSZXN1bHRUb01hcD17b25BZGRSZXN1bHRUb01hcH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRGF0YVBhbmVsPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9QYW5lbEdyb3VwPlxuICAgICAgICAgIDwvU3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICA8L1BhbmVsPlxuICAgICAgPC9QYW5lbEdyb3VwPlxuICAgIDwvU3R5bGVkU3FsUGFuZWw+XG4gICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxPQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFFQSxJQUFBVyxhQUFBLEdBQUFSLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBWSxZQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxpQkFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsS0FB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QUFDLGFBQzlDLEVBQUNySSxLQUFLLEdBQUcsUUFBUSxHQUFHLFlBQVksRUFBQyxrQkFDckMsQ0FDQyxDQUNJLENBQUMsZUFDbkJ0SixNQUFBLFlBQUFvUSxhQUFBLENBQUNsTCxZQUFZO0lBQUNFLFNBQVMsRUFBRUE7RUFBVSxnQkFDakNwRixNQUFBLFlBQUFvUSxhQUFBLENBQUN2UCxhQUFBLFdBQVk7SUFDWCtRLFVBQVUsRUFBRXhNLFNBQVU7SUFDdEJ5TSxVQUFVLEVBQUUzSCxRQUFTO0lBQ3JCZ0QsUUFBUSxFQUFFQSxRQUFTO0lBQ25CcEUsV0FBVyxFQUFFQSxXQUFZO0lBQ3pCZ0osSUFBSSxFQUFFNUs7RUFBSSxDQUNYLENBQ1csQ0FDRyxDQUNkLENBQUMsZUFFUmxILE1BQUEsWUFBQW9RLGFBQUEsQ0FBQzNLLDBCQUEwQixNQUFFLENBQUMsZUFDOUJ6RixNQUFBLFlBQUFvUSxhQUFBLENBQUM5UCxxQkFBQSxDQUFBaVEsS0FBSztJQUFDSSxTQUFTLEVBQUM7RUFBZSxHQUM3QnZMLFNBQVMsZ0JBQ1JwRixNQUFBLFlBQUFvUSxhQUFBLENBQUMxSyxzQkFBc0IscUJBQ3JCMUYsTUFBQSxZQUFBb1EsYUFBQSxDQUFDM1AsV0FBQSxDQUFBc1IsY0FBYyxNQUFFLENBQ0ssQ0FBQyxHQUN2QnpKLEtBQUssZ0JBQ1B0SSxNQUFBLFlBQUFvUSxhQUFBLENBQUN6SyxvQkFBb0IscUJBQ25CM0YsTUFBQSxZQUFBb1EsYUFBQSxjQUFNOUgsS0FBSyxDQUFDMEosT0FBYSxDQUNMLENBQUMsR0FDckJsSyxNQUFNLGdCQUNSOUgsTUFBQSxZQUFBb1EsYUFBQSxDQUFDbkwsZUFBZSxxQkFDZGpGLE1BQUEsWUFBQW9RLGFBQUEsQ0FBQy9LLG1CQUFtQixxQkFDbEJyRixNQUFBLFlBQUFvUSxhQUFBLENBQUMzUCxXQUFBLENBQUF3UixNQUFNO0lBQUNDLFNBQVM7SUFBQ2QsT0FBTyxFQUFFakU7RUFBaUIsR0FBQyxZQUVyQyxDQUFDLGVBQ1RuTixNQUFBLFlBQUFvUSxhQUFBLGNBQU10SSxNQUFNLENBQUM4RSxLQUFLLENBQUN1RixPQUFPLEVBQUMsT0FBVSxDQUNsQixDQUFDLGVBQ3RCblMsTUFBQSxZQUFBb1EsYUFBQSxDQUFDclAsaUJBQUEsQ0FBQXFSLGdCQUFnQjtJQUNmdEssTUFBTSxFQUFFQSxNQUFPO0lBQ2Z1SyxjQUFjLEVBQUUsQ0FBQyxDQUFFO0lBQ25CbEYsZ0JBQWdCLEVBQUVBO0VBQWlCLENBQ3BDLENBQ2MsQ0FBQyxHQUNoQixJQUNDLENBQ0csQ0FDRyxDQUNaLENBQ0csQ0FDRSxDQUFDO0FBRXJCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=