@kepler.gl/duckdb 3.3.0-alpha.0 → 3.3.0-alpha.10

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 (40) hide show
  1. package/dist/cjs/adapters/duckdb-wasm-adapter.js +258 -0
  2. package/dist/{components → cjs/components}/index.js +1 -1
  3. package/dist/cjs/components/monaco-editor.js +174 -0
  4. package/dist/cjs/components/preview-data-panel.js +127 -0
  5. package/dist/cjs/components/schema-panel.js +170 -0
  6. package/dist/cjs/components/sql-panel.js +395 -0
  7. package/dist/cjs/components/tree.js +90 -0
  8. package/dist/{index.js → cjs/index.js} +1 -1
  9. package/dist/{plugin.js → cjs/plugin.js} +2 -2
  10. package/dist/cjs/processors/data-processor.js +353 -0
  11. package/dist/cjs/table/duckdb-table-utils.js +670 -0
  12. package/dist/cjs/table/duckdb-table.js +482 -0
  13. package/dist/{table → cjs/table}/index.js +1 -1
  14. package/dist/cjs/utils/perf.js +46 -0
  15. package/dist/esm/adapters/duckdb-wasm-adapter.js +251 -0
  16. package/dist/esm/components/index.js +9 -0
  17. package/dist/esm/components/monaco-editor.js +167 -0
  18. package/dist/esm/components/preview-data-panel.js +120 -0
  19. package/dist/esm/components/schema-panel.js +164 -0
  20. package/dist/esm/components/sql-panel.js +388 -0
  21. package/dist/esm/components/tree.js +82 -0
  22. package/dist/esm/index.js +9 -0
  23. package/dist/esm/plugin.js +22 -0
  24. package/dist/esm/processors/data-processor.js +342 -0
  25. package/dist/esm/table/duckdb-table-utils.js +645 -0
  26. package/dist/esm/table/duckdb-table.js +477 -0
  27. package/dist/esm/table/index.js +5 -0
  28. package/dist/esm/utils/perf.js +40 -0
  29. package/dist/table/duckdb-table-utils.d.ts +7 -0
  30. package/package.json +28 -24
  31. package/dist/adapters/duckdb-wasm-adapter.js +0 -259
  32. package/dist/components/monaco-editor.js +0 -175
  33. package/dist/components/preview-data-panel.js +0 -128
  34. package/dist/components/schema-panel.js +0 -171
  35. package/dist/components/sql-panel.js +0 -396
  36. package/dist/components/tree.js +0 -91
  37. package/dist/processors/data-processor.js +0 -353
  38. package/dist/table/duckdb-table-utils.js +0 -669
  39. package/dist/table/duckdb-table.js +0 -480
  40. package/dist/utils/perf.js +0 -46
