kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
159 lines (158 loc) • 28.5 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = VisConfigSliderFactory;
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("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _styledComponents2 = require("../../common/styled-components");
var _rangeSlider = _interopRequireDefault(require("../../common/range-slider"));
var _localization = require("@kepler.gl/localization");
var _constants = require("@kepler.gl/constants");
var _ = require("../..");
var _utils = require("@kepler.gl/utils");
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; }
var InputWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n line-height: 12px;\n margin-bottom: 12px;\n"])));
var CustomInputWrapper = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"])));
var CustomInputLabel = _styledComponents["default"].label(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-weight: 500;\n letter-spacing: 0.2px;\n font-size: ", ";\n padding-right: 15px;\n\n &:last-child {\n position: absolute;\n right: 0;\n padding: 0;\n }\n"])), function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.layerConfigGroupLabelLabelFontSize;
});
var RangeInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n font-size: ", ";\n width: 44px;\n overflow: auto;\n height: 20px;\n margin-top: 5px;\n"])), function (props) {
return props.theme.input;
}, function (props) {
return props.theme.sliderInputFontSize;
});
var LazyInput = function LazyInput(_ref) {
var value = _ref.value,
onChange = _ref.onChange,
name = _ref.name;
var _useState = (0, _react.useState)(value),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
stateValue = _useState2[0],
setValue = _useState2[1];
var inputRef = (0, _react.useRef)(null);
(0, _react.useEffect)(function () {
setValue(value);
}, [value]);
var onKeyDown = (0, _react.useCallback)(function (e) {
switch (e.keyCode) {
case _constants.KeyEvent.DOM_VK_ENTER:
case _constants.KeyEvent.DOM_VK_RETURN:
onChange(stateValue);
if (inputRef !== null) {
// @ts-ignore
inputRef === null || inputRef === void 0 || inputRef.current.blur();
}
break;
default:
break;
}
}, [onChange, stateValue]);
var _onChange = (0, _react.useCallback)(function (e) {
return setValue(e.target.value);
}, [setValue]);
var onBlur = (0, _react.useCallback)(function () {
return onChange(name, stateValue);
}, [onChange, name, stateValue]);
return /*#__PURE__*/_react["default"].createElement(RangeInput, {
type: "number",
ref: inputRef,
value: stateValue,
onChange: _onChange,
onBlur: onBlur,
onKeyDown: onKeyDown,
id: name
});
};
var CustomInput = function CustomInput(_ref2) {
var isRanged = _ref2.isRanged,
value = _ref2.value,
onChangeCustomInput = _ref2.onChangeCustomInput;
var onChangeInput = (0, _react.useCallback)(function (name, v) {
if (isRanged) onChangeCustomInput(name === 'value0' ? [v, value[1]] : [value[0], v]);else onChangeCustomInput(v);
}, [isRanged, value, onChangeCustomInput]);
return /*#__PURE__*/_react["default"].createElement(CustomInputWrapper, null, isRanged ? /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "min", /*#__PURE__*/_react["default"].createElement(LazyInput, {
name: "value0",
value: value[0],
onChange: onChangeInput
})), /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "max", /*#__PURE__*/_react["default"].createElement(LazyInput, {
name: "value1",
value: value[1],
onChange: onChangeInput
}))) : /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(LazyInput, {
name: "value",
value: value,
onChange: onChangeInput
})));
};
VisConfigSliderFactory.deps = [_rangeSlider["default"]];
function VisConfigSliderFactory(RangeSlider) {
var VisConfigSlider = function VisConfigSlider(_ref3) {
var config = _ref3.layer.config,
property = _ref3.property,
label = _ref3.label,
range = _ref3.range,
step = _ref3.step,
isRanged = _ref3.isRanged,
allowCustomValue = _ref3.allowCustomValue,
disabled = _ref3.disabled,
_onChange4 = _ref3.onChange,
inputTheme = _ref3.inputTheme;
var value = config.visConfig[property];
var _useState3 = (0, _react.useState)(false || !(0, _utils.isInRange)(value, range)),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
custom = _useState4[0],
setCustom = _useState4[1];
var onChangeCheckbox = (0, _react.useCallback)(function () {
if (custom) {
// we are swithcing from custom to not custom
// adjust value to range
var adjustedValue = isRanged ? [(0, _utils.clamp)(range, value[0]), (0, _utils.clamp)(range, value[1])] : (0, _utils.clamp)(range, value);
_onChange4((0, _defineProperty2["default"])({}, property, adjustedValue));
}
setCustom(!custom);
}, [_onChange4, property, isRanged, value, range, custom, setCustom]);
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, {
disabled: Boolean(disabled)
}, label ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, typeof label === 'string' ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: label
}) : typeof label === 'function' ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: label(config)
}) : /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "property.".concat(property)
})) : null, allowCustomValue ? /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "custom input"), /*#__PURE__*/_react["default"].createElement(_.Checkbox, {
id: "property.".concat(property),
checked: custom,
onChange: onChangeCheckbox
})) : null, !custom ? /*#__PURE__*/_react["default"].createElement(RangeSlider, {
range: range,
value0: isRanged ? value[0] : range[0],
value1: isRanged ? value[1] : value,
step: step,
isRanged: Boolean(isRanged),
onChange: function onChange(v) {
return _onChange4((0, _defineProperty2["default"])({}, property, isRanged ? v : v[1]));
},
inputTheme: inputTheme,
showInput: true
}) : /*#__PURE__*/_react["default"].createElement(CustomInput, {
isRanged: isRanged,
value: value,
onChangeCustomInput: function onChangeCustomInput(v) {
return _onChange4((0, _defineProperty2["default"])({}, property, v));
}
}));
};
return VisConfigSlider;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfcmFuZ2VTbGlkZXIiLCJfbG9jYWxpemF0aW9uIiwiX2NvbnN0YW50cyIsIl8iLCJfdXRpbHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJJbnB1dFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkN1c3RvbUlucHV0V3JhcHBlciIsIkN1c3RvbUlucHV0TGFiZWwiLCJsYWJlbCIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3IiLCJsYXllckNvbmZpZ0dyb3VwTGFiZWxMYWJlbEZvbnRTaXplIiwiUmFuZ2VJbnB1dCIsImlucHV0Iiwic2xpZGVySW5wdXRGb250U2l6ZSIsIkxhenlJbnB1dCIsIl9yZWYiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwibmFtZSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInN0YXRlVmFsdWUiLCJzZXRWYWx1ZSIsImlucHV0UmVmIiwidXNlUmVmIiwidXNlRWZmZWN0Iiwib25LZXlEb3duIiwidXNlQ2FsbGJhY2siLCJrZXlDb2RlIiwiS2V5RXZlbnQiLCJET01fVktfRU5URVIiLCJET01fVktfUkVUVVJOIiwiY3VycmVudCIsImJsdXIiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJvbkJsdXIiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInJlZiIsImlkIiwiQ3VzdG9tSW5wdXQiLCJfcmVmMiIsImlzUmFuZ2VkIiwib25DaGFuZ2VDdXN0b21JbnB1dCIsIm9uQ2hhbmdlSW5wdXQiLCJ2IiwiVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSIsImRlcHMiLCJSYW5nZVNsaWRlckZhY3RvcnkiLCJSYW5nZVNsaWRlciIsIlZpc0NvbmZpZ1NsaWRlciIsIl9yZWYzIiwiY29uZmlnIiwibGF5ZXIiLCJwcm9wZXJ0eSIsInJhbmdlIiwic3RlcCIsImFsbG93Q3VzdG9tVmFsdWUiLCJkaXNhYmxlZCIsImlucHV0VGhlbWUiLCJ2aXNDb25maWciLCJfdXNlU3RhdGUzIiwiaXNJblJhbmdlIiwiX3VzZVN0YXRlNCIsImN1c3RvbSIsInNldEN1c3RvbSIsIm9uQ2hhbmdlQ2hlY2tib3giLCJhZGp1c3RlZFZhbHVlIiwiY2xhbXAiLCJfZGVmaW5lUHJvcGVydHkyIiwiU2lkZVBhbmVsU2VjdGlvbiIsIkJvb2xlYW4iLCJQYW5lbExhYmVsIiwiRm9ybWF0dGVkTWVzc2FnZSIsImNvbmNhdCIsIkNoZWNrYm94IiwiY2hlY2tlZCIsInZhbHVlMCIsInZhbHVlMSIsInNob3dJbnB1dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL3Zpcy1jb25maWctc2xpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtQYW5lbExhYmVsLCBTaWRlUGFuZWxTZWN0aW9ufSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFJhbmdlU2xpZGVyRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vcmFuZ2Utc2xpZGVyJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtLZXlFdmVudH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDaGVja2JveH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2lzSW5SYW5nZSwgY2xhbXB9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG50eXBlIExhenlJbnB1dFByb3BzID0ge1xuICB2YWx1ZTogc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXTtcbiAgbmFtZTogc3RyaW5nO1xuICBvbkNoYW5nZTogKG46IHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10sIHY/OiBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddKSA9PiB2b2lkO1xufTtcblxudHlwZSBDdXN0b21JbnB1dFByb3BzID0ge1xuICB2YWx1ZTogc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXTtcbiAgaXNSYW5nZWQ6IGJvb2xlYW47XG4gIG9uQ2hhbmdlQ3VzdG9tSW5wdXQ6ICh2OiBbc3RyaW5nLCBzdHJpbmddKSA9PiB2b2lkO1xufTtcblxudHlwZSBWaXNDb25maWdTbGlkZXJQcm9wcyA9IHtcbiAgbGF5ZXI6IExheWVyO1xuICBwcm9wZXJ0eTogc3RyaW5nO1xuICBvbkNoYW5nZTogKHY6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZyB8IG51bWJlcltdIHwgc3RyaW5nW10+KSA9PiB2b2lkO1xuICBsYWJlbD86IHN0cmluZyB8ICgoYzogTGF5ZXJCYXNlQ29uZmlnKSA9PiBzdHJpbmcpO1xuICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgc3RlcD86IG51bWJlcjtcbiAgaXNSYW5nZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbiAgYWxsb3dDdXN0b21WYWx1ZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBJbnB1dFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBsaW5lLWhlaWdodDogMTJweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbmA7XG5cbmNvbnN0IEN1c3RvbUlucHV0V3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG5gO1xuXG5jb25zdCBDdXN0b21JbnB1dExhYmVsID0gc3R5bGVkLmxhYmVsYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBmb250LXdlaWdodDogNTAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4ycHg7XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwTGFiZWxMYWJlbEZvbnRTaXplfTtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5gO1xuXG5jb25zdCBSYW5nZUlucHV0ID0gc3R5bGVkLmlucHV0YFxuICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0fTtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNsaWRlcklucHV0Rm9udFNpemV9O1xuICB3aWR0aDogNDRweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLXRvcDogNXB4O1xuYDtcblxuY29uc3QgTGF6eUlucHV0OiBSZWFjdC5GQzxMYXp5SW5wdXRQcm9wcz4gPSAoe3ZhbHVlLCBvbkNoYW5nZSwgbmFtZX0pID0+IHtcbiAgY29uc3QgW3N0YXRlVmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcblxuICBjb25zdCBvbktleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICBlID0+IHtcbiAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgS2V5RXZlbnQuRE9NX1ZLX0VOVEVSOlxuICAgICAgICBjYXNlIEtleUV2ZW50LkRPTV9WS19SRVRVUk46XG4gICAgICAgICAgb25DaGFuZ2Uoc3RhdGVWYWx1ZSk7XG4gICAgICAgICAgaWYgKGlucHV0UmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpbnB1dFJlZj8uY3VycmVudC5ibHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBzdGF0ZVZhbHVlXVxuICApO1xuXG4gIGNvbnN0IF9vbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLCBbc2V0VmFsdWVdKTtcbiAgY29uc3Qgb25CbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4gb25DaGFuZ2UobmFtZSwgc3RhdGVWYWx1ZSksIFtvbkNoYW5nZSwgbmFtZSwgc3RhdGVWYWx1ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFJhbmdlSW5wdXRcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIHZhbHVlPXtzdGF0ZVZhbHVlfVxuICAgICAgb25DaGFuZ2U9e19vbkNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBpZD17bmFtZX1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQ3VzdG9tSW5wdXQ6IFJlYWN0LkZDPEN1c3RvbUlucHV0UHJvcHM+ID0gKHtpc1JhbmdlZCwgdmFsdWUsIG9uQ2hhbmdlQ3VzdG9tSW5wdXR9KSA9PiB7XG4gIGNvbnN0IG9uQ2hhbmdlSW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmFtZSwgdikgPT4ge1xuICAgICAgaWYgKGlzUmFuZ2VkKSBvbkNoYW5nZUN1c3RvbUlucHV0KG5hbWUgPT09ICd2YWx1ZTAnID8gW3YsIHZhbHVlWzFdXSA6IFt2YWx1ZVswXSwgdl0pO1xuICAgICAgZWxzZSBvbkNoYW5nZUN1c3RvbUlucHV0KHYpO1xuICAgIH0sXG4gICAgW2lzUmFuZ2VkLCB2YWx1ZSwgb25DaGFuZ2VDdXN0b21JbnB1dF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDdXN0b21JbnB1dFdyYXBwZXI+XG4gICAgICB7aXNSYW5nZWQgPyAoXG4gICAgICAgIDxJbnB1dFdyYXBwZXI+XG4gICAgICAgICAgPEN1c3RvbUlucHV0TGFiZWw+XG4gICAgICAgICAgICBtaW5cbiAgICAgICAgICAgIDxMYXp5SW5wdXQgbmFtZT1cInZhbHVlMFwiIHZhbHVlPXt2YWx1ZVswXX0gb25DaGFuZ2U9e29uQ2hhbmdlSW5wdXR9IC8+XG4gICAgICAgICAgPC9DdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgIDxDdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgICAgbWF4XG4gICAgICAgICAgICA8TGF6eUlucHV0IG5hbWU9XCJ2YWx1ZTFcIiB2YWx1ZT17dmFsdWVbMV19IG9uQ2hhbmdlPXtvbkNoYW5nZUlucHV0fSAvPlxuICAgICAgICAgIDwvQ3VzdG9tSW5wdXRMYWJlbD5cbiAgICAgICAgPC9JbnB1dFdyYXBwZXI+XG4gICAgICApIDogKFxuICAgICAgICA8SW5wdXRXcmFwcGVyPlxuICAgICAgICAgIDxMYXp5SW5wdXQgbmFtZT1cInZhbHVlXCIgdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2VJbnB1dH0gLz5cbiAgICAgICAgPC9JbnB1dFdyYXBwZXI+XG4gICAgICApfVxuICAgIDwvQ3VzdG9tSW5wdXRXcmFwcGVyPlxuICApO1xufTtcblxuVmlzQ29uZmlnU2xpZGVyRmFjdG9yeS5kZXBzID0gW1JhbmdlU2xpZGVyRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkoUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT4pIHtcbiAgY29uc3QgVmlzQ29uZmlnU2xpZGVyOiBSZWFjdC5GQzxWaXNDb25maWdTbGlkZXJQcm9wcz4gPSAoe1xuICAgIGxheWVyOiB7Y29uZmlnfSxcbiAgICBwcm9wZXJ0eSxcbiAgICBsYWJlbCxcbiAgICByYW5nZSxcbiAgICBzdGVwLFxuICAgIGlzUmFuZ2VkLFxuICAgIGFsbG93Q3VzdG9tVmFsdWUsXG4gICAgZGlzYWJsZWQsXG4gICAgb25DaGFuZ2UsXG4gICAgaW5wdXRUaGVtZVxuICB9KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XTtcbiAgICBjb25zdCBbY3VzdG9tLCBzZXRDdXN0b21dID0gdXNlU3RhdGUoZmFsc2UgfHwgIWlzSW5SYW5nZSh2YWx1ZSwgcmFuZ2UpKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlQ2hlY2tib3ggPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBpZiAoY3VzdG9tKSB7XG4gICAgICAgIC8vIHdlIGFyZSBzd2l0aGNpbmcgZnJvbSBjdXN0b20gdG8gbm90IGN1c3RvbVxuICAgICAgICAvLyBhZGp1c3QgdmFsdWUgdG8gcmFuZ2VcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRWYWx1ZSA9IGlzUmFuZ2VkXG4gICAgICAgICAgPyBbY2xhbXAocmFuZ2UsIHZhbHVlWzBdKSwgY2xhbXAocmFuZ2UsIHZhbHVlWzFdKV1cbiAgICAgICAgICA6IGNsYW1wKHJhbmdlLCB2YWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBhZGp1c3RlZFZhbHVlfSk7XG4gICAgICB9XG4gICAgICBzZXRDdXN0b20oIWN1c3RvbSk7XG4gICAgfSwgW29uQ2hhbmdlLCBwcm9wZXJ0eSwgaXNSYW5nZWQsIHZhbHVlLCByYW5nZSwgY3VzdG9tLCBzZXRDdXN0b21dKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbiBkaXNhYmxlZD17Qm9vbGVhbihkaXNhYmxlZCl9PlxuICAgICAgICB7bGFiZWwgPyAoXG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICB7dHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2xhYmVsfSAvPlxuICAgICAgICAgICAgKSA6IHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2xhYmVsKGNvbmZpZyl9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17YHByb3BlcnR5LiR7cHJvcGVydHl9YH0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7YWxsb3dDdXN0b21WYWx1ZSA/IChcbiAgICAgICAgICA8SW5wdXRXcmFwcGVyPlxuICAgICAgICAgICAgPEN1c3RvbUlucHV0TGFiZWw+Y3VzdG9tIGlucHV0PC9DdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgICAgPENoZWNrYm94IGlkPXtgcHJvcGVydHkuJHtwcm9wZXJ0eX1gfSBjaGVja2VkPXtjdXN0b219IG9uQ2hhbmdlPXtvbkNoYW5nZUNoZWNrYm94fSAvPlxuICAgICAgICAgIDwvSW5wdXRXcmFwcGVyPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IWN1c3RvbSA/IChcbiAgICAgICAgICA8UmFuZ2VTbGlkZXJcbiAgICAgICAgICAgIHJhbmdlPXtyYW5nZX1cbiAgICAgICAgICAgIHZhbHVlMD17aXNSYW5nZWQgPyB2YWx1ZVswXSA6IHJhbmdlWzBdfVxuICAgICAgICAgICAgdmFsdWUxPXtpc1JhbmdlZCA/IHZhbHVlWzFdIDogdmFsdWV9XG4gICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgaXNSYW5nZWQ9e0Jvb2xlYW4oaXNSYW5nZWQpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3YgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGlzUmFuZ2VkID8gdiA6IHZbMV19KX1cbiAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICBzaG93SW5wdXRcbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDdXN0b21JbnB1dFxuICAgICAgICAgICAgaXNSYW5nZWQ9e2lzUmFuZ2VkfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2VDdXN0b21JbnB1dD17diA9PiBvbkNoYW5nZSh7W3Byb3BlcnR5XTogdn0pfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVmlzQ29uZmlnU2xpZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxrQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0Es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
;