UNPKG

kepler.gl

Version:

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

165 lines (163 loc) 34.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof3 = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _classnames = _interopRequireDefault(require("classnames")); var _utilities = require("@dnd-kit/utilities"); var _chickletedInput = require("../../../common/item-selector/chickleted-input"); var _icons = require("../../../common/icons"); var _dropdownList = _interopRequireDefault(require("../../../common/item-selector/dropdown-list")); var _localization = require("@kepler.gl/localization"); var _utils = require("@kepler.gl/utils"); var _tippyTooltip = _interopRequireDefault(require("../../../common/tippy-tooltip")); var _useOnClickOutside = _interopRequireDefault(require("../../../hooks/use-on-click-outside")); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7; // 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" != _typeof3(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 ChickletAddonWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n"]))); var ChickletAddon = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 4px;\n"]))); var StyledPopover = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: -64px;\n position: absolute;\n top: 20px;\n width: 140px;\n z-index: 101;\n"]))); var hashStyles = { SHOW: 'SHOW', ACTIVE: 'ACTIVE' }; var IconDiv = _styledComponents["default"].div.attrs({ className: 'tooltip-chicklet__icon' })(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n"])), function (props) { return props.$status === hashStyles.SHOW ? props.theme.subtextColorActive : props.$status === hashStyles.ACTIVE ? props.theme.activeColor : props.theme.textColor; }); var SortableStyledItem = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n transition: ", ";\n transform: ", ";\n &.sorting {\n opacity: 0.3;\n pointer-events: none;\n }\n &:hover {\n .tooltip-chicklet__drag-handler {\n opacity: 1;\n }\n }\n"])), function (props) { return props.$transition; }, function (props) { return props.$transform; }); var StyledDragHandle = _styledComponents["default"].div.attrs({ className: 'tooltip-chicklet__drag-handler' })(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n z-index: 1000;\n opacity: 0;\n margin-left: -5px;\n &:hover {\n cursor: move;\n color: ", ";\n }\n"])), function (props) { return props.theme.tooltipVerticalLineColor; }); var StyledTag = _styledComponents["default"].span(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 5px;\n text-overflow: ellipsis;\n width: 100%;\n overflow: hidden;\n max-width: 160px;\n"]))); function getFormatTooltip(formatLabels, format) { if (!format) { return null; } var formatLabel = formatLabels.find(function (fl) { return (0, _utils.getFormatValue)(fl) === format; }); if (formatLabel) { return formatLabel.label; } return (0, _typeof2["default"])(format) === 'object' ? JSON.stringify(format, null, 2) : String(format); } // TODO: a factory should take other factories as input function TooltipChickletFactory(dataId, config, onChange, fields, onDisplayFormatChange) { var TooltipChicklet = function TooltipChicklet(props) { var disabled = props.disabled, item = props.item, displayOption = props.displayOption, remove = props.remove, attributes = props.attributes, listeners = props.listeners, setNodeRef = props.setNodeRef, transform = props.transform, transition = props.transition, isDragging = props.isDragging; var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), show = _useState2[0], setShow = _useState2[1]; var ref = (0, _useOnClickOutside["default"])(function () { return setShow(false); }); // const {show} = this.state; var tooltipField = config.fieldsToShow[dataId].find(function (fieldToShow) { return fieldToShow.name === item.name; }); if (!tooltipField) { return null; } var field = fields.find(function (f) { return f.name === tooltipField.name; }); if (!field) { return null; } var formatLabels = (0, _utils.getFormatLabels)(fields, tooltipField.name); var hasFormat = Boolean(field.displayFormat); var selectionIndex = formatLabels.findIndex(function (fl) { return (0, _utils.getFormatValue)(fl) === field.displayFormat; }); var hashStyle = show ? hashStyles.SHOW : hasFormat ? hashStyles.ACTIVE : null; return /*#__PURE__*/_react["default"].createElement(SortableStyledItem, (0, _extends2["default"])({ ref: setNodeRef, className: (0, _classnames["default"])('sortable-layer-items', { sorting: isDragging }), $transform: _utilities.CSS.Translate.toString(transform), $transition: transition || '' }, attributes), /*#__PURE__*/_react["default"].createElement(_chickletedInput.ChickletButton, null, /*#__PURE__*/_react["default"].createElement(StyledDragHandle, listeners, /*#__PURE__*/_react["default"].createElement(_icons.VertDots, { height: "12px" })), /*#__PURE__*/_react["default"].createElement(StyledTag, { title: displayOption(item) }, displayOption(item)), formatLabels.length > 1 && /*#__PURE__*/_react["default"].createElement(ChickletAddonWrapper, null, /*#__PURE__*/_react["default"].createElement(_tippyTooltip["default"], { placement: "top", render: function render() { return /*#__PURE__*/_react["default"].createElement("span", null, hasFormat ? getFormatTooltip(formatLabels, field.displayName) : /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'fieldSelector.formatting' })); } }, /*#__PURE__*/_react["default"].createElement(ChickletAddon, null, /*#__PURE__*/_react["default"].createElement(IconDiv, { $status: hashStyle }, /*#__PURE__*/_react["default"].createElement(_icons.Hash, { height: "8px", onClick: function onClick(e) { e.stopPropagation(); setShow(Boolean(!show)); } })))), show && /*#__PURE__*/_react["default"].createElement(StyledPopover, { ref: ref }, /*#__PURE__*/_react["default"].createElement(_dropdownList["default"], { options: formatLabels, selectionIndex: selectionIndex, displayOption: function displayOption(option) { return option.label; }, onOptionSelected: function onOptionSelected(result, e) { e.stopPropagation(); setShow(false); var displayFormat = (0, _utils.getFormatValue)(result); var oldFieldsToShow = config.fieldsToShow[dataId]; var fieldsToShow = oldFieldsToShow.map(function (fieldToShow) { return fieldToShow.name === tooltipField.name ? { name: tooltipField.name, format: displayFormat } : fieldToShow; }); var newConfig = _objectSpread(_objectSpread({}, config), {}, { fieldsToShow: _objectSpread(_objectSpread({}, config.fieldsToShow), {}, (0, _defineProperty2["default"])({}, dataId, fieldsToShow)) }); onChange(newConfig); onDisplayFormatChange(dataId, field.name, displayFormat); } }))), /*#__PURE__*/_react["default"].createElement(_icons.Delete, { height: "16px", onClick: disabled ? null : remove }))); }; return TooltipChicklet; } var _default = exports["default"] = TooltipChickletFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl91dGlsaXRpZXMiLCJfY2hpY2tsZXRlZElucHV0IiwiX2ljb25zIiwiX2Ryb3Bkb3duTGlzdCIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfdGlwcHlUb29sdGlwIiwiX3VzZU9uQ2xpY2tPdXRzaWRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkNoaWNrbGV0QWRkb25XcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJDaGlja2xldEFkZG9uIiwiU3R5bGVkUG9wb3ZlciIsImhhc2hTdHlsZXMiLCJTSE9XIiwiQUNUSVZFIiwiSWNvbkRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwicHJvcHMiLCIkc3RhdHVzIiwidGhlbWUiLCJzdWJ0ZXh0Q29sb3JBY3RpdmUiLCJhY3RpdmVDb2xvciIsInRleHRDb2xvciIsIlNvcnRhYmxlU3R5bGVkSXRlbSIsIiR0cmFuc2l0aW9uIiwiJHRyYW5zZm9ybSIsIlN0eWxlZERyYWdIYW5kbGUiLCJ0b29sdGlwVmVydGljYWxMaW5lQ29sb3IiLCJTdHlsZWRUYWciLCJzcGFuIiwiZ2V0Rm9ybWF0VG9vbHRpcCIsImZvcm1hdExhYmVscyIsImZvcm1hdCIsImZvcm1hdExhYmVsIiwiZmluZCIsImZsIiwiZ2V0Rm9ybWF0VmFsdWUiLCJsYWJlbCIsIl90eXBlb2YyIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0cmluZyIsIlRvb2x0aXBDaGlja2xldEZhY3RvcnkiLCJkYXRhSWQiLCJjb25maWciLCJvbkNoYW5nZSIsImZpZWxkcyIsIm9uRGlzcGxheUZvcm1hdENoYW5nZSIsIlRvb2x0aXBDaGlja2xldCIsImRpc2FibGVkIiwiaXRlbSIsImRpc3BsYXlPcHRpb24iLCJyZW1vdmUiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwic2V0Tm9kZVJlZiIsInRyYW5zZm9ybSIsInRyYW5zaXRpb24iLCJpc0RyYWdnaW5nIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2hvdyIsInNldFNob3ciLCJyZWYiLCJ1c2VPbkNsaWNrT3V0c2lkZSIsInRvb2x0aXBGaWVsZCIsImZpZWxkc1RvU2hvdyIsImZpZWxkVG9TaG93IiwibmFtZSIsImZpZWxkIiwiZiIsImdldEZvcm1hdExhYmVscyIsImhhc0Zvcm1hdCIsIkJvb2xlYW4iLCJkaXNwbGF5Rm9ybWF0Iiwic2VsZWN0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJoYXNoU3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiY2xhc3NuYW1lcyIsInNvcnRpbmciLCJDU1MiLCJUcmFuc2xhdGUiLCJ0b1N0cmluZyIsIkNoaWNrbGV0QnV0dG9uIiwiVmVydERvdHMiLCJoZWlnaHQiLCJ0aXRsZSIsInBsYWNlbWVudCIsInJlbmRlciIsImRpc3BsYXlOYW1lIiwiRm9ybWF0dGVkTWVzc2FnZSIsImlkIiwiSGFzaCIsIm9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJvcHRpb25zIiwib3B0aW9uIiwib25PcHRpb25TZWxlY3RlZCIsInJlc3VsdCIsIm9sZEZpZWxkc1RvU2hvdyIsIm1hcCIsIm5ld0NvbmZpZyIsIkRlbGV0ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2ludGVyYWN0aW9uLXBhbmVsL3Rvb2x0aXAtY29uZmlnL3Rvb2x0aXAtY2hpY2tsZXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCBDU1NQcm9wZXJ0aWVzfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7SVN0eWxlZENvbXBvbmVudH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge0RyYWdnYWJsZUF0dHJpYnV0ZXN9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHtDU1MsIFRyYW5zZm9ybX0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7Q2hpY2tsZXRCdXR0b259IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2NoaWNrbGV0ZWQtaW5wdXQnO1xuaW1wb3J0IHtIYXNoLCBEZWxldGUsIFZlcnREb3RzfSBmcm9tICcuLi8uLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IERyb3Bkb3duTGlzdCBmcm9tICcuLi8uLi8uLi9jb21tb24vaXRlbS1zZWxlY3Rvci9kcm9wZG93bi1saXN0JztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtUaW1lTGFiZWxGb3JtYXQsIFRvb2x0aXBGaWVsZHN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtnZXRGb3JtYXRWYWx1ZSwgZ2V0Rm9ybWF0TGFiZWxzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCBUaXBweVRvb2x0aXAgZnJvbSAnLi4vLi4vLi4vY29tbW9uL3RpcHB5LXRvb2x0aXAnO1xuaW1wb3J0IHtUb29sdGlwRm9ybWF0fSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgdXNlT25DbGlja091dHNpZGUgZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLW9uLWNsaWNrLW91dHNpZGUnO1xuaW1wb3J0IHtCYXNlQ29tcG9uZW50UHJvcHN9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIFRvb2x0aXBDaGlja2xldFByb3BzIHtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIGl0ZW06IHtuYW1lOiBzdHJpbmd9O1xuICBkaXNwbGF5T3B0aW9uOiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIHJlbW92ZTogYW55O1xuXG4gIGF0dHJpYnV0ZXM6IERyYWdnYWJsZUF0dHJpYnV0ZXM7XG4gIGxpc3RlbmVyczogYW55O1xuICBzZXROb2RlUmVmOiAobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xuICB0cmFuc2Zvcm06IFRyYW5zZm9ybSB8IG51bGw7XG4gIHRyYW5zaXRpb24/OiBzdHJpbmc7XG4gIGlzRHJhZ2dpbmc6IGJvb2xlYW47XG59XG5cbnR5cGUgVG9vbHRpcENvbmZpZyA9IHtcbiAgZmllbGRzVG9TaG93OiB7XG4gICAgW2tleTogc3RyaW5nXToge25hbWU6IHN0cmluZzsgZm9ybWF0OiBzdHJpbmcgfCBudWxsfVtdO1xuICB9O1xuICBjb21wYXJlTW9kZTogYm9vbGVhbjtcbiAgY29tcGFyZVR5cGU6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBDaGlja2xldEFkZG9uV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5cbmNvbnN0IENoaWNrbGV0QWRkb24gPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcbmA7XG5cbmNvbnN0IFN0eWxlZFBvcG92ZXIgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tbGVmdDogLTY0cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAyMHB4O1xuICB3aWR0aDogMTQwcHg7XG4gIHotaW5kZXg6IDEwMTtcbmA7XG5cbmNvbnN0IGhhc2hTdHlsZXMgPSB7XG4gIFNIT1c6ICdTSE9XJyBhcyBjb25zdCxcbiAgQUNUSVZFOiAnQUNUSVZFJyBhcyBjb25zdFxufTtcblxuZXhwb3J0IHR5cGUgSWNvbkRpdlByb3BzID0gQmFzZUNvbXBvbmVudFByb3BzICYge1xuICAkc3RhdHVzPzogJ1NIT1cnIHwgJ0FDVElWRScgfCBudWxsO1xufTtcblxuY29uc3QgSWNvbkRpdjogSVN0eWxlZENvbXBvbmVudDwnd2ViJywgSWNvbkRpdlByb3BzPiA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICd0b29sdGlwLWNoaWNrbGV0X19pY29uJ1xufSk8SWNvbkRpdlByb3BzPmBcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy4kc3RhdHVzID09PSBoYXNoU3R5bGVzLlNIT1dcbiAgICAgID8gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yQWN0aXZlXG4gICAgICA6IHByb3BzLiRzdGF0dXMgPT09IGhhc2hTdHlsZXMuQUNUSVZFXG4gICAgICA/IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yXG4gICAgICA6IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG5gO1xuXG5leHBvcnQgdHlwZSBTb3J0YWJsZVN0eWxlZEl0ZW1Qcm9wcyA9IEJhc2VDb21wb25lbnRQcm9wcyAmIHtcbiAgJHRyYW5zaXRpb24/OiBDU1NQcm9wZXJ0aWVzWyd0cmFuc2l0aW9uJ107XG4gICR0cmFuc2Zvcm0/OiBDU1NQcm9wZXJ0aWVzWyd0cmFuc2Zvcm0nXTtcbiAgcmVmOiAobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xufTtcbmNvbnN0IFNvcnRhYmxlU3R5bGVkSXRlbTogSVN0eWxlZENvbXBvbmVudDxcbiAgJ3dlYicsXG4gIFNvcnRhYmxlU3R5bGVkSXRlbVByb3BzXG4+ID0gc3R5bGVkLmRpdjxTb3J0YWJsZVN0eWxlZEl0ZW1Qcm9wcz5gXG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMuJHRyYW5zaXRpb259O1xuICB0cmFuc2Zvcm06ICR7cHJvcHMgPT4gcHJvcHMuJHRyYW5zZm9ybX07XG4gICYuc29ydGluZyB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gICY6aG92ZXIge1xuICAgIC50b29sdGlwLWNoaWNrbGV0X19kcmFnLWhhbmRsZXIge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZERyYWdIYW5kbGUgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAndG9vbHRpcC1jaGlja2xldF9fZHJhZy1oYW5kbGVyJ1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHotaW5kZXg6IDEwMDA7XG4gIG9wYWNpdHk6IDA7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICAmOmhvdmVyIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudG9vbHRpcFZlcnRpY2FsTGluZUNvbG9yfTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkVGFnID0gc3R5bGVkLnNwYW5gXG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1heC13aWR0aDogMTYwcHg7XG5gO1xuXG5mdW5jdGlvbiBnZXRGb3JtYXRUb29sdGlwKGZvcm1hdExhYmVsczogVGltZUxhYmVsRm9ybWF0W10sIGZvcm1hdDogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGZvcm1hdExhYmVsID0gZm9ybWF0TGFiZWxzLmZpbmQoZmwgPT4gZ2V0Rm9ybWF0VmFsdWUoZmwpID09PSBmb3JtYXQpO1xuICBpZiAoZm9ybWF0TGFiZWwpIHtcbiAgICByZXR1cm4gZm9ybWF0TGFiZWwubGFiZWw7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoZm9ybWF0LCBudWxsLCAyKSA6IFN0cmluZyhmb3JtYXQpO1xufVxuXG4vLyBUT0RPOiBhIGZhY3Rvcnkgc2hvdWxkIHRha2Ugb3RoZXIgZmFjdG9yaWVzIGFzIGlucHV0XG5mdW5jdGlvbiBUb29sdGlwQ2hpY2tsZXRGYWN0b3J5KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29uZmlnOiBUb29sdGlwQ29uZmlnLFxuICBvbkNoYW5nZTogKGNmZzogVG9vbHRpcENvbmZpZykgPT4gdm9pZCxcbiAgZmllbGRzOiBUb29sdGlwRmllbGRzW10sXG4gIG9uRGlzcGxheUZvcm1hdENoYW5nZVxuKTogUmVhY3QuRkM8VG9vbHRpcENoaWNrbGV0UHJvcHM+IHtcbiAgY29uc3QgVG9vbHRpcENoaWNrbGV0OiBSZWFjdC5GQzxUb29sdGlwQ2hpY2tsZXRQcm9wcz4gPSAocHJvcHM6IFRvb2x0aXBDaGlja2xldFByb3BzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBpdGVtLFxuICAgICAgZGlzcGxheU9wdGlvbixcbiAgICAgIHJlbW92ZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBsaXN0ZW5lcnMsXG4gICAgICBzZXROb2RlUmVmLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdHJhbnNpdGlvbixcbiAgICAgIGlzRHJhZ2dpbmdcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgcmVmID0gdXNlT25DbGlja091dHNpZGU8SFRNTERpdkVsZW1lbnQ+KCgpID0+IHNldFNob3coZmFsc2UpKTtcbiAgICAvLyBjb25zdCB7c2hvd30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZCA9IGNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maW5kKFxuICAgICAgZmllbGRUb1Nob3cgPT4gZmllbGRUb1Nob3cubmFtZSA9PT0gaXRlbS5uYW1lXG4gICAgKTtcbiAgICBpZiAoIXRvb2x0aXBGaWVsZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IHRvb2x0aXBGaWVsZC5uYW1lKTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0TGFiZWxzID0gZ2V0Rm9ybWF0TGFiZWxzKGZpZWxkcywgdG9vbHRpcEZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IGhhc0Zvcm1hdCA9IEJvb2xlYW4oZmllbGQuZGlzcGxheUZvcm1hdCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uSW5kZXggPSBmb3JtYXRMYWJlbHMuZmluZEluZGV4KGZsID0+IGdldEZvcm1hdFZhbHVlKGZsKSA9PT0gZmllbGQuZGlzcGxheUZvcm1hdCk7XG4gICAgY29uc3QgaGFzaFN0eWxlID0gc2hvdyA/IGhhc2hTdHlsZXMuU0hPVyA6IGhhc0Zvcm1hdCA/IGhhc2hTdHlsZXMuQUNUSVZFIDogbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVTdHlsZWRJdGVtXG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdzb3J0YWJsZS1sYXllci1pdGVtcycsIHtzb3J0aW5nOiBpc0RyYWdnaW5nfSl9XG4gICAgICAgICR0cmFuc2Zvcm09e0NTUy5UcmFuc2xhdGUudG9TdHJpbmcodHJhbnNmb3JtKX1cbiAgICAgICAgJHRyYW5zaXRpb249e3RyYW5zaXRpb24gfHwgJyd9XG4gICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgPlxuICAgICAgICA8Q2hpY2tsZXRCdXR0b24+XG4gICAgICAgICAgPFN0eWxlZERyYWdIYW5kbGUgey4uLmxpc3RlbmVyc30+XG4gICAgICAgICAgICA8VmVydERvdHMgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgPC9TdHlsZWREcmFnSGFuZGxlPlxuICAgICAgICAgIDxTdHlsZWRUYWcgdGl0bGU9e2Rpc3BsYXlPcHRpb24oaXRlbSl9PntkaXNwbGF5T3B0aW9uKGl0ZW0pfTwvU3R5bGVkVGFnPlxuICAgICAgICAgIHtmb3JtYXRMYWJlbHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICA8Q2hpY2tsZXRBZGRvbldyYXBwZXI+XG4gICAgICAgICAgICAgIDxUaXBweVRvb2x0aXBcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtoYXNGb3JtYXQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybWF0VG9vbHRpcChmb3JtYXRMYWJlbHMsIGZpZWxkLmRpc3BsYXlOYW1lKVxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZmllbGRTZWxlY3Rvci5mb3JtYXR0aW5nJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPENoaWNrbGV0QWRkb24+XG4gICAgICAgICAgICAgICAgICA8SWNvbkRpdiAkc3RhdHVzPXtoYXNoU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8SGFzaFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjhweFwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvdyhCb29sZWFuKCFzaG93KSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvSWNvbkRpdj5cbiAgICAgICAgICAgICAgICA8L0NoaWNrbGV0QWRkb24+XG4gICAgICAgICAgICAgIDwvVGlwcHlUb29sdGlwPlxuICAgICAgICAgICAgICB7c2hvdyAmJiAoXG4gICAgICAgICAgICAgICAgPFN0eWxlZFBvcG92ZXIgcmVmPXtyZWZ9PlxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGlzdFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtmb3JtYXRMYWJlbHN9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkluZGV4PXtzZWxlY3Rpb25JbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17b3B0aW9uID0+IChvcHRpb24gYXMgVG9vbHRpcEZvcm1hdCkubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIG9uT3B0aW9uU2VsZWN0ZWQ9eyhyZXN1bHQsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNob3coZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGdldEZvcm1hdFZhbHVlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkRmllbGRzVG9TaG93ID0gY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IG9sZEZpZWxkc1RvU2hvdy5tYXAoZmllbGRUb1Nob3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkVG9TaG93Lm5hbWUgPT09IHRvb2x0aXBGaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdG9vbHRpcEZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGRpc3BsYXlGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZmllbGRUb1Nob3c7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhSWRdOiBmaWVsZHNUb1Nob3dcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgb25EaXNwbGF5Rm9ybWF0Q2hhbmdlKGRhdGFJZCwgZmllbGQubmFtZSwgZGlzcGxheUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkUG9wb3Zlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQ2hpY2tsZXRBZGRvbldyYXBwZXI+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8RGVsZXRlIGhlaWdodD1cIjE2cHhcIiBvbkNsaWNrPXtkaXNhYmxlZCA/IG51bGwgOiByZW1vdmV9IC8+XG4gICAgICAgIDwvQ2hpY2tsZXRCdXR0b24+XG4gICAgICA8L1NvcnRhYmxlU3R5bGVkSXRlbT5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUb29sdGlwQ2hpY2tsZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBDaGlja2xldEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLE1BQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLGFBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFXLGtCQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFBb0UsSUFBQVksZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxF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