UNPKG

kepler.gl.geoiq

Version:

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

140 lines (104 loc) 17.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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = require("../../common/styled-components"); var _colorSelector = _interopRequireDefault(require("./color-selector")); var _fieldSelector = _interopRequireDefault(require("../../common/field-selector")); var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector")); var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group")); var _rangeSlider = _interopRequireDefault(require("../../common/range-slider")); var _layerFactory = require("../../../layers/layer-factory"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 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; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var LayerConfigurator = exports["default"] = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(LayerConfigurator, _Component); var _super = _createSuper(LayerConfigurator); function LayerConfigurator() { var _this; (0, _classCallCheck2["default"])(this, LayerConfigurator); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAttributeChange", function (attribute) { var _this$props = _this.props, layerConfiguratorProps = _this$props.layerConfiguratorProps, textLabel = _this$props.textLabel; return function (v) { return layerConfiguratorProps.onChange({ textLabel: _objectSpread(_objectSpread({}, textLabel), {}, (0, _defineProperty2["default"])({}, attribute, v)) }); }; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChangeTextAnchor", function (anchor) { var _this$props2 = _this.props, layerConfiguratorProps = _this$props2.layerConfiguratorProps, textLabel = _this$props2.textLabel; // TODO: we can be smarter on determining the offset of the text layerConfiguratorProps.onChange({ textLabel: _objectSpread(_objectSpread({}, textLabel), {}, { anchor: anchor, offset: [anchor === 'start' ? 10 : anchor === 'end' ? -10 : 0, anchor === 'middle' ? 10 : 0] }) }); }); return _this; } (0, _createClass2["default"])(LayerConfigurator, [{ key: "render", value: function render() { var _this2 = this; var _this$props3 = this.props, visConfiguratorProps = _this$props3.visConfiguratorProps, textLabel = _this$props3.textLabel; return (/*#__PURE__*/_react["default"].createElement(_layerConfigGroup["default"], { label: 'label', collapsible: true }, /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_fieldSelector["default"], { fields: visConfiguratorProps.fields, value: textLabel.field && textLabel.field.name || 'select a field', placeholder: 'empty', onSelect: this.onAttributeChange('field'), erasable: true })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents.PanelLabel, null, "Font size"), /*#__PURE__*/_react["default"].createElement(_rangeSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_TEXT_CONFIGS.fontSize, { value1: textLabel.size, onChange: function onChange(v) { return _this2.onAttributeChange('size')(v[1]); } }))), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents.PanelLabel, null, "Font color"), /*#__PURE__*/_react["default"].createElement(_colorSelector["default"], { colorSets: [{ selectedColor: textLabel.color, setColor: this.onAttributeChange('color') }] })), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents.PanelLabel, null, "Text anchor"), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_TEXT_CONFIGS.textAnchor, { selectedItems: textLabel.anchor, onChange: this.onChangeTextAnchor }))))) ); } }]); return LayerConfigurator; }(_react.Component); (0, _defineProperty2["default"])(LayerConfigurator, "propTypes", { layerConfiguratorProps: _propTypes["default"].object.isRequired, textLabel: _propTypes["default"].object.isRequired, visConfiguratorProps: _propTypes["default"].object.isRequired }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvd2lkZ2V0LXBhbmVsL3RleHQtbGFiZWwtcGFuZWwuanMiXSwibmFtZXMiOlsiTGF5ZXJDb25maWd1cmF0b3IiLCJhdHRyaWJ1dGUiLCJwcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJ0ZXh0TGFiZWwiLCJ2Iiwib25DaGFuZ2UiLCJhbmNob3IiLCJvZmZzZXQiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImZpZWxkcyIsImZpZWxkIiwibmFtZSIsIm9uQXR0cmlidXRlQ2hhbmdlIiwiTEFZRVJfVEVYVF9DT05GSUdTIiwiZm9udFNpemUiLCJzaXplIiwic2VsZWN0ZWRDb2xvciIsImNvbG9yIiwic2V0Q29sb3IiLCJ0ZXh0QW5jaG9yIiwib25DaGFuZ2VUZXh0QW5jaG9yIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7OztJQUVxQkEsaUI7Ozs7Ozs7Ozs7Ozs7OzswR0FPQyxVQUFBQyxTQUFTLEVBQUk7QUFDL0Isd0JBQTRDLE1BQUtDLEtBQWpEO0FBQUEsVUFBT0Msc0JBQVAsZUFBT0Esc0JBQVA7QUFBQSxVQUErQkMsU0FBL0IsZUFBK0JBLFNBQS9CO0FBQ0EsYUFBTyxVQUFBQyxDQUFDO0FBQUEsZUFBSUYsc0JBQXNCLENBQUNHLFFBQXZCLENBQWdDO0FBQzFDRixVQUFBQSxTQUFTLGtDQUNKQSxTQURJLDRDQUVOSCxTQUZNLEVBRU1JLENBRk47QUFEaUMsU0FBaEMsQ0FBSjtBQUFBLE9BQVI7QUFNRCxLOzJHQUVvQixVQUFBRSxNQUFNLEVBQUk7QUFDN0IseUJBQTRDLE1BQUtMLEtBQWpEO0FBQUEsVUFBT0Msc0JBQVAsZ0JBQU9BLHNCQUFQO0FBQUEsVUFBK0JDLFNBQS9CLGdCQUErQkEsU0FBL0IsQ0FENkIsQ0FFN0I7O0FBQ0FELE1BQUFBLHNCQUFzQixDQUFDRyxRQUF2QixDQUFnQztBQUM5QkYsUUFBQUEsU0FBUyxrQ0FDSkEsU0FESTtBQUVQRyxVQUFBQSxNQUFNLEVBQU5BLE1BRk87QUFHUEMsVUFBQUEsTUFBTSxFQUFFLENBQ05ELE1BQU0sS0FBSyxPQUFYLEdBQXFCLEVBQXJCLEdBQTBCQSxNQUFNLEtBQUssS0FBWCxHQUFtQixDQUFDLEVBQXBCLEdBQXlCLENBRDdDLEVBRU5BLE1BQU0sS0FBSyxRQUFYLEdBQXNCLEVBQXRCLEdBQTJCLENBRnJCO0FBSEQ7QUFEcUIsT0FBaEM7QUFVRCxLOzs7Ozs7V0FFRCxrQkFBUztBQUFBOztBQUNQLHlCQUdJLEtBQUtMLEtBSFQ7QUFBQSxVQUNFTyxvQkFERixnQkFDRUEsb0JBREY7QUFBQSxVQUVFTCxTQUZGLGdCQUVFQSxTQUZGO0FBSUEsMkJBQ0UsZ0NBQUMsNEJBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsT0FBekI7QUFBa0MsVUFBQSxXQUFXO0FBQTdDLHdCQUNJLGdDQUFDLGtDQUFELHFCQUNFLGdDQUFDLHlCQUFEO0FBQ0UsVUFBQSxNQUFNLEVBQUVLLG9CQUFvQixDQUFDQyxNQUQvQjtBQUVFLFVBQUEsS0FBSyxFQUFFTixTQUFTLENBQUNPLEtBQVYsSUFBbUJQLFNBQVMsQ0FBQ08sS0FBVixDQUFnQkMsSUFBbkMsSUFBMkMsZ0JBRnBEO0FBR0UsVUFBQSxXQUFXLEVBQUUsT0FIZjtBQUlFLFVBQUEsUUFBUSxFQUFFLEtBQUtDLGlCQUFMLENBQXVCLE9BQXZCLENBSlo7QUFLRSxVQUFBLFFBQVE7QUFMVixVQURGLENBREosZUFVSSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxrQ0FBRCxxQkFDRSxnQ0FBQyw0QkFBRCxvQkFERixlQUVFLGdDQUFDLHVCQUFELGdDQUNNQyxpQ0FBbUJDLFFBRHpCO0FBRUUsVUFBQSxNQUFNLEVBQUVYLFNBQVMsQ0FBQ1ksSUFGcEI7QUFHRSxVQUFBLFFBQVEsRUFBRSxrQkFBQVgsQ0FBQztBQUFBLG1CQUFJLE1BQUksQ0FBQ1EsaUJBQUwsQ0FBdUIsTUFBdkIsRUFBK0JSLENBQUMsQ0FBQyxDQUFELENBQWhDLENBQUo7QUFBQTtBQUhiLFdBRkYsQ0FERixlQVNFLGdDQUFDLGtDQUFELHFCQUNBLGdDQUFDLDRCQUFELHFCQURBLGVBRUUsZ0NBQUMseUJBQUQ7QUFDRSxVQUFBLFNBQVMsRUFBRSxDQUNUO0FBQ0VZLFlBQUFBLGFBQWEsRUFBRWIsU0FBUyxDQUFDYyxLQUQzQjtBQUVFQyxZQUFBQSxRQUFRLEVBQUUsS0FBS04saUJBQUwsQ0FBdUIsT0FBdkI7QUFGWixXQURTO0FBRGIsVUFGRixDQVRGLGVBb0JFLGdDQUFDLGtDQUFELHFCQUNFLGdDQUFDLDRCQUFELHNCQURGLGVBRUUsZ0NBQUMsd0JBQUQsZ0NBQ01DLGlDQUFtQk0sVUFEekI7QUFFRSxVQUFBLGFBQWEsRUFBRWhCLFNBQVMsQ0FBQ0csTUFGM0I7QUFHRSxVQUFBLFFBQVEsRUFBRSxLQUFLYztBQUhqQixXQUZGLENBcEJGLENBVko7QUFERjtBQTBDRDs7O0VBL0U0Q0MsZ0I7O2lDQUExQnRCLGlCLGVBQ0E7QUFDakJHLEVBQUFBLHNCQUFzQixFQUFFb0Isc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRHhCO0FBRWpCckIsRUFBQUEsU0FBUyxFQUFFbUIsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRlg7QUFHakJoQixFQUFBQSxvQkFBb0IsRUFBRWMsc0JBQVVDLE1BQVYsQ0FBaUJDO0FBSHRCLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7UGFuZWxMYWJlbCwgU2lkZVBhbmVsU2VjdGlvbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IENvbG9yU2VsZWN0b3IgZnJvbSAnLi9jb2xvci1zZWxlY3Rvcic7XG5pbXBvcnQgRmllbGRTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cCwge0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50fSBmcm9tICcuL2xheWVyLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgUmFuZ2VTbGlkZXIgZnJvbSAnY29tcG9uZW50cy9jb21tb24vcmFuZ2Utc2xpZGVyJztcblxuaW1wb3J0IHtMQVlFUl9URVhUX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICB0ZXh0TGFiZWw6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gIH07XG5cbiAgb25BdHRyaWJ1dGVDaGFuZ2UgPSBhdHRyaWJ1dGUgPT4ge1xuICAgIGNvbnN0IHtsYXllckNvbmZpZ3VyYXRvclByb3BzLCB0ZXh0TGFiZWx9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gdiA9PiBsYXllckNvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtcbiAgICAgIHRleHRMYWJlbDoge1xuICAgICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICAgIFthdHRyaWJ1dGVdOiB2XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgb25DaGFuZ2VUZXh0QW5jaG9yID0gYW5jaG9yID0+IHtcbiAgICBjb25zdCB7bGF5ZXJDb25maWd1cmF0b3JQcm9wcywgdGV4dExhYmVsfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gVE9ETzogd2UgY2FuIGJlIHNtYXJ0ZXIgb24gZGV0ZXJtaW5pbmcgdGhlIG9mZnNldCBvZiB0aGUgdGV4dFxuICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe1xuICAgICAgdGV4dExhYmVsOiB7XG4gICAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBvZmZzZXQ6IFtcbiAgICAgICAgICBhbmNob3IgPT09ICdzdGFydCcgPyAxMCA6IGFuY2hvciA9PT0gJ2VuZCcgPyAtMTAgOiAwLFxuICAgICAgICAgIGFuY2hvciA9PT0gJ21pZGRsZScgPyAxMCA6IDBcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIHRleHRMYWJlbFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xhYmVsJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICA8RmllbGRTZWxlY3RvclxuICAgICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgICAgdmFsdWU9e3RleHRMYWJlbC5maWVsZCAmJiB0ZXh0TGFiZWwuZmllbGQubmFtZSB8fCAnc2VsZWN0IGEgZmllbGQnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17J2VtcHR5J31cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMub25BdHRyaWJ1dGVDaGFuZ2UoJ2ZpZWxkJyl9XG4gICAgICAgICAgICAgIGVyYXNhYmxlXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+e2BGb250IHNpemVgfTwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLkxBWUVSX1RFWFRfQ09ORklHUy5mb250U2l6ZX1cbiAgICAgICAgICAgICAgICB2YWx1ZTE9e3RleHRMYWJlbC5zaXplfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt2ID0+IHRoaXMub25BdHRyaWJ1dGVDaGFuZ2UoJ3NpemUnKSh2WzFdKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgPFBhbmVsTGFiZWw+e2BGb250IGNvbG9yYH08L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHRleHRMYWJlbC5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3I6IHRoaXMub25BdHRyaWJ1dGVDaGFuZ2UoJ2NvbG9yJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxQYW5lbExhYmVsPntgVGV4dCBhbmNob3JgfTwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5MQVlFUl9URVhUX0NPTkZJR1MudGV4dEFuY2hvcn1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0ZXh0TGFiZWwuYW5jaG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlVGV4dEFuY2hvcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICk7XG4gIH1cbn1cbiJdfQ==