UNPKG

kepler.gl

Version:

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

187 lines (185 loc) 35.2 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"] = exports.InputBoxContainer = exports.ColorSelectorInput = exports.ColorBlock = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _reactIntl = require("react-intl"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _react2 = require("@floating-ui/react"); var _utils = require("@kepler.gl/utils"); var _rangeSlider = _interopRequireDefault(require("../../common/range-slider")); var _styledComponents2 = require("../../common/styled-components"); var _colorPalette = _interopRequireDefault(require("./color-palette")); var _colorRangeSelector = _interopRequireDefault(require("./color-range-selector")); var _singleColorPalette = _interopRequireDefault(require("./single-color-palette")); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; // 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 OpacitySliderWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0px 12px 12px 12px;\n"]))); var OPACITY_SLIDER_PROPS = { type: 'number', range: [0, 1], value0: 0, step: 0.01, isRanged: false, label: 'Opacity', showInput: true }; var ColorBlock = exports.ColorBlock = _styledComponents["default"].div.withConfig({ shouldForwardProp: _styledComponents2.shouldForwardProp })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 32px;\n height: 18px;\n border-radius: 1px;\n background-color: ", ";\n"])), function (props) { return Array.isArray(props.backgroundcolor) ? "rgb(".concat(props.backgroundcolor.slice(0, 3).join(','), ")") : 'transparent'; }); var StyledColorSelectorWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n .selector__dropdown {\n max-height: 600px; /* increase from the default 500px defined by StyledPanelDropdown */\n }\n"]))); var ColorSelectorInput = exports.ColorSelectorInput = _styledComponents["default"].div.withConfig({ shouldForwardProp: _styledComponents2.shouldForwardProp })(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n height: ", ";\n\n .color-selector__selector__label {\n text-transform: capitalize;\n font-size: 12px;\n text-align: center;\n color: ", ";\n }\n"])), function (props) { return props.inputTheme === 'secondary' ? props.theme.secondaryInput : props.theme.input; }, function (props) { return props.theme.inputBoxHeight; }, function (props) { return props.theme.inputPlaceholderColor; }); var InputBoxContainer = exports.InputBoxContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .color-select__input-group {\n flex-grow: 1;\n }\n .color-select__input-group:nth-child(2) {\n margin-left: 12px;\n }\n"]))); ColorSelectorFactory.deps = [_colorRangeSelector["default"], _rangeSlider["default"]]; function ColorSelectorFactory(ColorRangeSelector, RangeSlider) { var ColorSelector = function ColorSelector(_ref) { var _ref$colorSets = _ref.colorSets, colorSets = _ref$colorSets === void 0 ? [] : _ref$colorSets, colorUI = _ref.colorUI, inputTheme = _ref.inputTheme, disabled = _ref.disabled, useOpacity = _ref.useOpacity, setColorUI = _ref.setColorUI; var _useState = (0, _react.useState)(colorUI ? colorUI.showDropdown : false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), showDropdown = _useState2[0], setShowDropdown = _useState2[1]; var showSketcher = colorUI ? colorUI.showSketcher : false; var editingLookup = colorUI ? colorUI.showDropdown : showDropdown; var editingColorSet = typeof editingLookup === 'number' && colorSets[editingLookup] ? colorSets[editingLookup] : false; var closePanelDropdown = (0, _react.useCallback)(function () { if (editingLookup === false) { return; } if (setColorUI) { setColorUI({ showDropdown: false, showSketcher: false }); } else { setShowDropdown(false); } }, [editingLookup, setColorUI, setShowDropdown]); var handleClickOutside = (0, _react.useCallback)(function () { if (Number.isInteger(showSketcher)) { // if sketcher is open, let sketch to close itself first return; } closePanelDropdown(); }, [showSketcher, closePanelDropdown]); // floating-ui boilerplate to establish close on outside click var _useFloating = (0, _react2.useFloating)({ open: true, onOpenChange: function onOpenChange(v) { if (!v) { handleClickOutside(); } } }), refs = _useFloating.refs, context = _useFloating.context; var dismiss = (0, _react2.useDismiss)(context); var _useInteractions = (0, _react2.useInteractions)([dismiss]), getFloatingProps = _useInteractions.getFloatingProps; var setColor = (0, _react.useCallback)(function (colorSet, color, opacity) { var _ref2 = colorSet || {}, setColor = _ref2.setColor; if (!setColor) { return; } if (useOpacity && Array.isArray(color)) { setColor([].concat((0, _toConsumableArray2["default"])(color.slice(0, 3)), [opacity])); } else { setColor(color); } }, [useOpacity]); var onSelectColor = (0, _react.useCallback)(function (color, e) { if (e) e.stopPropagation(); var colorSet = editingColorSet; if (colorSet) { setColor(colorSet, color, colorSet.selectedColor[3]); } }, [editingColorSet, setColor]); var onSelectOpacity = (0, _react.useCallback)(function (opacity, e) { if (e) e.stopPropagation(); var colorSet = editingColorSet; if (colorSet) { setColor(colorSet, colorSet.selectedColor, Math.round(opacity[1] * 255)); } }, [editingColorSet, setColor]); var onToggleDropdown = (0, _react.useCallback)(function (e, i) { e.stopPropagation(); e.preventDefault(); var showDropdownValue = editingLookup === false ? i // open it for the specific color set index : false; // close it if (setColorUI) { setColorUI({ showDropdown: showDropdownValue }); } else { setShowDropdown(showDropdownValue); } }, [editingLookup, setColorUI, setShowDropdown]); return /*#__PURE__*/_react["default"].createElement(StyledColorSelectorWrapper, (0, _extends2["default"])({ className: "color-selector", ref: refs.setFloating }, getFloatingProps()), /*#__PURE__*/_react["default"].createElement(InputBoxContainer, null, colorSets.map(function (cSet, i) { return /*#__PURE__*/_react["default"].createElement("div", { className: "color-select__input-group", key: i }, /*#__PURE__*/_react["default"].createElement(ColorSelectorInput, { className: "color-selector__selector", active: editingLookup === i, disabled: disabled, inputTheme: inputTheme, onClick: function onClick(e) { return onToggleDropdown(e, i); } }, cSet.isRange ? /*#__PURE__*/_react["default"].createElement(_colorPalette["default"], { colors: cSet.selectedColor.colors }) : /*#__PURE__*/_react["default"].createElement(ColorBlock, { className: "color-selector__selector__block", backgroundcolor: cSet.selectedColor }), cSet.label ? /*#__PURE__*/_react["default"].createElement("div", { className: "color-selector__selector__label" }, cSet.label) : null)); })), editingColorSet ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledPanelDropdown, { className: "color-selector__dropdown" }, editingColorSet.isRange && colorUI && setColorUI ? /*#__PURE__*/_react["default"].createElement(ColorRangeSelector, { selectedColorRange: editingColorSet.selectedColor, onSelectColorRange: onSelectColor, setColorPaletteUI: setColorUI, colorPaletteUI: colorUI }) : /*#__PURE__*/_react["default"].createElement(_singleColorPalette["default"], { selectedColor: (0, _utils.rgbToHex)(editingColorSet.selectedColor), onSelectColor: onSelectColor }), useOpacity ? /*#__PURE__*/_react["default"].createElement(OpacitySliderWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, { id: "color.opacity" })), /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, OPACITY_SLIDER_PROPS, { value1: editingColorSet.selectedColor[3] / 255, onChange: onSelectOpacity }))) : null) : null); }; return ColorSelector; } var _default = exports["default"] = ColorSelectorFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0MiIsIl91dGlscyIsIl9yYW5nZVNsaWRlciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9jb2xvclBhbGV0dGUiLCJfY29sb3JSYW5nZVNlbGVjdG9yIiwiX3NpbmdsZUNvbG9yUGFsZXR0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJPcGFjaXR5U2xpZGVyV3JhcHBlciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiT1BBQ0lUWV9TTElERVJfUFJPUFMiLCJ0eXBlIiwicmFuZ2UiLCJ2YWx1ZTAiLCJzdGVwIiwiaXNSYW5nZWQiLCJsYWJlbCIsInNob3dJbnB1dCIsIkNvbG9yQmxvY2siLCJleHBvcnRzIiwid2l0aENvbmZpZyIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJiYWNrZ3JvdW5kY29sb3IiLCJjb25jYXQiLCJzbGljZSIsImpvaW4iLCJTdHlsZWRDb2xvclNlbGVjdG9yV3JhcHBlciIsIkNvbG9yU2VsZWN0b3JJbnB1dCIsImlucHV0VGhlbWUiLCJ0aGVtZSIsInNlY29uZGFyeUlucHV0IiwiaW5wdXQiLCJpbnB1dEJveEhlaWdodCIsImlucHV0UGxhY2Vob2xkZXJDb2xvciIsIklucHV0Qm94Q29udGFpbmVyIiwiQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJkZXBzIiwiQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSIsIlJhbmdlU2xpZGVyRmFjdG9yeSIsIkNvbG9yUmFuZ2VTZWxlY3RvciIsIlJhbmdlU2xpZGVyIiwiQ29sb3JTZWxlY3RvciIsIl9yZWYiLCJfcmVmJGNvbG9yU2V0cyIsImNvbG9yU2V0cyIsImNvbG9yVUkiLCJkaXNhYmxlZCIsInVzZU9wYWNpdHkiLCJzZXRDb2xvclVJIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJzaG93RHJvcGRvd24iLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2V0U2hvd0Ryb3Bkb3duIiwic2hvd1NrZXRjaGVyIiwiZWRpdGluZ0xvb2t1cCIsImVkaXRpbmdDb2xvclNldCIsImNsb3NlUGFuZWxEcm9wZG93biIsInVzZUNhbGxiYWNrIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiX3VzZUZsb2F0aW5nIiwidXNlRmxvYXRpbmciLCJvcGVuIiwib25PcGVuQ2hhbmdlIiwidiIsInJlZnMiLCJjb250ZXh0IiwiZGlzbWlzcyIsInVzZURpc21pc3MiLCJfdXNlSW50ZXJhY3Rpb25zIiwidXNlSW50ZXJhY3Rpb25zIiwiZ2V0RmxvYXRpbmdQcm9wcyIsInNldENvbG9yIiwiY29sb3JTZXQiLCJjb2xvciIsIm9wYWNpdHkiLCJfcmVmMiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJvblNlbGVjdENvbG9yIiwic3RvcFByb3BhZ2F0aW9uIiwic2VsZWN0ZWRDb2xvciIsIm9uU2VsZWN0T3BhY2l0eSIsIk1hdGgiLCJyb3VuZCIsIm9uVG9nZ2xlRHJvcGRvd24iLCJwcmV2ZW50RGVmYXVsdCIsInNob3dEcm9wZG93blZhbHVlIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzMiIsImNsYXNzTmFtZSIsInJlZiIsInNldEZsb2F0aW5nIiwibWFwIiwiY1NldCIsImtleSIsImFjdGl2ZSIsIm9uQ2xpY2siLCJpc1JhbmdlIiwiY29sb3JzIiwiU3R5bGVkUGFuZWxEcm9wZG93biIsInNlbGVjdGVkQ29sb3JSYW5nZSIsIm9uU2VsZWN0Q29sb3JSYW5nZSIsInNldENvbG9yUGFsZXR0ZVVJIiwiY29sb3JQYWxldHRlVUkiLCJyZ2JUb0hleCIsIlBhbmVsTGFiZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiaWQiLCJ2YWx1ZTEiLCJvbkNoYW5nZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3Itc2VsZWN0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VTdGF0ZSwgTW91c2VFdmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHt1c2VEaXNtaXNzLCB1c2VGbG9hdGluZywgdXNlSW50ZXJhY3Rpb25zfSBmcm9tICdAZmxvYXRpbmctdWkvcmVhY3QnO1xuXG5pbXBvcnQge0NvbG9yUmFuZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtDb2xvclVJLCBOZXN0ZWRQYXJ0aWFsLCBSR0JBQ29sb3IsIFJHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7cmdiVG9IZXh9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQgUmFuZ2VTbGlkZXJGYWN0b3J5IGZyb20gJy4uLy4uL2NvbW1vbi9yYW5nZS1zbGlkZXInO1xuaW1wb3J0IHtQYW5lbExhYmVsLCBzaG91bGRGb3J3YXJkUHJvcCwgU3R5bGVkUGFuZWxEcm9wZG93bn0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDb2xvclBhbGV0dGUgZnJvbSAnLi9jb2xvci1wYWxldHRlJztcbmltcG9ydCBDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3ItcmFuZ2Utc2VsZWN0b3InO1xuaW1wb3J0IFNpbmdsZUNvbG9yUGFsZXR0ZSBmcm9tICcuL3NpbmdsZS1jb2xvci1wYWxldHRlJztcblxudHlwZSBDb2xvclNlbGVjdG9ySW5wdXRQcm9wcyA9IHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb2xvclNldCA9IHtcbiAgc2VsZWN0ZWRDb2xvcjogUkdCQ29sb3IgfCBSR0JBQ29sb3IgfCBDb2xvclJhbmdlO1xuICBzZXRDb2xvcjogKHY6IFJHQkNvbG9yIHwgUkdCQUNvbG9yIHwgQ29sb3JSYW5nZSkgPT4gdm9pZDtcbiAgaXNSYW5nZT86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xvclNlbGVjdG9yUHJvcHMgPSB7XG4gIGNvbG9yU2V0czogQ29sb3JTZXRbXTtcbiAgY29sb3JVST86IENvbG9yVUk7XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdXNlT3BhY2l0eT86IGJvb2xlYW47XG4gIHNldENvbG9yVUk/OiAobmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xufTtcblxuY29uc3QgT3BhY2l0eVNsaWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBwYWRkaW5nOiAwcHggMTJweCAxMnB4IDEycHg7XG5gO1xuXG5jb25zdCBPUEFDSVRZX1NMSURFUl9QUk9QUyA9IHtcbiAgdHlwZTogJ251bWJlcicsXG4gIHJhbmdlOiBbMCwgMV0sXG4gIHZhbHVlMDogMCxcbiAgc3RlcDogMC4wMSxcbiAgaXNSYW5nZWQ6IGZhbHNlLFxuICBsYWJlbDogJ09wYWNpdHknLFxuICBzaG93SW5wdXQ6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBDb2xvckJsb2NrID0gc3R5bGVkLmRpdi53aXRoQ29uZmlnKHtcbiAgc2hvdWxkRm9yd2FyZFByb3Bcbn0pPHtiYWNrZ3JvdW5kY29sb3I6IFJHQkNvbG9yfT5gXG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PlxuICAgIEFycmF5LmlzQXJyYXkocHJvcHMuYmFja2dyb3VuZGNvbG9yKVxuICAgICAgPyBgcmdiKCR7cHJvcHMuYmFja2dyb3VuZGNvbG9yLnNsaWNlKDAsIDMpLmpvaW4oJywnKX0pYFxuICAgICAgOiAndHJhbnNwYXJlbnQnfTtcbmA7XG5cbmNvbnN0IFN0eWxlZENvbG9yU2VsZWN0b3JXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgLnNlbGVjdG9yX19kcm9wZG93biB7XG4gICAgbWF4LWhlaWdodDogNjAwcHg7IC8qIGluY3JlYXNlIGZyb20gdGhlIGRlZmF1bHQgNTAwcHggZGVmaW5lZCBieSBTdHlsZWRQYW5lbERyb3Bkb3duICovXG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBDb2xvclNlbGVjdG9ySW5wdXQgPSBzdHlsZWQuZGl2LndpdGhDb25maWcoe1xuICBzaG91bGRGb3J3YXJkUHJvcFxufSk8Q29sb3JTZWxlY3RvcklucHV0UHJvcHM+YFxuICAke3Byb3BzID0+IChwcm9wcy5pbnB1dFRoZW1lID09PSAnc2Vjb25kYXJ5JyA/IHByb3BzLnRoZW1lLnNlY29uZGFyeUlucHV0IDogcHJvcHMudGhlbWUuaW5wdXQpfTtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Qm94SGVpZ2h0fTtcblxuICAuY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yX19sYWJlbCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dFBsYWNlaG9sZGVyQ29sb3J9O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgSW5wdXRCb3hDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmNvbG9yLXNlbGVjdF9faW5wdXQtZ3JvdXAge1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgfVxuICAuY29sb3Itc2VsZWN0X19pbnB1dC1ncm91cDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICB9XG5gO1xuXG5Db2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksIFJhbmdlU2xpZGVyRmFjdG9yeV07XG5cbmZ1bmN0aW9uIENvbG9yU2VsZWN0b3JGYWN0b3J5KFxuICBDb2xvclJhbmdlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENvbG9yUmFuZ2VTZWxlY3RvckZhY3Rvcnk+LFxuICBSYW5nZVNsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgUmFuZ2VTbGlkZXJGYWN0b3J5PlxuKTogUmVhY3QuRkM8Q29sb3JTZWxlY3RvclByb3BzPiB7XG4gIGNvbnN0IENvbG9yU2VsZWN0b3I6IFJlYWN0LkZDPENvbG9yU2VsZWN0b3JQcm9wcz4gPSAoe1xuICAgIGNvbG9yU2V0cyA9IFtdLFxuICAgIGNvbG9yVUksXG4gICAgaW5wdXRUaGVtZSxcbiAgICBkaXNhYmxlZCxcbiAgICB1c2VPcGFjaXR5LFxuICAgIHNldENvbG9yVUlcbiAgfTogQ29sb3JTZWxlY3RvclByb3BzKSA9PiB7XG4gICAgY29uc3QgW3Nob3dEcm9wZG93biwgc2V0U2hvd0Ryb3Bkb3duXSA9IHVzZVN0YXRlKGNvbG9yVUkgPyBjb2xvclVJLnNob3dEcm9wZG93biA6IGZhbHNlKTtcbiAgICBjb25zdCBzaG93U2tldGNoZXIgPSBjb2xvclVJID8gY29sb3JVSS5zaG93U2tldGNoZXIgOiBmYWxzZTtcbiAgICBjb25zdCBlZGl0aW5nTG9va3VwID0gY29sb3JVSSA/IGNvbG9yVUkuc2hvd0Ryb3Bkb3duIDogc2hvd0Ryb3Bkb3duO1xuICAgIGNvbnN0IGVkaXRpbmdDb2xvclNldDogQ29sb3JTZXQgfCBmYWxzZSA9XG4gICAgICB0eXBlb2YgZWRpdGluZ0xvb2t1cCA9PT0gJ251bWJlcicgJiYgY29sb3JTZXRzW2VkaXRpbmdMb29rdXBdXG4gICAgICAgID8gY29sb3JTZXRzW2VkaXRpbmdMb29rdXBdXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICBjb25zdCBjbG9zZVBhbmVsRHJvcGRvd24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBpZiAoZWRpdGluZ0xvb2t1cCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNldENvbG9yVUkpIHtcbiAgICAgICAgc2V0Q29sb3JVSSh7c2hvd0Ryb3Bkb3duOiBmYWxzZSwgc2hvd1NrZXRjaGVyOiBmYWxzZX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2hvd0Ryb3Bkb3duKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCBbZWRpdGluZ0xvb2t1cCwgc2V0Q29sb3JVSSwgc2V0U2hvd0Ryb3Bkb3duXSk7XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzaG93U2tldGNoZXIpKSB7XG4gICAgICAgIC8vIGlmIHNrZXRjaGVyIGlzIG9wZW4sIGxldCBza2V0Y2ggdG8gY2xvc2UgaXRzZWxmIGZpcnN0XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlUGFuZWxEcm9wZG93bigpO1xuICAgIH0sIFtzaG93U2tldGNoZXIsIGNsb3NlUGFuZWxEcm9wZG93bl0pO1xuXG4gICAgLy8gZmxvYXRpbmctdWkgYm9pbGVycGxhdGUgdG8gZXN0YWJsaXNoIGNsb3NlIG9uIG91dHNpZGUgY2xpY2tcbiAgICBjb25zdCB7cmVmcywgY29udGV4dH0gPSB1c2VGbG9hdGluZyh7XG4gICAgICBvcGVuOiB0cnVlLFxuICAgICAgb25PcGVuQ2hhbmdlOiB2ID0+IHtcbiAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgaGFuZGxlQ2xpY2tPdXRzaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBkaXNtaXNzID0gdXNlRGlzbWlzcyhjb250ZXh0KTtcbiAgICBjb25zdCB7Z2V0RmxvYXRpbmdQcm9wc30gPSB1c2VJbnRlcmFjdGlvbnMoW2Rpc21pc3NdKTtcblxuICAgIGNvbnN0IHNldENvbG9yID0gdXNlQ2FsbGJhY2soXG4gICAgICAoY29sb3JTZXQ6IENvbG9yU2V0LCBjb2xvcjogUkdCQ29sb3IgfCBSR0JBQ29sb3IgfCBDb2xvclJhbmdlLCBvcGFjaXR5OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3Qge3NldENvbG9yfSA9IGNvbG9yU2V0IHx8IHt9O1xuICAgICAgICBpZiAoIXNldENvbG9yKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VPcGFjaXR5ICYmIEFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgICAgICAgc2V0Q29sb3IoWy4uLmNvbG9yLnNsaWNlKDAsIDMpLCBvcGFjaXR5XSBhcyBSR0JBQ29sb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldENvbG9yKGNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFt1c2VPcGFjaXR5XVxuICAgICk7XG5cbiAgICBjb25zdCBvblNlbGVjdENvbG9yID0gdXNlQ2FsbGJhY2soXG4gICAgICAoY29sb3I6IFJHQkNvbG9yIHwgQ29sb3JSYW5nZSwgZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3QgY29sb3JTZXQgPSBlZGl0aW5nQ29sb3JTZXQ7XG4gICAgICAgIGlmIChjb2xvclNldCkge1xuICAgICAgICAgIHNldENvbG9yKGNvbG9yU2V0LCBjb2xvciwgY29sb3JTZXQuc2VsZWN0ZWRDb2xvclszXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZWRpdGluZ0NvbG9yU2V0LCBzZXRDb2xvcl1cbiAgICApO1xuXG4gICAgY29uc3Qgb25TZWxlY3RPcGFjaXR5ID0gdXNlQ2FsbGJhY2soXG4gICAgICAob3BhY2l0eTogbnVtYmVyW10sIGU6IEV2ZW50IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3QgY29sb3JTZXQgPSBlZGl0aW5nQ29sb3JTZXQ7XG4gICAgICAgIGlmIChjb2xvclNldCkge1xuICAgICAgICAgIHNldENvbG9yKGNvbG9yU2V0LCBjb2xvclNldC5zZWxlY3RlZENvbG9yLCBNYXRoLnJvdW5kKG9wYWNpdHlbMV0gKiAyNTUpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtlZGl0aW5nQ29sb3JTZXQsIHNldENvbG9yXVxuICAgICk7XG5cbiAgICBjb25zdCBvblRvZ2dsZURyb3Bkb3duID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZSwgaSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHNob3dEcm9wZG93blZhbHVlID1cbiAgICAgICAgICBlZGl0aW5nTG9va3VwID09PSBmYWxzZVxuICAgICAgICAgICAgPyBpIC8vIG9wZW4gaXQgZm9yIHRoZSBzcGVjaWZpYyBjb2xvciBzZXQgaW5kZXhcbiAgICAgICAgICAgIDogZmFsc2U7IC8vIGNsb3NlIGl0XG4gICAgICAgIGlmIChzZXRDb2xvclVJKSB7XG4gICAgICAgICAgc2V0Q29sb3JVSSh7c2hvd0Ryb3Bkb3duOiBzaG93RHJvcGRvd25WYWx1ZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFNob3dEcm9wZG93bihzaG93RHJvcGRvd25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZWRpdGluZ0xvb2t1cCwgc2V0Q29sb3JVSSwgc2V0U2hvd0Ryb3Bkb3duXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZENvbG9yU2VsZWN0b3JXcmFwcGVyXG4gICAgICAgIGNsYXNzTmFtZT1cImNvbG9yLXNlbGVjdG9yXCJcbiAgICAgICAgcmVmPXtyZWZzLnNldEZsb2F0aW5nfVxuICAgICAgICB7Li4uZ2V0RmxvYXRpbmdQcm9wcygpfVxuICAgICAgPlxuICAgICAgICA8SW5wdXRCb3hDb250YWluZXI+XG4gICAgICAgICAge2NvbG9yU2V0cy5tYXAoKGNTZXQsIGkpID0+IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0X19pbnB1dC1ncm91cFwiIGtleT17aX0+XG4gICAgICAgICAgICAgIDxDb2xvclNlbGVjdG9ySW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZWRpdGluZ0xvb2t1cCA9PT0gaX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT17aW5wdXRUaGVtZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IG9uVG9nZ2xlRHJvcGRvd24oZSwgaSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y1NldC5pc1JhbmdlID8gKFxuICAgICAgICAgICAgICAgICAgPENvbG9yUGFsZXR0ZSBjb2xvcnM9eyhjU2V0LnNlbGVjdGVkQ29sb3IgYXMgQ29sb3JSYW5nZSkuY29sb3JzfSAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8Q29sb3JCbG9ja1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2Jsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZGNvbG9yPXtjU2V0LnNlbGVjdGVkQ29sb3IgYXMgUkdCQ29sb3J9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2NTZXQubGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbG9yLXNlbGVjdG9yX19zZWxlY3Rvcl9fbGFiZWxcIj57Y1NldC5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9Db2xvclNlbGVjdG9ySW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9JbnB1dEJveENvbnRhaW5lcj5cbiAgICAgICAge2VkaXRpbmdDb2xvclNldCA/IChcbiAgICAgICAgICA8U3R5bGVkUGFuZWxEcm9wZG93biBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fZHJvcGRvd25cIj5cbiAgICAgICAgICAgIHtlZGl0aW5nQ29sb3JTZXQuaXNSYW5nZSAmJiBjb2xvclVJICYmIHNldENvbG9yVUkgPyAoXG4gICAgICAgICAgICAgIDxDb2xvclJhbmdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yUmFuZ2U9e2VkaXRpbmdDb2xvclNldC5zZWxlY3RlZENvbG9yIGFzIENvbG9yUmFuZ2V9XG4gICAgICAgICAgICAgICAgb25TZWxlY3RDb2xvclJhbmdlPXtvblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAgIHNldENvbG9yUGFsZXR0ZVVJPXtzZXRDb2xvclVJfVxuICAgICAgICAgICAgICAgIGNvbG9yUGFsZXR0ZVVJPXtjb2xvclVJIGFzIENvbG9yVUl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8U2luZ2xlQ29sb3JQYWxldHRlXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17cmdiVG9IZXgoZWRpdGluZ0NvbG9yU2V0LnNlbGVjdGVkQ29sb3IgYXMgUkdCQ29sb3IpfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0Q29sb3I9e29uU2VsZWN0Q29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3VzZU9wYWNpdHkgPyAoXG4gICAgICAgICAgICAgIDxPcGFjaXR5U2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29sb3Iub3BhY2l0eVwiIC8+XG4gICAgICAgICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLk9QQUNJVFlfU0xJREVSX1BST1BTfVxuICAgICAgICAgICAgICAgICAgdmFsdWUxPXtlZGl0aW5nQ29sb3JTZXQuc2VsZWN0ZWRDb2xvclszXSAvIDI1NX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblNlbGVjdE9wYWNpdHl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9PcGFjaXR5U2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU3R5bGVkUGFuZWxEcm9wZG93bj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1N0eWxlZENvbG9yU2VsZWN0b3JXcmFwcGVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIENvbG9yU2Vs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