kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
181 lines (142 loc) • 18.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _class, _class2, _temp2;
var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-size: 12px;\n border-radius: 1px;\n margin-bottom: 8px;\n\n &.dragging {\n cursor: move;\n }\n'], ['\n font-size: 12px;\n border-radius: 1px;\n margin-bottom: 8px;\n\n &.dragging {\n cursor: move;\n }\n']); // Copyright (c) 2018 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _styledComponents = require('styled-components');
var _styledComponents2 = _interopRequireDefault(_styledComponents);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactAnythingSortable = require('react-anything-sortable');
var _layerConfigurator = require('./layer-configurator');
var _layerConfigurator2 = _interopRequireDefault(_layerConfigurator);
var _layerPanelHeader = require('./layer-panel-header');
var _layerPanelHeader2 = _interopRequireDefault(_layerPanelHeader);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PanelWrapper = _styledComponents2.default.div(_templateObject);
var LayerPanel = (0, _reactAnythingSortable.sortable)(_class = (_temp2 = _class2 = function (_Component) {
(0, _inherits3.default)(LayerPanel, _Component);
function LayerPanel() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, LayerPanel);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = LayerPanel.__proto__ || Object.getPrototypeOf(LayerPanel)).call.apply(_ref, [this].concat(args))), _this), _this.updateLayerConfig = function (newProp) {
_this.props.layerConfigChange(_this.props.layer, newProp);
}, _this.updateLayerType = function (newType) {
_this.props.layerTypeChange(_this.props.layer, newType);
}, _this.updateLayerVisConfig = function (newVisConfig) {
_this.props.layerVisConfigChange(_this.props.layer, newVisConfig);
}, _this.updateLayerVisualChannelConfig = function (newConfig, channel, scaleKey) {
_this.props.layerVisualChannelConfigChange(_this.props.layer, newConfig, channel, scaleKey);
}, _this._updateLayerLabel = function (_ref2) {
var value = _ref2.target.value;
_this.updateLayerConfig({ label: value });
}, _this._toggleVisibility = function (e) {
e.stopPropagation();
var isVisible = !_this.props.layer.config.isVisible;
_this.updateLayerConfig({ isVisible: isVisible });
}, _this._toggleEnableConfig = function (e) {
e.stopPropagation();
var isConfigActive = _this.props.layer.config.isConfigActive;
_this.updateLayerConfig({ isConfigActive: !isConfigActive });
}, _this._removeLayer = function (e) {
e.stopPropagation();
_this.props.removeLayer(_this.props.idx);
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(LayerPanel, [{
key: 'render',
value: function render() {
var _props = this.props,
layer = _props.layer,
idx = _props.idx,
datasets = _props.datasets,
layerTypeOptions = _props.layerTypeOptions;
var config = layer.config;
var isConfigActive = config.isConfigActive;
return _react2.default.createElement(
PanelWrapper,
{
active: isConfigActive,
className: 'layer-panel ' + this.props.className,
style: this.props.style,
onMouseDown: this.props.onMouseDown,
onTouchStart: this.props.onTouchStart
},
_react2.default.createElement(_layerPanelHeader2.default, {
isConfigActive: isConfigActive,
id: layer.id,
idx: idx,
isVisible: config.isVisible,
label: config.label,
labelRCGColorValues: datasets[config.dataId].color,
layerType: layer.name,
onToggleEnableConfig: this._toggleEnableConfig,
onToggleVisibility: this._toggleVisibility,
onUpdateLayerLabel: this._updateLayerLabel,
onRemoveLayer: this._removeLayer
}),
isConfigActive && _react2.default.createElement(_layerConfigurator2.default, {
layer: layer,
datasets: datasets,
layerTypeOptions: layerTypeOptions,
openModal: this.props.openModal,
updateLayerConfig: this.updateLayerConfig,
updateLayerVisualChannelConfig: this.updateLayerVisualChannelConfig,
updateLayerType: this.updateLayerType,
updateLayerVisConfig: this.updateLayerVisConfig
})
);
}
}]);
return LayerPanel;
}(_react.Component), _class2.propTypes = {
layer: _propTypes2.default.object.isRequired,
datasets: _propTypes2.default.object.isRequired,
idx: _propTypes2.default.number.isRequired,
layerConfigChange: _propTypes2.default.func.isRequired,
layerTypeChange: _propTypes2.default.func.isRequired,
openModal: _propTypes2.default.func.isRequired,
removeLayer: _propTypes2.default.func.isRequired,
onCloseConfig: _propTypes2.default.func,
layerTypeOptions: _propTypes2.default.arrayOf(_propTypes2.default.any),
layerVisConfigChange: _propTypes2.default.func,
layerVisualChannelConfigChange: _propTypes2.default.func
}, _temp2)) || _class;
exports.default = LayerPanel;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItcGFuZWwuanMiXSwibmFtZXMiOlsiUGFuZWxXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwiTGF5ZXJQYW5lbCIsInNvcnRhYmxlIiwidXBkYXRlTGF5ZXJDb25maWciLCJwcm9wcyIsImxheWVyQ29uZmlnQ2hhbmdlIiwibGF5ZXIiLCJuZXdQcm9wIiwidXBkYXRlTGF5ZXJUeXBlIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3VHlwZSIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJuZXdDb25maWciLCJjaGFubmVsIiwic2NhbGVLZXkiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJfdXBkYXRlTGF5ZXJMYWJlbCIsInZhbHVlIiwidGFyZ2V0IiwibGFiZWwiLCJfdG9nZ2xlVmlzaWJpbGl0eSIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJpc1Zpc2libGUiLCJjb25maWciLCJfdG9nZ2xlRW5hYmxlQ29uZmlnIiwiaXNDb25maWdBY3RpdmUiLCJfcmVtb3ZlTGF5ZXIiLCJyZW1vdmVMYXllciIsImlkeCIsImRhdGFzZXRzIiwibGF5ZXJUeXBlT3B0aW9ucyIsImNsYXNzTmFtZSIsInN0eWxlIiwib25Nb3VzZURvd24iLCJvblRvdWNoU3RhcnQiLCJpZCIsImRhdGFJZCIsImNvbG9yIiwibmFtZSIsIm9wZW5Nb2RhbCIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJmdW5jIiwib25DbG9zZUNvbmZpZyIsImFycmF5T2YiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29TQUFBO0FBQ0E7QUFDQTtBQUNBO0FB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QU1vQyxJQVBuQjtBQVFFLGdDQUFzQixLQUFLZCxtQkFSN0I7QUFTRSw4QkFBb0IsS0FBS0wsaUJBVDNCO0FBVUUsOEJBQW9CLEtBQUtKLGlCQVYzQjtBQVdFLHlCQUFlLEtBQUtXO0FBWHRCLFVBUEY7QUFvQkdELDBCQUNDLDhCQUFDLDJCQUFEO0FBQ0UsaUJBQU92QixLQURUO0FBRUUsb0JBQVUyQixRQUZaO0FBR0UsNEJBQWtCQyxnQkFIcEI7QUFJRSxxQkFBVyxLQUFLOUIsS0FBTCxDQUFXdUMsU0FKeEI7QUFLRSw2QkFBbUIsS0FBS3hDLGlCQUwxQjtBQU1FLDBDQUFnQyxLQUFLVyw4QkFOdkM7QUFPRSwyQkFBaUIsS0FBS04sZUFQeEI7QUFRRSxnQ0FBc0IsS0FBS0c7QUFSN0I7QUFyQkosT0FERjtBQW1DRDs7O0VBakdxQ2lDLGdCLFdBQy9CQyxTLEdBQVk7QUFDakJ2QyxTQUFPd0Msb0JBQVVDLE1BQVYsQ0FBaUJDLFVBRFA7QUFFakJmLFlBQVVhLG9CQUFVQyxNQUFWLENBQWlCQyxVQUZWO0FBR2pCaEIsT0FBS2Msb0JBQVVHLE1BQVYsQ0FBaUJELFVBSEw7QUFJakIzQyxxQkFBbUJ5QyxvQkFBVUksSUFBVixDQUFlRixVQUpqQjtBQUtqQnZDLG1CQUFpQnFDLG9CQUFVSSxJQUFWLENBQWVGLFVBTGY7QUFNakJMLGFBQVdHLG9CQUFVSSxJQUFWLENBQWVGLFVBTlQ7QUFPakJqQixlQUFhZSxvQkFBVUksSUFBVixDQUFlRixVQVBYO0FBUWpCRyxpQkFBZUwsb0JBQVVJLElBUlI7O0FBVWpCaEIsb0JBQWtCWSxvQkFBVU0sT0FBVixDQUFrQk4sb0JBQVVPLEdBQTVCLENBVkQ7QUFXakJ6Qyx3QkFBc0JrQyxvQkFBVUksSUFYZjtBQVlqQmhDLGtDQUFnQzRCLG9CQUFVSTtBQVp6QixDOztrQkFEQWpELFUiLCJmaWxlIjoibGF5ZXItcGFuZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7c29ydGFibGV9IGZyb20gJ3JlYWN0LWFueXRoaW5nLXNvcnRhYmxlJztcblxuaW1wb3J0IExheWVyQ29uZmlndXJhdG9yIGZyb20gJy4vbGF5ZXItY29uZmlndXJhdG9yJztcbmltcG9ydCBMYXllclBhbmVsSGVhZGVyIGZyb20gJy4vbGF5ZXItcGFuZWwtaGVhZGVyJztcblxuY29uc3QgUGFuZWxXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcblxuICAmLmRyYWdnaW5nIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gIH1cbmA7XG5cbkBzb3J0YWJsZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5ZXJQYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbGF5ZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGlkeDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGxheWVyQ29uZmlnQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGxheWVyVHlwZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvcGVuTW9kYWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVtb3ZlTGF5ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DbG9zZUNvbmZpZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICBsYXllclR5cGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KSxcbiAgICBsYXllclZpc0NvbmZpZ0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlOiBQcm9wVHlwZXMuZnVuY1xuICB9O1xuXG4gIHVwZGF0ZUxheWVyQ29uZmlnID0gbmV3UHJvcCA9PiB7XG4gICAgdGhpcy5wcm9wcy5sYXllckNvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdQcm9wKTtcbiAgfTtcblxuICB1cGRhdGVMYXllclR5cGUgPSBuZXdUeXBlID0+IHtcbiAgICB0aGlzLnByb3BzLmxheWVyVHlwZUNoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdUeXBlKTtcbiAgfTtcblxuICB1cGRhdGVMYXllclZpc0NvbmZpZyA9IG5ld1Zpc0NvbmZpZyA9PiB7XG4gICAgdGhpcy5wcm9wcy5sYXllclZpc0NvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdWaXNDb25maWcpO1xuICB9O1xuXG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyA9IChuZXdDb25maWcsIGNoYW5uZWwsIHNjYWxlS2V5KSA9PiB7XG4gICAgdGhpcy5wcm9wcy5sYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICB0aGlzLnByb3BzLmxheWVyLFxuICAgICAgbmV3Q29uZmlnLFxuICAgICAgY2hhbm5lbCxcbiAgICAgIHNjYWxlS2V5XG4gICAgKTtcbiAgfTtcblxuICBfdXBkYXRlTGF5ZXJMYWJlbCA9ICh7dGFyZ2V0OiB7dmFsdWV9fSkgPT4ge1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2xhYmVsOiB2YWx1ZX0pO1xuICB9O1xuXG4gIF90b2dnbGVWaXNpYmlsaXR5ID0gZSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBpc1Zpc2libGUgPSAhdGhpcy5wcm9wcy5sYXllci5jb25maWcuaXNWaXNpYmxlO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICB9O1xuXG4gIF90b2dnbGVFbmFibGVDb25maWcgPSBlID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IHtsYXllcjoge2NvbmZpZzoge2lzQ29uZmlnQWN0aXZlfX19ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtpc0NvbmZpZ0FjdGl2ZTogIWlzQ29uZmlnQWN0aXZlfSk7XG4gIH07XG5cbiAgX3JlbW92ZUxheWVyID0gZSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnByb3BzLnJlbW92ZUxheWVyKHRoaXMucHJvcHMuaWR4KTtcbiAgfTtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtsYXllciwgaWR4LCBkYXRhc2V0cywgbGF5ZXJUeXBlT3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtjb25maWd9ID0gbGF5ZXI7XG4gICAgY29uc3Qge2lzQ29uZmlnQWN0aXZlfSA9IGNvbmZpZztcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFuZWxXcmFwcGVyXG4gICAgICAgIGFjdGl2ZT17aXNDb25maWdBY3RpdmV9XG4gICAgICAgIGNsYXNzTmFtZT17YGxheWVyLXBhbmVsICR7dGhpcy5wcm9wcy5jbGFzc05hbWV9YH1cbiAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9XG4gICAgICAgIG9uTW91c2VEb3duPXt0aGlzLnByb3BzLm9uTW91c2VEb3dufVxuICAgICAgICBvblRvdWNoU3RhcnQ9e3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0fVxuICAgICAgPlxuICAgICAgICA8TGF5ZXJQYW5lbEhlYWRlclxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlPXtpc0NvbmZpZ0FjdGl2ZX1cbiAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgaWR4PXtpZHh9XG4gICAgICAgICAgaXNWaXNpYmxlPXtjb25maWcuaXNWaXNpYmxlfVxuICAgICAgICAgIGxhYmVsPXtjb25maWcubGFiZWx9XG4gICAgICAgICAgbGFiZWxSQ0dDb2xvclZhbHVlcz17ZGF0YXNldHNbY29uZmlnLmRhdGFJZF0uY29sb3J9XG4gICAgICAgICAgbGF5ZXJUeXBlPXtsYXllci5uYW1lfVxuICAgICAgICAgIG9uVG9nZ2xlRW5hYmxlQ29uZmlnPXt0aGlzLl90b2dnbGVFbmFibGVDb25maWd9XG4gICAgICAgICAgb25Ub2dnbGVWaXNpYmlsaXR5PXt0aGlzLl90b2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgIG9uVXBkYXRlTGF5ZXJMYWJlbD17dGhpcy5fdXBkYXRlTGF5ZXJMYWJlbH1cbiAgICAgICAgICBvblJlbW92ZUxheWVyPXt0aGlzLl9yZW1vdmVMYXllcn1cbiAgICAgICAgLz5cbiAgICAgICAge2lzQ29uZmlnQWN0aXZlICYmIChcbiAgICAgICAgICA8TGF5ZXJDb25maWd1cmF0b3JcbiAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGxheWVyVHlwZU9wdGlvbnM9e2xheWVyVHlwZU9wdGlvbnN9XG4gICAgICAgICAgICBvcGVuTW9kYWw9e3RoaXMucHJvcHMub3Blbk1vZGFsfVxuICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnfVxuICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt0aGlzLnVwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVmlzQ29uZmlnPXt0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1BhbmVsV3JhcHBlcj5cbiAgICApO1xuICB9XG59XG4iXX0=