kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
120 lines (117 loc) • 24.9 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _src3 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/reducers/src");
var _injector = require("../injector");
var _sidePanelTitle = _interopRequireDefault(require("./side-panel-title"));
var _effectList = _interopRequireDefault(require("./effect-list"));
var _effectTypeSelector = _interopRequireDefault(require("./effect-type-selector"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
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; }
var StyledEffectPanelContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n pointer-events: none !important; /* prevent padding from blocking input */\n flex-grow: 1;\n justify-content: space-between;\n overflow: hidden;\n\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"])));
// top right position absolute
var StyledEffectPanel = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n top: 0;\n background-color: ", ";\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n overflow: hidden;\n"])), function (props) {
return props.theme.sidePanelBg;
});
var StyledEffectPanelHeader = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n padding: ", ";\n border-bottom: 1px solid ", ";\n min-width: ", "px;\n"])), function (_ref) {
var theme = _ref.theme;
return "".concat(theme.effectPanelPaddingTop, "px ").concat(theme.effectPanelPaddingSide, "px 4px ").concat(theme.effectPanelPaddingSide, "px");
}, function (props) {
return props.theme.borderColor;
}, function (_ref2) {
var theme = _ref2.theme;
return theme.effectPanelWidth;
});
var StyledEffectPanelContent = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n padding: ", ";\n overflow: overlay;\n display: flex;\n flex-direction: column;\n"])), function (props) {
return props.theme.sidePanelScrollBar;
}, function (props) {
return props.extended ? '32px' : '10px 0px 10px 0px';
});
EffectManagerFactory.deps = [_effectList["default"], _sidePanelTitle["default"], _effectTypeSelector["default"]];
function EffectManagerFactory(EffectList, SidePanelTitle, EffectTypeSelector) {
var EffectManager = function EffectManager(props) {
var intl = props.intl,
visStateActions = props.visStateActions,
visState = props.visState,
children = props.children;
var effects = visState.effects,
effectOrder = visState.effectOrder;
var visStateAddEffect = visStateActions.addEffect;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
typeSelectorOpened = _useState2[0],
setTypeSelectorOpened = _useState2[1];
// Prevent shadow effect from being added multiple times
var effectOptions = (0, _react.useMemo)(function () {
var hasShadow = effects.some(function (effect) {
return effect.type === _src2.LIGHT_AND_SHADOW_EFFECT.type;
});
return _src2.EFFECT_DESCRIPTIONS.map(function (desc) {
return _objectSpread(_objectSpread({}, desc), {}, {
disabled: Boolean(hasShadow && desc.type === _src2.LIGHT_AND_SHADOW_EFFECT.type)
});
});
}, [effects]);
var onAddEffect = (0, _react.useCallback)(function (type) {
visStateAddEffect({
type: type
});
}, [visStateAddEffect]);
var onTypeSelectOpen = (0, _react.useCallback)(function () {
setTypeSelectorOpened(true);
}, []);
var onTypeSelectClose = (0, _react.useCallback)(function () {
setTypeSelectorOpened(false);
}, []);
return /*#__PURE__*/_react["default"].createElement(StyledEffectPanelContainer, {
className: "effect-manager"
}, /*#__PURE__*/_react["default"].createElement(StyledEffectPanel, null, /*#__PURE__*/_react["default"].createElement(StyledEffectPanelHeader, {
className: "effect-panel-header"
}, /*#__PURE__*/_react["default"].createElement(SidePanelTitle, {
className: "effect-manager-title",
title: intl.formatMessage({
id: 'effectManager.effects'
})
}, /*#__PURE__*/_react["default"].createElement(EffectTypeSelector, {
options: effectOptions,
onSelect: onAddEffect,
onOpen: onTypeSelectOpen,
onBlur: onTypeSelectClose
}))), /*#__PURE__*/_react["default"].createElement(StyledEffectPanelContent, {
extended: typeSelectorOpened && effects.length === 0
}, /*#__PURE__*/_react["default"].createElement(EffectList, {
effects: effects,
effectOrder: effectOrder,
visStateActions: visStateActions,
isSortable: true
}))), children);
};
return (0, _injector.withState)([_src3.visStateLens], function (state) {
return state;
}, {
visStateActions: {
addEffect: _src.addEffect,
updateEffect: _src.updateEffect,
removeEffect: _src.removeEffect,
reorderEffect: _src.reorderEffect
}
})((0, _reactIntl.injectIntl)(EffectManager));
}
var _default = exports["default"] = EffectManagerFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3NyYyIsIl9zcmMyIiwiX3NyYzMiLCJfaW5qZWN0b3IiLCJfc2lkZVBhbmVsVGl0bGUiLCJfZWZmZWN0TGlzdCIsIl9lZmZlY3RUeXBlU2VsZWN0b3IiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJTdHlsZWRFZmZlY3RQYW5lbENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiU3R5bGVkRWZmZWN0UGFuZWwiLCJwcm9wcyIsInRoZW1lIiwic2lkZVBhbmVsQmciLCJTdHlsZWRFZmZlY3RQYW5lbEhlYWRlciIsIl9yZWYiLCJjb25jYXQiLCJlZmZlY3RQYW5lbFBhZGRpbmdUb3AiLCJlZmZlY3RQYW5lbFBhZGRpbmdTaWRlIiwiYm9yZGVyQ29sb3IiLCJfcmVmMiIsImVmZmVjdFBhbmVsV2lkdGgiLCJTdHlsZWRFZmZlY3RQYW5lbENvbnRlbnQiLCJzaWRlUGFuZWxTY3JvbGxCYXIiLCJleHRlbmRlZCIsIkVmZmVjdE1hbmFnZXJGYWN0b3J5IiwiZGVwcyIsIkVmZmVjdExpc3RGYWN0b3J5IiwiU2lkZVBhbmVsVGl0bGVGYWN0b3J5IiwiRWZmZWN0VHlwZVNlbGVjdG9yRmFjdG9yeSIsIkVmZmVjdExpc3QiLCJTaWRlUGFuZWxUaXRsZSIsIkVmZmVjdFR5cGVTZWxlY3RvciIsIkVmZmVjdE1hbmFnZXIiLCJpbnRsIiwidmlzU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJjaGlsZHJlbiIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsInZpc1N0YXRlQWRkRWZmZWN0IiwiYWRkRWZmZWN0IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwidHlwZVNlbGVjdG9yT3BlbmVkIiwic2V0VHlwZVNlbGVjdG9yT3BlbmVkIiwiZWZmZWN0T3B0aW9ucyIsInVzZU1lbW8iLCJoYXNTaGFkb3ciLCJzb21lIiwiZWZmZWN0IiwidHlwZSIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRUZGRUNUX0RFU0NSSVBUSU9OUyIsIm1hcCIsImRlc2MiLCJkaXNhYmxlZCIsIkJvb2xlYW4iLCJvbkFkZEVmZmVjdCIsInVzZUNhbGxiYWNrIiwib25UeXBlU2VsZWN0T3BlbiIsIm9uVHlwZVNlbGVjdENsb3NlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInRpdGxlIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwib3B0aW9ucyIsIm9uU2VsZWN0Iiwib25PcGVuIiwib25CbHVyIiwiaXNTb3J0YWJsZSIsIndpdGhTdGF0ZSIsInZpc1N0YXRlTGVucyIsInN0YXRlIiwidXBkYXRlRWZmZWN0IiwicmVtb3ZlRWZmZWN0IiwicmVvcmRlckVmZmVjdCIsImluamVjdEludGwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvZWZmZWN0cy9lZmZlY3QtbWFuYWdlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7aW5qZWN0SW50bCwgSW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcblxuaW1wb3J0IHtcbiAgYWRkRWZmZWN0LFxuICB1cGRhdGVFZmZlY3QsXG4gIHJlbW92ZUVmZmVjdCxcbiAgcmVvcmRlckVmZmVjdCxcbiAgQWN0aW9uSGFuZGxlclxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCwgRUZGRUNUX0RFU0NSSVBUSU9OU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHt2aXNTdGF0ZUxlbnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHt3aXRoU3RhdGV9IGZyb20gJy4uL2luamVjdG9yJztcbmltcG9ydCBTaWRlUGFuZWxUaXRsZUZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsLXRpdGxlJztcbmltcG9ydCBFZmZlY3RMaXN0RmFjdG9yeSBmcm9tICcuL2VmZmVjdC1saXN0JztcbmltcG9ydCBFZmZlY3RUeXBlU2VsZWN0b3JGYWN0b3J5LCB7RWZmZWN0VHlwZVNlbGVjdG9yUHJvcHN9IGZyb20gJy4vZWZmZWN0LXR5cGUtc2VsZWN0b3InO1xuXG5leHBvcnQgdHlwZSBFZmZlY3RNYW5hZ2VyU3RhdGUgPSB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgdmlzU3RhdGVBY3Rpb25zOiB7XG4gICAgYWRkRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBhZGRFZmZlY3Q+O1xuICAgIHVwZGF0ZUVmZmVjdDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdXBkYXRlRWZmZWN0PjtcbiAgICByZW1vdmVFZmZlY3Q6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHJlbW92ZUVmZmVjdD47XG4gICAgcmVvcmRlckVmZmVjdDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgcmVvcmRlckVmZmVjdD47XG4gIH07XG4gIGVmZmVjdHM6IEVmZmVjdFtdO1xuICBlZmZlY3RPcmRlcjogc3RyaW5nW107XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuZXhwb3J0IHR5cGUgRWZmZWN0TWFuYWdlclByb3BzID0gRWZmZWN0TWFuYWdlcldpdGhJbnRsUHJvcCAmIEVmZmVjdE1hbmFnZXJTdGF0ZTtcblxuZXhwb3J0IHR5cGUgRWZmZWN0TWFuYWdlcldpdGhJbnRsUHJvcCA9IHtpbnRsOiBJbnRsU2hhcGV9O1xuXG5jb25zdCBTdHlsZWRFZmZlY3RQYW5lbENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gIGZsZXgtZ3JvdzogMTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfVxuYDtcblxuLy8gdG9wIHJpZ2h0IHBvc2l0aW9uIGFic29sdXRlXG5jb25zdCBTdHlsZWRFZmZlY3RQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxCZ307XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtZ3JvdzogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmA7XG5cbmNvbnN0IFN0eWxlZEVmZmVjdFBhbmVsSGVhZGVyID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogJHsoe3RoZW1lfSkgPT5cbiAgICBgJHt0aGVtZS5lZmZlY3RQYW5lbFBhZGRpbmdUb3B9cHggJHt0aGVtZS5lZmZlY3RQYW5lbFBhZGRpbmdTaWRlfXB4IDRweCAke3RoZW1lLmVmZmVjdFBhbmVsUGFkZGluZ1NpZGV9cHhgfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyQ29sb3J9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZX0pID0+IHRoZW1lLmVmZmVjdFBhbmVsV2lkdGh9cHg7XG5gO1xuXG50eXBlIFN0eWxlZEVmZmVjdFBhbmVsQ29udGVudFByb3BzID0ge1xuICBleHRlbmRlZD86IGJvb2xlYW47XG59O1xuY29uc3QgU3R5bGVkRWZmZWN0UGFuZWxDb250ZW50ID0gc3R5bGVkLmRpdjxTdHlsZWRFZmZlY3RQYW5lbENvbnRlbnRQcm9wcz5gXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsU2Nyb2xsQmFyfTtcbiAgcGFkZGluZzogJHtwcm9wcyA9PiAocHJvcHMuZXh0ZW5kZWQgPyAnMzJweCcgOiAnMTBweCAwcHggMTBweCAwcHgnKX07XG4gIG92ZXJmbG93OiBvdmVybGF5O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYDtcblxuRWZmZWN0TWFuYWdlckZhY3RvcnkuZGVwcyA9IFtFZmZlY3RMaXN0RmFjdG9yeSwgU2lkZVBhbmVsVGl0bGVGYWN0b3J5LCBFZmZlY3RUeXBlU2VsZWN0b3JGYWN0b3J5XTtcblxuZnVuY3Rpb24gRWZmZWN0TWFuYWdlckZhY3RvcnkoXG4gIEVmZmVjdExpc3Q6IFJldHVyblR5cGU8dHlwZW9mIEVmZmVjdExpc3RGYWN0b3J5PixcbiAgU2lkZVBhbmVsVGl0bGU6IFJldHVyblR5cGU8dHlwZW9mIFNpZGVQYW5lbFRpdGxlRmFjdG9yeT4sXG4gIEVmZmVjdFR5cGVTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0VHlwZVNlbGVjdG9yRmFjdG9yeT5cbik6IFJlYWN0LkZDPEVmZmVjdE1hbmFnZXJQcm9wcz4ge1xuICBjb25zdCBFZmZlY3RNYW5hZ2VyID0gKHByb3BzOiBFZmZlY3RNYW5hZ2VyV2l0aEludGxQcm9wICYgRWZmZWN0TWFuYWdlclN0YXRlKSA9PiB7XG4gICAgY29uc3Qge2ludGwsIHZpc1N0YXRlQWN0aW9ucywgdmlzU3RhdGUsIGNoaWxkcmVufSA9IHByb3BzO1xuICAgIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSB2aXNTdGF0ZTtcbiAgICBjb25zdCB7YWRkRWZmZWN0OiB2aXNTdGF0ZUFkZEVmZmVjdH0gPSB2aXNTdGF0ZUFjdGlvbnM7XG4gICAgY29uc3QgW3R5cGVTZWxlY3Rvck9wZW5lZCwgc2V0VHlwZVNlbGVjdG9yT3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8vIFByZXZlbnQgc2hhZG93IGVmZmVjdCBmcm9tIGJlaW5nIGFkZGVkIG11bHRpcGxlIHRpbWVzXG4gICAgY29uc3QgZWZmZWN0T3B0aW9uczogRWZmZWN0VHlwZVNlbGVjdG9yUHJvcHNbJ29wdGlvbnMnXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzU2hhZG93ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRUZGRUNUX0RFU0NSSVBUSU9OUy5tYXAoZGVzYyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVzYyxcbiAgICAgICAgICBkaXNhYmxlZDogQm9vbGVhbihoYXNTaGFkb3cgJiYgZGVzYy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSwgW2VmZmVjdHNdKTtcblxuICAgIGNvbnN0IG9uQWRkRWZmZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgICB0eXBlID0+IHtcbiAgICAgICAgdmlzU3RhdGVBZGRFZmZlY3Qoe3R5cGV9KTtcbiAgICAgIH0sXG4gICAgICBbdmlzU3RhdGVBZGRFZmZlY3RdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uVHlwZVNlbGVjdE9wZW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXRUeXBlU2VsZWN0b3JPcGVuZWQodHJ1ZSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgb25UeXBlU2VsZWN0Q2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXRUeXBlU2VsZWN0b3JPcGVuZWQoZmFsc2UpO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkRWZmZWN0UGFuZWxDb250YWluZXIgY2xhc3NOYW1lPVwiZWZmZWN0LW1hbmFnZXJcIj5cbiAgICAgICAgPFN0eWxlZEVmZmVjdFBhbmVsPlxuICAgICAgICAgIDxTdHlsZWRFZmZlY3RQYW5lbEhlYWRlciBjbGFzc05hbWU9XCJlZmZlY3QtcGFuZWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8U2lkZVBhbmVsVGl0bGVcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZWZmZWN0LW1hbmFnZXItdGl0bGVcIlxuICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2VmZmVjdE1hbmFnZXIuZWZmZWN0cyd9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEVmZmVjdFR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIG9wdGlvbnM9e2VmZmVjdE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e29uQWRkRWZmZWN0fVxuICAgICAgICAgICAgICAgIG9uT3Blbj17b25UeXBlU2VsZWN0T3Blbn1cbiAgICAgICAgICAgICAgICBvbkJsdXI9e29uVHlwZVNlbGVjdENsb3NlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TaWRlUGFuZWxUaXRsZT5cbiAgICAgICAgICA8L1N0eWxlZEVmZmVjdFBhbmVsSGVhZGVyPlxuXG4gICAgICAgICAgPFN0eWxlZEVmZmVjdFBhbmVsQ29udGVudCBleHRlbmRlZD17dHlwZVNlbGVjdG9yT3BlbmVkICYmIGVmZmVjdHMubGVuZ3RoID09PSAwfT5cbiAgICAgICAgICAgIDxFZmZlY3RMaXN0XG4gICAgICAgICAgICAgIGVmZmVjdHM9e2VmZmVjdHN9XG4gICAgICAgICAgICAgIGVmZmVjdE9yZGVyPXtlZmZlY3RPcmRlcn1cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zPXt2aXNTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIGlzU29ydGFibGU9e3RydWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU3R5bGVkRWZmZWN0UGFuZWxDb250ZW50PlxuICAgICAgICA8L1N0eWxlZEVmZmVjdFBhbmVsPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1N0eWxlZEVmZmVjdFBhbmVsQ29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIHdpdGhTdGF0ZShbdmlzU3RhdGVMZW5zXSwgc3RhdGUgPT4gc3RhdGUsIHtcbiAgICB2aXNTdGF0ZUFjdGlvbnM6IHthZGRFZmZlY3QsIHVwZGF0ZUVmZmVjdCwgcmVtb3ZlRWZmZWN0LCByZW9yZGVyRWZmZWN0fVxuICB9KShpbmplY3RJbnRsKEVmZmVjdE1hbmFnZXIpKSBhcyBSZWFjdC5GQzxFZmZlY3RNYW5hZ2VyUHJvcHM+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBFZmZlY3RNYW5hZ2VyRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksSUFBQSxHQUFBSixPQUFBO0FBT0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBTixPQUFBO0FBSUEsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsZUFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUEwRixJQUFBVyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBdEIxRjtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFqQix3QkFBQWlCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUks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
;