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
@@ -166,7 +166,21 @@ export declare function processKeplerglDataset(rawData: object | object[], schem
166
166
  * @returns dataset containing `fields` and `rows` or null
167
167
  */
168
168
  export declare function processArrowTable(arrowTable: ArrowTable): ProcessorResult | null;
169
- export declare function arrowSchemaToFields(schema: arrow.Schema): Field[];
169
+ /**
170
+ * Extracts GeoArrow metadata from an Apache Arrow table schema.
171
+ * For geoparquet files geoarrow metadata isn't present in fields, so extract extra info from schema.
172
+ * @param table The Apache Arrow table to extract metadata from.
173
+ * @returns An object mapping column names to their GeoArrow encoding type.
174
+ * @throws Logs an error message if parsing of metadata fails.
175
+ */
176
+ export declare function getGeoArrowMetadataFromSchema(table: arrow.Table): Record<string, string>;
177
+ /**
178
+ * Converts an Apache Arrow table schema into an array of Kepler.gl field objects.
179
+ * @param table The Apache Arrow table whose schema needs to be converted.
180
+ * @param fieldTypeSuggestions Optional mapping of field names to suggested field types.
181
+ * @returns An array of field objects suitable for Kepler.gl.
182
+ */
183
+ export declare function arrowSchemaToFields(table: arrow.Table, fieldTypeSuggestions?: Record<string, string>): Field[];
170
184
  /**
171
185
  * Parse arrow batches returned from parseInBatches()
172
186
  *
@@ -12,6 +12,7 @@ export declare type ProviderState = {
12
12
  currentProvider: string | null;
13
13
  successInfo: any;
14
14
  mapSaved: null | string;
15
+ savedMapId: null | string;
15
16
  initialState?: any;
16
17
  visualizations: MapListItem[];
17
18
  };
@@ -128,7 +128,7 @@ export declare function setFilterUpdater<S extends VisState>(state: S, action: V
128
128
  * @memberof visStateUpdaters
129
129
  * @public
130
130
  */
131
- export declare const setFilterPlotUpdater: (state: VisState, { idx, newProp, valueIndex }: VisStateActions.SetFilterPlotUpdaterAction) => VisState;
131
+ export declare const setFilterPlotUpdater: (state: VisState, { idx, newProp }: VisStateActions.SetFilterPlotUpdaterAction) => VisState;
132
132
  /**
133
133
  * Add a new filter
134
134
  * @memberof visStateUpdaters
@@ -4,4 +4,4 @@ export declare function getNewDatasetColor(datasets: Datasets): RGBColor;
4
4
  /**
5
5
  * Take datasets payload from addDataToMap, create datasets entry save to visState
6
6
  */
7
- export declare function createNewDataEntry({ info, data, ...opts }: ProtoDataset, datasets?: Datasets): Datasets;
7
+ export declare function createNewDataEntry({ info, data, ...opts }: ProtoDataset, datasets?: Datasets): Datasets | null;
@@ -1,7 +1,8 @@
1
1
  import { TileJSON } from '@loaders.gl/mvt';
2
2
  import { PMTilesMetadata } from '@loaders.gl/pmtiles';
3
- import { FilterProps, KeplerTable as KeplerDataset } from '@kepler.gl/table';
3
+ import { RemoteTileFormat } from '@kepler.gl/constants';
4
4
  import { KeplerLayer } from '@kepler.gl/types';
5
+ import { FilterProps, default as KeplerDataset } from '../kepler-table';
5
6
  export declare const getLoaderOptions: () => {
6
7
  mvt: {
7
8
  workerUrl: string;
@@ -72,4 +73,19 @@ export declare function getFilterProps(fieldType: string, attribute: TippecanoeL
72
73
  * @returns Returns true if a dataset can be used as source data for a layer.
73
74
  */
74
75
  export declare function matchDatasetType(dataset: KeplerDataset, layer: KeplerLayer): boolean;
76
+ declare type GetFieldsFromTileProps = {
77
+ remoteTileFormat: RemoteTileFormat;
78
+ tilesetUrl: string | null;
79
+ metadataUrl: string | null;
80
+ metadata: VectorTileMetadata | null;
81
+ };
82
+ /**
83
+ * Extracts fields from a tile and updates the metadata object with found fields.
84
+ * Note: this function is for tilesets that don't include fields in metadata (most likely saved with older spec.).
85
+ * @param params.remoteTileFormat The format of the remote tile (MVT or PMTiles).
86
+ * @param params.tilesetUrl The URL of the tileset.
87
+ * @param params.metadataUrl The URL of the metadata.
88
+ * @param params.metadata The metadata object containing fields and tile properties.
89
+ */
90
+ export declare const getFieldsFromTile: ({ remoteTileFormat, tilesetUrl, metadataUrl, metadata }: GetFieldsFromTileProps) => Promise<void>;
75
91
  export {};
@@ -13,7 +13,7 @@ export declare type BaseMapLibraryConfig = {
13
13
  * A mechanism to override default Kepler values/settings so that we
14
14
  * without having to make application-specific changes to the kepler repo.
15
15
  */
16
- export declare type KeplerApplicationConfig<Map> = {
16
+ export declare type KeplerApplicationConfig = {
17
17
  /** Default name of export HTML file, can be overridden by user */
18
18
  defaultHtmlName?: string;
19
19
  defaultImageName?: string;
@@ -27,6 +27,7 @@ export declare type KeplerApplicationConfig<Map> = {
27
27
  table?: any;
28
28
  useArrowProgressiveLoading?: boolean;
29
29
  showReleaseBanner?: boolean;
30
+ useOnFilteredItemsChange?: boolean;
30
31
  };
31
- export declare const getApplicationConfig: () => Required<KeplerApplicationConfig<mapboxgl.Map>>;
32
- export declare function initApplicationConfig<M>(appConfig?: KeplerApplicationConfig<M>): void;
32
+ export declare const getApplicationConfig: () => Required<KeplerApplicationConfig>;
33
+ export declare function initApplicationConfig(appConfig?: KeplerApplicationConfig): void;
@@ -1,6 +1,6 @@
1
1
  import { TooltipFormat } from '@kepler.gl/constants';
2
- import { Field, Millisecond } from '@kepler.gl/types';
3
- export declare type FieldFormatter = (value: any) => string;
2
+ import { Field, Millisecond, ProtoDatasetField } from '@kepler.gl/types';
3
+ export declare type FieldFormatter = (value: any, field?: ProtoDatasetField) => string;
4
4
  export declare const MAX_LATITUDE = 89.9;
5
5
  export declare const MIN_LATITUDE = -89.9;
6
6
  export declare const MAX_LONGITUDE = 180;
@@ -95,13 +95,19 @@ export declare function roundValToStep(minValue: number | undefined, step: numbe
95
95
  */
96
96
  export declare const defaultFormatter: FieldFormatter;
97
97
  export declare const floatFormatter: (v: any) => string;
98
+ /**
99
+ * Transforms a WKB in Uint8Array form into a hex WKB string.
100
+ * @param uint8Array WKB in Uint8Array form.
101
+ * @returns hex WKB string.
102
+ */
103
+ export declare function uint8ArrayToHex(data: Uint8Array): string;
98
104
  export declare const FIELD_DISPLAY_FORMAT: {
99
105
  [key: string]: FieldFormatter;
100
106
  };
101
107
  /**
102
108
  * Parse field value and type and return a string representation
103
109
  */
104
- export declare const parseFieldValue: (value: any, type: string) => string;
110
+ export declare const parseFieldValue: (value: any, type: string, field?: Field) => string;
105
111
  /**
106
112
  * Get the value format based on field and format options
107
113
  * Used in render tooltip value
@@ -26,8 +26,8 @@ export declare class IndexedDataContainer implements DataContainerInterface {
26
26
  getPlainIndex(): number[];
27
27
  flattenData(): any[][];
28
28
  map<T>(func: (row: DataRow, index: number) => T, sharedRow?: SharedRowOptions, options?: RangeOptions): T[];
29
- mapIndex<T>(func: ({ index: number }: {
30
- index: any;
29
+ mapIndex<T>(func: ({ index }: {
30
+ index: number;
31
31
  }, dc: DataContainerInterface) => T, options?: RangeOptions): T[];
32
32
  find(func: (row: DataRow, index: number) => boolean, sharedRow?: SharedRowOptions): DataRow | undefined;
33
33
  reduce<T>(func: (acc: T, row: DataRow, index: number) => T, initialValue: T, sharedRow?: SharedRowOptions): T;
@@ -11,7 +11,7 @@ export declare function isStyleUsingOpenStreetMapTiles(mapStyle: any): boolean;
11
11
  * @param mapboxKey mapbox api key
12
12
  * @returns transformed url
13
13
  */
14
- export declare const transformRequest: (mapboxKey: string) => (url: string, resourceType: string) => {
14
+ export declare const transformRequest: (_mapboxKey: string) => (url: string, resourceType: string) => {
15
15
  url: string;
16
16
  };
17
17
  export declare const getBaseMapLibrary: (baseMapStyle?: {
@@ -6,7 +6,7 @@ import { SplitMapLayers, SplitMap, Viewport, MapState } from '@kepler.gl/types';
6
6
  * @param viewport - The ViewPort object to validate.
7
7
  * @returns A new ViewPort object with validated latitude.
8
8
  */
9
- export declare const validateViewPort: <T extends Pick<Viewport, "latitude" | "longitude">>(viewport: T) => T;
9
+ export declare const validateViewPort: <T extends Pick<Viewport, "longitude" | "latitude">>(viewport: T) => T;
10
10
  export declare const onViewPortChange: (viewState: Viewport, onUpdateMap: (next: any, mapIndex: number) => any, onViewStateChange?: ((next: any) => void | null) | undefined, primary?: boolean, mapIndex?: number) => void;
11
11
  export declare const getMapLayersFromSplitMaps: (splitMaps: SplitMap[], mapIndex?: number) => SplitMapLayers | undefined | null;
12
12
  /**
@@ -115,9 +115,9 @@ export declare function adjustValueToAnimationWindow<S extends MinVisStateForAni
115
115
  * @param datasets
116
116
  * @param dataId
117
117
  */
118
- export declare function updateTimeFilterPlotType(filter: TimeRangeFilter, plotType: TimeRangeFilter['plotType'], datasets: Datasets, dataId?: string): TimeRangeFilter;
118
+ export declare function updateTimeFilterPlotType(filter: TimeRangeFilter, plotType: TimeRangeFilter['plotType'], datasets: Datasets, _dataId?: string): TimeRangeFilter;
119
119
  export declare function getRangeFilterBins(filter: any, datasets: any, numBins: any): any;
120
- export declare function updateRangeFilterPlotType(filter: RangeFilter, plotType: RangeFilter['plotType'], datasets: Datasets, dataId?: string): RangeFilter;
120
+ export declare function updateRangeFilterPlotType(filter: RangeFilter, plotType: RangeFilter['plotType'], datasets: Datasets, _dataId?: string): RangeFilter;
121
121
  export declare function getChartTitle(yAxis: Field, plotType: PlotType): string;
122
122
  export declare function getDefaultPlotType(filter: any, datasets: any): {
123
123
  interval: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kepler.gl",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -101,9 +101,9 @@
101
101
  ],
102
102
  "dependencies": {
103
103
  "@deck.gl/mapbox": "^8.9.27",
104
- "@hubble.gl/core": "1.2.0-alpha.6",
105
- "@hubble.gl/react": "1.2.0-alpha.6",
106
- "@kepler.gl/components": "3.1.0",
104
+ "@hubble.gl/core": "1.4.0",
105
+ "@hubble.gl/react": "1.4.0",
106
+ "@kepler.gl/components": "3.1.1",
107
107
  "@loaders.gl/polyfills": "^4.3.2",
108
108
  "@types/mapbox__geo-viewport": "^0.4.1",
109
109
  "html-webpack-plugin": "^4.3.0",
@@ -249,7 +249,7 @@
249
249
  "dot-prop": "6.0.0",
250
250
  "kind-of": "6.0.3",
251
251
  "jpeg-js": "^0.4.3",
252
- "lodash": "4.17.19",
252
+ "lodash": "4.17.21",
253
253
  "minimist": "1.2.6",
254
254
  "node-fetch": "2.6.1",
255
255
  "tough-cookie": "4.0.0"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/actions",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,13 +31,13 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/cloud-providers": "3.1.0",
35
- "@kepler.gl/constants": "3.1.0",
36
- "@kepler.gl/layers": "3.1.0",
37
- "@kepler.gl/processors": "3.1.0",
38
- "@kepler.gl/table": "3.1.0",
39
- "@kepler.gl/types": "3.1.0",
40
- "@kepler.gl/utils": "3.1.0",
34
+ "@kepler.gl/cloud-providers": "3.1.1",
35
+ "@kepler.gl/constants": "3.1.1",
36
+ "@kepler.gl/layers": "3.1.1",
37
+ "@kepler.gl/processors": "3.1.1",
38
+ "@kepler.gl/table": "3.1.1",
39
+ "@kepler.gl/types": "3.1.1",
40
+ "@kepler.gl/utils": "3.1.1",
41
41
  "@reduxjs/toolkit": "^1.7.2",
42
42
  "@types/lodash.curry": "^4.1.7",
43
43
  "@types/react-redux": "^7.1.23",
@@ -110,6 +110,7 @@ function AiAssistantComponentFactory() {
110
110
  modelProvider: aiAssistant.config.provider,
111
111
  model: aiAssistant.config.model,
112
112
  apiKey: aiAssistant.config.apiKey,
113
+ baseUrl: aiAssistant.config.baseUrl,
113
114
  instructions: _constants.INSTRUCTIONS,
114
115
  functions: functions
115
116
  };
@@ -186,4 +187,4 @@ function AiAssistantComponentFactory() {
186
187
  return (0, _styledComponents.withTheme)(AiAssistantComponent);
187
188
  }
188
189
  var _default = exports["default"] = AiAssistantComponentFactory;
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb3JlIiwiX2dlb2RhIiwiX2VjaGFydHMiLCJfdWkiLCJfc3R5bGVzIiwiX2Jhc2VtYXBGdW5jdGlvbnMiLCJfbG9hZHVybEZ1bmN0aW9uIiwiX2NvbnN0YW50cyIsIl9sYXllckNyZWF0aW9uRnVuY3Rpb24iLCJfbGF5ZXJTdHlsZUZ1bmN0aW9uIiwiX3V0aWxzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkFpQXNzaXN0YW50Q29tcG9uZW50RmFjdG9yeSIsImRlcHMiLCJBaUFzc2lzdGFudENvbXBvbmVudCIsIl9yZWYiLCJ0aGVtZSIsImFpQXNzaXN0YW50IiwidXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyIsInNldFN0YXJ0U2NyZWVuQ2FwdHVyZSIsInNldFNjcmVlbkNhcHR1cmVkIiwia2VwbGVyR2xBY3Rpb25zIiwibWFwU3R5bGUiLCJ2aXNTdGF0ZSIsImdldFZhbHVlc0NhbGxiYWNrIiwiZGF0YXNldE5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJnZXRWYWx1ZXNGcm9tRGF0YXNldCIsImRhdGFzZXRzIiwiaGlnaGxpZ2h0Um93c0NhbGxiYWNrIiwic2VsZWN0ZWRSb3dJbmRpY2VzIiwiaGlnaGxpZ2h0Um93cyIsImxheWVycyIsImxheWVyU2V0SXNWYWxpZCIsImZ1bmN0aW9ucyIsImJhc2VtYXBGdW5jdGlvbkRlZmluaXRpb24iLCJtYXBTdHlsZUNoYW5nZSIsImxvYWRVcmxGdW5jdGlvbkRlZmluaXRpb24iLCJhZGREYXRhVG9NYXAiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJhZGRMYXllckZ1bmN0aW9uRGVmaW5pdGlvbiIsImFkZExheWVyIiwidXBkYXRlTGF5ZXJDb2xvckZ1bmN0aW9uRGVmaW5pdGlvbiIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImhpc3RvZ3JhbUZ1bmN0aW9uRGVmaW5pdGlvbiIsImdldFZhbHVlcyIsIm9uU2VsZWN0ZWQiLCJzY2F0dGVycGxvdEZ1bmN0aW9uRGVmaW5pdGlvbiIsIl9nZXRWYWx1ZXMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInhWYXIiLCJ5VmFyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsImdldFNjYXR0ZXJwbG90VmFsdWVzRnJvbURhdGFzZXQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsImRhdGFDbGFzc2lmeUZ1bmN0aW9uRGVmaW5pdGlvbiIsInNwYXRpYWxDb3VudEZ1bmN0aW9uRGVmaW5pdGlvbiIsImdldEdlb21ldHJpZXMiLCJnZXRHZW9tZXRyaWVzRnJvbURhdGFzZXQiLCJsYXllckRhdGEiLCJzYXZlQXNEYXRhc2V0IiwiZGF0YSIsImVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSIsImNvbmZpZyIsInByb3ZpZGVyIiwiYXNzaXN0YW50UHJvcHMiLCJuYW1lIiwiQVNTSVNUQU5UX05BTUUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9ERVNDUklQVElPTiIsInZlcnNpb24iLCJBU1NJU1RBTlRfVkVSU0lPTiIsIm1vZGVsUHJvdmlkZXIiLCJtb2RlbCIsImFwaUtleSIsImluc3RydWN0aW9ucyIsIklOU1RSVUNUSU9OUyIsIl91c2VBc3Npc3RhbnQiLCJ1c2VBc3Npc3RhbnQiLCJpbml0aWFsaXplQXNzaXN0YW50IiwiYWRkQWRkaXRpb25hbENvbnRleHQiLCJpbml0aWFsaXplQXNzaXN0YW50V2l0aENvbnRleHQiLCJfcmVmMiIsIl9jYWxsZWUyIiwiY29udGV4dCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImdldERhdGFzZXRDb250ZXh0IiwidXNlRWZmZWN0IiwiZmlsdGVycyIsIm9uUmVzdGFydEFzc2lzdGFudCIsIm9uTWVzc2FnZXNVcGRhdGVkIiwibWVzc2FnZXMiLCJvblNjcmVlbnNob3RDbGljayIsIm9uUmVtb3ZlU2NyZWVuc2hvdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJBaUFzc2lzdGFudCIsIl9leHRlbmRzMiIsInRleHRDb2xvciIsInRleHRDb2xvckxUIiwid2VsY29tZU1lc3NhZ2UiLCJXRUxDT01FX01FU1NBR0UiLCJ0ZW1wZXJhdHVyZSIsInRvcFAiLCJoaXN0b3J5TWVzc2FnZXMiLCJlbmFibGVWb2ljZSIsImVuYWJsZVNjcmVlbkNhcHR1cmUiLCJzY3JlZW5DYXB0dXJlZEJhc2U2NCIsInNjcmVlbnNob3RUb0FzayIsInNjcmVlbkNhcHR1cmVkIiwib25SZXN0YXJ0Q2hhdCIsImZvbnRTaXplIiwiYm90TWVzc2FnZUNsYXNzTmFtZSIsImdpdGh1Yklzc3VlTGluayIsImlkZWFzIiwiUFJPTVBUX0lERUFTIiwid2l0aFRoZW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYWktYXNzaXN0YW50LWNvbXBvbmVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge01lc3NhZ2VNb2RlbCwgdXNlQXNzaXN0YW50fSBmcm9tICdAb3BlbmFzc2lzdGFudC9jb3JlJztcbmltcG9ydCB7XG4gIGRhdGFDbGFzc2lmeUZ1bmN0aW9uRGVmaW5pdGlvbixcbiAgc3BhdGlhbENvdW50RnVuY3Rpb25EZWZpbml0aW9uLFxuICBTcGF0aWFsSm9pbkdlb21ldHJpZXNcbn0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvZ2VvZGEnO1xuaW1wb3J0IHtoaXN0b2dyYW1GdW5jdGlvbkRlZmluaXRpb24sIHNjYXR0ZXJwbG90RnVuY3Rpb25EZWZpbml0aW9ufSBmcm9tICdAb3BlbmFzc2lzdGFudC9lY2hhcnRzJztcbmltcG9ydCB7QWlBc3Npc3RhbnR9IGZyb20gJ0BvcGVuYXNzaXN0YW50L3VpJztcbmltcG9ydCAnQG9wZW5hc3Npc3RhbnQvZWNoYXJ0cy9kaXN0L2luZGV4LmNzcyc7XG5pbXBvcnQgJ0BvcGVuYXNzaXN0YW50L3VpL2Rpc3QvaW5kZXguY3NzJztcblxuaW1wb3J0IHt0ZXh0Q29sb3JMVH0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtBY3Rpb25IYW5kbGVyfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge2Jhc2VtYXBGdW5jdGlvbkRlZmluaXRpb259IGZyb20gJy4uL3Rvb2xzL2Jhc2VtYXAtZnVuY3Rpb25zJztcbmltcG9ydCB7bG9hZFVybEZ1bmN0aW9uRGVmaW5pdGlvbn0gZnJvbSAnLi4vdG9vbHMvbG9hZHVybC1mdW5jdGlvbic7XG5cbmltcG9ydCB7QWlBc3Npc3RhbnRTdGF0ZX0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHtzZXRTY3JlZW5DYXB0dXJlZCwgc2V0U3RhcnRTY3JlZW5DYXB0dXJlLCB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFTU0lTVEFOVF9ERVNDUklQVElPTixcbiAgQVNTSVNUQU5UX05BTUUsXG4gIEFTU0lTVEFOVF9WRVJTSU9OLFxuICBJTlNUUlVDVElPTlMsXG4gIFBST01QVF9JREVBUyxcbiAgV0VMQ09NRV9NRVNTQUdFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2FkZExheWVyRnVuY3Rpb25EZWZpbml0aW9ufSBmcm9tICcuLi90b29scy9sYXllci1jcmVhdGlvbi1mdW5jdGlvbic7XG5pbXBvcnQge3VwZGF0ZUxheWVyQ29sb3JGdW5jdGlvbkRlZmluaXRpb259IGZyb20gJy4uL3Rvb2xzL2xheWVyLXN0eWxlLWZ1bmN0aW9uJztcbmltcG9ydCB7U2VsZWN0ZWRLZXBsZXJHbEFjdGlvbnN9IGZyb20gJy4vYWktYXNzaXN0YW50LW1hbmFnZXInO1xuaW1wb3J0IHtcbiAgZ2V0RGF0YXNldENvbnRleHQsXG4gIGdldEdlb21ldHJpZXNGcm9tRGF0YXNldCxcbiAgZ2V0U2NhdHRlcnBsb3RWYWx1ZXNGcm9tRGF0YXNldCxcbiAgZ2V0VmFsdWVzRnJvbURhdGFzZXQsXG4gIGhpZ2hsaWdodFJvd3MsXG4gIHNhdmVBc0RhdGFzZXRcbn0gZnJvbSAnLi4vdG9vbHMvdXRpbHMnO1xuXG50eXBlIFRoZW1lUHJvcHMgPSB7dGhlbWU6IGFueX07XG5cbmV4cG9ydCB0eXBlIEFpQXNzaXN0YW50Q29tcG9uZW50UHJvcHMgPSB7XG4gIGFpQXNzaXN0YW50OiBBaUFzc2lzdGFudFN0YXRlO1xuICB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzPjtcbiAgc2V0U3RhcnRTY3JlZW5DYXB0dXJlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBzZXRTdGFydFNjcmVlbkNhcHR1cmU+O1xuICBzZXRTY3JlZW5DYXB0dXJlZDogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0U2NyZWVuQ2FwdHVyZWQ+O1xuICBrZXBsZXJHbEFjdGlvbnM6IFNlbGVjdGVkS2VwbGVyR2xBY3Rpb25zO1xuICBtYXBTdHlsZTogTWFwU3R5bGU7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbn07XG5cbmNvbnN0IFN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50ID0gc3R5bGVkLmRpdmBcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuXG4gICoge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuYDtcblxuQWlBc3Npc3RhbnRDb21wb25lbnRGYWN0b3J5LmRlcHMgPSBbXTtcblxuZnVuY3Rpb24gQWlBc3Npc3RhbnRDb21wb25lbnRGYWN0b3J5KCkge1xuICBjb25zdCBBaUFzc2lzdGFudENvbXBvbmVudDogUmVhY3QuRkM8QWlBc3Npc3RhbnRDb21wb25lbnRQcm9wcyAmIFRoZW1lUHJvcHM+ID0gKHtcbiAgICB0aGVtZSxcbiAgICBhaUFzc2lzdGFudCxcbiAgICB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzLFxuICAgIHNldFN0YXJ0U2NyZWVuQ2FwdHVyZSxcbiAgICBzZXRTY3JlZW5DYXB0dXJlZCxcbiAgICBrZXBsZXJHbEFjdGlvbnMsXG4gICAgbWFwU3R5bGUsXG4gICAgdmlzU3RhdGVcbiAgfTogQWlBc3Npc3RhbnRDb21wb25lbnRQcm9wcyAmIFRoZW1lUHJvcHMpID0+IHtcbiAgICAvLyBnZXQgdmFsdWVzIGZyb20gZGF0YXNldCwgdXNlZCBieSBMTE0gZnVuY3Rpb25zXG4gICAgY29uc3QgZ2V0VmFsdWVzQ2FsbGJhY2sgPSAoZGF0YXNldE5hbWU6IHN0cmluZywgdmFyaWFibGVOYW1lOiBzdHJpbmcpOiBudW1iZXJbXSA9PlxuICAgICAgZ2V0VmFsdWVzRnJvbURhdGFzZXQodmlzU3RhdGUuZGF0YXNldHMsIGRhdGFzZXROYW1lLCB2YXJpYWJsZU5hbWUpO1xuXG4gICAgLy8gaGlnaGxpZ2h0IHJvd3MsIHVzZWQgYnkgTExNIGZ1bmN0aW9ucyBhbmQgcGxvdHMgKHNjYXR0ZXJwbG90LCBoaXN0b2dyYW0pXG4gICAgY29uc3QgaGlnaGxpZ2h0Um93c0NhbGxiYWNrID0gKGRhdGFzZXROYW1lOiBzdHJpbmcsIHNlbGVjdGVkUm93SW5kaWNlczogbnVtYmVyW10pID0+XG4gICAgICBoaWdobGlnaHRSb3dzKFxuICAgICAgICB2aXNTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgdmlzU3RhdGUubGF5ZXJzLFxuICAgICAgICBkYXRhc2V0TmFtZSxcbiAgICAgICAgc2VsZWN0ZWRSb3dJbmRpY2VzLFxuICAgICAgICBrZXBsZXJHbEFjdGlvbnMubGF5ZXJTZXRJc1ZhbGlkXG4gICAgICApO1xuXG4gICAgLy8gZGVmaW5lIExMTSBmdW5jdGlvbnNcbiAgICBjb25zdCBmdW5jdGlvbnMgPSBbXG4gICAgICBiYXNlbWFwRnVuY3Rpb25EZWZpbml0aW9uKHttYXBTdHlsZUNoYW5nZToga2VwbGVyR2xBY3Rpb25zLm1hcFN0eWxlQ2hhbmdlLCBtYXBTdHlsZX0pLFxuICAgICAgbG9hZFVybEZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGFkZERhdGFUb01hcDoga2VwbGVyR2xBY3Rpb25zLmFkZERhdGFUb01hcCxcbiAgICAgICAgbG9hZGVyczogdmlzU3RhdGUubG9hZGVycyxcbiAgICAgICAgbG9hZE9wdGlvbnM6IHZpc1N0YXRlLmxvYWRPcHRpb25zXG4gICAgICB9KSxcbiAgICAgIGFkZExheWVyRnVuY3Rpb25EZWZpbml0aW9uKHtcbiAgICAgICAgYWRkTGF5ZXI6IGtlcGxlckdsQWN0aW9ucy5hZGRMYXllcixcbiAgICAgICAgZGF0YXNldHM6IHZpc1N0YXRlLmRhdGFzZXRzXG4gICAgICB9KSxcbiAgICAgIHVwZGF0ZUxheWVyQ29sb3JGdW5jdGlvbkRlZmluaXRpb24oe1xuICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IGtlcGxlckdsQWN0aW9ucy5sYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gICAgICAgIGxheWVyczogdmlzU3RhdGUubGF5ZXJzXG4gICAgICB9KSxcbiAgICAgIGhpc3RvZ3JhbUZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGdldFZhbHVlczogZ2V0VmFsdWVzQ2FsbGJhY2ssXG4gICAgICAgIG9uU2VsZWN0ZWQ6IGhpZ2hsaWdodFJvd3NDYWxsYmFja1xuICAgICAgfSksXG4gICAgICBzY2F0dGVycGxvdEZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGdldFZhbHVlczogYXN5bmMgKGRhdGFzZXROYW1lOiBzdHJpbmcsIHhWYXI6IHN0cmluZywgeVZhcjogc3RyaW5nKSA9PlxuICAgICAgICAgIGdldFNjYXR0ZXJwbG90VmFsdWVzRnJvbURhdGFzZXQodmlzU3RhdGUuZGF0YXNldHMsIGRhdGFzZXROYW1lLCB4VmFyLCB5VmFyKSxcbiAgICAgICAgb25TZWxlY3RlZDogaGlnaGxpZ2h0Um93c0NhbGxiYWNrXG4gICAgICB9KSxcbiAgICAgIGRhdGFDbGFzc2lmeUZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGdldFZhbHVlczogZ2V0VmFsdWVzQ2FsbGJhY2tcbiAgICAgIH0pLFxuICAgICAgc3BhdGlhbENvdW50RnVuY3Rpb25EZWZpbml0aW9uKHtcbiAgICAgICAgZ2V0VmFsdWVzOiBnZXRWYWx1ZXNDYWxsYmFjayxcbiAgICAgICAgZ2V0R2VvbWV0cmllczogKGRhdGFzZXROYW1lOiBzdHJpbmcpOiBTcGF0aWFsSm9pbkdlb21ldHJpZXMgPT5cbiAgICAgICAgICBnZXRHZW9tZXRyaWVzRnJvbURhdGFzZXQoXG4gICAgICAgICAgICB2aXNTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICAgIHZpc1N0YXRlLmxheWVycyxcbiAgICAgICAgICAgIHZpc1N0YXRlLmxheWVyRGF0YSxcbiAgICAgICAgICAgIGRhdGFzZXROYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgc2F2ZUFzRGF0YXNldDogKGRhdGFzZXROYW1lOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIG51bWJlcltdPikgPT5cbiAgICAgICAgICBzYXZlQXNEYXRhc2V0KHZpc1N0YXRlLmRhdGFzZXRzLCBkYXRhc2V0TmFtZSwgZGF0YSwga2VwbGVyR2xBY3Rpb25zLmFkZERhdGFUb01hcClcbiAgICAgIH0pXG4gICAgXTtcblxuICAgIC8vIGVuYWJsZSB2b2ljZSBhbmQgc2NyZWVuIGNhcHR1cmVcbiAgICBjb25zdCBlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmUgPVxuICAgICAgYWlBc3Npc3RhbnQuY29uZmlnLnByb3ZpZGVyID09PSAnb3BlbmFpJyB8fCBhaUFzc2lzdGFudC5jb25maWcucHJvdmlkZXIgPT09ICdnb29nbGUnO1xuXG4gICAgLy8gZGVmaW5lIGFzc2lzdGFudCBwcm9wc1xuICAgIGNvbnN0IGFzc2lzdGFudFByb3BzID0ge1xuICAgICAgbmFtZTogQVNTSVNUQU5UX05BTUUsXG4gICAgICBkZXNjcmlwdGlvbjogQVNTSVNUQU5UX0RFU0NSSVBUSU9OLFxuICAgICAgdmVyc2lvbjogQVNTSVNUQU5UX1ZFUlNJT04sXG4gICAgICBtb2RlbFByb3ZpZGVyOiBhaUFzc2lzdGFudC5jb25maWcucHJvdmlkZXIsXG4gICAgICBtb2RlbDogYWlBc3Npc3RhbnQuY29uZmlnLm1vZGVsLFxuICAgICAgYXBpS2V5OiBhaUFzc2lzdGFudC5jb25maWcuYXBpS2V5LFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBJTlNUUlVDVElPTlMsXG4gICAgICBmdW5jdGlvbnNcbiAgICB9O1xuXG4gICAgY29uc3Qge2luaXRpYWxpemVBc3Npc3RhbnQsIGFkZEFkZGl0aW9uYWxDb250ZXh0fSA9IHVzZUFzc2lzdGFudChhc3Npc3RhbnRQcm9wcyk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFzc2lzdGFudCB3aXRoIGNvbnRleHRcbiAgICBjb25zdCBpbml0aWFsaXplQXNzaXN0YW50V2l0aENvbnRleHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBpbml0aWFsaXplQXNzaXN0YW50KCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gZ2V0RGF0YXNldENvbnRleHQodmlzU3RhdGUuZGF0YXNldHMsIHZpc1N0YXRlLmxheWVycyk7XG4gICAgICBhZGRBZGRpdGlvbmFsQ29udGV4dCh7Y29udGV4dH0pO1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIGFzc2lzdGFudCB3aXRoIGNvbnRleHRcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaW5pdGlhbGl6ZUFzc2lzdGFudFdpdGhDb250ZXh0KCk7XG4gICAgICAvLyByZS1pbml0aWFsaXplIGFzc2lzdGFudCB3aGVuIGRhdGFzZXRzLCBmaWx0ZXJzIG9yIGxheWVycyBjaGFuZ2VcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbdmlzU3RhdGUuZGF0YXNldHMsIHZpc1N0YXRlLmZpbHRlcnMsIHZpc1N0YXRlLmxheWVyc10pO1xuXG4gICAgY29uc3Qgb25SZXN0YXJ0QXNzaXN0YW50ID0gKCkgPT4ge1xuICAgICAgLy8gY2xlYW4gdXAgYWlBc3Npc3RhbnQgc3RhdGVcbiAgICAgIHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXMoW10pO1xuICAgICAgaW5pdGlhbGl6ZUFzc2lzdGFudFdpdGhDb250ZXh0KCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTWVzc2FnZXNVcGRhdGVkID0gKG1lc3NhZ2VzOiBNZXNzYWdlTW9kZWxbXSkgPT4ge1xuICAgICAgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhtZXNzYWdlcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2NyZWVuc2hvdENsaWNrID0gKCkgPT4ge1xuICAgICAgc2V0U3RhcnRTY3JlZW5DYXB0dXJlKHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJlbW92ZVNjcmVlbnNob3QgPSAoKSA9PiB7XG4gICAgICBzZXRTY3JlZW5DYXB0dXJlZCgnJyk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQgY2xhc3NOYW1lPVwiYWktYXNzaXN0YW50LWNvbXBvbmVudFwiPlxuICAgICAgICA8QWlBc3Npc3RhbnRcbiAgICAgICAgICB7Li4uYXNzaXN0YW50UHJvcHN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lLnRleHRDb2xvciA9PT0gdGV4dENvbG9yTFQgPyAnbGlnaHQnIDogJ2RhcmsnfVxuICAgICAgICAgIHdlbGNvbWVNZXNzYWdlPXtXRUxDT01FX01FU1NBR0V9XG4gICAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50LmNvbmZpZy50ZW1wZXJhdHVyZX1cbiAgICAgICAgICB0b3BQPXthaUFzc2lzdGFudC5jb25maWcudG9wUH1cbiAgICAgICAgICBoaXN0b3J5TWVzc2FnZXM9e2FpQXNzaXN0YW50Lm1lc3NhZ2VzfVxuICAgICAgICAgIG9uTWVzc2FnZXNVcGRhdGVkPXtvbk1lc3NhZ2VzVXBkYXRlZH1cbiAgICAgICAgICBlbmFibGVWb2ljZT17ZW5hYmxlVm9pY2VBbmRTY3JlZW5DYXB0dXJlfVxuICAgICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgICBvblNjcmVlbnNob3RDbGljaz17b25TY3JlZW5zaG90Q2xpY2t9XG4gICAgICAgICAgc2NyZWVuQ2FwdHVyZWRCYXNlNjQ9e2FpQXNzaXN0YW50LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZH1cbiAgICAgICAgICBvblJlbW92ZVNjcmVlbnNob3Q9e29uUmVtb3ZlU2NyZWVuc2hvdH1cbiAgICAgICAgICBvblJlc3RhcnRDaGF0PXtvblJlc3RhcnRBc3Npc3RhbnR9XG4gICAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICAgIGJvdE1lc3NhZ2VDbGFzc05hbWU9eycnfVxuICAgICAgICAgIGdpdGh1Yklzc3VlTGluaz17J2h0dHBzOi8vZ2l0aHViLmNvbS9rZXBsZXJnbC9rZXBsZXIuZ2wvaXNzdWVzJ31cbiAgICAgICAgICBpZGVhcz17UFJPTVBUX0lERUFTfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudD5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB3aXRoVGhlbWUoQWlBc3Npc3RhbnRDb21wb25lbnQpIGFzIFJlYWN0LkZDPEFpQXNzaXN0YW50Q29tcG9uZW50UHJvcHM+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBBaUFzc2lzdGFudENvbXBvbmVudEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFLQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxHQUFBLEdBQUFMLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUEsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBS0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFJQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFRQSxJQUFBVSxzQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLE1BQUEsR0FBQVosT0FBQTtBQU93QixJQUFBYSxlQUFBLEVBNUN4QjtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFoQix3QkFBQWdCLENBQUEs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QWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsUUFBd0IsRUFBSztNQUN0RHhGLHlCQUF5QixDQUFDd0YsUUFBUSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFBLEVBQVM7TUFDOUJ4RixxQkFBcUIsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQU15RixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQVM7TUFDL0J4RixpQkFBaUIsQ0FBQyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELG9CQUNFaEQsTUFBQSxZQUFBeUksYUFBQSxDQUFDckcsMEJBQTBCO01BQUNzRyxTQUFTLEVBQUM7SUFBd0IsZ0JBQzVEMUksTUFBQSxZQUFBeUksYUFBQSxDQUFDbEksR0FBQSxDQUFBb0ksV0FBVyxNQUFBQyxTQUFBLGlCQUNOakMsY0FBYztNQUNsQi9ELEtBQUssRUFBRUEsS0FBSyxDQUFDaUcsU0FBUyxLQUFLQyxtQkFBVyxHQUFHLE9BQU8sR0FBRyxNQUFPO01BQzFEQyxjQUFjLEVBQUVDLDBCQUFnQjtNQUNoQ0MsV0FBVyxFQUFFcEcsV0FBVyxDQUFDNEQsTUFBTSxDQUFDd0MsV0FBWTtNQUM1Q0MsSUFBSSxFQUFFckcsV0FBVyxDQUFDNEQsTUFBTSxDQUFDeUMsSUFBSztNQUM5QkMsZUFBZSxFQUFFdEcsV0FBVyxDQUFDeUYsUUFBUztNQUN0Q0QsaUJBQWlCLEVBQUVBLGlCQUFrQjtNQUNyQ2UsV0FBVyxFQUFFNUMsMkJBQTRCO01BQ3pDNkMsbUJBQW1CLEVBQUU3QywyQkFBNEI7TUFDakQrQixpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDZSxvQkFBb0IsRUFBRXpHLFdBQVcsQ0FBQzBHLGVBQWUsQ0FBQ0MsY0FBZTtNQUNqRWhCLGtCQUFrQixFQUFFQSxrQkFBbUI7TUFDdkNpQixhQUFhLEVBQUVyQixrQkFBbUI7TUFDbENzQixRQUFRLEVBQUUsV0FBWTtNQUN0QkMsbUJBQW1CLEVBQUUsRUFBRztNQUN4QkMsZUFBZSxFQUFFLDhDQUErQztNQUNoRUMsS0FBSyxFQUFFQztJQUFhLEVBQ3JCLENBQ3lCLENBQUM7RUFFakMsQ0FBQztFQUVELE9BQU8sSUFBQUMsMkJBQVMsRUFBQ3JILG9CQUFvQixDQUFDO0FBQ3hDO0FBQUMsSUFBQXNILFFBQUEsR0FBQUMsT0FBQSxjQUVjekgsMkJBQTJCIiwiaWdub3JlTGlzdCI6W119
190
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb3JlIiwiX2dlb2RhIiwiX2VjaGFydHMiLCJfdWkiLCJfc3R5bGVzIiwiX2Jhc2VtYXBGdW5jdGlvbnMiLCJfbG9hZHVybEZ1bmN0aW9uIiwiX2NvbnN0YW50cyIsIl9sYXllckNyZWF0aW9uRnVuY3Rpb24iLCJfbGF5ZXJTdHlsZUZ1bmN0aW9uIiwiX3V0aWxzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkFpQXNzaXN0YW50Q29tcG9uZW50RmFjdG9yeSIsImRlcHMiLCJBaUFzc2lzdGFudENvbXBvbmVudCIsIl9yZWYiLCJ0aGVtZSIsImFpQXNzaXN0YW50IiwidXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyIsInNldFN0YXJ0U2NyZWVuQ2FwdHVyZSIsInNldFNjcmVlbkNhcHR1cmVkIiwia2VwbGVyR2xBY3Rpb25zIiwibWFwU3R5bGUiLCJ2aXNTdGF0ZSIsImdldFZhbHVlc0NhbGxiYWNrIiwiZGF0YXNldE5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJnZXRWYWx1ZXNGcm9tRGF0YXNldCIsImRhdGFzZXRzIiwiaGlnaGxpZ2h0Um93c0NhbGxiYWNrIiwic2VsZWN0ZWRSb3dJbmRpY2VzIiwiaGlnaGxpZ2h0Um93cyIsImxheWVycyIsImxheWVyU2V0SXNWYWxpZCIsImZ1bmN0aW9ucyIsImJhc2VtYXBGdW5jdGlvbkRlZmluaXRpb24iLCJtYXBTdHlsZUNoYW5nZSIsImxvYWRVcmxGdW5jdGlvbkRlZmluaXRpb24iLCJhZGREYXRhVG9NYXAiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJhZGRMYXllckZ1bmN0aW9uRGVmaW5pdGlvbiIsImFkZExheWVyIiwidXBkYXRlTGF5ZXJDb2xvckZ1bmN0aW9uRGVmaW5pdGlvbiIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImhpc3RvZ3JhbUZ1bmN0aW9uRGVmaW5pdGlvbiIsImdldFZhbHVlcyIsIm9uU2VsZWN0ZWQiLCJzY2F0dGVycGxvdEZ1bmN0aW9uRGVmaW5pdGlvbiIsIl9nZXRWYWx1ZXMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInhWYXIiLCJ5VmFyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsImdldFNjYXR0ZXJwbG90VmFsdWVzRnJvbURhdGFzZXQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsImRhdGFDbGFzc2lmeUZ1bmN0aW9uRGVmaW5pdGlvbiIsInNwYXRpYWxDb3VudEZ1bmN0aW9uRGVmaW5pdGlvbiIsImdldEdlb21ldHJpZXMiLCJnZXRHZW9tZXRyaWVzRnJvbURhdGFzZXQiLCJsYXllckRhdGEiLCJzYXZlQXNEYXRhc2V0IiwiZGF0YSIsImVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSIsImNvbmZpZyIsInByb3ZpZGVyIiwiYXNzaXN0YW50UHJvcHMiLCJuYW1lIiwiQVNTSVNUQU5UX05BTUUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9ERVNDUklQVElPTiIsInZlcnNpb24iLCJBU1NJU1RBTlRfVkVSU0lPTiIsIm1vZGVsUHJvdmlkZXIiLCJtb2RlbCIsImFwaUtleSIsImJhc2VVcmwiLCJpbnN0cnVjdGlvbnMiLCJJTlNUUlVDVElPTlMiLCJfdXNlQXNzaXN0YW50IiwidXNlQXNzaXN0YW50IiwiaW5pdGlhbGl6ZUFzc2lzdGFudCIsImFkZEFkZGl0aW9uYWxDb250ZXh0IiwiaW5pdGlhbGl6ZUFzc2lzdGFudFdpdGhDb250ZXh0IiwiX3JlZjIiLCJfY2FsbGVlMiIsImNvbnRleHQiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJnZXREYXRhc2V0Q29udGV4dCIsInVzZUVmZmVjdCIsImZpbHRlcnMiLCJvblJlc3RhcnRBc3Npc3RhbnQiLCJvbk1lc3NhZ2VzVXBkYXRlZCIsIm1lc3NhZ2VzIiwib25TY3JlZW5zaG90Q2xpY2siLCJvblJlbW92ZVNjcmVlbnNob3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiQWlBc3Npc3RhbnQiLCJfZXh0ZW5kczIiLCJ0ZXh0Q29sb3IiLCJ0ZXh0Q29sb3JMVCIsIndlbGNvbWVNZXNzYWdlIiwiV0VMQ09NRV9NRVNTQUdFIiwidGVtcGVyYXR1cmUiLCJ0b3BQIiwiaGlzdG9yeU1lc3NhZ2VzIiwiZW5hYmxlVm9pY2UiLCJlbmFibGVTY3JlZW5DYXB0dXJlIiwic2NyZWVuQ2FwdHVyZWRCYXNlNjQiLCJzY3JlZW5zaG90VG9Bc2siLCJzY3JlZW5DYXB0dXJlZCIsIm9uUmVzdGFydENoYXQiLCJmb250U2l6ZSIsImJvdE1lc3NhZ2VDbGFzc05hbWUiLCJnaXRodWJJc3N1ZUxpbmsiLCJpZGVhcyIsIlBST01QVF9JREVBUyIsIndpdGhUaGVtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2FpLWFzc2lzdGFudC1jb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNZXNzYWdlTW9kZWwsIHVzZUFzc2lzdGFudH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvY29yZSc7XG5pbXBvcnQge1xuICBkYXRhQ2xhc3NpZnlGdW5jdGlvbkRlZmluaXRpb24sXG4gIHNwYXRpYWxDb3VudEZ1bmN0aW9uRGVmaW5pdGlvbixcbiAgU3BhdGlhbEpvaW5HZW9tZXRyaWVzXG59IGZyb20gJ0BvcGVuYXNzaXN0YW50L2dlb2RhJztcbmltcG9ydCB7aGlzdG9ncmFtRnVuY3Rpb25EZWZpbml0aW9uLCBzY2F0dGVycGxvdEZ1bmN0aW9uRGVmaW5pdGlvbn0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvZWNoYXJ0cyc7XG5pbXBvcnQge0FpQXNzaXN0YW50fSBmcm9tICdAb3BlbmFzc2lzdGFudC91aSc7XG5pbXBvcnQgJ0BvcGVuYXNzaXN0YW50L2VjaGFydHMvZGlzdC9pbmRleC5jc3MnO1xuaW1wb3J0ICdAb3BlbmFzc2lzdGFudC91aS9kaXN0L2luZGV4LmNzcyc7XG5cbmltcG9ydCB7dGV4dENvbG9yTFR9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7QWN0aW9uSGFuZGxlcn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7TWFwU3R5bGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtiYXNlbWFwRnVuY3Rpb25EZWZpbml0aW9ufSBmcm9tICcuLi90b29scy9iYXNlbWFwLWZ1bmN0aW9ucyc7XG5pbXBvcnQge2xvYWRVcmxGdW5jdGlvbkRlZmluaXRpb259IGZyb20gJy4uL3Rvb2xzL2xvYWR1cmwtZnVuY3Rpb24nO1xuXG5pbXBvcnQge0FpQXNzaXN0YW50U3RhdGV9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7c2V0U2NyZWVuQ2FwdHVyZWQsIHNldFN0YXJ0U2NyZWVuQ2FwdHVyZSwgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlc30gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBU1NJU1RBTlRfREVTQ1JJUFRJT04sXG4gIEFTU0lTVEFOVF9OQU1FLFxuICBBU1NJU1RBTlRfVkVSU0lPTixcbiAgSU5TVFJVQ1RJT05TLFxuICBQUk9NUFRfSURFQVMsXG4gIFdFTENPTUVfTUVTU0FHRVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHthZGRMYXllckZ1bmN0aW9uRGVmaW5pdGlvbn0gZnJvbSAnLi4vdG9vbHMvbGF5ZXItY3JlYXRpb24tZnVuY3Rpb24nO1xuaW1wb3J0IHt1cGRhdGVMYXllckNvbG9yRnVuY3Rpb25EZWZpbml0aW9ufSBmcm9tICcuLi90b29scy9sYXllci1zdHlsZS1mdW5jdGlvbic7XG5pbXBvcnQge1NlbGVjdGVkS2VwbGVyR2xBY3Rpb25zfSBmcm9tICcuL2FpLWFzc2lzdGFudC1tYW5hZ2VyJztcbmltcG9ydCB7XG4gIGdldERhdGFzZXRDb250ZXh0LFxuICBnZXRHZW9tZXRyaWVzRnJvbURhdGFzZXQsXG4gIGdldFNjYXR0ZXJwbG90VmFsdWVzRnJvbURhdGFzZXQsXG4gIGdldFZhbHVlc0Zyb21EYXRhc2V0LFxuICBoaWdobGlnaHRSb3dzLFxuICBzYXZlQXNEYXRhc2V0XG59IGZyb20gJy4uL3Rvb2xzL3V0aWxzJztcblxudHlwZSBUaGVtZVByb3BzID0ge3RoZW1lOiBhbnl9O1xuXG5leHBvcnQgdHlwZSBBaUFzc2lzdGFudENvbXBvbmVudFByb3BzID0ge1xuICBhaUFzc2lzdGFudDogQWlBc3Npc3RhbnRTdGF0ZTtcbiAgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlczogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcz47XG4gIHNldFN0YXJ0U2NyZWVuQ2FwdHVyZTogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0U3RhcnRTY3JlZW5DYXB0dXJlPjtcbiAgc2V0U2NyZWVuQ2FwdHVyZWQ6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHNldFNjcmVlbkNhcHR1cmVkPjtcbiAga2VwbGVyR2xBY3Rpb25zOiBTZWxlY3RlZEtlcGxlckdsQWN0aW9ucztcbiAgbWFwU3R5bGU6IE1hcFN0eWxlO1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG59O1xuXG5jb25zdCBTdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudCA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcblxuICAqIHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gIH1cbmA7XG5cbkFpQXNzaXN0YW50Q29tcG9uZW50RmFjdG9yeS5kZXBzID0gW107XG5cbmZ1bmN0aW9uIEFpQXNzaXN0YW50Q29tcG9uZW50RmFjdG9yeSgpIHtcbiAgY29uc3QgQWlBc3Npc3RhbnRDb21wb25lbnQ6IFJlYWN0LkZDPEFpQXNzaXN0YW50Q29tcG9uZW50UHJvcHMgJiBUaGVtZVByb3BzPiA9ICh7XG4gICAgdGhlbWUsXG4gICAgYWlBc3Npc3RhbnQsXG4gICAgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyxcbiAgICBzZXRTdGFydFNjcmVlbkNhcHR1cmUsXG4gICAgc2V0U2NyZWVuQ2FwdHVyZWQsXG4gICAga2VwbGVyR2xBY3Rpb25zLFxuICAgIG1hcFN0eWxlLFxuICAgIHZpc1N0YXRlXG4gIH06IEFpQXNzaXN0YW50Q29tcG9uZW50UHJvcHMgJiBUaGVtZVByb3BzKSA9PiB7XG4gICAgLy8gZ2V0IHZhbHVlcyBmcm9tIGRhdGFzZXQsIHVzZWQgYnkgTExNIGZ1bmN0aW9uc1xuICAgIGNvbnN0IGdldFZhbHVlc0NhbGxiYWNrID0gKGRhdGFzZXROYW1lOiBzdHJpbmcsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogbnVtYmVyW10gPT5cbiAgICAgIGdldFZhbHVlc0Zyb21EYXRhc2V0KHZpc1N0YXRlLmRhdGFzZXRzLCBkYXRhc2V0TmFtZSwgdmFyaWFibGVOYW1lKTtcblxuICAgIC8vIGhpZ2hsaWdodCByb3dzLCB1c2VkIGJ5IExMTSBmdW5jdGlvbnMgYW5kIHBsb3RzIChzY2F0dGVycGxvdCwgaGlzdG9ncmFtKVxuICAgIGNvbnN0IGhpZ2hsaWdodFJvd3NDYWxsYmFjayA9IChkYXRhc2V0TmFtZTogc3RyaW5nLCBzZWxlY3RlZFJvd0luZGljZXM6IG51bWJlcltdKSA9PlxuICAgICAgaGlnaGxpZ2h0Um93cyhcbiAgICAgICAgdmlzU3RhdGUuZGF0YXNldHMsXG4gICAgICAgIHZpc1N0YXRlLmxheWVycyxcbiAgICAgICAgZGF0YXNldE5hbWUsXG4gICAgICAgIHNlbGVjdGVkUm93SW5kaWNlcyxcbiAgICAgICAga2VwbGVyR2xBY3Rpb25zLmxheWVyU2V0SXNWYWxpZFxuICAgICAgKTtcblxuICAgIC8vIGRlZmluZSBMTE0gZnVuY3Rpb25zXG4gICAgY29uc3QgZnVuY3Rpb25zID0gW1xuICAgICAgYmFzZW1hcEZ1bmN0aW9uRGVmaW5pdGlvbih7bWFwU3R5bGVDaGFuZ2U6IGtlcGxlckdsQWN0aW9ucy5tYXBTdHlsZUNoYW5nZSwgbWFwU3R5bGV9KSxcbiAgICAgIGxvYWRVcmxGdW5jdGlvbkRlZmluaXRpb24oe1xuICAgICAgICBhZGREYXRhVG9NYXA6IGtlcGxlckdsQWN0aW9ucy5hZGREYXRhVG9NYXAsXG4gICAgICAgIGxvYWRlcnM6IHZpc1N0YXRlLmxvYWRlcnMsXG4gICAgICAgIGxvYWRPcHRpb25zOiB2aXNTdGF0ZS5sb2FkT3B0aW9uc1xuICAgICAgfSksXG4gICAgICBhZGRMYXllckZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGFkZExheWVyOiBrZXBsZXJHbEFjdGlvbnMuYWRkTGF5ZXIsXG4gICAgICAgIGRhdGFzZXRzOiB2aXNTdGF0ZS5kYXRhc2V0c1xuICAgICAgfSksXG4gICAgICB1cGRhdGVMYXllckNvbG9yRnVuY3Rpb25EZWZpbml0aW9uKHtcbiAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlOiBrZXBsZXJHbEFjdGlvbnMubGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICAgICAgICBsYXllcnM6IHZpc1N0YXRlLmxheWVyc1xuICAgICAgfSksXG4gICAgICBoaXN0b2dyYW1GdW5jdGlvbkRlZmluaXRpb24oe1xuICAgICAgICBnZXRWYWx1ZXM6IGdldFZhbHVlc0NhbGxiYWNrLFxuICAgICAgICBvblNlbGVjdGVkOiBoaWdobGlnaHRSb3dzQ2FsbGJhY2tcbiAgICAgIH0pLFxuICAgICAgc2NhdHRlcnBsb3RGdW5jdGlvbkRlZmluaXRpb24oe1xuICAgICAgICBnZXRWYWx1ZXM6IGFzeW5jIChkYXRhc2V0TmFtZTogc3RyaW5nLCB4VmFyOiBzdHJpbmcsIHlWYXI6IHN0cmluZykgPT5cbiAgICAgICAgICBnZXRTY2F0dGVycGxvdFZhbHVlc0Zyb21EYXRhc2V0KHZpc1N0YXRlLmRhdGFzZXRzLCBkYXRhc2V0TmFtZSwgeFZhciwgeVZhciksXG4gICAgICAgIG9uU2VsZWN0ZWQ6IGhpZ2hsaWdodFJvd3NDYWxsYmFja1xuICAgICAgfSksXG4gICAgICBkYXRhQ2xhc3NpZnlGdW5jdGlvbkRlZmluaXRpb24oe1xuICAgICAgICBnZXRWYWx1ZXM6IGdldFZhbHVlc0NhbGxiYWNrXG4gICAgICB9KSxcbiAgICAgIHNwYXRpYWxDb3VudEZ1bmN0aW9uRGVmaW5pdGlvbih7XG4gICAgICAgIGdldFZhbHVlczogZ2V0VmFsdWVzQ2FsbGJhY2ssXG4gICAgICAgIGdldEdlb21ldHJpZXM6IChkYXRhc2V0TmFtZTogc3RyaW5nKTogU3BhdGlhbEpvaW5HZW9tZXRyaWVzID0+XG4gICAgICAgICAgZ2V0R2VvbWV0cmllc0Zyb21EYXRhc2V0KFxuICAgICAgICAgICAgdmlzU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgICB2aXNTdGF0ZS5sYXllcnMsXG4gICAgICAgICAgICB2aXNTdGF0ZS5sYXllckRhdGEsXG4gICAgICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgICAgICksXG4gICAgICAgIHNhdmVBc0RhdGFzZXQ6IChkYXRhc2V0TmFtZTogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT4pID0+XG4gICAgICAgICAgc2F2ZUFzRGF0YXNldCh2aXNTdGF0ZS5kYXRhc2V0cywgZGF0YXNldE5hbWUsIGRhdGEsIGtlcGxlckdsQWN0aW9ucy5hZGREYXRhVG9NYXApXG4gICAgICB9KVxuICAgIF07XG5cbiAgICAvLyBlbmFibGUgdm9pY2UgYW5kIHNjcmVlbiBjYXB0dXJlXG4gICAgY29uc3QgZW5hYmxlVm9pY2VBbmRTY3JlZW5DYXB0dXJlID1cbiAgICAgIGFpQXNzaXN0YW50LmNvbmZpZy5wcm92aWRlciA9PT0gJ29wZW5haScgfHwgYWlBc3Npc3RhbnQuY29uZmlnLnByb3ZpZGVyID09PSAnZ29vZ2xlJztcblxuICAgIC8vIGRlZmluZSBhc3Npc3RhbnQgcHJvcHNcbiAgICBjb25zdCBhc3Npc3RhbnRQcm9wcyA9IHtcbiAgICAgIG5hbWU6IEFTU0lTVEFOVF9OQU1FLFxuICAgICAgZGVzY3JpcHRpb246IEFTU0lTVEFOVF9ERVNDUklQVElPTixcbiAgICAgIHZlcnNpb246IEFTU0lTVEFOVF9WRVJTSU9OLFxuICAgICAgbW9kZWxQcm92aWRlcjogYWlBc3Npc3RhbnQuY29uZmlnLnByb3ZpZGVyLFxuICAgICAgbW9kZWw6IGFpQXNzaXN0YW50LmNvbmZpZy5tb2RlbCxcbiAgICAgIGFwaUtleTogYWlBc3Npc3RhbnQuY29uZmlnLmFwaUtleSxcbiAgICAgIGJhc2VVcmw6IGFpQXNzaXN0YW50LmNvbmZpZy5iYXNlVXJsLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBJTlNUUlVDVElPTlMsXG4gICAgICBmdW5jdGlvbnNcbiAgICB9O1xuXG4gICAgY29uc3Qge2luaXRpYWxpemVBc3Npc3RhbnQsIGFkZEFkZGl0aW9uYWxDb250ZXh0fSA9IHVzZUFzc2lzdGFudChhc3Npc3RhbnRQcm9wcyk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFzc2lzdGFudCB3aXRoIGNvbnRleHRcbiAgICBjb25zdCBpbml0aWFsaXplQXNzaXN0YW50V2l0aENvbnRleHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBpbml0aWFsaXplQXNzaXN0YW50KCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gZ2V0RGF0YXNldENvbnRleHQodmlzU3RhdGUuZGF0YXNldHMsIHZpc1N0YXRlLmxheWVycyk7XG4gICAgICBhZGRBZGRpdGlvbmFsQ29udGV4dCh7Y29udGV4dH0pO1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIGFzc2lzdGFudCB3aXRoIGNvbnRleHRcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaW5pdGlhbGl6ZUFzc2lzdGFudFdpdGhDb250ZXh0KCk7XG4gICAgICAvLyByZS1pbml0aWFsaXplIGFzc2lzdGFudCB3aGVuIGRhdGFzZXRzLCBmaWx0ZXJzIG9yIGxheWVycyBjaGFuZ2VcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbdmlzU3RhdGUuZGF0YXNldHMsIHZpc1N0YXRlLmZpbHRlcnMsIHZpc1N0YXRlLmxheWVyc10pO1xuXG4gICAgY29uc3Qgb25SZXN0YXJ0QXNzaXN0YW50ID0gKCkgPT4ge1xuICAgICAgLy8gY2xlYW4gdXAgYWlBc3Npc3RhbnQgc3RhdGVcbiAgICAgIHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXMoW10pO1xuICAgICAgaW5pdGlhbGl6ZUFzc2lzdGFudFdpdGhDb250ZXh0KCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTWVzc2FnZXNVcGRhdGVkID0gKG1lc3NhZ2VzOiBNZXNzYWdlTW9kZWxbXSkgPT4ge1xuICAgICAgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhtZXNzYWdlcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2NyZWVuc2hvdENsaWNrID0gKCkgPT4ge1xuICAgICAgc2V0U3RhcnRTY3JlZW5DYXB0dXJlKHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJlbW92ZVNjcmVlbnNob3QgPSAoKSA9PiB7XG4gICAgICBzZXRTY3JlZW5DYXB0dXJlZCgnJyk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQgY2xhc3NOYW1lPVwiYWktYXNzaXN0YW50LWNvbXBvbmVudFwiPlxuICAgICAgICA8QWlBc3Npc3RhbnRcbiAgICAgICAgICB7Li4uYXNzaXN0YW50UHJvcHN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lLnRleHRDb2xvciA9PT0gdGV4dENvbG9yTFQgPyAnbGlnaHQnIDogJ2RhcmsnfVxuICAgICAgICAgIHdlbGNvbWVNZXNzYWdlPXtXRUxDT01FX01FU1NBR0V9XG4gICAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50LmNvbmZpZy50ZW1wZXJhdHVyZX1cbiAgICAgICAgICB0b3BQPXthaUFzc2lzdGFudC5jb25maWcudG9wUH1cbiAgICAgICAgICBoaXN0b3J5TWVzc2FnZXM9e2FpQXNzaXN0YW50Lm1lc3NhZ2VzfVxuICAgICAgICAgIG9uTWVzc2FnZXNVcGRhdGVkPXtvbk1lc3NhZ2VzVXBkYXRlZH1cbiAgICAgICAgICBlbmFibGVWb2ljZT17ZW5hYmxlVm9pY2VBbmRTY3JlZW5DYXB0dXJlfVxuICAgICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgICBvblNjcmVlbnNob3RDbGljaz17b25TY3JlZW5zaG90Q2xpY2t9XG4gICAgICAgICAgc2NyZWVuQ2FwdHVyZWRCYXNlNjQ9e2FpQXNzaXN0YW50LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZH1cbiAgICAgICAgICBvblJlbW92ZVNjcmVlbnNob3Q9e29uUmVtb3ZlU2NyZWVuc2hvdH1cbiAgICAgICAgICBvblJlc3RhcnRDaGF0PXtvblJlc3RhcnRBc3Npc3RhbnR9XG4gICAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICAgIGJvdE1lc3NhZ2VDbGFzc05hbWU9eycnfVxuICAgICAgICAgIGdpdGh1Yklzc3VlTGluaz17J2h0dHBzOi8vZ2l0aHViLmNvbS9rZXBsZXJnbC9rZXBsZXIuZ2wvaXNzdWVzJ31cbiAgICAgICAgICBpZGVhcz17UFJPTVBUX0lERUFTfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudD5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB3aXRoVGhlbWUoQWlBc3Npc3RhbnRDb21wb25lbnQpIGFzIFJlYWN0LkZDPEFpQXNzaXN0YW50Q29tcG9uZW50UHJvcHM+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBBaUFzc2lzdGFudENvbXBvbmVudEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFLQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxHQUFBLEdBQUFMLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUEsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBS0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFJQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFRQSxJQUFBVSxzQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLE1BQUEsR0FBQVosT0FBQTtBQU93QixJQUFBYSxlQUFBLEVBNUN4QjtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFB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QUFrQkEsQ0FBQSxFQUFTO01BQy9CO01BQ0F2Rix5QkFBeUIsQ0FBQyxFQUFFLENBQUM7TUFDN0I4RSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFNVSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJQyxRQUF3QixFQUFLO01BQ3REekYseUJBQXlCLENBQUN5RixRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVELElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUEsRUFBUztNQUM5QnpGLHFCQUFxQixDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBTTBGLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUEsRUFBUztNQUMvQnpGLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQ0VoRCxNQUFBLFlBQUEwSSxhQUFBLENBQUN0RywwQkFBMEI7TUFBQ3VHLFNBQVMsRUFBQztJQUF3QixnQkFDNUQzSSxNQUFBLFlBQUEwSSxhQUFBLENBQUNuSSxHQUFBLENBQUFxSSxXQUFXLE1BQUFDLFNBQUEsaUJBQ05sQyxjQUFjO01BQ2xCL0QsS0FBSyxFQUFFQSxLQUFLLENBQUNrRyxTQUFTLEtBQUtDLG1CQUFXLEdBQUcsT0FBTyxHQUFHLE1BQU87TUFDMURDLGNBQWMsRUFBRUMsMEJBQWdCO01BQ2hDQyxXQUFXLEVBQUVyRyxXQUFXLENBQUM0RCxNQUFNLENBQUN5QyxXQUFZO01BQzVDQyxJQUFJLEVBQUV0RyxXQUFXLENBQUM0RCxNQUFNLENBQUMwQyxJQUFLO01BQzlCQyxlQUFlLEVBQUV2RyxXQUFXLENBQUMwRixRQUFTO01BQ3RDRCxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDZSxXQUFXLEVBQUU3QywyQkFBNEI7TUFDekM4QyxtQkFBbUIsRUFBRTlDLDJCQUE0QjtNQUNqRGdDLGlCQUFpQixFQUFFQSxpQkFBa0I7TUFDckNlLG9CQUFvQixFQUFFMUcsV0FBVyxDQUFDMkcsZUFBZSxDQUFDQyxjQUFlO01BQ2pFaEIsa0JBQWtCLEVBQUVBLGtCQUFtQjtNQUN2Q2lCLGFBQWEsRUFBRXJCLGtCQUFtQjtNQUNsQ3NCLFFBQVEsRUFBRSxXQUFZO01BQ3RCQyxtQkFBbUIsRUFBRSxFQUFHO01BQ3hCQyxlQUFlLEVBQUUsOENBQStDO01BQ2hFQyxLQUFLLEVBQUVDO0lBQWEsRUFDckIsQ0FDeUIsQ0FBQztFQUVqQyxDQUFDO0VBRUQsT0FBTyxJQUFBQywyQkFBUyxFQUFDdEgsb0JBQW9CLENBQUM7QUFDeEM7QUFBQyxJQUFBdUgsUUFBQSxHQUFBQyxPQUFBLGNBRWMxSCwyQkFBMkIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/ai-assistant",
3
3
  "author": "Xun Li<lixun910@gmail.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl AI assistant",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,12 +30,12 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/components": "3.1.0",
34
- "@kepler.gl/constants": "3.1.0",
35
- "@kepler.gl/layers": "3.1.0",
36
- "@kepler.gl/table": "3.1.0",
37
- "@kepler.gl/types": "3.1.0",
38
- "@kepler.gl/utils": "3.1.0",
33
+ "@kepler.gl/components": "3.1.1",
34
+ "@kepler.gl/constants": "3.1.1",
35
+ "@kepler.gl/layers": "3.1.1",
36
+ "@kepler.gl/table": "3.1.1",
37
+ "@kepler.gl/types": "3.1.1",
38
+ "@kepler.gl/utils": "3.1.1",
39
39
  "@openassistant/core": "^0.0.7",
40
40
  "@openassistant/echarts": "^0.0.6",
41
41
  "@openassistant/geoda": "^0.0.6",
@@ -146,6 +146,7 @@ function AiAssistantComponentFactory() {
146
146
  modelProvider: aiAssistant.config.provider,
147
147
  model: aiAssistant.config.model,
148
148
  apiKey: aiAssistant.config.apiKey,
149
+ baseUrl: aiAssistant.config.baseUrl,
149
150
  instructions: INSTRUCTIONS,
150
151
  functions
151
152
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/cloud-providers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/types": "3.1.0",
33
+ "@kepler.gl/types": "3.1.1",
34
34
  "react": "^18.2.0"
35
35
  },
36
36
  "nyc": {
@@ -1,4 +1,4 @@
1
- import { RowData, Field } from '@kepler.gl/types';
1
+ import { ArrowTableInterface, ApacheVectorInterface, RowData, Field } from '@kepler.gl/types';
2
2
  export declare const ACCEPTED_ANALYZER_TYPES: any[];
3
3
  /**
4
4
  * Getting sample data for analyzing field type.
@@ -8,6 +8,14 @@ export declare function getSampleForTypeAnalyze({ fields, rows, sampleCount }: {
8
8
  rows: unknown[][] | RowData;
9
9
  sampleCount?: number;
10
10
  }): RowData;
11
+ /**
12
+ * Getting sample data for analyzing field type for Arrow tables.
13
+ * @param table Arrow table or an array of vectors.
14
+ * @param fields Field names.
15
+ * @param sampleCount Number of sample rows to get.
16
+ * @returns Sample rows.
17
+ */
18
+ export declare function getSampleForTypeAnalyzeArrow(table: ArrowTableInterface | ApacheVectorInterface[], fields: string[], sampleCount?: number): any[];
11
19
  /**
12
20
  * Convert type-analyzer output to kepler.gl field types
13
21
  *
@@ -7,6 +7,7 @@ exports.ACCEPTED_ANALYZER_TYPES = void 0;
7
7
  exports.analyzerTypeToFieldType = analyzerTypeToFieldType;
8
8
  exports.getFieldsFromData = getFieldsFromData;
9
9
  exports.getSampleForTypeAnalyze = getSampleForTypeAnalyze;
10
+ exports.getSampleForTypeAnalyzeArrow = getSampleForTypeAnalyzeArrow;
10
11
  exports.renameDuplicateFields = renameDuplicateFields;
11
12
  var _typeAnalyzer = require("type-analyzer");
12
13
  var _constants = require("@kepler.gl/constants");
@@ -65,6 +66,54 @@ function getSampleForTypeAnalyze(_ref) {
65
66
  return sample;
66
67
  }
67
68
 
69
+ /**
70
+ * Getting sample data for analyzing field type for Arrow tables.
71
+ * @param table Arrow table or an array of vectors.
72
+ * @param fields Field names.
73
+ * @param sampleCount Number of sample rows to get.
74
+ * @returns Sample rows.
75
+ */
76
+ function getSampleForTypeAnalyzeArrow(table, fields) {
77
+ var sampleCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 50;
78
+ var isTable = !Array.isArray(table);
79
+ var numRows = isTable ? table.numRows : table[0].length;
80
+ var getVector = isTable ? function (index) {
81
+ return table.getChildAt(index);
82
+ } : function (index) {
83
+ return table[index];
84
+ };
85
+ var total = Math.min(sampleCount, numRows);
86
+ var sample = (0, _d3Array.range)(0, total, 1).map(function () {
87
+ return {};
88
+ });
89
+ if (numRows < 1) {
90
+ return [];
91
+ }
92
+
93
+ // collect sample data for each field
94
+ fields.forEach(function (field, fieldIdx) {
95
+ var rowIndex = 0;
96
+ var sampleIndex = 0;
97
+ while (sampleIndex < total) {
98
+ var _getVector;
99
+ if (rowIndex >= numRows) {
100
+ // if depleted data pool
101
+ sample[sampleIndex][field] = null;
102
+ sampleIndex++;
103
+ } else if ((0, _data.notNullorUndefined)((_getVector = getVector(fieldIdx)) === null || _getVector === void 0 ? void 0 : _getVector.get(rowIndex))) {
104
+ var _getVector2;
105
+ var value = (_getVector2 = getVector(fieldIdx)) === null || _getVector2 === void 0 ? void 0 : _getVector2.get(rowIndex);
106
+ sample[sampleIndex][field] = typeof value === 'string' ? value.trim() : value;
107
+ sampleIndex++;
108
+ rowIndex++;
109
+ } else {
110
+ rowIndex++;
111
+ }
112
+ }
113
+ });
114
+ return sample;
115
+ }
116
+
68
117
  /**
69
118
  * Convert type-analyzer output to kepler.gl field types
70
119
  *
@@ -250,4 +299,4 @@ function renameDuplicateFields(fieldOrder) {
250
299
  fieldByIndex: []
251
300
  });
252
301
  }
253
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZUFuYWx5emVyIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfd2luZG93IiwiX2QzQXJyYXkiLCJfZGF0YSIsIl9oM1V0aWxzIiwiSDNfQU5BTFlaRVJfVFlQRSIsIkFDQ0VQVEVEX0FOQUxZWkVSX1RZUEVTIiwiZXhwb3J0cyIsIkFuYWx5emVyREFUQV9UWVBFUyIsIkRBVEUiLCJUSU1FIiwiREFURVRJTUUiLCJOVU1CRVIiLCJJTlQiLCJGTE9BVCIsIkJPT0xFQU4iLCJTVFJJTkciLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyIsIlpJUENPREUiLCJBUlJBWSIsIk9CSkVDVCIsIklHTk9SRV9EQVRBX1RZUEVTIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsInR5cGUiLCJpbmNsdWRlcyIsImdldFNhbXBsZUZvclR5cGVBbmFseXplIiwiX3JlZiIsImZpZWxkcyIsInJvd3MiLCJfcmVmJHNhbXBsZUNvdW50Iiwic2FtcGxlQ291bnQiLCJ0b3RhbCIsIk1hdGgiLCJtaW4iLCJsZW5ndGgiLCJzYW1wbGUiLCJyYW5nZSIsIm1hcCIsImlzUm93T2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsImZpZWxkIiwiZmllbGRJZHgiLCJpIiwiaiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInZhbHVlIiwidHJpbSIsImFuYWx5emVyVHlwZVRvRmllbGRUeXBlIiwiYVR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJkYXRlIiwidGltZXN0YW1wIiwicmVhbCIsImludGVnZXIiLCJnZW9qc29uIiwiYXJyYXkiLCJvYmplY3QiLCJzdHJpbmciLCJoMyIsImdsb2JhbENvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiZ2V0RmllbGRzRnJvbURhdGEiLCJkYXRhIiwiZmllbGRPcmRlciIsIm1ldGFkYXRhIiwiQW5hbHl6ZXIiLCJjb21wdXRlQ29sTWV0YSIsInJlZ2V4IiwiZGF0YVR5cGUiLCJpZ25vcmVkRGF0YVR5cGVzIiwiX3JlbmFtZUR1cGxpY2F0ZUZpZWxkIiwicmVuYW1lRHVwbGljYXRlRmllbGRzIiwiZmllbGRCeUluZGV4IiwicmVzdWx0IiwiaW5kZXgiLCJuYW1lIiwiZmllbGRNZXRhIiwiZmluZCIsIm0iLCJrZXkiLCJmb3JtYXQiLCJuIiwiaDNJc1ZhbGlkIiwic29tZSIsImQiLCJpc0hleFdrYiIsImlkIiwiZGlzcGxheU5hbWUiLCJhbmFseXplclR5cGUiLCJ2YWx1ZUFjY2Vzc29yIiwiZGMiLCJ2YWx1ZUF0IiwicmVkdWNlIiwiYWNjdSIsImFsbE5hbWVzIiwiZmllbGROYW1lIiwiY291bnRlciIsInB1c2giXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS10eXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7QW5hbHl6ZXIsIERBVEFfVFlQRVMgYXMgQW5hbHl6ZXJEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCB7Um93RGF0YSwgRmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Y29uc29sZSBhcyBnbG9iYWxDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7aXNIZXhXa2IsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnLi9kYXRhJztcbmltcG9ydCB7aDNJc1ZhbGlkfSBmcm9tICcuL2gzLXV0aWxzJztcblxuY29uc3QgSDNfQU5BTFlaRVJfVFlQRSA9ICdIMyc7XG5cbmV4cG9ydCBjb25zdCBBQ0NFUFRFRF9BTkFMWVpFUl9UWVBFUyA9IFtcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkRBVEUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5USU1FLFxuICBBbmFseXplckRBVEFfVFlQRVMuREFURVRJTUUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5OVU1CRVIsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5JTlQsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5GTE9BVCxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkJPT0xFQU4sXG4gIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HLFxuICBBbmFseXplckRBVEFfVFlQRVMuUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLlpJUENPREUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5BUlJBWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLk9CSkVDVCxcbiAgSDNfQU5BTFlaRVJfVFlQRVxuXTtcblxuY29uc3QgSUdOT1JFX0RBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhBbmFseXplckRBVEFfVFlQRVMpLmZpbHRlcihcbiAgdHlwZSA9PiAhQUNDRVBURURfQU5BTFlaRVJfVFlQRVMuaW5jbHVkZXModHlwZSlcbik7XG5cbi8qKlxuICogR2V0dGluZyBzYW1wbGUgZGF0YSBmb3IgYW5hbHl6aW5nIGZpZWxkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7XG4gIGZpZWxkcyxcbiAgcm93cyxcbiAgc2FtcGxlQ291bnQgPSA1MFxufToge1xuICBmaWVsZHM6IHN0cmluZ1tdO1xuICByb3dzOiB1bmtub3duW11bXSB8IFJvd0RhdGE7XG4gIHNhbXBsZUNvdW50PzogbnVtYmVyO1xufSk6IFJvd0RhdGEge1xuICBjb25zdCB0b3RhbCA9IE1hdGgubWluKHNhbXBsZUNvdW50LCByb3dzLmxlbmd0aCk7XG4gIC8vIGNvbnN0IGZpZWxkT3JkZXIgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKTtcbiAgY29uc3Qgc2FtcGxlID0gcmFuZ2UoMCwgdG90YWwsIDEpLm1hcCgoKSA9PiAoe30pKTtcblxuICBpZiAocm93cy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlzUm93T2JqZWN0ID0gIUFycmF5LmlzQXJyYXkocm93c1swXSk7XG5cbiAgLy8gY29sbGVjdCBzYW1wbGUgZGF0YSBmb3IgZWFjaCBmaWVsZFxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSWR4KSA9PiB7XG4gICAgLy8gcm93IGNvdW50ZXJcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gc2FtcGxlIGNvdW50ZXJcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHRvdGFsKSB7XG4gICAgICBpZiAoaSA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBkZXBsZXRlZCBkYXRhIHBvb2xcbiAgICAgICAgc2FtcGxlW2pdW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgIGorKztcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHJvd3NbaV1baXNSb3dPYmplY3QgPyBmaWVsZCA6IGZpZWxkSWR4XSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dzW2ldW2lzUm93T2JqZWN0ID8gZmllbGQgOiBmaWVsZElkeF07XG4gICAgICAgIHNhbXBsZVtqXVtmaWVsZF0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XG4gICAgICAgIGorKztcbiAgICAgICAgaSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHNhbXBsZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHR5cGUtYW5hbHl6ZXIgb3V0cHV0IHRvIGtlcGxlci5nbCBmaWVsZCB0eXBlc1xuICpcbiAqIEBwYXJhbSBhVHlwZVxuICogQHJldHVybnMgY29ycmVzcG9uZGluZyB0eXBlIGluIGBBTExfRklFTERfVFlQRVNgXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZShhVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIERBVEUsXG4gICAgVElNRSxcbiAgICBEQVRFVElNRSxcbiAgICBOVU1CRVIsXG4gICAgSU5ULFxuICAgIEZMT0FULFxuICAgIEJPT0xFQU4sXG4gICAgU1RSSU5HLFxuICAgIEdFT01FVFJZLFxuICAgIEdFT01FVFJZX0ZST01fU1RSSU5HLFxuICAgIFBBSVJfR0VPTUVUUllfRlJPTV9TVFJJTkcsXG4gICAgWklQQ09ERSxcbiAgICBBUlJBWSxcbiAgICBPQkpFQ1RcbiAgfSA9IEFuYWx5emVyREFUQV9UWVBFUztcblxuICAvLyBUT0RPOiB1biByZWNvZ25pemVkIHR5cGVzXG4gIC8vIENVUlJFTkNZIFBFUkNFTlQgTk9ORVxuICBzd2l0Y2ggKGFUeXBlKSB7XG4gICAgY2FzZSBEQVRFOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5kYXRlO1xuICAgIGNhc2UgVElNRTpcbiAgICBjYXNlIERBVEVUSU1FOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gICAgY2FzZSBGTE9BVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMucmVhbDtcbiAgICBjYXNlIElOVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaW50ZWdlcjtcbiAgICBjYXNlIEJPT0xFQU46XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gICAgY2FzZSBHRU9NRVRSWTpcbiAgICBjYXNlIEdFT01FVFJZX0ZST01fU1RSSU5HOlxuICAgIGNhc2UgUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORzpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZ2VvanNvbjtcbiAgICBjYXNlIEFSUkFZOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5hcnJheTtcbiAgICBjYXNlIE9CSkVDVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMub2JqZWN0O1xuICAgIGNhc2UgTlVNQkVSOlxuICAgIGNhc2UgU1RSSU5HOlxuICAgIGNhc2UgWklQQ09ERTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICAgIGNhc2UgSDNfQU5BTFlaRVJfVFlQRTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaDM7XG4gICAgZGVmYXVsdDpcbiAgICAgIGdsb2JhbENvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgYW5hbHl6ZXIgdHlwZTogJHthVHlwZX1gKTtcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogQW5hbHl6ZSBmaWVsZCB0eXBlcyBmcm9tIGRhdGEgaW4gYHN0cmluZ2AgZm9ybWF0LCBlLmcuIHVwbG9hZGVkIGNzdi5cbiAqIEFzc2lnbiBgdHlwZWAsIGBmaWVsZElkeGAgYW5kIGBmb3JtYXRgICh0aW1lc3RhbXAgb25seSkgdG8gZWFjaCBmaWVsZFxuICpcbiAqIEBwYXJhbSBkYXRhIGFycmF5IG9mIHJvdyBvYmplY3RcbiAqIEBwYXJhbSBmaWVsZE9yZGVyIGFycmF5IG9mIGZpZWxkIG5hbWVzIGFzIHN0cmluZ1xuICogQHJldHVybnMgZm9ybWF0dGVkIGZpZWxkc1xuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQge2dldEZpZWxkc0Zyb21EYXRhfSBmcm9tICdrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbiAqIGNvbnN0IGRhdGEgPSBbe1xuICogICB0aW1lOiAnMjAxNi0wOS0xNyAwMDowOTo1NScsXG4gKiAgIHZhbHVlOiAnNCcsXG4gKiAgIHN1cmdlOiAnMS4yJyxcbiAqICAgaXNUcmlwOiAndHJ1ZScsXG4gKiAgIHplcm9PbmVzOiAnMCdcbiAqIH0sIHtcbiAqICAgdGltZTogJzIwMTYtMDktMTcgMDA6MzA6MDgnLFxuICogICB2YWx1ZTogJzMnLFxuICogICBzdXJnZTogbnVsbCxcbiAqICAgaXNUcmlwOiAnZmFsc2UnLFxuICogICB6ZXJvT25lczogJzEnXG4gKiB9LCB7XG4gKiAgIHRpbWU6IG51bGwsXG4gKiAgIHZhbHVlOiAnMicsXG4gKiAgIHN1cmdlOiAnMS4zJyxcbiAqICAgaXNUcmlwOiBudWxsLFxuICogICB6ZXJvT25lczogJzEnXG4gKiB9XTtcbiAqXG4gKiBjb25zdCBmaWVsZE9yZGVyID0gWyd0aW1lJywgJ3ZhbHVlJywgJ3N1cmdlJywgJ2lzVHJpcCcsICd6ZXJvT25lcyddO1xuICogY29uc3QgZmllbGRzID0gZ2V0RmllbGRzRnJvbURhdGEoZGF0YSwgZmllbGRPcmRlcik7XG4gKiAvLyBmaWVsZHMgPSBbXG4gKiAvLyB7bmFtZTogJ3RpbWUnLCBmb3JtYXQ6ICdZWVlZLU0tRCBIOm06cycsIGZpZWxkSWR4OiAxLCB0eXBlOiAndGltZXN0YW1wJ30sXG4gKiAvLyB7bmFtZTogJ3ZhbHVlJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDQsIHR5cGU6ICdpbnRlZ2VyJ30sXG4gKiAvLyB7bmFtZTogJ3N1cmdlJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDUsIHR5cGU6ICdyZWFsJ30sXG4gKiAvLyB7bmFtZTogJ2lzVHJpcCcsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA2LCB0eXBlOiAnYm9vbGVhbid9LFxuICogLy8ge25hbWU6ICd6ZXJvT25lcycsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA3LCB0eXBlOiAnaW50ZWdlcid9XTtcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZHNGcm9tRGF0YShkYXRhOiBSb3dEYXRhLCBmaWVsZE9yZGVyOiBzdHJpbmdbXSk6IEZpZWxkW10ge1xuICAvLyBhZGQgYSBjaGVjayBmb3IgZXBvY2ggdGltZXN0YW1wXG4gIGNvbnN0IG1ldGFkYXRhID0gQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGEoXG4gICAgZGF0YSxcbiAgICBbXG4gICAgICB7cmVnZXg6IC8uKmdlb2pzb258YWxsX3BvaW50cy9nLCBkYXRhVHlwZTogJ0dFT01FVFJZJ30sXG4gICAgICB7cmVnZXg6IC8uKmNlbnN1cy9nLCBkYXRhVHlwZTogJ1NUUklORyd9XG4gICAgXSxcbiAgICB7aWdub3JlZERhdGFUeXBlczogSUdOT1JFX0RBVEFfVFlQRVN9XG4gICk7XG5cbiAgY29uc3Qge2ZpZWxkQnlJbmRleH0gPSByZW5hbWVEdXBsaWNhdGVGaWVsZHMoZmllbGRPcmRlcik7XG5cbiAgY29uc3QgcmVzdWx0ID0gZmllbGRPcmRlci5tYXAoKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBmaWVsZEJ5SW5kZXhbaW5kZXhdO1xuXG4gICAgY29uc3QgZmllbGRNZXRhID0gbWV0YWRhdGEuZmluZChtID0+IG0ua2V5ID09PSBmaWVsZCk7XG5cbiAgICAvLyBmaWVsZE1ldGEgY291bGQgYmUgdW5kZWZpbmVkIGlmIHRoZSBmaWVsZCBoYXMgbm8gZGF0YSBhbmQgQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGFcbiAgICAvLyB3aWxsIGlnbm9yZSB0aGUgZmllbGQuIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBzaW1wbHkgYXNzaWduIHRoZSBmaWVsZCB0eXBlIHRvIFNUUklOR1xuICAgIC8vIHNpbmNlIGRyb3BwaW5nIHRoZSBjb2x1bW4gaW4gdGhlIFJvd0RhdGEgY291bGQgYmUgZXhwZW5zaXZlXG4gICAgbGV0IHR5cGUgPSBmaWVsZE1ldGE/LnR5cGUgfHwgJ1NUUklORyc7XG4gICAgY29uc3QgZm9ybWF0ID0gZmllbGRNZXRhPy5mb3JtYXQgfHwgJyc7XG5cbiAgICAvLyBxdWljayBjaGVjayBpZiBmaXJzdCB2YWxpZCBzdHJpbmcgaW4gY29sdW1uIGlzIEgzXG4gICAgaWYgKHR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChkYXRhW2ldW25hbWVdKSkge1xuICAgICAgICAgIHR5cGUgPSBoM0lzVmFsaWQoZGF0YVtpXVtuYW1lXSB8fCAnJykgPyBIM19BTkFMWVpFUl9UWVBFIDogdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHF1aWNrIGNoZWNrIGlmIHN0cmluZyBpcyBoZXggd2tiXG4gICAgaWYgKHR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcpIHtcbiAgICAgIHR5cGUgPSBkYXRhLnNvbWUoZCA9PiBpc0hleFdrYihkW25hbWVdKSkgPyBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUlkgOiB0eXBlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgaWQ6IG5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgIGZvcm1hdCxcbiAgICAgIGZpZWxkSWR4OiBpbmRleCxcbiAgICAgIHR5cGU6IGFuYWx5emVyVHlwZVRvRmllbGRUeXBlKHR5cGUpLFxuICAgICAgYW5hbHl6ZXJUeXBlOiB0eXBlLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogZGMgPT4gZCA9PiB7XG4gICAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQuaW5kZXgsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHBhc3MgaW4gYW4gYXJyYXkgb2YgZmllbGQgbmFtZXMsIHJlbmFtZSBkdXBsaWNhdGVkIG9uZVxuICogYW5kIHJldHVybiBhIG1hcCBmcm9tIG9sZCBmaWVsZCBpbmRleCB0byBuZXcgbmFtZVxuICpcbiAqIEBwYXJhbSBmaWVsZE9yZGVyXG4gKiBAcmV0dXJucyBuZXcgZmllbGQgbmFtZSBieSBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRHVwbGljYXRlRmllbGRzKGZpZWxkT3JkZXI6IHN0cmluZ1tdKToge1xuICBhbGxOYW1lczogc3RyaW5nW107XG4gIGZpZWxkQnlJbmRleDogc3RyaW5nW107XG59IHtcbiAgcmV0dXJuIGZpZWxkT3JkZXIucmVkdWNlPHthbGxOYW1lczogc3RyaW5nW107IGZpZWxkQnlJbmRleDogc3RyaW5nW119PihcbiAgICAoYWNjdSwgZmllbGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHthbGxOYW1lc30gPSBhY2N1O1xuICAgICAgbGV0IGZpZWxkTmFtZSA9IGZpZWxkO1xuXG4gICAgICAvLyBhZGQgYSBjb3VudGVyIHRvIGR1cGxpY2F0ZWQgbmFtZXNcbiAgICAgIGlmIChhbGxOYW1lcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICB3aGlsZSAoYWxsTmFtZXMuaW5jbHVkZXMoYCR7ZmllbGR9LSR7Y291bnRlcn1gKSkge1xuICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZE5hbWUgPSBgJHtmaWVsZH0tJHtjb3VudGVyfWA7XG4gICAgICB9XG5cbiAgICAgIGFjY3UuZmllbGRCeUluZGV4W2ldID0gZmllbGROYW1lO1xuICAgICAgYWNjdS5hbGxOYW1lcy5wdXNoKGZpZWxkTmFtZSk7XG5cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sXG4gICAge2FsbE5hbWVzOiBbXSwgZmllbGRCeUluZGV4OiBbXX1cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLGFBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQVRBO0FBQ0E7O0FBVUEsSUFBTU0sZ0JBQWdCLEdBQUcsSUFBSTtBQUV0QixJQUFNQyx1QkFB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QUMsVUFBQUMsQ0FBQztRQUFBLE9BQUksSUFBQUMsY0FBUSxFQUFDRCxDQUFDLENBQUNULElBQUksQ0FBQyxDQUFDO01BQUEsRUFBQyxHQUFHMUUsd0JBQWtCLENBQUNTLFFBQVEsR0FBR1UsSUFBSTtJQUMvRTtJQUVBLE9BQU87TUFDTHVELElBQUksRUFBSkEsSUFBSTtNQUNKVyxFQUFFLEVBQUVYLElBQUk7TUFDUlksV0FBVyxFQUFFWixJQUFJO01BQ2pCSyxNQUFNLEVBQU5BLE1BQU07TUFDTnhDLFFBQVEsRUFBRWtDLEtBQUs7TUFDZnRELElBQUksRUFBRTBCLHVCQUF1QixDQUFDMUIsSUFBSSxDQUFDO01BQ25Db0UsWUFBWSxFQUFFcEUsSUFBSTtNQUNsQnFFLGFBQWEsRUFBRSxTQUFmQSxhQUFhQSxDQUFFQyxFQUFFO1FBQUEsT0FBSSxVQUFBTixDQUFDLEVBQUk7VUFDeEIsT0FBT00sRUFBRSxDQUFDQyxPQUFPLENBQUNQLENBQUMsQ0FBQ1YsS0FBSyxFQUFFQSxLQUFLLENBQUM7UUFDbkMsQ0FBQztNQUFBO0lBQ0gsQ0FBQztFQUNILENBQUMsQ0FBQztFQUVGLE9BQU9ELE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNGLHFCQUFxQkEsQ0FBQ1IsVUFBb0IsRUFHeEQ7RUFDQSxPQUFPQSxVQUFVLENBQUM2QixNQUFNLENBQ3RCLFVBQUNDLElBQUksRUFBRXRELEtBQUssRUFBRUUsQ0FBQyxFQUFLO0lBQ2xCLElBQU9xRCxRQUFRLEdBQUlELElBQUksQ0FBaEJDLFFBQVE7SUFDZixJQUFJQyxTQUFTLEdBQUd4RCxLQUFLOztJQUVyQjtJQUNBLElBQUl1RCxRQUFRLENBQUN6RSxRQUFRLENBQUNrQixLQUFLLENBQUMsRUFBRTtNQUM1QixJQUFJeUQsT0FBTyxHQUFHLENBQUM7TUFDZixPQUFPRixRQUFRLENBQUN6RSxRQUFRLElBQUF1QyxNQUFBLENBQUlyQixLQUFLLE9BQUFxQixNQUFBLENBQUlvQyxPQUFPLENBQUUsQ0FBQyxFQUFFO1FBQy9DQSxPQUFPLEVBQUU7TUFDWDtNQUNBRCxTQUFTLE1BQUFuQyxNQUFBLENBQU1yQixLQUFLLE9BQUFxQixNQUFBLENBQUlvQyxPQUFPLENBQUU7SUFDbkM7SUFFQUgsSUFBSSxDQUFDckIsWUFBWSxDQUFDL0IsQ0FBQyxDQUFDLEdBQUdzRCxTQUFTO0lBQ2hDRixJQUFJLENBQUNDLFFBQVEsQ0FBQ0csSUFBSSxDQUFDRixTQUFTLENBQUM7SUFFN0IsT0FBT0YsSUFBSTtFQUNiLENBQUMsRUFDRDtJQUFDQyxRQUFRLEVBQUUsRUFBRTtJQUFFdEIsWUFBWSxFQUFFO0VBQUUsQ0FDakMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
302
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZUFuYWx5emVyIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfd2luZG93IiwiX2QzQXJyYXkiLCJfZGF0YSIsIl9oM1V0aWxzIiwiSDNfQU5BTFlaRVJfVFlQRSIsIkFDQ0VQVEVEX0FOQUxZWkVSX1RZUEVTIiwiZXhwb3J0cyIsIkFuYWx5emVyREFUQV9UWVBFUyIsIkRBVEUiLCJUSU1FIiwiREFURVRJTUUiLCJOVU1CRVIiLCJJTlQiLCJGTE9BVCIsIkJPT0xFQU4iLCJTVFJJTkciLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyIsIlpJUENPREUiLCJBUlJBWSIsIk9CSkVDVCIsIklHTk9SRV9EQVRBX1RZUEVTIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsInR5cGUiLCJpbmNsdWRlcyIsImdldFNhbXBsZUZvclR5cGVBbmFseXplIiwiX3JlZiIsImZpZWxkcyIsInJvd3MiLCJfcmVmJHNhbXBsZUNvdW50Iiwic2FtcGxlQ291bnQiLCJ0b3RhbCIsIk1hdGgiLCJtaW4iLCJsZW5ndGgiLCJzYW1wbGUiLCJyYW5nZSIsIm1hcCIsImlzUm93T2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsImZpZWxkIiwiZmllbGRJZHgiLCJpIiwiaiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInZhbHVlIiwidHJpbSIsImdldFNhbXBsZUZvclR5cGVBbmFseXplQXJyb3ciLCJ0YWJsZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImlzVGFibGUiLCJudW1Sb3dzIiwiZ2V0VmVjdG9yIiwiaW5kZXgiLCJnZXRDaGlsZEF0Iiwicm93SW5kZXgiLCJzYW1wbGVJbmRleCIsIl9nZXRWZWN0b3IiLCJnZXQiLCJfZ2V0VmVjdG9yMiIsImFuYWx5emVyVHlwZVRvRmllbGRUeXBlIiwiYVR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJkYXRlIiwidGltZXN0YW1wIiwicmVhbCIsImludGVnZXIiLCJnZW9qc29uIiwiYXJyYXkiLCJvYmplY3QiLCJzdHJpbmciLCJoMyIsImdsb2JhbENvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiZ2V0RmllbGRzRnJvbURhdGEiLCJkYXRhIiwiZmllbGRPcmRlciIsIm1ldGFkYXRhIiwiQW5hbHl6ZXIiLCJjb21wdXRlQ29sTWV0YSIsInJlZ2V4IiwiZGF0YVR5cGUiLCJpZ25vcmVkRGF0YVR5cGVzIiwiX3JlbmFtZUR1cGxpY2F0ZUZpZWxkIiwicmVuYW1lRHVwbGljYXRlRmllbGRzIiwiZmllbGRCeUluZGV4IiwicmVzdWx0IiwibmFtZSIsImZpZWxkTWV0YSIsImZpbmQiLCJtIiwia2V5IiwiZm9ybWF0IiwibiIsImgzSXNWYWxpZCIsInNvbWUiLCJkIiwiaXNIZXhXa2IiLCJpZCIsImRpc3BsYXlOYW1lIiwiYW5hbHl6ZXJUeXBlIiwidmFsdWVBY2Nlc3NvciIsImRjIiwidmFsdWVBdCIsInJlZHVjZSIsImFjY3UiLCJhbGxOYW1lcyIsImZpZWxkTmFtZSIsImNvdW50ZXIiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGEtdHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0FuYWx5emVyLCBEQVRBX1RZUEVTIGFzIEFuYWx5emVyREFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5pbXBvcnQge0Fycm93VGFibGVJbnRlcmZhY2UsIEFwYWNoZVZlY3RvckludGVyZmFjZSwgUm93RGF0YSwgRmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Y29uc29sZSBhcyBnbG9iYWxDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7aXNIZXhXa2IsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnLi9kYXRhJztcbmltcG9ydCB7aDNJc1ZhbGlkfSBmcm9tICcuL2gzLXV0aWxzJztcblxuY29uc3QgSDNfQU5BTFlaRVJfVFlQRSA9ICdIMyc7XG5cbmV4cG9ydCBjb25zdCBBQ0NFUFRFRF9BTkFMWVpFUl9UWVBFUyA9IFtcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkRBVEUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5USU1FLFxuICBBbmFseXplckRBVEFfVFlQRVMuREFURVRJTUUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5OVU1CRVIsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5JTlQsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5GTE9BVCxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkJPT0xFQU4sXG4gIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HLFxuICBBbmFseXplckRBVEFfVFlQRVMuUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLlpJUENPREUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5BUlJBWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLk9CSkVDVCxcbiAgSDNfQU5BTFlaRVJfVFlQRVxuXTtcblxuY29uc3QgSUdOT1JFX0RBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhBbmFseXplckRBVEFfVFlQRVMpLmZpbHRlcihcbiAgdHlwZSA9PiAhQUNDRVBURURfQU5BTFlaRVJfVFlQRVMuaW5jbHVkZXModHlwZSlcbik7XG5cbi8qKlxuICogR2V0dGluZyBzYW1wbGUgZGF0YSBmb3IgYW5hbHl6aW5nIGZpZWxkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7XG4gIGZpZWxkcyxcbiAgcm93cyxcbiAgc2FtcGxlQ291bnQgPSA1MFxufToge1xuICBmaWVsZHM6IHN0cmluZ1tdO1xuICByb3dzOiB1bmtub3duW11bXSB8IFJvd0RhdGE7XG4gIHNhbXBsZUNvdW50PzogbnVtYmVyO1xufSk6IFJvd0RhdGEge1xuICBjb25zdCB0b3RhbCA9IE1hdGgubWluKHNhbXBsZUNvdW50LCByb3dzLmxlbmd0aCk7XG4gIC8vIGNvbnN0IGZpZWxkT3JkZXIgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKTtcbiAgY29uc3Qgc2FtcGxlID0gcmFuZ2UoMCwgdG90YWwsIDEpLm1hcCgoKSA9PiAoe30pKTtcblxuICBpZiAocm93cy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlzUm93T2JqZWN0ID0gIUFycmF5LmlzQXJyYXkocm93c1swXSk7XG5cbiAgLy8gY29sbGVjdCBzYW1wbGUgZGF0YSBmb3IgZWFjaCBmaWVsZFxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSWR4KSA9PiB7XG4gICAgLy8gcm93IGNvdW50ZXJcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gc2FtcGxlIGNvdW50ZXJcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHRvdGFsKSB7XG4gICAgICBpZiAoaSA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBkZXBsZXRlZCBkYXRhIHBvb2xcbiAgICAgICAgc2FtcGxlW2pdW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgIGorKztcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHJvd3NbaV1baXNSb3dPYmplY3QgPyBmaWVsZCA6IGZpZWxkSWR4XSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dzW2ldW2lzUm93T2JqZWN0ID8gZmllbGQgOiBmaWVsZElkeF07XG4gICAgICAgIHNhbXBsZVtqXVtmaWVsZF0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XG4gICAgICAgIGorKztcbiAgICAgICAgaSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHNhbXBsZTtcbn1cblxuLyoqXG4gKiBHZXR0aW5nIHNhbXBsZSBkYXRhIGZvciBhbmFseXppbmcgZmllbGQgdHlwZSBmb3IgQXJyb3cgdGFibGVzLlxuICogQHBhcmFtIHRhYmxlIEFycm93IHRhYmxlIG9yIGFuIGFycmF5IG9mIHZlY3RvcnMuXG4gKiBAcGFyYW0gZmllbGRzIEZpZWxkIG5hbWVzLlxuICogQHBhcmFtIHNhbXBsZUNvdW50IE51bWJlciBvZiBzYW1wbGUgcm93cyB0byBnZXQuXG4gKiBAcmV0dXJucyBTYW1wbGUgcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZUZvclR5cGVBbmFseXplQXJyb3coXG4gIHRhYmxlOiBBcnJvd1RhYmxlSW50ZXJmYWNlIHwgQXBhY2hlVmVjdG9ySW50ZXJmYWNlW10sXG4gIGZpZWxkczogc3RyaW5nW10sXG4gIHNhbXBsZUNvdW50ID0gNTBcbik6IGFueVtdIHtcbiAgY29uc3QgaXNUYWJsZSA9ICFBcnJheS5pc0FycmF5KHRhYmxlKTtcblxuICBjb25zdCBudW1Sb3dzID0gaXNUYWJsZSA/IHRhYmxlLm51bVJvd3MgOiB0YWJsZVswXS5sZW5ndGg7XG4gIGNvbnN0IGdldFZlY3RvciA9IGlzVGFibGUgPyBpbmRleCA9PiB0YWJsZS5nZXRDaGlsZEF0KGluZGV4KSA6IGluZGV4ID0+IHRhYmxlW2luZGV4XTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGgubWluKHNhbXBsZUNvdW50LCBudW1Sb3dzKTtcbiAgY29uc3Qgc2FtcGxlID0gcmFuZ2UoMCwgdG90YWwsIDEpLm1hcCgoKSA9PiAoe30pKTtcblxuICBpZiAobnVtUm93cyA8IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBjb2xsZWN0IHNhbXBsZSBkYXRhIGZvciBlYWNoIGZpZWxkXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgZmllbGRJZHgpID0+IHtcbiAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgIGxldCBzYW1wbGVJbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoc2FtcGxlSW5kZXggPCB0b3RhbCkge1xuICAgICAgaWYgKHJvd0luZGV4ID49IG51bVJvd3MpIHtcbiAgICAgICAgLy8gaWYgZGVwbGV0ZWQgZGF0YSBwb29sXG4gICAgICAgIHNhbXBsZVtzYW1wbGVJbmRleF1bZmllbGRdID0gbnVsbDtcbiAgICAgICAgc2FtcGxlSW5kZXgrKztcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKGdldFZlY3RvcihmaWVsZElkeCk/LmdldChyb3dJbmRleCkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0VmVjdG9yKGZpZWxkSWR4KT8uZ2V0KHJvd0luZGV4KTtcbiAgICAgICAgc2FtcGxlW3NhbXBsZUluZGV4XVtmaWVsZF0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XG4gICAgICAgIHNhbXBsZUluZGV4Kys7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHNhbXBsZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHR5cGUtYW5hbHl6ZXIgb3V0cHV0IHRvIGtlcGxlci5nbCBmaWVsZCB0eXBlc1xuICpcbiAqIEBwYXJhbSBhVHlwZVxuICogQHJldHVybnMgY29ycmVzcG9uZGluZyB0eXBlIGluIGBBTExfRklFTERfVFlQRVNgXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZShhVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIERBVEUsXG4gICAgVElNRSxcbiAgICBEQVRFVElNRSxcbiAgICBOVU1CRVIsXG4gICAgSU5ULFxuICAgIEZMT0FULFxuICAgIEJPT0xFQU4sXG4gICAgU1RSSU5HLFxuICAgIEdFT01FVFJZLFxuICAgIEdFT01FVFJZX0ZST01fU1RSSU5HLFxuICAgIFBBSVJfR0VPTUVUUllfRlJPTV9TVFJJTkcsXG4gICAgWklQQ09ERSxcbiAgICBBUlJBWSxcbiAgICBPQkpFQ1RcbiAgfSA9IEFuYWx5emVyREFUQV9UWVBFUztcblxuICAvLyBUT0RPOiB1biByZWNvZ25pemVkIHR5cGVzXG4gIC8vIENVUlJFTkNZIFBFUkNFTlQgTk9ORVxuICBzd2l0Y2ggKGFUeXBlKSB7XG4gICAgY2FzZSBEQVRFOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5kYXRlO1xuICAgIGNhc2UgVElNRTpcbiAgICBjYXNlIERBVEVUSU1FOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gICAgY2FzZSBGTE9BVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMucmVhbDtcbiAgICBjYXNlIElOVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaW50ZWdlcjtcbiAgICBjYXNlIEJPT0xFQU46XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gICAgY2FzZSBHRU9NRVRSWTpcbiAgICBjYXNlIEdFT01FVFJZX0ZST01fU1RSSU5HOlxuICAgIGNhc2UgUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORzpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZ2VvanNvbjtcbiAgICBjYXNlIEFSUkFZOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5hcnJheTtcbiAgICBjYXNlIE9CSkVDVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMub2JqZWN0O1xuICAgIGNhc2UgTlVNQkVSOlxuICAgIGNhc2UgU1RSSU5HOlxuICAgIGNhc2UgWklQQ09ERTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICAgIGNhc2UgSDNfQU5BTFlaRVJfVFlQRTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaDM7XG4gICAgZGVmYXVsdDpcbiAgICAgIGdsb2JhbENvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgYW5hbHl6ZXIgdHlwZTogJHthVHlwZX1gKTtcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogQW5hbHl6ZSBmaWVsZCB0eXBlcyBmcm9tIGRhdGEgaW4gYHN0cmluZ2AgZm9ybWF0LCBlLmcuIHVwbG9hZGVkIGNzdi5cbiAqIEFzc2lnbiBgdHlwZWAsIGBmaWVsZElkeGAgYW5kIGBmb3JtYXRgICh0aW1lc3RhbXAgb25seSkgdG8gZWFjaCBmaWVsZFxuICpcbiAqIEBwYXJhbSBkYXRhIGFycmF5IG9mIHJvdyBvYmplY3RcbiAqIEBwYXJhbSBmaWVsZE9yZGVyIGFycmF5IG9mIGZpZWxkIG5hbWVzIGFzIHN0cmluZ1xuICogQHJldHVybnMgZm9ybWF0dGVkIGZpZWxkc1xuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQge2dldEZpZWxkc0Zyb21EYXRhfSBmcm9tICdrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbiAqIGNvbnN0IGRhdGEgPSBbe1xuICogICB0aW1lOiAnMjAxNi0wOS0xNyAwMDowOTo1NScsXG4gKiAgIHZhbHVlOiAnNCcsXG4gKiAgIHN1cmdlOiAnMS4yJyxcbiAqICAgaXNUcmlwOiAndHJ1ZScsXG4gKiAgIHplcm9PbmVzOiAnMCdcbiAqIH0sIHtcbiAqICAgdGltZTogJzIwMTYtMDktMTcgMDA6MzA6MDgnLFxuICogICB2YWx1ZTogJzMnLFxuICogICBzdXJnZTogbnVsbCxcbiAqICAgaXNUcmlwOiAnZmFsc2UnLFxuICogICB6ZXJvT25lczogJzEnXG4gKiB9LCB7XG4gKiAgIHRpbWU6IG51bGwsXG4gKiAgIHZhbHVlOiAnMicsXG4gKiAgIHN1cmdlOiAnMS4zJyxcbiAqICAgaXNUcmlwOiBudWxsLFxuICogICB6ZXJvT25lczogJzEnXG4gKiB9XTtcbiAqXG4gKiBjb25zdCBmaWVsZE9yZGVyID0gWyd0aW1lJywgJ3ZhbHVlJywgJ3N1cmdlJywgJ2lzVHJpcCcsICd6ZXJvT25lcyddO1xuICogY29uc3QgZmllbGRzID0gZ2V0RmllbGRzRnJvbURhdGEoZGF0YSwgZmllbGRPcmRlcik7XG4gKiAvLyBmaWVsZHMgPSBbXG4gKiAvLyB7bmFtZTogJ3RpbWUnLCBmb3JtYXQ6ICdZWVlZLU0tRCBIOm06cycsIGZpZWxkSWR4OiAxLCB0eXBlOiAndGltZXN0YW1wJ30sXG4gKiAvLyB7bmFtZTogJ3ZhbHVlJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDQsIHR5cGU6ICdpbnRlZ2VyJ30sXG4gKiAvLyB7bmFtZTogJ3N1cmdlJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDUsIHR5cGU6ICdyZWFsJ30sXG4gKiAvLyB7bmFtZTogJ2lzVHJpcCcsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA2LCB0eXBlOiAnYm9vbGVhbid9LFxuICogLy8ge25hbWU6ICd6ZXJvT25lcycsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA3LCB0eXBlOiAnaW50ZWdlcid9XTtcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZHNGcm9tRGF0YShkYXRhOiBSb3dEYXRhLCBmaWVsZE9yZGVyOiBzdHJpbmdbXSk6IEZpZWxkW10ge1xuICAvLyBhZGQgYSBjaGVjayBmb3IgZXBvY2ggdGltZXN0YW1wXG4gIGNvbnN0IG1ldGFkYXRhID0gQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGEoXG4gICAgZGF0YSxcbiAgICBbXG4gICAgICB7cmVnZXg6IC8uKmdlb2pzb258YWxsX3BvaW50cy9nLCBkYXRhVHlwZTogJ0dFT01FVFJZJ30sXG4gICAgICB7cmVnZXg6IC8uKmNlbnN1cy9nLCBkYXRhVHlwZTogJ1NUUklORyd9XG4gICAgXSxcbiAgICB7aWdub3JlZERhdGFUeXBlczogSUdOT1JFX0RBVEFfVFlQRVN9XG4gICk7XG5cbiAgY29uc3Qge2ZpZWxkQnlJbmRleH0gPSByZW5hbWVEdXBsaWNhdGVGaWVsZHMoZmllbGRPcmRlcik7XG5cbiAgY29uc3QgcmVzdWx0ID0gZmllbGRPcmRlci5tYXAoKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBmaWVsZEJ5SW5kZXhbaW5kZXhdO1xuXG4gICAgY29uc3QgZmllbGRNZXRhID0gbWV0YWRhdGEuZmluZChtID0+IG0ua2V5ID09PSBmaWVsZCk7XG5cbiAgICAvLyBmaWVsZE1ldGEgY291bGQgYmUgdW5kZWZpbmVkIGlmIHRoZSBmaWVsZCBoYXMgbm8gZGF0YSBhbmQgQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGFcbiAgICAvLyB3aWxsIGlnbm9yZSB0aGUgZmllbGQuIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBzaW1wbHkgYXNzaWduIHRoZSBmaWVsZCB0eXBlIHRvIFNUUklOR1xuICAgIC8vIHNpbmNlIGRyb3BwaW5nIHRoZSBjb2x1bW4gaW4gdGhlIFJvd0RhdGEgY291bGQgYmUgZXhwZW5zaXZlXG4gICAgbGV0IHR5cGUgPSBmaWVsZE1ldGE/LnR5cGUgfHwgJ1NUUklORyc7XG4gICAgY29uc3QgZm9ybWF0ID0gZmllbGRNZXRhPy5mb3JtYXQgfHwgJyc7XG5cbiAgICAvLyBxdWljayBjaGVjayBpZiBmaXJzdCB2YWxpZCBzdHJpbmcgaW4gY29sdW1uIGlzIEgzXG4gICAgaWYgKHR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChkYXRhW2ldW25hbWVdKSkge1xuICAgICAgICAgIHR5cGUgPSBoM0lzVmFsaWQoZGF0YVtpXVtuYW1lXSB8fCAnJykgPyBIM19BTkFMWVpFUl9UWVBFIDogdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHF1aWNrIGNoZWNrIGlmIHN0cmluZyBpcyBoZXggd2tiXG4gICAgaWYgKHR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcpIHtcbiAgICAgIHR5cGUgPSBkYXRhLnNvbWUoZCA9PiBpc0hleFdrYihkW25hbWVdKSkgPyBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUlkgOiB0eXBlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgaWQ6IG5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgIGZvcm1hdCxcbiAgICAgIGZpZWxkSWR4OiBpbmRleCxcbiAgICAgIHR5cGU6IGFuYWx5emVyVHlwZVRvRmllbGRUeXBlKHR5cGUpLFxuICAgICAgYW5hbHl6ZXJUeXBlOiB0eXBlLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogZGMgPT4gZCA9PiB7XG4gICAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQuaW5kZXgsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHBhc3MgaW4gYW4gYXJyYXkgb2YgZmllbGQgbmFtZXMsIHJlbmFtZSBkdXBsaWNhdGVkIG9uZVxuICogYW5kIHJldHVybiBhIG1hcCBmcm9tIG9sZCBmaWVsZCBpbmRleCB0byBuZXcgbmFtZVxuICpcbiAqIEBwYXJhbSBmaWVsZE9yZGVyXG4gKiBAcmV0dXJucyBuZXcgZmllbGQgbmFtZSBieSBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRHVwbGljYXRlRmllbGRzKGZpZWxkT3JkZXI6IHN0cmluZ1tdKToge1xuICBhbGxOYW1lczogc3RyaW5nW107XG4gIGZpZWxkQnlJbmRleDogc3RyaW5nW107XG59IHtcbiAgcmV0dXJuIGZpZWxkT3JkZXIucmVkdWNlPHthbGxOYW1lczogc3RyaW5nW107IGZpZWxkQnlJbmRleDogc3RyaW5nW119PihcbiAgICAoYWNjdSwgZmllbGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHthbGxOYW1lc30gPSBhY2N1O1xuICAgICAgbGV0IGZpZWxkTmFtZSA9IGZpZWxkO1xuXG4gICAgICAvLyBhZGQgYSBjb3VudGVyIHRvIGR1cGxpY2F0ZWQgbmFtZXNcbiAgICAgIGlmIChhbGxOYW1lcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICB3aGlsZSAoYWxsTmFtZXMuaW5jbHVkZXMoYCR7ZmllbGR9LSR7Y291bnRlcn1gKSkge1xuICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZE5hbWUgPSBgJHtmaWVsZH0tJHtjb3VudGVyfWA7XG4gICAgICB9XG5cbiAgICAgIGFjY3UuZmllbGRCeUluZGV4W2ldID0gZmllbGROYW1lO1xuICAgICAgYWNjdS5hbGxOYW1lcy5wdXNoKGZpZWxkTmFtZSk7XG5cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sXG4gICAge2FsbE5hbWVzOiBbXSwgZmllbGRCeUluZGV4OiBbXX1cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFUQTtBQUNBOztBQVVBLElBQU1NLGdCQUFnQixHQUFHLElBQUk7QUFFdEIsSUFBTUMsdUJBQXVCLEdBQUFDLE9BQUEsQ0FBQUQsdUJBQUEsR0FBRyxDQUNyQ0Usd0JBQWtCLENBQUNDLElBQUksRUFDdkJELHdCQUFrQixDQUFDRSxJQUFJLEVBQ3ZCRix3QkFBa0IsQ0FBQ0csUUFBUSxFQUMzQkgsd0JBQWtCLENBQUNJLE1BQU0sRUFDekJKLHdCQUFrQixDQUFDSyxHQUFHLEVBQ3RCTCx3QkFBa0IsQ0FBQ00sS0FBSyxFQUN4Qk4s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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/common-utils",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl common utils",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/constants": "3.1.0",
34
- "@kepler.gl/types": "3.1.0",
33
+ "@kepler.gl/constants": "3.1.1",
34
+ "@kepler.gl/types": "3.1.1",
35
35
  "d3-array": "^2.8.0",
36
36
  "global": "^4.3.0",
37
37
  "h3-js": "^3.1.0",