UNPKG

kepler.gl

Version:

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

182 lines (180 loc) 21.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.loadUrlFunctionDefinition = loadUrlFunctionDefinition; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _processors = require("@kepler.gl/processors"); var _react = _interopRequireWildcard(require("react")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project function loadUrlFunctionDefinition(context) { return { name: 'loadUrl', description: 'load data from a remote URL', properties: { url: { type: 'string', description: 'The URL to load data from' } }, required: ['url'], callbackFunction: loadUrlCallback, callbackFunctionContext: context, callbackMessage: customLoadUrlMessageCallback }; } function loadUrlCallback(_x) { return _loadUrlCallback.apply(this, arguments); } function _loadUrlCallback() { _loadUrlCallback = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) { var functionName, functionArgs, functionContext, _ref3, url, _ref4, addDataToMap, loaders, loadOptions, response, blob, fileName, fileObj, batches, result, content, parsedData, data, columnNameAndType; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: functionName = _ref.functionName, functionArgs = _ref.functionArgs, functionContext = _ref.functionContext; _ref3 = functionArgs, url = _ref3.url; _ref4 = functionContext, addDataToMap = _ref4.addDataToMap, loaders = _ref4.loaders, loadOptions = _ref4.loadOptions; // check url is valid _context.prev = 3; new URL(url); _context.next = 10; break; case 7: _context.prev = 7; _context.t0 = _context["catch"](3); return _context.abrupt("return", { type: 'loadUrl', name: functionName, result: { success: false, details: 'Invalid URL' } }); case 10: _context.next = 12; return fetch(url); case 12: response = _context.sent; _context.next = 15; return response.blob(); case 15: blob = _context.sent; // get file name from url fileName = url.split('/').pop(); if (fileName) { _context.next = 19; break; } return _context.abrupt("return", { type: 'loadUrl', name: functionName, result: { success: false, details: 'Failed to get file name from url' } }); case 19: // Note: we don't use loadFiles([new File([outputData.blob], outputData.fileName)]) // because we need the metadata e.g. column names of the data to send to the LLM as context fileObj = new File([blob], fileName); _context.next = 22; return (0, _processors.readFileInBatches)({ file: fileObj, fileCache: [], loaders: loaders !== null && loaders !== void 0 ? loaders : [], loadOptions: loadOptions !== null && loadOptions !== void 0 ? loadOptions : {} }); case 22: batches = _context.sent; _context.next = 25; return batches.next(); case 25: result = _context.sent; content = { data: [], fileName: '' }; parsedData = []; case 28: if (result.done) { _context.next = 40; break; } // get progress // totalRowCount += result.value.progress.rowCountInBatch; content = result.value; _context.next = 32; return batches.next(); case 32: result = _context.sent; if (!result.done) { _context.next = 38; break; } _context.next = 36; return (0, _processors.processFileData)({ content: content, fileCache: [] }); case 36: parsedData = _context.sent; return _context.abrupt("break", 40); case 38: _context.next = 28; break; case 40: data = parsedData[0].data; columnNameAndType = data.fields.map(function (field) { return { name: field.name, type: field.type }; }); return _context.abrupt("return", { type: 'loadUrl', name: functionName, result: { success: true, details: "Data loaded successfully from ".concat(url), datasetName: fileName, columnNameAndType: JSON.stringify(columnNameAndType) }, data: { blob: blob, fileName: fileName, addDataToMap: addDataToMap, parsedData: parsedData } }); case 43: case "end": return _context.stop(); } }, _callee, null, [[3, 7]]); })); return _loadUrlCallback.apply(this, arguments); } function LoadUrlMessage(_ref2) { var output = _ref2.output; var outputData = output.data; (0, _react.useEffect)(function () { outputData.addDataToMap({ datasets: outputData.parsedData, options: { autoCreateLayers: true, centerMap: true } }); }, [outputData]); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null); } function customLoadUrlMessageCallback(props) { return /*#__PURE__*/_react["default"].createElement(LoadUrlMessage, props); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHJvY2Vzc29ycyIsInJlcXVpcmUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsImxvYWRVcmxGdW5jdGlvbkRlZmluaXRpb24iLCJjb250ZXh0IiwibmFtZSIsImRlc2NyaXB0aW9uIiwicHJvcGVydGllcyIsInVybCIsInR5cGUiLCJyZXF1aXJlZCIsImNhbGxiYWNrRnVuY3Rpb24iLCJsb2FkVXJsQ2FsbGJhY2siLCJjYWxsYmFja0Z1bmN0aW9uQ29udGV4dCIsImNhbGxiYWNrTWVzc2FnZSIsImN1c3RvbUxvYWRVcmxNZXNzYWdlQ2FsbGJhY2siLCJfeCIsIl9sb2FkVXJsQ2FsbGJhY2siLCJhcHBseSIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZiIsImZ1bmN0aW9uTmFtZSIsImZ1bmN0aW9uQXJncyIsImZ1bmN0aW9uQ29udGV4dCIsIl9yZWYzIiwiX3JlZjQiLCJhZGREYXRhVG9NYXAiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJyZXNwb25zZSIsImJsb2IiLCJmaWxlTmFtZSIsImZpbGVPYmoiLCJiYXRjaGVzIiwicmVzdWx0IiwiY29udGVudCIsInBhcnNlZERhdGEiLCJkYXRhIiwiY29sdW1uTmFtZUFuZFR5cGUiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiVVJMIiwidDAiLCJhYnJ1cHQiLCJzdWNjZXNzIiwiZGV0YWlscyIsImZldGNoIiwic2VudCIsInNwbGl0IiwicG9wIiwiRmlsZSIsInJlYWRGaWxlSW5CYXRjaGVzIiwiZmlsZSIsImZpbGVDYWNoZSIsImRvbmUiLCJ2YWx1ZSIsInByb2Nlc3NGaWxlRGF0YSIsImZpZWxkcyIsIm1hcCIsImZpZWxkIiwiY29uY2F0IiwiZGF0YXNldE5hbWUiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RvcCIsIkxvYWRVcmxNZXNzYWdlIiwiX3JlZjIiLCJvdXRwdXQiLCJvdXRwdXREYXRhIiwidXNlRWZmZWN0IiwiZGF0YXNldHMiLCJvcHRpb25zIiwiYXV0b0NyZWF0ZUxheWVycyIsImNlbnRlck1hcCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsInByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL2xvYWR1cmwtZnVuY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YWRkRGF0YVRvTWFwLCBsb2FkRmlsZXN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0FjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1xuICBGaWxlQ2FjaGVJdGVtLFxuICBwcm9jZXNzRmlsZURhdGEsXG4gIFByb2Nlc3NGaWxlRGF0YUNvbnRlbnQsXG4gIHJlYWRGaWxlSW5CYXRjaGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcbmltcG9ydCBSZWFjdCwge1JlYWN0Tm9kZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBDYWxsYmFja0Z1bmN0aW9uUHJvcHMsXG4gIEN1c3RvbUZ1bmN0aW9uQ2FsbCxcbiAgQ3VzdG9tRnVuY3Rpb25Db250ZXh0LFxuICBDdXN0b21GdW5jdGlvbk91dHB1dFByb3BzLFxuICBFcnJvckNhbGxiYWNrUmVzdWx0LFxuICBSZWdpc3RlckZ1bmN0aW9uQ2FsbGluZ1Byb3BzXG59IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFVybEZ1bmN0aW9uRGVmaW5pdGlvbihcbiAgY29udGV4dDogQ3VzdG9tRnVuY3Rpb25Db250ZXh0PEFjdGlvbkhhbmRsZXI8dHlwZW9mIGxvYWRGaWxlcz4gfCBMb2FkZXJbXSB8IG9iamVjdD5cbik6IFJlZ2lzdGVyRnVuY3Rpb25DYWxsaW5nUHJvcHMge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdsb2FkVXJsJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xvYWQgZGF0YSBmcm9tIGEgcmVtb3RlIFVSTCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgdXJsOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBVUkwgdG8gbG9hZCBkYXRhIGZyb20nXG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWyd1cmwnXSxcbiAgICBjYWxsYmFja0Z1bmN0aW9uOiBsb2FkVXJsQ2FsbGJhY2ssXG4gICAgY2FsbGJhY2tGdW5jdGlvbkNvbnRleHQ6IGNvbnRleHQsXG4gICAgY2FsbGJhY2tNZXNzYWdlOiBjdXN0b21Mb2FkVXJsTWVzc2FnZUNhbGxiYWNrXG4gIH07XG59XG5cbnR5cGUgTG9hZFVybENhbGxiYWNrUmVzdWx0ID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkZXRhaWxzOiBzdHJpbmc7XG4gIGRhdGFzZXROYW1lOiBzdHJpbmc7XG4gIGNvbHVtbk5hbWVBbmRUeXBlOiBzdHJpbmc7XG59O1xuXG50eXBlIExvYWRVcmxDYWxsYmFja0NvbnRleHQgPSB7XG4gIGFkZERhdGFUb01hcDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgYWRkRGF0YVRvTWFwPjtcbiAgYmxvYjogQmxvYjtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgbG9hZGVycz86IExvYWRlcltdO1xuICBsb2FkT3B0aW9ucz86IG9iamVjdDtcbn07XG5cbnR5cGUgT3V0cHV0UmVzdWx0UHJvcHMgPSBMb2FkVXJsQ2FsbGJhY2tSZXN1bHQgfCBFcnJvckNhbGxiYWNrUmVzdWx0O1xudHlwZSBPdXRwdXREYXRhUHJvcHMgPSBMb2FkVXJsQ2FsbGJhY2tDb250ZXh0ICYge1xuICBwYXJzZWREYXRhOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuXG50eXBlIExvYWRVcmxDYWxsYmFja091dHB1dCA9IEN1c3RvbUZ1bmN0aW9uT3V0cHV0UHJvcHM8T3V0cHV0UmVzdWx0UHJvcHMsIE91dHB1dERhdGFQcm9wcz47XG5cbnR5cGUgTG9hZFVybENhbGxiYWNrQXJncyA9IHtcbiAgdXJsOiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkVXJsQ2FsbGJhY2soe1xuICBmdW5jdGlvbk5hbWUsXG4gIGZ1bmN0aW9uQXJncyxcbiAgZnVuY3Rpb25Db250ZXh0XG59OiBDYWxsYmFja0Z1bmN0aW9uUHJvcHMpOiBQcm9taXNlPExvYWRVcmxDYWxsYmFja091dHB1dD4ge1xuICBjb25zdCB7dXJsfSA9IGZ1bmN0aW9uQXJncyBhcyBMb2FkVXJsQ2FsbGJhY2tBcmdzO1xuICBjb25zdCB7YWRkRGF0YVRvTWFwLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBmdW5jdGlvbkNvbnRleHQgYXMgTG9hZFVybENhbGxiYWNrQ29udGV4dDtcblxuICAvLyBjaGVjayB1cmwgaXMgdmFsaWRcbiAgdHJ5IHtcbiAgICBuZXcgVVJMKHVybCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xvYWRVcmwnLFxuICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgcmVzdWx0OiB7c3VjY2VzczogZmFsc2UsIGRldGFpbHM6ICdJbnZhbGlkIFVSTCd9XG4gICAgfTtcbiAgfVxuXG4gIC8vIGZldGNoIGRhdGEgZnJvbSB1cmxcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuXG4gIC8vIGdldCBmaWxlIG5hbWUgZnJvbSB1cmxcbiAgY29uc3QgZmlsZU5hbWUgPSB1cmwuc3BsaXQoJy8nKS5wb3AoKTtcblxuICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsb2FkVXJsJyxcbiAgICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgIHJlc3VsdDoge3N1Y2Nlc3M6IGZhbHNlLCBkZXRhaWxzOiAnRmFpbGVkIHRvIGdldCBmaWxlIG5hbWUgZnJvbSB1cmwnfVxuICAgIH07XG4gIH1cblxuICAvLyBOb3RlOiB3ZSBkb24ndCB1c2UgbG9hZEZpbGVzKFtuZXcgRmlsZShbb3V0cHV0RGF0YS5ibG9iXSwgb3V0cHV0RGF0YS5maWxlTmFtZSldKVxuICAvLyBiZWNhdXNlIHdlIG5lZWQgdGhlIG1ldGFkYXRhIGUuZy4gY29sdW1uIG5hbWVzIG9mIHRoZSBkYXRhIHRvIHNlbmQgdG8gdGhlIExMTSBhcyBjb250ZXh0XG4gIGNvbnN0IGZpbGVPYmogPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKTtcbiAgY29uc3QgYmF0Y2hlcyA9IGF3YWl0IHJlYWRGaWxlSW5CYXRjaGVzKHtcbiAgICBmaWxlOiBmaWxlT2JqLFxuICAgIGZpbGVDYWNoZTogW10sXG4gICAgbG9hZGVyczogbG9hZGVycyA/PyBbXSxcbiAgICBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMgPz8ge31cbiAgfSk7XG5cbiAgbGV0IHJlc3VsdCA9IGF3YWl0IGJhdGNoZXMubmV4dCgpO1xuICBsZXQgY29udGVudDogUHJvY2Vzc0ZpbGVEYXRhQ29udGVudCA9IHtkYXRhOiBbXSwgZmlsZU5hbWU6ICcnfTtcbiAgbGV0IHBhcnNlZERhdGE6IEZpbGVDYWNoZUl0ZW1bXSA9IFtdO1xuXG4gIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAvLyBnZXQgcHJvZ3Jlc3NcbiAgICAvLyB0b3RhbFJvd0NvdW50ICs9IHJlc3VsdC52YWx1ZS5wcm9ncmVzcy5yb3dDb3VudEluQmF0Y2g7XG4gICAgY29udGVudCA9IHJlc3VsdC52YWx1ZSBhcyBQcm9jZXNzRmlsZURhdGFDb250ZW50O1xuICAgIHJlc3VsdCA9IGF3YWl0IGJhdGNoZXMubmV4dCgpO1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcGFyc2VkRGF0YSA9IGF3YWl0IHByb2Nlc3NGaWxlRGF0YSh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IHBhcnNlZERhdGFbMF0uZGF0YTtcbiAgY29uc3QgY29sdW1uTmFtZUFuZFR5cGUgPSBkYXRhLmZpZWxkcy5tYXAoZmllbGQgPT4gKHtuYW1lOiBmaWVsZC5uYW1lLCB0eXBlOiBmaWVsZC50eXBlfSkpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2xvYWRVcmwnLFxuICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICByZXN1bHQ6IHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBkZXRhaWxzOiBgRGF0YSBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGZyb20gJHt1cmx9YCxcbiAgICAgIGRhdGFzZXROYW1lOiBmaWxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWVBbmRUeXBlOiBKU09OLnN0cmluZ2lmeShjb2x1bW5OYW1lQW5kVHlwZSlcbiAgICB9LFxuICAgIGRhdGE6IHtibG9iLCBmaWxlTmFtZSwgYWRkRGF0YVRvTWFwLCBwYXJzZWREYXRhfVxuICB9O1xufVxuXG5mdW5jdGlvbiBMb2FkVXJsTWVzc2FnZSh7b3V0cHV0fTogQ3VzdG9tRnVuY3Rpb25DYWxsKSB7XG4gIGNvbnN0IG91dHB1dERhdGEgPSBvdXRwdXQuZGF0YSBhcyBPdXRwdXREYXRhUHJvcHM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvdXRwdXREYXRhLmFkZERhdGFUb01hcCh7XG4gICAgICBkYXRhc2V0czogb3V0cHV0RGF0YS5wYXJzZWREYXRhLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICAgICAgICBjZW50ZXJNYXA6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW291dHB1dERhdGFdKTtcblxuICByZXR1cm4gPD48Lz47XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUxvYWRVcmxNZXNzYWdlQ2FsbGJhY2socHJvcHM6IEN1c3RvbUZ1bmN0aW9uQ2FsbCk6IFJlYWN0Tm9kZSB8IG51bGwge1xuICByZXR1cm4gPExvYWRVcmxNZXNzYWdlIHsuLi5wcm9wc30gLz47XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFLQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFPQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBa0QsU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFGLHdCQUFBRSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFB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