UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

193 lines (192 loc) 27.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.SaveDataToMapToolComponent = SaveDataToMapToolComponent; exports.saveToolResults = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"); var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/processors/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src"); var _utils = require("@openassistant/utils"); var _zod = require("zod"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 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; } } }; } 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; } } 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var saveToolResults = exports.saveToolResults = (0, _utils.extendedTool)({ description: 'Save tool results to kepler.gl. The tool includes: buffer, zipcode, county, state, isochrone, thiessenPolygons, mst, cartogram, etc.', parameters: _zod.z.object({ datasetNames: _zod.z.array(_zod.z.string()).describe('The names of the datasets created by tools.') }), execute: function () { var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) { var datasetNames, loadedDatasetNames, result, toolCache, datasetType, _iterator, _step, _datasetName, dataset, mergedResult, mergedColumnData, columnNames, numberOfRows, i, rowObject, _iterator2, _step2, columnName, datasetName, parsedData; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.prev = 0; datasetNames = args.datasetNames; loadedDatasetNames = []; result = []; toolCache = _utils.ToolCache.getInstance(); _iterator = _createForOfIteratorHelper(datasetNames); _context.prev = 6; _iterator.s(); case 8: if ((_step = _iterator.n()).done) { _context.next = 28; break; } _datasetName = _step.value; dataset = toolCache.getDataset(_datasetName); if (!(dataset && dataset.type === 'geojson')) { _context.next = 15; break; } datasetType = 'geojson'; _context.next = 24; break; case 15: if (!(dataset && dataset.type === 'columnData')) { _context.next = 19; break; } datasetType = 'columnData'; _context.next = 24; break; case 19: if (!(dataset && dataset.type === 'rowObjects')) { _context.next = 23; break; } datasetType = 'rowObjects'; _context.next = 24; break; case 23: throw new Error("Can not save tool cache dataset ".concat(_datasetName, ", the dataset type ").concat(datasetType, " is not supported")); case 24: result.push(dataset.content); loadedDatasetNames.push(_datasetName); case 26: _context.next = 8; break; case 28: _context.next = 33; break; case 30: _context.prev = 30; _context.t0 = _context["catch"](6); _iterator.e(_context.t0); case 33: _context.prev = 33; _iterator.f(); return _context.finish(33); case 36: if (!(result.length === 0)) { _context.next = 38; break; } throw new Error("Can not save dataset, No datasets found from ".concat(datasetNames.join(', '))); case 38: if (datasetType === 'geojson') { mergedResult = result.reduce(function (acc, geom) { return _objectSpread(_objectSpread({}, acc), {}, { features: [].concat((0, _toConsumableArray2["default"])(acc.features), (0, _toConsumableArray2["default"])(geom.features)) }); }, { type: 'FeatureCollection', features: [] }); } else if (datasetType === 'columnData') { mergedColumnData = result.reduce(function (acc, row) { return _objectSpread(_objectSpread({}, acc), row); }, {}); // convert the merged result to a rowObjects array columnNames = Object.keys(mergedColumnData); numberOfRows = mergedColumnData[columnNames[0]].length; for (i = 0; i < numberOfRows; i++) { rowObject = {}; _iterator2 = _createForOfIteratorHelper(columnNames); try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { columnName = _step2.value; rowObject[columnName] = mergedColumnData[columnName][i]; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } mergedResult.push(rowObject); } } else if (datasetType === 'rowObjects') { mergedResult = result.reduce(function (acc, row) { return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(row)); }, []); } datasetName = datasetNames.length > 1 ? "".concat(datasetNames.join('_'), "_").concat((0, _utils.generateId)()) : datasetNames[0]; // try to process the merged result using kepler.gl processor _context.next = 42; return (0, _src.processFileData)({ content: { data: mergedResult, fileName: "".concat(datasetName) }, fileCache: [] }); case 42: parsedData = _context.sent; return _context.abrupt("return", { llmResult: { success: true, savedDatasetName: datasetName, details: "Successfully save dataset: ".concat(datasetName, " in kepler.gl") }, additionalData: { parsedData: parsedData } }); case 46: _context.prev = 46; _context.t1 = _context["catch"](0); return _context.abrupt("return", { llmResult: { success: false, details: "Can not save data to kepler.gl, ".concat(_context.t1) } }); case 49: case "end": return _context.stop(); } }, _callee, null, [[0, 46], [6, 30, 33, 36]]); })); function execute(_x) { return _execute.apply(this, arguments); } return execute; }(), component: SaveDataToMapToolComponent }); function SaveDataToMapToolComponent(_ref) { var parsedData = _ref.parsedData; var dispatch = (0, _lib.useDispatch)(); (0, _react.useEffect)(function () { dispatch((0, _src2.addDataToMap)({ datasets: parsedData, options: { autoCreateLayers: true, centerMap: true } })); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return null; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX2xpYiIsIl9zcmMiLCJfc3JjMiIsIl91dGlscyIsIl96b2QiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJzYXZlVG9vbFJlc3VsdHMiLCJleHBvcnRzIiwiZXh0ZW5kZWRUb29sIiwiZGVzY3JpcHRpb24iLCJwYXJhbWV0ZXJzIiwieiIsIm9iamVjdCIsImRhdGFzZXROYW1lcyIsImFycmF5Iiwic3RyaW5nIiwiZGVzY3JpYmUiLCJleGVjdXRlIiwiX2V4ZWN1dGUiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImFyZ3MiLCJsb2FkZWREYXRhc2V0TmFtZXMiLCJyZXN1bHQiLCJ0b29sQ2FjaGUiLCJkYXRhc2V0VHlwZSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2RhdGFzZXROYW1lIiwiZGF0YXNldCIsIm1lcmdlZFJlc3VsdCIsIm1lcmdlZENvbHVtbkRhdGEiLCJjb2x1bW5OYW1lcyIsIm51bWJlck9mUm93cyIsImkiLCJyb3dPYmplY3QiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiY29sdW1uTmFtZSIsImRhdGFzZXROYW1lIiwicGFyc2VkRGF0YSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIlRvb2xDYWNoZSIsImdldEluc3RhbmNlIiwiZ2V0RGF0YXNldCIsInR5cGUiLCJFcnJvciIsImNvbmNhdCIsImNvbnRlbnQiLCJ0MCIsImZpbmlzaCIsImpvaW4iLCJyZWR1Y2UiLCJhY2MiLCJnZW9tIiwiZmVhdHVyZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicm93IiwiZXJyIiwiZ2VuZXJhdGVJZCIsInByb2Nlc3NGaWxlRGF0YSIsImRhdGEiLCJmaWxlTmFtZSIsImZpbGVDYWNoZSIsInNlbnQiLCJhYnJ1cHQiLCJsbG1SZXN1bHQiLCJzdWNjZXNzIiwic2F2ZWREYXRhc2V0TmFtZSIsImRldGFpbHMiLCJhZGRpdGlvbmFsRGF0YSIsInQxIiwic3RvcCIsIl94IiwiY29tcG9uZW50IiwiU2F2ZURhdGFUb01hcFRvb2xDb21wb25lbnQiLCJfcmVmIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInVzZUVmZmVjdCIsImFkZERhdGFUb01hcCIsImRhdGFzZXRzIiwib3B0aW9ucyIsImF1dG9DcmVhdGVMYXllcnMiLCJjZW50ZXJNYXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWktYXNzaXN0YW50L3NyYy90b29scy9rZXBsZXItdG9vbHMvc2F2ZS1kYXRhLXRvb2wudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge3Byb2Nlc3NGaWxlRGF0YX0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtQcm90b0RhdGFzZXR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSAnZ2VvanNvbic7XG5pbXBvcnQge2V4dGVuZGVkVG9vbCwgVG9vbENhY2hlLCBnZW5lcmF0ZUlkfSBmcm9tICdAb3BlbmFzc2lzdGFudC91dGlscyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmV4cG9ydCBjb25zdCBzYXZlVG9vbFJlc3VsdHMgPSBleHRlbmRlZFRvb2woe1xuICBkZXNjcmlwdGlvbjpcbiAgICAnU2F2ZSB0b29sIHJlc3VsdHMgdG8ga2VwbGVyLmdsLiBUaGUgdG9vbCBpbmNsdWRlczogYnVmZmVyLCB6aXBjb2RlLCBjb3VudHksIHN0YXRlLCBpc29jaHJvbmUsIHRoaWVzc2VuUG9seWdvbnMsIG1zdCwgY2FydG9ncmFtLCBldGMuJyxcbiAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuICAgIGRhdGFzZXROYW1lczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZSgnVGhlIG5hbWVzIG9mIHRoZSBkYXRhc2V0cyBjcmVhdGVkIGJ5IHRvb2xzLicpXG4gIH0pLFxuICBleGVjdXRlOiBhc3luYyAoYXJnczoge2RhdGFzZXROYW1lczogc3RyaW5nW119KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtkYXRhc2V0TmFtZXN9ID0gYXJncztcbiAgICAgIGNvbnN0IGxvYWRlZERhdGFzZXROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3VsdDogdW5rbm93bltdID0gW107XG4gICAgICBjb25zdCB0b29sQ2FjaGUgPSBUb29sQ2FjaGUuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgbGV0IGRhdGFzZXRUeXBlO1xuXG4gICAgICBmb3IgKGNvbnN0IGRhdGFzZXROYW1lIG9mIGRhdGFzZXROYW1lcykge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdG9vbENhY2hlLmdldERhdGFzZXQoZGF0YXNldE5hbWUpO1xuICAgICAgICBpZiAoZGF0YXNldCAmJiBkYXRhc2V0LnR5cGUgPT09ICdnZW9qc29uJykge1xuICAgICAgICAgIGRhdGFzZXRUeXBlID0gJ2dlb2pzb24nO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQgJiYgZGF0YXNldC50eXBlID09PSAnY29sdW1uRGF0YScpIHtcbiAgICAgICAgICBkYXRhc2V0VHlwZSA9ICdjb2x1bW5EYXRhJztcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0ICYmIGRhdGFzZXQudHlwZSA9PT0gJ3Jvd09iamVjdHMnKSB7XG4gICAgICAgICAgZGF0YXNldFR5cGUgPSAncm93T2JqZWN0cyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbiBub3Qgc2F2ZSB0b29sIGNhY2hlIGRhdGFzZXQgJHtkYXRhc2V0TmFtZX0sIHRoZSBkYXRhc2V0IHR5cGUgJHtkYXRhc2V0VHlwZX0gaXMgbm90IHN1cHBvcnRlZGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGRhdGFzZXQuY29udGVudCk7XG4gICAgICAgIGxvYWRlZERhdGFzZXROYW1lcy5wdXNoKGRhdGFzZXROYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IHNhdmUgZGF0YXNldCwgTm8gZGF0YXNldHMgZm91bmQgZnJvbSAke2RhdGFzZXROYW1lcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBtZXJnZSB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZSBkYXRhc2V0IHR5cGVcbiAgICAgIGxldCBtZXJnZWRSZXN1bHQ7XG5cbiAgICAgIGlmIChkYXRhc2V0VHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAgIG1lcmdlZFJlc3VsdCA9IChyZXN1bHQgYXMgRmVhdHVyZUNvbGxlY3Rpb25bXSkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGdlb20pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLmdlb20uZmVhdHVyZXNdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3R5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsIGZlYXR1cmVzOiBbXX1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YXNldFR5cGUgPT09ICdjb2x1bW5EYXRhJykge1xuICAgICAgICBjb25zdCBtZXJnZWRDb2x1bW5EYXRhID0gKHJlc3VsdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKS5yZWR1Y2UoKGFjYywgcm93KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgIC4uLnJvd1xuICAgICAgICAgIH07XG4gICAgICAgIH0sIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xuICAgICAgICAvLyBjb252ZXJ0IHRoZSBtZXJnZWQgcmVzdWx0IHRvIGEgcm93T2JqZWN0cyBhcnJheVxuICAgICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IE9iamVjdC5rZXlzKG1lcmdlZENvbHVtbkRhdGEpO1xuICAgICAgICBjb25zdCBudW1iZXJPZlJvd3MgPSBtZXJnZWRDb2x1bW5EYXRhW2NvbHVtbk5hbWVzWzBdXS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZSb3dzOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByb3dPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW5OYW1lIG9mIGNvbHVtbk5hbWVzKSB7XG4gICAgICAgICAgICByb3dPYmplY3RbY29sdW1uTmFtZV0gPSBtZXJnZWRDb2x1bW5EYXRhW2NvbHVtbk5hbWVdW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZXJnZWRSZXN1bHQucHVzaChyb3dPYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFzZXRUeXBlID09PSAncm93T2JqZWN0cycpIHtcbiAgICAgICAgbWVyZ2VkUmVzdWx0ID0gKHJlc3VsdCBhcyB1bmtub3duW11bXSkucmVkdWNlKChhY2MsIHJvdykgPT4ge1xuICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5yb3ddO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID1cbiAgICAgICAgZGF0YXNldE5hbWVzLmxlbmd0aCA+IDEgPyBgJHtkYXRhc2V0TmFtZXMuam9pbignXycpfV8ke2dlbmVyYXRlSWQoKX1gIDogZGF0YXNldE5hbWVzWzBdO1xuXG4gICAgICAvLyB0cnkgdG8gcHJvY2VzcyB0aGUgbWVyZ2VkIHJlc3VsdCB1c2luZyBrZXBsZXIuZ2wgcHJvY2Vzc29yXG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gYXdhaXQgcHJvY2Vzc0ZpbGVEYXRhKHtcbiAgICAgICAgY29udGVudDoge1xuICAgICAgICAgIGRhdGE6IG1lcmdlZFJlc3VsdCxcbiAgICAgICAgICBmaWxlTmFtZTogYCR7ZGF0YXNldE5hbWV9YFxuICAgICAgICB9LFxuICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBzYXZlZERhdGFzZXROYW1lOiBkYXRhc2V0TmFtZSxcbiAgICAgICAgICBkZXRhaWxzOiBgU3VjY2Vzc2Z1bGx5IHNhdmUgZGF0YXNldDogJHtkYXRhc2V0TmFtZX0gaW4ga2VwbGVyLmdsYFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIHBhcnNlZERhdGFcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsczogYENhbiBub3Qgc2F2ZSBkYXRhIHRvIGtlcGxlci5nbCwgJHtlcnJvcn1gXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IFNhdmVEYXRhVG9NYXBUb29sQ29tcG9uZW50XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNhdmVEYXRhVG9NYXBUb29sQ29tcG9uZW50KHtwYXJzZWREYXRhfToge3BhcnNlZERhdGE6IFByb3RvRGF0YXNldFtdfSkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChcbiAgICAgIGFkZERhdGFUb01hcCh7XG4gICAgICAgIGRhdGFzZXRzOiBwYXJzZWREYXRhLFxuICAgICAgICBvcHRpb25zOiB7YXV0b0NyZWF0ZUxheWVyczogdHJ1ZSwgY2VudGVyTWFwOiB0cnVlfVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFHQSxJQUFBSSxN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