kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
181 lines (173 loc) • 26.3 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ContainerFactory = ContainerFactory;
exports["default"] = exports.appInjector = exports.ERROR_MSG = void 0;
exports.injectComponents = injectComponents;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(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 _window = require("global/window");
var _injector = require("./injector");
var _keplerGl = _interopRequireDefault(require("./kepler-gl"));
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
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; }
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; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var ERROR_MSG = exports.ERROR_MSG = {
noState: "kepler.gl state does not exist. " + "You might forget to mount keplerGlReducer in your root reducer." + "If it is not mounted as state.keplerGl by default, you need to provide getState as a prop"
};
var mapStateToProps = function mapStateToProps(state, props) {
return _objectSpread({
state: state
}, props);
};
var dispatchToProps = function dispatchToProps(dispatch) {
return {
dispatch: dispatch
};
};
var connector = (0, _lib.connect)(mapStateToProps, dispatchToProps);
ContainerFactory.deps = [_keplerGl["default"]];
function ContainerFactory(KeplerGl) {
/** @lends KeplerGl */
/**
* Main Kepler.gl Component
* @param {Object} props
*
* @param {string} props.id - _required_
*
* - Default: `map`
* The id of this KeplerGl instance. `id` is required if you have multiple
* KeplerGl instances in your app. It defines the prop name of the KeplerGl state that is
* stored in the KeplerGl reducer. For example, the state of the KeplerGl component with id `foo` is
* stored in `state.keplerGl.foo`.
*
* In case you create multiple kepler.gl instances using the same id, the kepler.gl state defined by the entry will be
* overridden by the latest instance and reset to a blank state.
* @param {string} props.mapboxApiAccessToken - _required_
* @param {string} props.mapboxApiUrl - _optional_
* @param {Boolean} props.mapStylesReplaceDefault - _optional_
* @param {object} props.initialUiState - _optional_
* You can create a free account at [www.mapbox.com](www.mapbox.com) and create a token at
* [www.mapbox.com/account/access-tokens](www.mapbox.com/account/access-tokens)
*
*
* @param {Number} props.width - _required_ Width of the KeplerGl UI.
* @public
*/
function usePreviousId(value) {
var ref = (0, _react.useRef)();
(0, _react.useEffect)(function () {
ref.current = value;
});
return ref.current;
}
var Container = function Container(props) {
var _props$id = props.id,
id = _props$id === void 0 ? 'map' : _props$id,
_props$getState = props.getState,
getState = _props$getState === void 0 ? function (state) {
return state.keplerGl;
} : _props$getState,
_props$mint = props.mint,
mint = _props$mint === void 0 ? true : _props$mint,
mapboxApiAccessToken = props.mapboxApiAccessToken,
mapboxApiUrl = props.mapboxApiUrl,
mapStylesReplaceDefault = props.mapStylesReplaceDefault,
initialUiState = props.initialUiState,
state = props.state;
var prevId = usePreviousId(id);
var dispatch = (0, _lib.useDispatch)();
(0, _react.useEffect)(function () {
// add a new entry to reducer
dispatch((0, _src.registerEntry)({
id: id,
mint: mint,
mapboxApiAccessToken: mapboxApiAccessToken,
mapboxApiUrl: mapboxApiUrl,
mapStylesReplaceDefault: mapStylesReplaceDefault,
initialUiState: initialUiState
}));
// initialize plugins
if ((0, _src2.getApplicationConfig)().plugins.length) {
(0, _src2.getApplicationConfig)().plugins.forEach( /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(plugin) {
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return plugin.init();
case 2:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}());
}
// cleanup
return function () {
if (mint !== false) {
// delete entry in reducer
dispatch((0, _src.deleteEntry)(id));
}
};
}, [id, dispatch, initialUiState, mapStylesReplaceDefault, mapboxApiAccessToken, mapboxApiUrl, mint]);
(0, _react.useEffect)(function () {
// check if id has changed, if true, copy state over
if (prevId && id && prevId !== id) {
dispatch((0, _src.renameEntry)(prevId, id));
}
}, [dispatch, prevId, id]);
var stateSelector = (0, _react.useMemo)(function () {
return function (keplerState) {
if (!getState(keplerState)) {
// log error
_window.console.error(ERROR_MSG.noState);
return null;
}
return getState(keplerState)[id];
};
}, [id, getState]);
var forwardDispatch = (0, _react.useMemo)(function () {
return (0, _src.forwardTo)(id, dispatch);
}, [id, dispatch]);
// const selector = getSelector(id, getState);
if (!stateSelector || !stateSelector(state)) {
// instance state hasn't been mounted yet
return /*#__PURE__*/_react["default"].createElement("div", null);
}
return /*#__PURE__*/_react["default"].createElement(KeplerGl, (0, _extends2["default"])({}, props, {
id: id,
selector: stateSelector,
dispatch: forwardDispatch
}));
};
return connector(Container);
}
var allDependencies = (0, _injector.flattenDeps)([], ContainerFactory);
// provide all dependencies to appInjector
var appInjector = exports.appInjector = allDependencies.reduce(function (inj, factory) {
return inj.provide(factory, factory);
}, (0, _injector.injector)());
// Helper to inject custom components and return kepler.gl container
function injectComponents() {
var recipes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return (0, _injector.provideRecipesToInjector)(recipes, appInjector).get(ContainerFactory);
}
var InjectedContainer = appInjector.get(ContainerFactory);
var _default = exports["default"] = InjectedContainer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbGliIiwiX3dpbmRvdyIsIl9pbmplY3RvciIsIl9rZXBsZXJHbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3JjIiwiX3NyYzIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJFUlJPUl9NU0ciLCJleHBvcnRzIiwibm9TdGF0ZSIsIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwicHJvcHMiLCJkaXNwYXRjaFRvUHJvcHMiLCJkaXNwYXRjaCIsImNvbm5lY3RvciIsImNvbm5lY3QiLCJDb250YWluZXJGYWN0b3J5IiwiZGVwcyIsIktlcGxlckdsRmFjdG9yeSIsIktlcGxlckdsIiwidXNlUHJldmlvdXNJZCIsInZhbHVlIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsIkNvbnRhaW5lciIsIl9wcm9wcyRpZCIsImlkIiwiX3Byb3BzJGdldFN0YXRlIiwiZ2V0U3RhdGUiLCJrZXBsZXJHbCIsIl9wcm9wcyRtaW50IiwibWludCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwibWFwU3R5bGVzUmVwbGFjZURlZmF1bHQiLCJpbml0aWFsVWlTdGF0ZSIsInByZXZJZCIsInVzZURpc3BhdGNoIiwicmVnaXN0ZXJFbnRyeSIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwicGx1Z2lucyIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInBsdWdpbiIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbml0Iiwic3RvcCIsIl94IiwiZGVsZXRlRW50cnkiLCJyZW5hbWVFbnRyeSIsInN0YXRlU2VsZWN0b3IiLCJ1c2VNZW1vIiwia2VwbGVyU3RhdGUiLCJDb25zb2xlIiwiZXJyb3IiLCJmb3J3YXJkRGlzcGF0Y2giLCJmb3J3YXJkVG8iLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwic2VsZWN0b3IiLCJhbGxEZXBlbmRlbmNpZXMiLCJmbGF0dGVuRGVwcyIsImFwcEluamVjdG9yIiwicmVkdWNlIiwiaW5qIiwiZmFjdG9yeSIsInByb3ZpZGUiLCJpbmplY3RvciIsImluamVjdENvbXBvbmVudHMiLCJyZWNpcGVzIiwidW5kZWZpbmVkIiwicHJvdmlkZVJlY2lwZXNUb0luamVjdG9yIiwiSW5qZWN0ZWRDb250YWluZXIiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZVJlZiwgQ29tcG9uZW50VHlwZSwgRGlzcGF0Y2gsIHVzZUVmZmVjdCwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0LCBDb25uZWN0ZWRQcm9wcywgdXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtpbmplY3RvciwgcHJvdmlkZVJlY2lwZXNUb0luamVjdG9yLCBmbGF0dGVuRGVwc30gZnJvbSAnLi9pbmplY3Rvcic7XG5pbXBvcnQgS2VwbGVyR2xGYWN0b3J5IGZyb20gJy4va2VwbGVyLWdsJztcbmltcG9ydCB7cmVnaXN0ZXJFbnRyeSwgZGVsZXRlRW50cnksIHJlbmFtZUVudHJ5LCBmb3J3YXJkVG99IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0tlcGxlckdsU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9NU0cgPSB7XG4gIG5vU3RhdGU6XG4gICAgYGtlcGxlci5nbCBzdGF0ZSBkb2VzIG5vdCBleGlzdC4gYCArXG4gICAgYFlvdSBtaWdodCBmb3JnZXQgdG8gbW91bnQga2VwbGVyR2xSZWR1Y2VyIGluIHlvdXIgcm9vdCByZWR1Y2VyLmAgK1xuICAgIGBJZiBpdCBpcyBub3QgbW91bnRlZCBhcyBzdGF0ZS5rZXBsZXJHbCBieSBkZWZhdWx0LCB5b3UgbmVlZCB0byBwcm92aWRlIGdldFN0YXRlIGFzIGEgcHJvcGBcbn07XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZTogYW55LCBwcm9wczogQ29udGFpbmVyUHJvcHMpID0+ICh7c3RhdGUsIC4uLnByb3BzfSk7XG5jb25zdCBkaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2g6IERpc3BhdGNoPGFueT4pID0+ICh7ZGlzcGF0Y2h9KTtcbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBkaXNwYXRjaFRvUHJvcHMpO1xuXG50eXBlIENvbnRhaW5lclByb3BzID0ge1xuICBpZDogc3RyaW5nO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0PzogYm9vbGVhbjtcbiAgaW5pdGlhbFVpU3RhdGU/OiBvYmplY3Q7XG4gIHdpZHRoOiBudW1iZXI7XG4gIG1pbnQ/OiBib29sZWFuO1xuICBnZXRTdGF0ZTogKHN0YXRlOiBhbnkpID0+IEtlcGxlckdsU3RhdGU7XG59O1xuXG50eXBlIFByb3BzRnJvbVJlZHV4ID0gQ29ubmVjdGVkUHJvcHM8dHlwZW9mIGNvbm5lY3Rvcj4gJiBDb250YWluZXJQcm9wcztcblxuQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW0tlcGxlckdsRmFjdG9yeV07XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250YWluZXJGYWN0b3J5KFxuICBLZXBsZXJHbDogUmV0dXJuVHlwZTx0eXBlb2YgS2VwbGVyR2xGYWN0b3J5PlxuKTogQ29tcG9uZW50VHlwZTxQcm9wc0Zyb21SZWR1eD4ge1xuICAvKiogQGxlbmRzIEtlcGxlckdsICovXG4gIC8qKlxuICAgICogTWFpbiBLZXBsZXIuZ2wgQ29tcG9uZW50XG4gICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcHMuaWQgLSBfcmVxdWlyZWRfXG4gICAgKlxuICAgICogLSBEZWZhdWx0OiBgbWFwYFxuICAgICogVGhlIGlkIG9mIHRoaXMgS2VwbGVyR2wgaW5zdGFuY2UuIGBpZGAgaXMgcmVxdWlyZWQgaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAqIEtlcGxlckdsIGluc3RhbmNlcyBpbiB5b3VyIGFwcC4gSXQgZGVmaW5lcyB0aGUgcHJvcCBuYW1lIG9mIHRoZSBLZXBsZXJHbCBzdGF0ZSB0aGF0IGlzXG4gICAgKiBzdG9yZWQgaW4gdGhlIEtlcGxlckdsIHJlZHVjZXIuIEZvciBleGFtcGxlLCB0aGUgc3RhdGUgb2YgdGhlIEtlcGxlckdsIGNvbXBvbmVudCB3aXRoIGlkIGBmb29gIGlzXG4gICAgKiBzdG9yZWQgaW4gYHN0YXRlLmtlcGxlckdsLmZvb2AuXG4gICAgKlxuICAgICogSW4gY2FzZSB5b3UgY3JlYXRlIG11bHRpcGxlIGtlcGxlci5nbCBpbnN0YW5jZXMgdXNpbmcgdGhlIHNhbWUgaWQsIHRoZSBrZXBsZXIuZ2wgc3RhdGUgZGVmaW5lZCBieSB0aGUgZW50cnkgd2lsbCBiZVxuICAgICogb3ZlcnJpZGRlbiBieSB0aGUgbGF0ZXN0IGluc3RhbmNlIGFuZCByZXNldCB0byBhIGJsYW5rIHN0YXRlLlxuICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuIC0gX3JlcXVpcmVkX1xuICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLm1hcGJveEFwaVVybCAtIF9vcHRpb25hbF9cbiAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMubWFwU3R5bGVzUmVwbGFjZURlZmF1bHQgLSBfb3B0aW9uYWxfXG4gICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaW5pdGlhbFVpU3RhdGUgLSBfb3B0aW9uYWxfXG5cbiAgICAqIFlvdSBjYW4gY3JlYXRlIGEgZnJlZSBhY2NvdW50IGF0IFt3d3cubWFwYm94LmNvbV0od3d3Lm1hcGJveC5jb20pIGFuZCBjcmVhdGUgYSB0b2tlbiBhdFxuICAgICogW3d3dy5tYXBib3guY29tL2FjY291bnQvYWNjZXNzLXRva2Vuc10od3d3Lm1hcGJveC5jb20vYWNjb3VudC9hY2Nlc3MtdG9rZW5zKVxuICAgICpcbiAgICAqXG4gICAgKiBAcGFyYW0ge051bWJlcn0gcHJvcHMud2lkdGggLSBfcmVxdWlyZWRfIFdpZHRoIG9mIHRoZSBLZXBsZXJHbCBVSS5cbiAgICAqIEBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gdXNlUHJldmlvdXNJZCh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZWYuY3VycmVudDtcbiAgfVxuXG4gIGNvbnN0IENvbnRhaW5lcjogUmVhY3QuRkM8UHJvcHNGcm9tUmVkdXg+ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIGRlZmF1bHQgaWQgYW5kIGFkZHJlc3MgaWYgbm90IHByb3ZpZGVkXG4gICAgICBpZCA9ICdtYXAnLFxuICAgICAgZ2V0U3RhdGUgPSBzdGF0ZSA9PiBzdGF0ZS5rZXBsZXJHbCxcbiAgICAgIG1pbnQgPSB0cnVlLFxuICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICBtYXBib3hBcGlVcmwsXG4gICAgICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCxcbiAgICAgIGluaXRpYWxVaVN0YXRlLFxuICAgICAgc3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcHJldklkID0gdXNlUHJldmlvdXNJZChpZCk7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIGFkZCBhIG5ldyBlbnRyeSB0byByZWR1Y2VyXG4gICAgICBkaXNwYXRjaChcbiAgICAgICAgcmVnaXN0ZXJFbnRyeSh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgbWludCxcbiAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQsXG4gICAgICAgICAgaW5pdGlhbFVpU3RhdGVcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGluaXRpYWxpemUgcGx1Z2luc1xuICAgICAgaWYgKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkucGx1Z2lucy5sZW5ndGgpIHtcbiAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5wbHVnaW5zLmZvckVhY2goYXN5bmMgcGx1Z2luID0+IHtcbiAgICAgICAgICBhd2FpdCBwbHVnaW4uaW5pdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gY2xlYW51cFxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKG1pbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZGVsZXRlIGVudHJ5IGluIHJlZHVjZXJcbiAgICAgICAgICBkaXNwYXRjaChkZWxldGVFbnRyeShpZCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sIFtcbiAgICAgIGlkLFxuICAgICAgZGlzcGF0Y2gsXG4gICAgICBpbml0aWFsVWlTdGF0ZSxcbiAgICAgIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0LFxuICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICBtYXBib3hBcGlVcmwsXG4gICAgICBtaW50XG4gICAgXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgaWQgaGFzIGNoYW5nZWQsIGlmIHRydWUsIGNvcHkgc3RhdGUgb3ZlclxuICAgICAgaWYgKHByZXZJZCAmJiBpZCAmJiBwcmV2SWQgIT09IGlkKSB7XG4gICAgICAgIGRpc3BhdGNoKHJlbmFtZUVudHJ5KHByZXZJZCwgaWQpKTtcbiAgICAgIH1cbiAgICB9LCBbZGlzcGF0Y2gsIHByZXZJZCwgaWRdKTtcblxuICAgIGNvbnN0IHN0YXRlU2VsZWN0b3IgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4ga2VwbGVyU3RhdGUgPT4ge1xuICAgICAgICBpZiAoIWdldFN0YXRlKGtlcGxlclN0YXRlKSkge1xuICAgICAgICAgIC8vIGxvZyBlcnJvclxuICAgICAgICAgIENvbnNvbGUuZXJyb3IoRVJST1JfTVNHLm5vU3RhdGUpO1xuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFN0YXRlKGtlcGxlclN0YXRlKVtpZF07XG4gICAgICB9LFxuICAgICAgW2lkLCBnZXRTdGF0ZV1cbiAgICApO1xuICAgIGNvbnN0IGZvcndhcmREaXNwYXRjaCA9IHVzZU1lbW8oKCkgPT4gZm9yd2FyZFRvKGlkLCBkaXNwYXRjaCksIFtpZCwgZGlzcGF0Y2hdKTtcblxuICAgIC8vIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoaWQsIGdldFN0YXRlKTtcblxuICAgIGlmICghc3RhdGVTZWxlY3RvciB8fCAhc3RhdGVTZWxlY3RvcihzdGF0ZSkpIHtcbiAgICAgIC8vIGluc3RhbmNlIHN0YXRlIGhhc24ndCBiZWVuIG1vdW50ZWQgeWV0XG4gICAgICByZXR1cm4gPGRpdiAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gPEtlcGxlckdsIHsuLi5wcm9wc30gaWQ9e2lkfSBzZWxlY3Rvcj17c3RhdGVTZWxlY3Rvcn0gZGlzcGF0Y2g9e2ZvcndhcmREaXNwYXRjaH0gLz47XG4gIH07XG5cbiAgcmV0dXJuIGNvbm5lY3RvcihDb250YWluZXIpO1xufVxuXG5jb25zdCBhbGxEZXBlbmRlbmNpZXMgPSBmbGF0dGVuRGVwcyhbXSwgQ29udGFpbmVyRmFjdG9yeSk7XG5cbi8vIHByb3ZpZGUgYWxsIGRlcGVuZGVuY2llcyB0byBhcHBJbmplY3RvclxuZXhwb3J0IGNvbnN0IGFwcEluamVjdG9yID0gYWxsRGVwZW5kZW5jaWVzLnJlZHVjZShcbiAgKGluaiwgZmFjdG9yeSkgPT4gaW5qLnByb3ZpZGUoZmFjdG9yeSwgZmFjdG9yeSksXG4gIGluamVjdG9yKClcbik7XG5cbi8vIEhlbHBlciB0byBpbmplY3QgY3VzdG9tIGNvbXBvbmVudHMgYW5kIHJldHVybiBrZXBsZXIuZ2wgY29udGFpbmVyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29tcG9uZW50cyhyZWNpcGVzID0gW10pIHtcbiAgcmV0dXJuIHByb3ZpZGVSZWNpcGVzVG9JbmplY3RvcihyZWNpcGVzLCBhcHBJbmplY3RvcikuZ2V0KENvbnRhaW5lckZhY3RvcnkpO1xufVxuXG5jb25zdCBJbmplY3RlZENvbnRhaW5lciA9IGFwcEluamVjdG9yLmdldChDb250YWluZXJGYWN0b3J5KTtcblxuZXhwb3J0IGRlZmF1bHQgSW5qZWN0ZWRD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
;