UNPKG

kepler.gl

Version:

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

130 lines (129 loc) 21.8 kB
"use strict"; 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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _classnames3 = _interopRequireDefault(require("classnames")); var _utilities = require("@dnd-kit/utilities"); var _sortable = require("@dnd-kit/sortable"); var _constants = require("@kepler.gl/constants"); var _utils = require("@kepler.gl/utils"); var _dndLayerItems = require("../common/dnd-layer-items"); var _effectPanel = _interopRequireDefault(require("./effect-panel")); var _templateObject, _templateObject2; // 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; } var Container = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"]))); var SortableStyledItem = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n z-index: ", ";\n transition: ", ";\n transform: ", ";\n outline: none;\n &.sorting {\n opacity: 0.3;\n pointer-events: none;\n }\n &.sorting-effects .effect-panel__header {\n background-color: ", ";\n font-family: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n .effect__drag-handle {\n opacity: 1;\n color: ", ";\n }\n }\n"])), function (props) { return props.theme.dropdownWrapperZ + 1; }, function (props) { return props.transition; }, function (props) { return props.transform; }, function (props) { return props.theme.panelBackgroundHover; }, function (props) { return props.theme.fontFamily; }, function (props) { return props.theme.fontWeight; }, function (props) { return props.theme.fontSize; }, function (props) { return props.theme.lineHeight; }, function (props) { return props.theme.textColorHl; }); EffectListFactory.deps = [_effectPanel["default"]]; function EffectListFactory(EffectPanel) { var SortableItem = function SortableItem(_ref) { var effect = _ref.effect, idx = _ref.idx, panelProps = _ref.panelProps, disabled = _ref.disabled; var _useSortable = (0, _sortable.useSortable)({ id: effect.id, data: { type: _dndLayerItems.SORTABLE_EFFECT_TYPE, parent: _dndLayerItems.SORTABLE_EFFECT_PANEL_TYPE }, disabled: disabled }), attributes = _useSortable.attributes, listeners = _useSortable.listeners, setNodeRef = _useSortable.setNodeRef, isDragging = _useSortable.isDragging, transform = _useSortable.transform, transition = _useSortable.transition; return /*#__PURE__*/_react["default"].createElement(SortableStyledItem, (0, _extends2["default"])({ ref: setNodeRef, className: (0, _classnames3["default"])((0, _defineProperty2["default"])({}, _constants.dataTestIds.sortableEffectItem, !disabled), (0, _defineProperty2["default"])({}, _constants.dataTestIds.staticEffectItem, disabled), { sorting: isDragging }), "data-testid": disabled ? _constants.dataTestIds.staticEffectItem : _constants.dataTestIds.sortableEffectItem, transform: _utilities.CSS.Transform.toString(transform), transition: transition || '' }, attributes), /*#__PURE__*/_react["default"].createElement(EffectPanel, (0, _extends2["default"])({}, panelProps, { key: effect.id, idx: idx, effect: effect, listeners: listeners, isDraggable: !disabled }))); }; var EffectList = function EffectList(props) { var effects = props.effects, effectOrder = props.effectOrder, visStateActions = props.visStateActions; var effectsToShow = (0, _react.useMemo)(function () { return effectOrder.reduce(function (acc, effectId) { var effect = (0, _utils.findById)(effectId)(effects.filter(Boolean)); if (!effect) { return acc; } return [].concat((0, _toConsumableArray2["default"])(acc), [effect]); }, []); }, [effects, effectOrder]); var sidePanelDndItems = (0, _react.useMemo)(function () { return effectsToShow.map(function (_ref2) { var id = _ref2.id; return id; }); }, [effectsToShow]); var panelProps = (0, _react.useMemo)(function () { return { effects: effects, effectOrder: effectOrder, removeEffect: visStateActions.removeEffect, updateEffect: visStateActions.updateEffect }; }, [effects, effectOrder, visStateActions]); return /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(_sortable.SortableContext, { id: _dndLayerItems.SORTABLE_EFFECT_PANEL_TYPE, items: sidePanelDndItems, strategy: _sortable.verticalListSortingStrategy, disabled: false }, effectsToShow.map(function (effect) { return /*#__PURE__*/_react["default"].createElement(SortableItem, { key: effect.id, effect: effect, idx: effects.findIndex(function (l) { return (l === null || l === void 0 ? void 0 : l.id) === effect.id; }), panelProps: panelProps, disabled: false }); }))); }; return EffectList; } var _default = exports["default"] = EffectListFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczMiLCJfdXRpbGl0aWVzIiwiX3NvcnRhYmxlIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9kbmRMYXllckl0ZW1zIiwiX2VmZmVjdFBhbmVsIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkNvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiU29ydGFibGVTdHlsZWRJdGVtIiwicHJvcHMiLCJ0aGVtZSIsImRyb3Bkb3duV3JhcHBlcloiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtIiwicGFuZWxCYWNrZ3JvdW5kSG92ZXIiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsInRleHRDb2xvckhsIiwiRWZmZWN0TGlzdEZhY3RvcnkiLCJkZXBzIiwiRWZmZWN0UGFuZWxGYWN0b3J5IiwiRWZmZWN0UGFuZWwiLCJTb3J0YWJsZUl0ZW0iLCJfcmVmIiwiZWZmZWN0IiwiaWR4IiwicGFuZWxQcm9wcyIsImRpc2FibGVkIiwiX3VzZVNvcnRhYmxlIiwidXNlU29ydGFibGUiLCJpZCIsImRhdGEiLCJ0eXBlIiwiU09SVEFCTEVfRUZGRUNUX1RZUEUiLCJwYXJlbnQiLCJTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRSIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwiaXNEcmFnZ2luZyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJyZWYiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwiX2RlZmluZVByb3BlcnR5MiIsImRhdGFUZXN0SWRzIiwic29ydGFibGVFZmZlY3RJdGVtIiwic3RhdGljRWZmZWN0SXRlbSIsInNvcnRpbmciLCJDU1MiLCJUcmFuc2Zvcm0iLCJ0b1N0cmluZyIsImtleSIsImlzRHJhZ2dhYmxlIiwiRWZmZWN0TGlzdCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsInZpc1N0YXRlQWN0aW9ucyIsImVmZmVjdHNUb1Nob3ciLCJ1c2VNZW1vIiwicmVkdWNlIiwiYWNjIiwiZWZmZWN0SWQiLCJmaW5kQnlJZCIsImZpbHRlciIsIkJvb2xlYW4iLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwic2lkZVBhbmVsRG5kSXRlbXMiLCJtYXAiLCJfcmVmMiIsInJlbW92ZUVmZmVjdCIsInVwZGF0ZUVmZmVjdCIsIlNvcnRhYmxlQ29udGV4dCIsIml0ZW1zIiwic3RyYXRlZ3kiLCJ2ZXJ0aWNhbExpc3RTb3J0aW5nU3RyYXRlZ3kiLCJmaW5kSW5kZXgiLCJsIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LWxpc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge0NTU30gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7dXNlU29ydGFibGUsIFNvcnRhYmxlQ29udGV4dCwgdmVydGljYWxMaXN0U29ydGluZ1N0cmF0ZWd5fSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5cbmltcG9ydCB7ZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7ZmluZEJ5SWR9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgYWRkRWZmZWN0LFxuICB1cGRhdGVFZmZlY3QsXG4gIHJlbW92ZUVmZmVjdCxcbiAgcmVvcmRlckVmZmVjdCxcbiAgQWN0aW9uSGFuZGxlclxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG5pbXBvcnQge1NPUlRBQkxFX0VGRkVDVF9UWVBFLCBTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRX0gZnJvbSAnLi4vY29tbW9uL2RuZC1sYXllci1pdGVtcyc7XG5pbXBvcnQgRWZmZWN0UGFuZWxGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXBhbmVsJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0TGlzdFByb3BzID0ge1xuICBlZmZlY3RzOiBFZmZlY3RbXTtcbiAgZWZmZWN0T3JkZXI6IHN0cmluZ1tdO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHtcbiAgICBhZGRFZmZlY3Q6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIGFkZEVmZmVjdD47XG4gICAgdXBkYXRlRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiB1cGRhdGVFZmZlY3Q+O1xuICAgIHJlbW92ZUVmZmVjdDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgcmVtb3ZlRWZmZWN0PjtcbiAgICByZW9yZGVyRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiByZW9yZGVyRWZmZWN0PjtcbiAgfTtcbiAgaXNTb3J0YWJsZTogYm9vbGVhbjtcbn07XG5cbmNvbnN0IENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG50eXBlIFNvcnRhYmxlU3R5bGVkSXRlbVByb3BzID0ge3RyYW5zaXRpb24/OiBzdHJpbmc7IHRyYW5zZm9ybT86IHN0cmluZ307XG5jb25zdCBTb3J0YWJsZVN0eWxlZEl0ZW0gPSBzdHlsZWQuZGl2PFNvcnRhYmxlU3R5bGVkSXRlbVByb3BzPmBcbiAgei1pbmRleDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bldyYXBwZXJaICsgMX07XG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMudHJhbnNpdGlvbn07XG4gIHRyYW5zZm9ybTogJHtwcm9wcyA9PiBwcm9wcy50cmFuc2Zvcm19O1xuICBvdXRsaW5lOiBub25lO1xuICAmLnNvcnRpbmcge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuICAmLnNvcnRpbmctZWZmZWN0cyAuZWZmZWN0LXBhbmVsX19oZWFkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuICAgIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICAgIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250U2l6ZX07XG4gICAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGluZUhlaWdodH07XG4gICAgKixcbiAgICAqOmJlZm9yZSxcbiAgICAqOmFmdGVyIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5lZmZlY3RfX2RyYWctaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgfVxuICB9XG5gO1xuXG5FZmZlY3RMaXN0RmFjdG9yeS5kZXBzID0gW0VmZmVjdFBhbmVsRmFjdG9yeV07XG5cbmZ1bmN0aW9uIEVmZmVjdExpc3RGYWN0b3J5KFxuICBFZmZlY3RQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0UGFuZWxGYWN0b3J5PlxuKTogUmVhY3QuRkM8RWZmZWN0TGlzdFByb3BzPiB7XG4gIGNvbnN0IFNvcnRhYmxlSXRlbSA9ICh7ZWZmZWN0LCBpZHgsIHBhbmVsUHJvcHMsIGRpc2FibGVkfSkgPT4ge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbn0gPSB1c2VTb3J0YWJsZSh7XG4gICAgICBpZDogZWZmZWN0LmlkLFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBTT1JUQUJMRV9FRkZFQ1RfVFlQRSxcbiAgICAgICAgcGFyZW50OiBTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNvcnRhYmxlU3R5bGVkSXRlbVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhcbiAgICAgICAgICB7W2RhdGFUZXN0SWRzLnNvcnRhYmxlRWZmZWN0SXRlbV06ICFkaXNhYmxlZH0sXG4gICAgICAgICAge1tkYXRhVGVzdElkcy5zdGF0aWNFZmZlY3RJdGVtXTogZGlzYWJsZWR9LFxuICAgICAgICAgIHtzb3J0aW5nOiBpc0RyYWdnaW5nfVxuICAgICAgICApfVxuICAgICAgICBkYXRhLXRlc3RpZD17ZGlzYWJsZWQgPyBkYXRhVGVzdElkcy5zdGF0aWNFZmZlY3RJdGVtIDogZGF0YVRlc3RJZHMuc29ydGFibGVFZmZlY3RJdGVtfVxuICAgICAgICB0cmFuc2Zvcm09e0NTUy5UcmFuc2Zvcm0udG9TdHJpbmcodHJhbnNmb3JtKX1cbiAgICAgICAgdHJhbnNpdGlvbj17dHJhbnNpdGlvbiB8fCAnJ31cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICA+XG4gICAgICAgIDxFZmZlY3RQYW5lbFxuICAgICAgICAgIHsuLi5wYW5lbFByb3BzfVxuICAgICAgICAgIGtleT17ZWZmZWN0LmlkfVxuICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgIGVmZmVjdD17ZWZmZWN0fVxuICAgICAgICAgIGxpc3RlbmVycz17bGlzdGVuZXJzfVxuICAgICAgICAgIGlzRHJhZ2dhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgIC8+XG4gICAgICA8L1NvcnRhYmxlU3R5bGVkSXRlbT5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IEVmZmVjdExpc3QgPSAocHJvcHM6IEVmZmVjdExpc3RQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlciwgdmlzU3RhdGVBY3Rpb25zfSA9IHByb3BzO1xuXG4gICAgY29uc3QgZWZmZWN0c1RvU2hvdyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGVmZmVjdE9yZGVyLnJlZHVjZSgoYWNjLCBlZmZlY3RJZCkgPT4ge1xuICAgICAgICBjb25zdCBlZmZlY3QgPSBmaW5kQnlJZChlZmZlY3RJZCkoZWZmZWN0cy5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICBpZiAoIWVmZmVjdCkge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5hY2MsIGVmZmVjdF07XG4gICAgICB9LCBbXSBhcyBFZmZlY3RbXSk7XG4gICAgfSwgW2VmZmVjdHMsIGVmZmVjdE9yZGVyXSk7XG5cbiAgICBjb25zdCBzaWRlUGFuZWxEbmRJdGVtcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGVmZmVjdHNUb1Nob3cubWFwKCh7aWR9KSA9PiBpZCk7XG4gICAgfSwgW2VmZmVjdHNUb1Nob3ddKTtcblxuICAgIGNvbnN0IHBhbmVsUHJvcHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgZWZmZWN0T3JkZXIsXG4gICAgICAgIHJlbW92ZUVmZmVjdDogdmlzU3RhdGVBY3Rpb25zLnJlbW92ZUVmZmVjdCxcbiAgICAgICAgdXBkYXRlRWZmZWN0OiB2aXNTdGF0ZUFjdGlvbnMudXBkYXRlRWZmZWN0XG4gICAgICB9KSxcbiAgICAgIFtlZmZlY3RzLCBlZmZlY3RPcmRlciwgdmlzU3RhdGVBY3Rpb25zXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRhaW5lcj5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dFxuICAgICAgICAgIGlkPXtTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRX1cbiAgICAgICAgICBpdGVtcz17c2lkZVBhbmVsRG5kSXRlbXN9XG4gICAgICAgICAgc3RyYXRlZ3k9e3ZlcnRpY2FsTGlzdFNvcnRpbmdTdHJhdGVneX1cbiAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgID5cbiAgICAgICAgICB7ZWZmZWN0c1RvU2hvdy5tYXAoZWZmZWN0ID0+IChcbiAgICAgICAgICAgIDxTb3J0YWJsZUl0ZW1cbiAgICAgICAgICAgICAga2V5PXtlZmZlY3QuaWR9XG4gICAgICAgICAgICAgIGVmZmVjdD17ZWZmZWN0fVxuICAgICAgICAgICAgICBpZHg9e2VmZmVjdHMuZmluZEluZGV4KGwgPT4gbD8uaWQgPT09IGVmZmVjdC5pZCl9XG4gICAgICAgICAgICAgIHBhbmVsUHJvcHM9e3BhbmVsUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU29ydGFibGVDb250ZXh0PlxuICAgICAgPC9Db250YWluZXI+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIEVmZmVjdExpc3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVmZmVjdExpc3RGYWN0b3J5O1xuIl0sIm1h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