@@ -0,0 +1,388 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
5
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject0, _templateObject1, _templateObject10;
6
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
8
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
10
+ // SPDX-License-Identifier: MIT
11
+ // Copyright contributors to the kepler.gl project
12
+
13
+ import React, { useCallback, useState, useEffect, useRef } from 'react';
14
+ import { useDispatch } from 'react-redux';
15
+ import styled from 'styled-components';
16
+ import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels';
17
+ import { addDataToMap } from '@kepler.gl/actions';
18
+ import { generateHashId } from '@kepler.gl/common-utils';
19
+ import { Button, FileDrop, IconButton, Icons, LoadingSpinner, Tooltip } from '@kepler.gl/components';
20
+ import { arrowSchemaToFields } from '@kepler.gl/processors';
21
+ import { sidePanelBg, panelBorderColor } from '@kepler.gl/styles';
22
+ import { isAppleDevice, getApplicationConfig } from '@kepler.gl/utils';
23
+ import MonacoEditor from './monaco-editor';
24
+ import { SchemaPanel } from './schema-panel';
25
+ import { PreviewDataPanel } from './preview-data-panel';
26
+ import { castDuckDBTypesForKepler, getDuckDBColumnTypes, getDuckDBColumnTypesMap, setGeoArrowWKBExtension, splitSqlStatements, checkIsSelectQuery, removeSQLComments, tableFromFile, SUPPORTED_DUCKDB_DROP_EXTENSIONS } from '../table/duckdb-table-utils';
27
+ var StyledSqlPanel = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n height: 100%;\n background-color: ", ";\n border-left: 1px solid #333;\n"])), sidePanelBg);
28
+ var StyledSqlActions = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex: 0 0 50px;\n display: flex;\n padding-top: 12px;\n align-items: center;\n flex-direction: column;\n justify-content: flex-start;\n border-bottom: 1px solid #333;\n"])));
29
+ var StyledSqlEditor = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n flex: 1;\n min-width: 0; // Prevents flex child from overflowing\n height: 100%;\n"])));
30
+ var StyledEditorPanel = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n background-color: ", ";\n display: flex;\n height: 100%;\n flex-direction: row;\n gap: 5px;\n flex-grow: 1;\n"])), sidePanelBg);
31
+ var StyledDataPanel = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n"])));
32
+ var StyledEditor = styled.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: flex;\n padding: 12px 12px 12px 0;\n background-color: rgb(30, 30, 30);\n opacity: ", ";\n width: 100%;\n height: 100%;\n min-height: 0; // Prevents flex child from overflowing\n"])), function (props) {
33
+ return props.isRunning ? 0.5 : 1;
34
+ });
35
+ var StyledResultActions = styled.div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n background-color: white;\n padding: 2px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n"])));
36
+ var StyledResizeHandle = styled(PanelResizeHandle)(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n background-color: ", ";\n width: 4px;\n cursor: col-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), panelBorderColor);
37
+ var StyledVerticalResizeHandle = styled(PanelResizeHandle)(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n background-color: ", ";\n height: 4px;\n cursor: row-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), panelBorderColor);
38
+ var StyledLoadingContainer = styled.div(_templateObject0 || (_templateObject0 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n"])));
39
+ var StyledErrorContainer = styled.pre(_templateObject1 || (_templateObject1 = _taggedTemplateLiteral(["\n padding: 12px;\n color: red;\n font-size: 12px;\n background-color: ", ";\n height: 100%;\n overflow: auto;\n"])), sidePanelBg);
40
+ var StyledFileDropArea = styled(FileDrop)(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n height: 100%;\n border-width: 1px;\n border: 1px ", "\n ", ";\n .file-drop-target {\n height: 100%;\n }\n"])), function (props) {
41
+ return props.dragOver ? 'solid' : 'dashed';
42
+ }, function (props) {
43
+ return props.dragOver ? props.theme.subtextColorLT : 'transparent';
44
+ });
45
+ var SCHEMA_PANEL_STYLE = {
46
+ overflow: 'auto'
47
+ };
48
+ export var SqlPanel = function SqlPanel(_ref) {
49
+ var _ref$initialSql = _ref.initialSql,
50
+ initialSql = _ref$initialSql === void 0 ? '' : _ref$initialSql;
51
+ var _useState = useState(function () {
52
+ var params = new URLSearchParams(window.location.search);
53
+ return params.get('sql') || initialSql;
54
+ }),
55
+ _useState2 = _slicedToArray(_useState, 2),
56
+ sql = _useState2[0],
57
+ setSql = _useState2[1];
58
+ var _useState3 = useState(null),
59
+ _useState4 = _slicedToArray(_useState3, 2),
60
+ droppedFile = _useState4[0],
61
+ setDroppedFile = _useState4[1];
62
+ var _useState5 = useState(false),
63
+ _useState6 = _slicedToArray(_useState5, 2),
64
+ dragState = _useState6[0],
65
+ setDragState = _useState6[1];
66
+ var _useState7 = useState(null),
67
+ _useState8 = _slicedToArray(_useState7, 2),
68
+ result = _useState8[0],
69
+ setResult = _useState8[1];
70
+ var _useState9 = useState(0),
71
+ _useState0 = _slicedToArray(_useState9, 2),
72
+ schemaUpdateTrigger = _useState0[0],
73
+ setSchemaUpdateTrigger = _useState0[1];
74
+ var _useState1 = useState(null),
75
+ _useState10 = _slicedToArray(_useState1, 2),
76
+ error = _useState10[0],
77
+ setError = _useState10[1];
78
+ var _useState11 = useState(0),
79
+ _useState12 = _slicedToArray(_useState11, 2),
80
+ counter = _useState12[0],
81
+ setCounter = _useState12[1];
82
+ var _useState13 = useState([]),
83
+ _useState14 = _slicedToArray(_useState13, 2),
84
+ tableSchema = _useState14[0],
85
+ setTableSchema = _useState14[1];
86
+ var _useState15 = useState(false),
87
+ _useState16 = _slicedToArray(_useState15, 2),
88
+ isRunning = _useState16[0],
89
+ setIsRunning = _useState16[1];
90
+ var _useState17 = useState(function () {
91
+ return isAppleDevice();
92
+ }),
93
+ _useState18 = _slicedToArray(_useState17, 1),
94
+ isMac = _useState18[0];
95
+ var dispatch = useDispatch();
96
+ var droppedFileAreaRef = useRef(null);
97
+ useEffect(function () {
98
+ var currentUrl = new URL(window.location.href);
99
+ if (sql) {
100
+ currentUrl.searchParams.set('sql', sql);
101
+ } else {
102
+ currentUrl.searchParams["delete"]('sql');
103
+ }
104
+ window.history.replaceState({}, '', currentUrl.toString());
105
+ }, [sql]);
106
+ var runQuery = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
107
+ var adjustedQuery, db, connection, tempTableName, sqlStatements, arrowResult, tableDuckDBTypes, _iterator, _step, statement, isLastQuery, duckDbColumns, _adjustedQuery;
108
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
109
+ while (1) switch (_context.prev = _context.next) {
110
+ case 0:
111
+ setIsRunning(true);
112
+ _context.prev = 1;
113
+ adjustedQuery = sql ? removeSQLComments(sql) : null;
114
+ if (adjustedQuery) {
115
+ _context.next = 6;
116
+ break;
117
+ }
118
+ setError(new Error('Query is empty'));
119
+ return _context.abrupt("return");
120
+ case 6:
121
+ db = getApplicationConfig().database;
122
+ if (db) {
123
+ _context.next = 10;
124
+ break;
125
+ }
126
+ setError(new Error('The database is not configured properly.'));
127
+ return _context.abrupt("return");
128
+ case 10:
129
+ _context.next = 12;
130
+ return db.connect();
131
+ case 12:
132
+ connection = _context.sent;
133
+ // TODO find a cheap way to get DuckDb types with a single query to a remote resource - temp table? cte?
134
+ tempTableName = 'temp_keplergl_table'; // remove comments
135
+ sqlStatements = splitSqlStatements(adjustedQuery);
136
+ arrowResult = null;
137
+ tableDuckDBTypes = {};
138
+ _iterator = _createForOfIteratorHelper(sqlStatements);
139
+ _context.prev = 18;
140
+ _iterator.s();
141
+ case 20:
142
+ if ((_step = _iterator.n()).done) {
143
+ _context.next = 48;
144
+ break;
145
+ }
146
+ statement = _step.value;
147
+ isLastQuery = statement === sqlStatements[sqlStatements.length - 1];
148
+ _context.t0 = isLastQuery;
149
+ if (!_context.t0) {
150
+ _context.next = 28;
151
+ break;
152
+ }
153
+ _context.next = 27;
154
+ return checkIsSelectQuery(connection, statement);
155
+ case 27:
156
+ _context.t0 = _context.sent;
157
+ case 28:
158
+ if (!_context.t0) {
159
+ _context.next = 44;
160
+ break;
161
+ }
162
+ _context.next = 31;
163
+ return connection.query("CREATE OR REPLACE TABLE '".concat(tempTableName, "' AS ").concat(statement));
164
+ case 31:
165
+ _context.next = 33;
166
+ return getDuckDBColumnTypes(connection, tempTableName);
167
+ case 33:
168
+ duckDbColumns = _context.sent;
169
+ tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);
170
+
171
+ // 3) cast GEOMETRY columns to WKB and BigInt to double.
172
+ _adjustedQuery = castDuckDBTypesForKepler(tempTableName, duckDbColumns);
173
+ _context.next = 38;
174
+ return connection.query(_adjustedQuery);
175
+ case 38:
176
+ arrowResult = _context.sent;
177
+ // 4) set geoarrow extension for the arrow table as DuckDB doesn't support the geoarrow extension.
178
+ setGeoArrowWKBExtension(arrowResult, duckDbColumns);
179
+
180
+ // 5) remove temp table
181
+ _context.next = 42;
182
+ return connection.query("DROP TABLE ".concat(tempTableName, ";"));
183
+ case 42:
184
+ _context.next = 46;
185
+ break;
186
+ case 44:
187
+ _context.next = 46;
188
+ return connection.query(statement);
189
+ case 46:
190
+ _context.next = 20;
191
+ break;
192
+ case 48:
193
+ _context.next = 53;
194
+ break;
195
+ case 50:
196
+ _context.prev = 50;
197
+ _context.t1 = _context["catch"](18);
198
+ _iterator.e(_context.t1);
199
+ case 53:
200
+ _context.prev = 53;
201
+ _iterator.f();
202
+ return _context.finish(53);
203
+ case 56:
204
+ // Show preview only for the result of the last query
205
+ if (arrowResult) {
206
+ setResult({
207
+ table: arrowResult,
208
+ tableDuckDBTypes: tableDuckDBTypes
209
+ });
210
+ setError(null);
211
+ }
212
+ _context.next = 59;
213
+ return connection.close();
214
+ case 59:
215
+ _context.next = 64;
216
+ break;
217
+ case 61:
218
+ _context.prev = 61;
219
+ _context.t2 = _context["catch"](1);
220
+ setError(_context.t2);
221
+ case 64:
222
+ _context.prev = 64;
223
+ setIsRunning(false);
224
+ return _context.finish(64);
225
+ case 67:
226
+ // Indicate that there may be a possible change in DuckDB.
227
+ setSchemaUpdateTrigger(Date.now());
228
+ case 68:
229
+ case "end":
230
+ return _context.stop();
231
+ }
232
+ }, _callee, null, [[1, 61, 64, 67], [18, 50, 53, 56]]);
233
+ })), [sql]);
234
+ var onChange = useCallback(function (value) {
235
+ setSql(value);
236
+ }, [setSql]);
237
+ var onAddResultToMap = useCallback(function () {
238
+ if (!result) return;
239
+ var keplerFields = arrowSchemaToFields(result.table, result.tableDuckDBTypes);
240
+ var datasetToAdd = {
241
+ data: {
242
+ fields: keplerFields,
243
+ // TODO type AddDataToMapPayload -> rows -> + arrow.Table
244
+ rows: result.table
245
+ },
246
+ info: {
247
+ id: generateHashId(),
248
+ label: "query_result".concat(counter > 0 ? "_".concat(counter) : ''),
249
+ format: 'arrow'
250
+ }
251
+ };
252
+ dispatch(addDataToMap({
253
+ datasets: [datasetToAdd]
254
+ }));
255
+ setCounter(counter + 1);
256
+ }, [result, counter, dispatch]);
257
+ var isValidFileType = useCallback(function (filename) {
258
+ var fileExt = SUPPORTED_DUCKDB_DROP_EXTENSIONS.find(function (ext) {
259
+ return filename.endsWith(ext);
260
+ });
261
+ return Boolean(fileExt);
262
+ }, []);
263
+ var createTableFromDroppedFile = useCallback(/*#__PURE__*/function () {
264
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(droppedFile) {
265
+ var _error;
266
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
267
+ while (1) switch (_context2.prev = _context2.next) {
268
+ case 0:
269
+ if (!droppedFile) {
270
+ _context2.next = 5;
271
+ break;
272
+ }
273
+ _context2.next = 3;
274
+ return tableFromFile(droppedFile);
275
+ case 3:
276
+ _error = _context2.sent;
277
+ if (_error) {
278
+ setError(_error);
279
+ } else {
280
+ setError(null);
281
+ }
282
+ case 5:
283
+ setDroppedFile(null);
284
+ setDragState(false);
285
+ case 7:
286
+ case "end":
287
+ return _context2.stop();
288
+ }
289
+ }, _callee2);
290
+ }));
291
+ return function (_x) {
292
+ return _ref3.apply(this, arguments);
293
+ };
294
+ }(), []);
295
+ useEffect(function () {
296
+ createTableFromDroppedFile(droppedFile);
297
+ }, [droppedFile, createTableFromDroppedFile]);
298
+ var handleFileInput = useCallback(function (fileList, event) {
299
+ if (event) {
300
+ event.preventDefault();
301
+ event.stopPropagation();
302
+ }
303
+ var files = _toConsumableArray(fileList).filter(Boolean);
304
+ var disableExtensionFilter = false;
305
+ var filesToLoad = [];
306
+ var errorFiles = [];
307
+ var _iterator2 = _createForOfIteratorHelper(files),
308
+ _step2;
309
+ try {
310
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
311
+ var file = _step2.value;
312
+ if (disableExtensionFilter || isValidFileType(file.name)) {
313
+ filesToLoad.push(file);
314
+ } else {
315
+ errorFiles.push(file.name);
316
+ }
317
+ }
318
+ } catch (err) {
319
+ _iterator2.e(err);
320
+ } finally {
321
+ _iterator2.f();
322
+ }
323
+ if (filesToLoad.length > 0) {
324
+ setDroppedFile(filesToLoad[0]);
325
+ } else if (errorFiles.length > 0) {
326
+ setError(new Error("Unsupported file formats: ".concat(errorFiles.join(', '))));
327
+ }
328
+ }, [isValidFileType]);
329
+ return /*#__PURE__*/React.createElement(StyledSqlPanel, null, /*#__PURE__*/React.createElement(PanelGroup, {
330
+ direction: "horizontal"
331
+ }, /*#__PURE__*/React.createElement(Panel, {
332
+ defaultSize: 20,
333
+ minSize: 15,
334
+ style: SCHEMA_PANEL_STYLE,
335
+ className: "schema-panel"
336
+ }, /*#__PURE__*/React.createElement(StyledFileDropArea, {
337
+ dragOver: dragState,
338
+ onDragOver: function onDragOver() {
339
+ return setDragState(true);
340
+ },
341
+ onDragLeave: function onDragLeave() {
342
+ return setDragState(false);
343
+ },
344
+ frame: droppedFileAreaRef.current || document,
345
+ onDrop: handleFileInput,
346
+ className: "file-uploader__file-drop"
347
+ }, /*#__PURE__*/React.createElement(SchemaPanel, {
348
+ setTableSchema: setTableSchema,
349
+ droppedFile: droppedFile,
350
+ schemaUpdateTrigger: schemaUpdateTrigger
351
+ }))), /*#__PURE__*/React.createElement(StyledResizeHandle, null), /*#__PURE__*/React.createElement(Panel, {
352
+ minSize: 40
353
+ }, /*#__PURE__*/React.createElement(StyledSqlEditor, null, /*#__PURE__*/React.createElement(PanelGroup, {
354
+ direction: "vertical"
355
+ }, /*#__PURE__*/React.createElement(Panel, {
356
+ defaultSize: 30,
357
+ className: "editor-panel"
358
+ }, /*#__PURE__*/React.createElement(StyledEditorPanel, null, /*#__PURE__*/React.createElement(StyledSqlActions, null, /*#__PURE__*/React.createElement(IconButton, {
359
+ "data-tip": true,
360
+ "data-for": "run-query-tooltip",
361
+ onClick: runQuery,
362
+ disabled: isRunning || !sql
363
+ }, /*#__PURE__*/React.createElement(Icons.Play, {
364
+ height: "18px"
365
+ }), /*#__PURE__*/React.createElement(Tooltip, {
366
+ id: "run-query-tooltip",
367
+ place: "top",
368
+ effect: "solid"
369
+ }, "Run Query (", isMac ? '⌘Enter' : 'Ctrl+Enter', " or Shift+Enter)"))), /*#__PURE__*/React.createElement(StyledEditor, {
370
+ isRunning: isRunning
371
+ }, /*#__PURE__*/React.createElement(MonacoEditor, {
372
+ isReadOnly: isRunning,
373
+ onRunQuery: runQuery,
374
+ onChange: onChange,
375
+ tableSchema: tableSchema,
376
+ code: sql
377
+ })))), /*#__PURE__*/React.createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/React.createElement(Panel, {
378
+ className: "preview-panel"
379
+ }, isRunning ? /*#__PURE__*/React.createElement(StyledLoadingContainer, null, /*#__PURE__*/React.createElement(LoadingSpinner, null)) : error ? /*#__PURE__*/React.createElement(StyledErrorContainer, null, /*#__PURE__*/React.createElement("div", null, error.message)) : result ? /*#__PURE__*/React.createElement(StyledDataPanel, null, /*#__PURE__*/React.createElement(StyledResultActions, null, /*#__PURE__*/React.createElement(Button, {
380
+ secondary: true,
381
+ onClick: onAddResultToMap
382
+ }, "Add to Map"), /*#__PURE__*/React.createElement("div", null, result.table.numRows, " rows")), /*#__PURE__*/React.createElement(PreviewDataPanel, {
383
+ result: result,
384
+ dataTableStyle: {},
385
+ onAddResultToMap: onAddResultToMap
386
+ })) : null))))));
387
+ };
388
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VEaXNwYXRjaCIsInN0eWxlZCIsIlBhbmVsIiwiUGFuZWxHcm91cCIsIlBhbmVsUmVzaXplSGFuZGxlIiwiYWRkRGF0YVRvTWFwIiwiZ2VuZXJhdGVIYXNoSWQiLCJCdXR0b24iLCJGaWxlRHJvcCIsIkljb25CdXR0b24iLCJJY29ucyIsIkxvYWRpbmdTcGlubmVyIiwiVG9vbHRpcCIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJzaWRlUGFuZWxCZyIsInBhbmVsQm9yZGVyQ29sb3IiLCJpc0FwcGxlRGV2aWNlIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJNb25hY29FZGl0b3IiLCJTY2hlbWFQYW5lbCIsIlByZXZpZXdEYXRhUGFuZWwiLCJjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIiLCJnZXREdWNrREJDb2x1bW5UeXBlcyIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJzcGxpdFNxbFN0YXRlbWVudHMiLCJjaGVja0lzU2VsZWN0UXVlcnkiLCJyZW1vdmVTUUxDb21tZW50cyIsInRhYmxlRnJvbUZpbGUiLCJTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUyIsIlN0eWxlZFNxbFBhbmVsIiwiZGl2IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsIlN0eWxlZFNxbEFjdGlvbnMiLCJfdGVtcGxhdGVPYmplY3QyIiwiU3R5bGVkU3FsRWRpdG9yIiwiX3RlbXBsYXRlT2JqZWN0MyIsIlN0eWxlZEVkaXRvclBhbmVsIiwiX3RlbXBsYXRlT2JqZWN0NCIsIlN0eWxlZERhdGFQYW5lbCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJTdHlsZWRFZGl0b3IiLCJfdGVtcGxhdGVPYmplY3Q2IiwicHJvcHMiLCJpc1J1bm5pbmciLCJTdHlsZWRSZXN1bHRBY3Rpb25zIiwiX3RlbXBsYXRlT2JqZWN0NyIsIlN0eWxlZFJlc2l6ZUhhbmRsZSIsIl90ZW1wbGF0ZU9iamVjdDgiLCJTdHlsZWRWZXJ0aWNhbFJlc2l6ZUhhbmRsZSIsIl90ZW1wbGF0ZU9iamVjdDkiLCJTdHlsZWRMb2FkaW5nQ29udGFpbmVyIiwiX3RlbXBsYXRlT2JqZWN0MCIsIlN0eWxlZEVycm9yQ29udGFpbmVyIiwicHJlIiwiX3RlbXBsYXRlT2JqZWN0MSIsIlN0eWxlZEZpbGVEcm9wQXJlYSIsIl90ZW1wbGF0ZU9iamVjdDEwIiwiZHJhZ092ZXIiLCJ0aGVtZSIsInN1YnRleHRDb2xvckxUIiwiU0NIRU1BX1BBTkVMX1NUWUxFIiwib3ZlcmZsb3ciLCJTcWxQYW5lbCIsIl9yZWYiLCJfcmVmJGluaXRpYWxTcWwiLCJpbml0aWFsU3FsIiwiX3VzZVN0YXRlIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzcWwiLCJzZXRTcWwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRyb3BwZWRGaWxlIiwic2V0RHJvcHBlZEZpbGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImRyYWdTdGF0ZSIsInNldERyYWdTdGF0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzY2hlbWFVcGRhdGVUcmlnZ2VyIiwic2V0U2NoZW1hVXBkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiY291bnRlciIsInNldENvdW50ZXIiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwidGFibGVTY2hlbWEiLCJzZXRUYWJsZVNjaGVtYSIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzZXRJc1J1bm5pbmciLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwiaXNNYWMiLCJkaXNwYXRjaCIsImRyb3BwZWRGaWxlQXJlYVJlZiIsImN1cnJlbnRVcmwiLCJVUkwiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwic2V0IiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsInRvU3RyaW5nIiwicnVuUXVlcnkiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImFkanVzdGVkUXVlcnkiLCJkYiIsImNvbm5lY3Rpb24iLCJ0ZW1wVGFibGVOYW1lIiwic3FsU3RhdGVtZW50cyIsImFycm93UmVzdWx0IiwidGFibGVEdWNrREJUeXBlcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwic3RhdGVtZW50IiwiaXNMYXN0UXVlcnkiLCJkdWNrRGJDb2x1bW5zIiwiX2FkanVzdGVkUXVlcnkiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRXJyb3IiLCJhYnJ1cHQiLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzZW50IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImxlbmd0aCIsInQwIiwicXVlcnkiLCJjb25jYXQiLCJ0MSIsImUiLCJmIiwiZmluaXNoIiwidGFibGUiLCJjbG9zZSIsInQyIiwiRGF0ZSIsIm5vdyIsInN0b3AiLCJvbkNoYW5nZSIsIm9uQWRkUmVzdWx0VG9NYXAiLCJrZXBsZXJGaWVsZHMiLCJkYXRhc2V0VG9BZGQiLCJkYXRhIiwiZmllbGRzIiwicm93cyIsImluZm8iLCJpZCIsImxhYmVsIiwiZm9ybWF0IiwiZGF0YXNldHMiLCJpc1ZhbGlkRmlsZVR5cGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJmaW5kIiwiZXh0IiwiZW5kc1dpdGgiLCJCb29sZWFuIiwiY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGUiLCJfcmVmMyIsIl9jYWxsZWUyIiwiX2Vycm9yIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUZpbGVJbnB1dCIsImZpbGVMaXN0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImZpbGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZmlsdGVyIiwiZGlzYWJsZUV4dGVuc2lvbkZpbHRlciIsImZpbGVzVG9Mb2FkIiwiZXJyb3JGaWxlcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJmaWxlIiwibmFtZSIsInB1c2giLCJlcnIiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsImRpcmVjdGlvbiIsImRlZmF1bHRTaXplIiwibWluU2l6ZSIsInN0eWxlIiwiY2xhc3NOYW1lIiwib25EcmFnT3ZlciIsIm9uRHJhZ0xlYXZlIiwiZnJhbWUiLCJjdXJyZW50IiwiZG9jdW1lbnQiLCJvbkRyb3AiLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJQbGF5IiwiaGVpZ2h0IiwicGxhY2UiLCJlZmZlY3QiLCJpc1JlYWRPbmx5Iiwib25SdW5RdWVyeSIsImNvZGUiLCJtZXNzYWdlIiwic2Vjb25kYXJ5IiwibnVtUm93cyIsImRhdGFUYWJsZVN0eWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3FsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1BhbmVsLCBQYW5lbEdyb3VwLCBQYW5lbFJlc2l6ZUhhbmRsZX0gZnJvbSAncmVhY3QtcmVzaXphYmxlLXBhbmVscyc7XG5cbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtCdXR0b24sIEZpbGVEcm9wLCBJY29uQnV0dG9uLCBJY29ucywgTG9hZGluZ1NwaW5uZXIsIFRvb2x0aXB9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge2Fycm93U2NoZW1hVG9GaWVsZHN9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge3NpZGVQYW5lbEJnLCBwYW5lbEJvcmRlckNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge2lzQXBwbGVEZXZpY2UsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbCwgU2NoZW1hU3VnZ2VzdGlvbn0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsLCBRdWVyeVJlc3VsdH0gZnJvbSAnLi9wcmV2aWV3LWRhdGEtcGFuZWwnO1xuXG5pbXBvcnQge1xuICBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzLFxuICBnZXREdWNrREJDb2x1bW5UeXBlc01hcCxcbiAgc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24sXG4gIHNwbGl0U3FsU3RhdGVtZW50cyxcbiAgY2hlY2tJc1NlbGVjdFF1ZXJ5LFxuICByZW1vdmVTUUxDb21tZW50cyxcbiAgdGFibGVGcm9tRmlsZSxcbiAgU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuY29uc3QgU3R5bGVkU3FsUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMzMzM7XG5gO1xuXG5jb25zdCBTdHlsZWRTcWxBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgZmxleDogMCAwIDUwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzO1xuYDtcblxuY29uc3QgU3R5bGVkU3FsRWRpdG9yID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwOyAvLyBQcmV2ZW50cyBmbGV4IGNoaWxkIGZyb20gb3ZlcmZsb3dpbmdcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRWRpdG9yUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IDVweDtcbiAgZmxleC1ncm93OiAxO1xuYDtcblxuY29uc3QgU3R5bGVkRGF0YVBhbmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVkaXRvciA9IHN0eWxlZC5kaXY8e2lzUnVubmluZzogYm9vbGVhbn0+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzAsIDMwLCAzMCk7XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLmlzUnVubmluZyA/IDAuNSA6IDEpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMDsgLy8gUHJldmVudHMgZmxleCBjaGlsZCBmcm9tIG92ZXJmbG93aW5nXG5gO1xuXG5jb25zdCBTdHlsZWRSZXN1bHRBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDJweCAxMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbmA7XG5cbmNvbnN0IFN0eWxlZFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIHdpZHRoOiA0cHg7XG4gIGN1cnNvcjogY29sLXJlc2l6ZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIGhlaWdodDogNHB4O1xuICBjdXJzb3I6IHJvdy1yZXNpemU7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkTG9hZGluZ0NvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5wcmVgXG4gIHBhZGRpbmc6IDEycHg7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJhZ1BhbmVsUHJvcHMge1xuICBkcmFnT3Zlcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZEZpbGVEcm9wQXJlYSA9IHN0eWxlZChGaWxlRHJvcCk8U3R5bGVkRHJhZ1BhbmVsUHJvcHM+YFxuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXI6IDFweCAke3Byb3BzID0+IChwcm9wcy5kcmFnT3ZlciA/ICdzb2xpZCcgOiAnZGFzaGVkJyl9XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuZHJhZ092ZXIgPyBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JMVCA6ICd0cmFuc3BhcmVudCcpfTtcbiAgLmZpbGUtZHJvcC10YXJnZXQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuYDtcblxudHlwZSBTcWxQYW5lbFByb3BzID0ge1xuICBpbml0aWFsU3FsPzogc3RyaW5nO1xufTtcblxuY29uc3QgU0NIRU1BX1BBTkVMX1NUWUxFID0ge292ZXJmbG93OiAnYXV0byd9O1xuXG5leHBvcnQgY29uc3QgU3FsUGFuZWw6IFJlYWN0LkZDPFNxbFBhbmVsUHJvcHM+ID0gKHtpbml0aWFsU3FsID0gJyd9KSA9PiB7XG4gIGNvbnN0IFtzcWwsIHNldFNxbF0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gcGFyYW1zLmdldCgnc3FsJykgfHwgaW5pdGlhbFNxbDtcbiAgfSk7XG4gIGNvbnN0IFtkcm9wcGVkRmlsZSwgc2V0RHJvcHBlZEZpbGVdID0gdXNlU3RhdGU8RmlsZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZHJhZ1N0YXRlLCBzZXREcmFnU3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8bnVsbCB8IFF1ZXJ5UmVzdWx0PihudWxsKTtcbiAgY29uc3QgW3NjaGVtYVVwZGF0ZVRyaWdnZXIsIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXJdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RhYmxlU2NoZW1hLCBzZXRUYWJsZVNjaGVtYV0gPSB1c2VTdGF0ZTxTY2hlbWFTdWdnZXN0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lzUnVubmluZywgc2V0SXNSdW5uaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTWFjXSA9IHVzZVN0YXRlKCgpID0+IGlzQXBwbGVEZXZpY2UoKSk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBkcm9wcGVkRmlsZUFyZWFSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHNxbCkge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzcWwnLCBzcWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NxbCcpO1xuICAgIH1cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBjdXJyZW50VXJsLnRvU3RyaW5nKCkpO1xuICB9LCBbc3FsXSk7XG5cbiAgY29uc3QgcnVuUXVlcnkgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNSdW5uaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gc3FsID8gcmVtb3ZlU1FMQ29tbWVudHMoc3FsKSA6IG51bGw7XG4gICAgICBpZiAoIWFkanVzdGVkUXVlcnkpIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKCdRdWVyeSBpcyBlbXB0eScpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYiA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gICAgICBpZiAoIWRiKSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgICAgLy8gVE9ETyBmaW5kIGEgY2hlYXAgd2F5IHRvIGdldCBEdWNrRGIgdHlwZXMgd2l0aCBhIHNpbmdsZSBxdWVyeSB0byBhIHJlbW90ZSByZXNvdXJjZSAtIHRlbXAgdGFibGU/IGN0ZT9cbiAgICAgIGNvbnN0IHRlbXBUYWJsZU5hbWUgPSAndGVtcF9rZXBsZXJnbF90YWJsZSc7XG5cbiAgICAgIC8vIHJlbW92ZSBjb21tZW50c1xuICAgICAgY29uc3Qgc3FsU3RhdGVtZW50cyA9IHNwbGl0U3FsU3RhdGVtZW50cyhhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgbGV0IGFycm93UmVzdWx0OiBhcnJvdy5UYWJsZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IHRhYmxlRHVja0RCVHlwZXMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3FsU3RhdGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0xhc3RRdWVyeSA9IHN0YXRlbWVudCA9PT0gc3FsU3RhdGVtZW50c1tzcWxTdGF0ZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoaXNMYXN0UXVlcnkgJiYgKGF3YWl0IGNoZWNrSXNTZWxlY3RRdWVyeShjb25uZWN0aW9uLCBzdGF0ZW1lbnQpKSkge1xuICAgICAgICAgIC8vIDEpIGNyZWF0ZSB0ZW1wIHRhYmxlIGZyb20gdGhlIG9yaWdpbmFsIHF1ZXJ5LlxuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYENSRUFURSBPUiBSRVBMQUNFIFRBQkxFICcke3RlbXBUYWJsZU5hbWV9JyBBUyAke3N0YXRlbWVudH1gKTtcblxuICAgICAgICAgIC8vIDIpIHF1ZXJ5IGR1Y2tkYiB0eXBlcyBhbmQgZGV0ZWN0IGNhbmRpZGF0ZSBjb2x1bW5zIGZvciBTVF9hc1dLQiB0cmFuc2Zvcm0uXG4gICAgICAgICAgY29uc3QgZHVja0RiQ29sdW1ucyA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGNvbm5lY3Rpb24sIHRlbXBUYWJsZU5hbWUpO1xuICAgICAgICAgIHRhYmxlRHVja0RCVHlwZXMgPSBnZXREdWNrREJDb2x1bW5UeXBlc01hcChkdWNrRGJDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIDMpIGNhc3QgR0VPTUVUUlkgY29sdW1ucyB0byBXS0IgYW5kIEJpZ0ludCB0byBkb3VibGUuXG4gICAgICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IGNhc3REdWNrREJUeXBlc0ZvcktlcGxlcih0ZW1wVGFibGVOYW1lLCBkdWNrRGJDb2x1bW5zKTtcbiAgICAgICAgICBhcnJvd1Jlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgICAgICAvLyA0KSBzZXQgZ2VvYXJyb3cgZXh0ZW5zaW9uIGZvciB0aGUgYXJyb3cgdGFibGUgYXMgRHVja0RCIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZ2VvYXJyb3cgZXh0ZW5zaW9uLlxuICAgICAgICAgIHNldEdlb0Fycm93V0tCRXh0ZW5zaW9uKGFycm93UmVzdWx0LCBkdWNrRGJDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIDUpIHJlbW92ZSB0ZW1wIHRhYmxlXG4gICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgRFJPUCBUQUJMRSAke3RlbXBUYWJsZU5hbWV9O2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoc3RhdGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaG93IHByZXZpZXcgb25seSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBxdWVyeVxuICAgICAgaWYgKGFycm93UmVzdWx0KSB7XG4gICAgICAgIHNldFJlc3VsdCh7dGFibGU6IGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzfSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUnVubmluZyhmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGVyZSBtYXkgYmUgYSBwb3NzaWJsZSBjaGFuZ2UgaW4gRHVja0RCLlxuICAgIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXIoRGF0ZS5ub3coKSk7XG4gIH0sIFtzcWxdKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIHZhbHVlID0+IHtcbiAgICAgIHNldFNxbCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0U3FsXVxuICApO1xuXG4gIGNvbnN0IG9uQWRkUmVzdWx0VG9NYXAgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyZXN1bHQpIHJldHVybjtcblxuICAgIGNvbnN0IGtlcGxlckZpZWxkcyA9IGFycm93U2NoZW1hVG9GaWVsZHMocmVzdWx0LnRhYmxlLCByZXN1bHQudGFibGVEdWNrREJUeXBlcyk7XG5cbiAgICBjb25zdCBkYXRhc2V0VG9BZGQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZpZWxkczoga2VwbGVyRmllbGRzLFxuICAgICAgICAvLyBUT0RPIHR5cGUgQWRkRGF0YVRvTWFwUGF5bG9hZCAtPiByb3dzIC0+ICsgYXJyb3cuVGFibGVcbiAgICAgICAgcm93czogcmVzdWx0LnRhYmxlIGFzIGFueVxuICAgICAgfSxcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGdlbmVyYXRlSGFzaElkKCksXG4gICAgICAgIGxhYmVsOiBgcXVlcnlfcmVzdWx0JHtjb3VudGVyID4gMCA/IGBfJHtjb3VudGVyfWAgOiAnJ31gLFxuICAgICAgICBmb3JtYXQ6ICdhcnJvdydcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtkYXRhc2V0czogW2RhdGFzZXRUb0FkZF19KSk7XG4gICAgc2V0Q291bnRlcihjb3VudGVyICsgMSk7XG4gIH0sIFtyZXN1bHQsIGNvdW50ZXIsIGRpc3BhdGNoXSk7XG5cbiAgY29uc3QgaXNWYWxpZEZpbGVUeXBlID0gdXNlQ2FsbGJhY2soZmlsZW5hbWUgPT4ge1xuICAgIGNvbnN0IGZpbGVFeHQgPSBTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUy5maW5kKGV4dCA9PiBmaWxlbmFtZS5lbmRzV2l0aChleHQpKTtcbiAgICByZXR1cm4gQm9vbGVhbihmaWxlRXh0KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNyZWF0ZVRhYmxlRnJvbURyb3BwZWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGRyb3BwZWRGaWxlOiBGaWxlIHwgbnVsbCkgPT4ge1xuICAgIGlmIChkcm9wcGVkRmlsZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0YWJsZUZyb21GaWxlKGRyb3BwZWRGaWxlKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREcm9wcGVkRmlsZShudWxsKTtcbiAgICBzZXREcmFnU3RhdGUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZShkcm9wcGVkRmlsZSk7XG4gIH0sIFtkcm9wcGVkRmlsZSwgY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGVdKTtcblxuICBjb25zdCBoYW5kbGVGaWxlSW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmZpbGVMaXN0XS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIGNvbnN0IGRpc2FibGVFeHRlbnNpb25GaWx0ZXIgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmlsZXNUb0xvYWQ6IEZpbGVbXSA9IFtdO1xuICAgICAgY29uc3QgZXJyb3JGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoZGlzYWJsZUV4dGVuc2lvbkZpbHRlciB8fCBpc1ZhbGlkRmlsZVR5cGUoZmlsZS5uYW1lKSkge1xuICAgICAgICAgIGZpbGVzVG9Mb2FkLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JGaWxlcy5wdXNoKGZpbGUubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RHJvcHBlZEZpbGUoZmlsZXNUb0xvYWRbMF0pO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmaWxlIGZvcm1hdHM6ICR7ZXJyb3JGaWxlcy5qb2luKCcsICcpfWApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc1ZhbGlkRmlsZVR5cGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU3FsUGFuZWw+XG4gICAgICA8UGFuZWxHcm91cCBkaXJlY3Rpb249XCJob3Jpem9udGFsXCI+XG4gICAgICAgIDxQYW5lbCBkZWZhdWx0U2l6ZT17MjB9IG1pblNpemU9ezE1fSBzdHlsZT17U0NIRU1BX1BBTkVMX1NUWUxFfSBjbGFzc05hbWU9XCJzY2hlbWEtcGFuZWxcIj5cbiAgICAgICAgICA8U3R5bGVkRmlsZURyb3BBcmVhXG4gICAgICAgICAgICBkcmFnT3Zlcj17ZHJhZ1N0YXRlfVxuICAgICAgICAgICAgb25EcmFnT3Zlcj17KCkgPT4gc2V0RHJhZ1N0YXRlKHRydWUpfVxuICAgICAgICAgICAgb25EcmFnTGVhdmU9eygpID0+IHNldERyYWdTdGF0ZShmYWxzZSl9XG4gICAgICAgICAgICBmcmFtZT17ZHJvcHBlZEZpbGVBcmVhUmVmLmN1cnJlbnQgfHwgZG9jdW1lbnR9XG4gICAgICAgICAgICBvbkRyb3A9e2hhbmRsZUZpbGVJbnB1dH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX2ZpbGUtZHJvcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNjaGVtYVBhbmVsXG4gICAgICAgICAgICAgIHNldFRhYmxlU2NoZW1hPXtzZXRUYWJsZVNjaGVtYX1cbiAgICAgICAgICAgICAgZHJvcHBlZEZpbGU9e2Ryb3BwZWRGaWxlfVxuICAgICAgICAgICAgICBzY2hlbWFVcGRhdGVUcmlnZ2VyPXtzY2hlbWFVcGRhdGVUcmlnZ2VyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wQXJlYT5cbiAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICA8U3R5bGVkUmVzaXplSGFuZGxlIC8+XG5cbiAgICAgICAgPFBhbmVsIG1pblNpemU9ezQwfT5cbiAgICAgICAgICA8U3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXszMH0gY2xhc3NOYW1lPVwiZWRpdG9yLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFNxbEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj1cInJ1bi1xdWVyeS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5RdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNSdW5uaW5nIHx8ICFzcWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGxheSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD1cInJ1bi1xdWVyeS10b29sdGlwXCIgcGxhY2U9XCJ0b3BcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUnVuIFF1ZXJ5ICh7aXNNYWMgPyAn4oyYRW50ZXInIDogJ0N0cmwrRW50ZXInfSBvciBTaGlmdCtFbnRlcilcbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFZGl0b3IgaXNSdW5uaW5nPXtpc1J1bm5pbmd9PlxuICAgICAgICAgICAgICAgICAgICA8TW9uYWNvRWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seT17aXNSdW5uaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUnVuUXVlcnk9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNjaGVtYT17dGFibGVTY2hlbWF9XG4gICAgICAgICAgICAgICAgICAgICAgY29kZT17c3FsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3I+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3JQYW5lbD5cbiAgICAgICAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICAgICAgICA8U3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgLz5cbiAgICAgICAgICAgICAgPFBhbmVsIGNsYXNzTmFtZT1cInByZXZpZXctcGFuZWxcIj5cbiAgICAgICAgICAgICAgICB7aXNSdW5uaW5nID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRMb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57ZXJyb3IubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IHJlc3VsdCA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2Vjb25kYXJ5IG9uQ2xpY2s9e29uQWRkUmVzdWx0VG9NYXB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIE1hcFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3Jlc3VsdC50YWJsZS5udW1Sb3dzfSByb3dzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkUmVzdWx0QWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPFByZXZpZXdEYXRhUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9e3Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhVGFibGVTdHlsZT17e319XG4gICAgICAgICAgICAgICAgICAgICAgb25BZGRSZXN1bHRUb01hcD17b25BZGRSZXN1bHRUb01hcH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRGF0YVBhbmVsPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9QYW5lbEdyb3VwPlxuICAgICAgICAgIDwvU3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICA8L1BhbmVsPlxuICAgICAgPC9QYW5lbEdyb3VwPlxuICAgIDwvU3R5bGVkU3FsUGFuZWw+XG4gICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUdBLE9BQU9BLEtBQUssSUFBR0MsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFPLE9BQU87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
@@ -0,0 +1,82 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
3
+ var _templateObject, _templateObject2, _templateObject3;
4
+ // SPDX-License-Identifier: MIT
5
+ // Copyright contributors to the kepler.gl project
6
+
7
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@radix-ui/react-collapsible';
8
+ import styled from 'styled-components';
9
+ import React, { useEffect, useState } from 'react';
10
+ import classNames from 'classnames';
11
+ import { Icons, FieldToken } from '@kepler.gl/components';
12
+ // TODO: consider using react-vtree/react-window for virtualization
13
+
14
+ /**
15
+ * Component that renders a generic tree.
16
+ * @param treeData - The tree data.
17
+ * @param renderNode - A function that renders a tree node.
18
+ */
19
+ export function Tree(props) {
20
+ var treeData = props.treeData,
21
+ renderNode = props.renderNode;
22
+ return /*#__PURE__*/React.createElement("div", {
23
+ className: "flex flex-col"
24
+ }, /*#__PURE__*/React.createElement(TreeNode, {
25
+ treeData: treeData,
26
+ renderNode: renderNode
27
+ }));
28
+ }
29
+ var StyledCollapsibleTriggerContent = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n width: 100%;\n cursor: pointer;\n align-items: center;\n"])));
30
+ /**
31
+ * Component that renders a tree node.
32
+ */
33
+ function TreeNode(props) {
34
+ var treeData = props.treeData,
35
+ renderNode = props.renderNode;
36
+ var children = treeData.children;
37
+ var _useState = useState(Boolean(treeData.isOpen)),
38
+ _useState2 = _slicedToArray(_useState, 2),
39
+ isOpen = _useState2[0],
40
+ setIsOpen = _useState2[1];
41
+ useEffect(function () {
42
+ setIsOpen(Boolean(treeData.isOpen));
43
+ }, [treeData.isOpen]);
44
+ if (!children) {
45
+ return renderNode(treeData, isOpen);
46
+ }
47
+ return /*#__PURE__*/React.createElement(Collapsible, {
48
+ open: isOpen,
49
+ onOpenChange: setIsOpen
50
+ }, /*#__PURE__*/React.createElement(CollapsibleTrigger, {
51
+ className: "w-full",
52
+ asChild: true
53
+ }, /*#__PURE__*/React.createElement(StyledCollapsibleTriggerContent, null, /*#__PURE__*/React.createElement(Icons.ArrowRight, {
54
+ className: classNames('flex-shrink-0 text-gray-500', {
55
+ 'rotate-90 transform': isOpen
56
+ }),
57
+ height: "18px"
58
+ }), renderNode(treeData, isOpen))), /*#__PURE__*/React.createElement(CollapsibleContent, {
59
+ className: "pl-4"
60
+ }, isOpen ? children.map(function (child) {
61
+ return /*#__PURE__*/React.createElement(TreeNode, {
62
+ key: child.key,
63
+ treeData: child,
64
+ renderNode: renderNode
65
+ });
66
+ }) : null));
67
+ }
68
+ var StyledDatasetNode = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n font-weight: bold;\n"])));
69
+ export var DatasetNode = function DatasetNode(_ref) {
70
+ var node = _ref.node;
71
+ return /*#__PURE__*/React.createElement(StyledDatasetNode, null, node.object.tableName);
72
+ };
73
+ var StyledColumnNode = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n padding: 4px 0;\n margin-left: 16px;\n\n .column-name {\n margin-left: 8px;\n }\n"])));
74
+ export var ColumnNode = function ColumnNode(_ref2) {
75
+ var node = _ref2.node;
76
+ return /*#__PURE__*/React.createElement(StyledColumnNode, null, /*#__PURE__*/React.createElement(FieldToken, {
77
+ type: node.object.fieldType
78
+ }), /*#__PURE__*/React.createElement("div", {
79
+ className: "column-name"
80
+ }, node.object.name));
81
+ };
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYXBzaWJsZSIsIkNvbGxhcHNpYmxlVHJpZ2dlciIsIkNvbGxhcHNpYmxlQ29udGVudCIsInN0eWxlZCIsIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJjbGFzc05hbWVzIiwiSWNvbnMiLCJGaWVsZFRva2VuIiwiVHJlZSIsInByb3BzIiwidHJlZURhdGEiLCJyZW5kZXJOb2RlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIlRyZWVOb2RlIiwiU3R5bGVkQ29sbGFwc2libGVUcmlnZ2VyQ29udGVudCIsImRpdiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJjaGlsZHJlbiIsIl91c2VTdGF0ZSIsIkJvb2xlYW4iLCJpc09wZW4iLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXRJc09wZW4iLCJvcGVuIiwib25PcGVuQ2hhbmdlIiwiYXNDaGlsZCIsIkFycm93UmlnaHQiLCJoZWlnaHQiLCJtYXAiLCJjaGlsZCIsImtleSIsIlN0eWxlZERhdGFzZXROb2RlIiwiX3RlbXBsYXRlT2JqZWN0MiIsIkRhdGFzZXROb2RlIiwiX3JlZiIsIm5vZGUiLCJvYmplY3QiLCJ0YWJsZU5hbWUiLCJTdHlsZWRDb2x1bW5Ob2RlIiwiX3RlbXBsYXRlT2JqZWN0MyIsIkNvbHVtbk5vZGUiLCJfcmVmMiIsInR5cGUiLCJmaWVsZFR5cGUiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDb2xsYXBzaWJsZSwgQ29sbGFwc2libGVUcmlnZ2VyLCBDb2xsYXBzaWJsZUNvbnRlbnR9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jb2xsYXBzaWJsZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5pbXBvcnQge0ljb25zLCBGaWVsZFRva2VufSBmcm9tICdAa2VwbGVyLmdsL2NvbXBvbmVudHMnO1xuXG5leHBvcnQgdHlwZSBUcmVlTm9kZURhdGE8VD4gPSB7XG4gIGtleTogc3RyaW5nO1xuICBvYmplY3Q6IFQ7XG4gIGNoaWxkcmVuPzogVHJlZU5vZGVEYXRhPFQ+W107XG4gIGlzT3Blbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUcmVlUHJvcHM8VD4gPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdHJlZURhdGE6IFRyZWVOb2RlRGF0YTxUPjtcbiAgcmVuZGVyTm9kZTogVHJlZU5vZGVQcm9wczxUPlsncmVuZGVyTm9kZSddO1xufTtcblxuLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgcmVhY3QtdnRyZWUvcmVhY3Qtd2luZG93IGZvciB2aXJ0dWFsaXphdGlvblxuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgYSBnZW5lcmljIHRyZWUuXG4gKiBAcGFyYW0gdHJlZURhdGEgLSBUaGUgdHJlZSBkYXRhLlxuICogQHBhcmFtIHJlbmRlck5vZGUgLSBBIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyBhIHRyZWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRyZWU8VD4ocHJvcHM6IFRyZWVQcm9wczxUPik6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IHt0cmVlRGF0YSwgcmVuZGVyTm9kZX0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDxUcmVlTm9kZTxUPiB0cmVlRGF0YT17dHJlZURhdGF9IHJlbmRlck5vZGU9e3JlbmRlck5vZGV9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFRyZWVOb2RlUHJvcHM8VD4gPSB7XG4gIHRyZWVEYXRhOiBUcmVlTm9kZURhdGE8VD47XG4gIHJlbmRlck5vZGU6IChub2RlOiBUcmVlTm9kZURhdGE8VD4sIGlzT3BlbjogYm9vbGVhbikgPT4gSlNYLkVsZW1lbnQgfCBudWxsO1xufTtcblxuY29uc3QgU3R5bGVkQ29sbGFwc2libGVUcmlnZ2VyQ29udGVudCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuLyoqXG4gKiBDb21wb25lbnQgdGhhdCByZW5kZXJzIGEgdHJlZSBub2RlLlxuICovXG5mdW5jdGlvbiBUcmVlTm9kZTxUPihwcm9wczogVHJlZU5vZGVQcm9wczxUPik6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHt0cmVlRGF0YSwgcmVuZGVyTm9kZX0gPSBwcm9wcztcbiAgY29uc3Qge2NoaWxkcmVufSA9IHRyZWVEYXRhO1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoQm9vbGVhbih0cmVlRGF0YS5pc09wZW4pKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc09wZW4oQm9vbGVhbih0cmVlRGF0YS5pc09wZW4pKTtcbiAgfSwgW3RyZWVEYXRhLmlzT3Blbl0pO1xuICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHJlbmRlck5vZGUodHJlZURhdGEsIGlzT3Blbik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Q29sbGFwc2libGUgb3Blbj17aXNPcGVufSBvbk9wZW5DaGFuZ2U9e3NldElzT3Blbn0+XG4gICAgICA8Q29sbGFwc2libGVUcmlnZ2VyIGNsYXNzTmFtZT1cInctZnVsbFwiIGFzQ2hpbGQ+XG4gICAgICAgIDxTdHlsZWRDb2xsYXBzaWJsZVRyaWdnZXJDb250ZW50PlxuICAgICAgICAgIDxJY29ucy5BcnJvd1JpZ2h0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ2ZsZXgtc2hyaW5rLTAgdGV4dC1ncmF5LTUwMCcsIHsncm90YXRlLTkwIHRyYW5zZm9ybSc6IGlzT3Blbn0pfVxuICAgICAgICAgICAgaGVpZ2h0PVwiMThweFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cmVuZGVyTm9kZSh0cmVlRGF0YSwgaXNPcGVuKX1cbiAgICAgICAgPC9TdHlsZWRDb2xsYXBzaWJsZVRyaWdnZXJDb250ZW50PlxuICAgICAgPC9Db2xsYXBzaWJsZVRyaWdnZXI+XG4gICAgICA8Q29sbGFwc2libGVDb250ZW50IGNsYXNzTmFtZT1cInBsLTRcIj5cbiAgICAgICAge2lzT3BlblxuICAgICAgICAgID8gY2hpbGRyZW4ubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFRyZWVOb2RlPFQ+IGtleT17Y2hpbGQua2V5fSB0cmVlRGF0YT17Y2hpbGR9IHJlbmRlck5vZGU9e3JlbmRlck5vZGV9IC8+XG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogbnVsbH1cbiAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgIDwvQ29sbGFwc2libGU+XG4gICk7XG59XG5cbmNvbnN0IFN0eWxlZERhdGFzZXROb2RlID0gc3R5bGVkLmRpdmBcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5gO1xuXG5leHBvcnQgY29uc3QgRGF0YXNldE5vZGUgPSAoe25vZGV9KSA9PiB7XG4gIHJldHVybiA8U3R5bGVkRGF0YXNldE5vZGU+e25vZGUub2JqZWN0LnRhYmxlTmFtZX08L1N0eWxlZERhdGFzZXROb2RlPjtcbn07XG5cbmNvbnN0IFN0eWxlZENvbHVtbk5vZGUgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiA0cHggMDtcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XG5cbiAgLmNvbHVtbi1uYW1lIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG5gO1xuZXhwb3J0IGNvbnN0IENvbHVtbk5vZGUgPSAoe25vZGV9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZENvbHVtbk5vZGU+XG4gICAgICA8RmllbGRUb2tlbiB0eXBlPXtub2RlLm9iamVjdC5maWVsZFR5cGV9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtbi1uYW1lXCI+e25vZGUub2JqZWN0Lm5hbWV9PC9kaXY+XG4gICAgPC9TdHlsZWRDb2x1bW5Ob2RlPlxuICApO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTs7QUFFQSxTQUFRQSxXQUFXLEVBQUVDLGtCQUFrQixFQUFFQyxrQkFBa0IsUUFBTyw2QkFBNkI7QUFDL0YsT0FBT0MsTUFBTSxNQUFNLG1CQUFtQjtBQUN0QyxPQUFPQyxLQUFLLElBQUdDLFNBQVMsRUFBRUMsUUFBUSxRQUFPLE9BQU87QUFDaEQsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFFbkMsU0FBUUMsS0FBSyxFQUFFQyxVQUFVLFFBQU8sdUJBQXVCO0FBZXZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLElBQUlBLENBQUlDLEtBQW1CLEVBQXNCO0VBQy9ELElBQU9DLFFBQVEsR0FBZ0JELEtBQUssQ0FBN0JDLFFBQVE7SUFBRUMsVUFBVSxHQUFJRixLQUFLLENBQW5CRSxVQUFVO0VBQzNCLG9CQUNFVCxLQUFBLENBQUFVLGFBQUE7SUFBS0MsU0FBUyxFQUFDO0VBQWUsZ0JBQzVCWCxLQUFBLENBQUFVLGFBQUEsQ0FBQ0UsUUFBUTtJQUFJSixRQUFRLEVBQUVBLFFBQVM7SUFBQ0MsVUFBVSxFQUFFQTtFQUFXLENBQUUsQ0FDdkQsQ0FBQztBQUVWO0FBT0EsSUFBTUksK0JBQStCLEdBQUdkLE1BQU0sQ0FBQ2UsR0FBRyxDQUFBQyxlQUFBLEtBQUFBLGVBQUEsR0FBQUMsc0JBQUEsd0ZBS2pEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsU0FBU0osUUFBUUEsQ0FBSUwsS0FBdUIsRUFB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
@@ -0,0 +1,9 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ export { DuckDBWasmAdapter } from './adapters/duckdb-wasm-adapter';
5
+ export { keplerGlDuckDBPlugin, keplerGlDuckDBPlugin as default } from './plugin';
6
+ export * from './table/duckdb-table';
7
+ export * from './table/duckdb-table-utils';
8
+ export * from './processors/data-processor';
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEdWNrREJXYXNtQWRhcHRlciIsImtlcGxlckdsRHVja0RCUGx1Z2luIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQge0R1Y2tEQldhc21BZGFwdGVyfSBmcm9tICcuL2FkYXB0ZXJzL2R1Y2tkYi13YXNtLWFkYXB0ZXInO1xuZXhwb3J0IHtrZXBsZXJHbER1Y2tEQlBsdWdpbiwga2VwbGVyR2xEdWNrREJQbHVnaW4gYXMgZGVmYXVsdH0gZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9jZXNzb3JzL2RhdGEtcHJvY2Vzc29yJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxTQUFRQSxpQkFBaUIsUUFBTyxnQ0FBZ0M7QUFDaEUsU0FBUUMsb0JBQW9CLEVBQUVBLG9CQUFvQixJQUFJQyxPQUFPLFFBQU8sVUFBVTtBQUM5RSxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLDRCQUE0QjtBQUMxQyxjQUFjLDZCQUE2QiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,22 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ // SPDX-License-Identifier: MIT
4
+ // Copyright contributors to the kepler.gl project
5
+
6
+ export var keplerGlDuckDBPlugin = {
7
+ name: 'duckdb',
8
+ init: function init() {
9
+ return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
10
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
11
+ while (1) switch (_context.prev = _context.next) {
12
+ case 0:
13
+ console.log('kepler.gl DuckDB Plugin initialized');
14
+ case 1:
15
+ case "end":
16
+ return _context.stop();
17
+ }
18
+ }, _callee);
19
+ }))();
20
+ }
21
+ };
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXBsZXJHbER1Y2tEQlBsdWdpbiIsIm5hbWUiLCJpbml0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29uc29sZSIsImxvZyIsInN0b3AiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCBjb25zdCBrZXBsZXJHbER1Y2tEQlBsdWdpbiA9IHtcbiAgbmFtZTogJ2R1Y2tkYicsXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ2tlcGxlci5nbCBEdWNrREIgUGx1Z2luIGluaXRpYWxpemVkJyk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQSxPQUFPLElBQU1BLG9CQUFvQixHQUFHO0VBQ2xDQyxJQUFJLEVBQUUsUUFBUTtFQUNSQyxJQUFJLFdBQUpBLElBQUlBLENBQUEsRUFBRztJQUFBLE9BQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsVUFBQUMsUUFBQTtNQUFBLE9BQUFGLG1CQUFBLENBQUFHLElBQUEsVUFBQUMsU0FBQUMsUUFBQTtRQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1VBQUE7WUFDWEMsT0FBTyxDQUFDQyxHQUFHLENBQUMscUNBQXFDLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQUosUUFBQSxDQUFBSyxJQUFBO1FBQUE7TUFBQSxHQUFBUixPQUFBO0lBQUE7RUFDckQ7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119