UNPKG

kepler.gl

Version:

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

238 lines (188 loc) 23 kB
'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, _temp2; var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n margin-bottom: 12px;\n border-radius: 1px;\n\n .filter-panel__filter {\n margin-top: 24px;\n }\n'], ['\n margin-bottom: 12px;\n border-radius: 1px;\n\n .filter-panel__filter {\n margin-top: 24px;\n }\n']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n cursor: pointer;\n padding: 10px 12px;\n'], ['\n cursor: pointer;\n padding: 10px 12px;\n']), _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n background-color: ', ';\n padding: 12px;\n'], ['\n background-color: ', ';\n padding: 12px;\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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _reselect = require('reselect'); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _panelHeaderAction = require('../panel-header-action'); var _panelHeaderAction2 = _interopRequireDefault(_panelHeaderAction); var _fieldSelector = require('../../common/field-selector'); var _fieldSelector2 = _interopRequireDefault(_fieldSelector); var _icons = require('../../common/icons'); var _sourceDataSelector = require('../source-data-selector'); var _sourceDataSelector2 = _interopRequireDefault(_sourceDataSelector); var _styledComponents3 = require('../../common/styled-components'); var _filters = require('../../filters'); var Filters = _interopRequireWildcard(_filters); var _filterUtils = require('../../../utils/filter-utils'); var _defaultSettings = require('../../../constants/default-settings'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var StyledFilterPanel = _styledComponents2.default.div(_templateObject); var StyledFilterHeader = _styledComponents3.StyledPanelHeader.extend(_templateObject2); var StyledFilterContent = _styledComponents2.default.div(_templateObject3, function (props) { return props.theme.panelBackground; }); var FilterPanel = (_temp2 = _class = function (_Component) { (0, _inherits3.default)(FilterPanel, _Component); function FilterPanel() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, FilterPanel); 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 = FilterPanel.__proto__ || Object.getPrototypeOf(FilterPanel)).call.apply(_ref, [this].concat(args))), _this), _this.fieldsSelector = function (props) { return props.filter.dataId && props.datasets[props.filter.dataId].fields || []; }, _this.filterSelector = function (props) { return props.filters; }, _this.nameSelector = function (props) { return props.filter.name; }, _this.dataIdSelector = function (props) { return props.filter.dataId; }, _this.availableFieldsSelector = (0, _reselect.createSelector)(_this.fieldsSelector, _this.filterSelector, _this.nameSelector, _this.dataIdSelector, function (fields, filters, name, dataId) { return fields.filter(function (f) { return f.type && f.type !== _defaultSettings.ALL_FIELD_TYPES.geojson && (f.name === name || !filters.find(function (d) { return d.name === f.name && d.dataId === dataId; })); }); }), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } /* selectors */ // only show current field and field that's not already been used as a filter (0, _createClass3.default)(FilterPanel, [{ key: 'render', value: function render() { var _props = this.props, datasets = _props.datasets, enlargeFilter = _props.enlargeFilter, filter = _props.filter, idx = _props.idx, isAnyFilterAnimating = _props.isAnyFilterAnimating, removeFilter = _props.removeFilter, _setFilter = _props.setFilter, toggleAnimation = _props.toggleAnimation; var name = filter.name, enlarged = filter.enlarged, type = filter.type, dataId = filter.dataId; var FilterComponent = type && Filters[_filterUtils.FILTER_COMPONENTS[type]]; var allAvailableFields = this.availableFieldsSelector(this.props); return _react2.default.createElement( StyledFilterPanel, { className: 'filter-panel' }, _react2.default.createElement( StyledFilterHeader, { className: 'filter-panel__header', labelRCGColorValues: datasets[dataId].color }, _react2.default.createElement( 'div', { style: { flexGrow: 1 } }, _react2.default.createElement(_fieldSelector2.default, { inputTheme: 'secondary', fields: allAvailableFields, value: name, erasable: false, onSelect: function onSelect(value) { return _setFilter(idx, 'name', value.name); } }) ), _react2.default.createElement(_panelHeaderAction2.default, { id: filter.id, tooltip: 'delete', tooltipType: 'error', onClick: removeFilter, hoverColor: 'errorColor', IconComponent: _icons.Trash }), type === _filterUtils.FILTER_TYPES.timeRange && _react2.default.createElement(_panelHeaderAction2.default, { id: filter.id, onClick: enlargeFilter, tooltip: 'Time Playback', IconComponent: _icons.Clock, active: enlarged }) ), _react2.default.createElement( StyledFilterContent, { className: 'filter-panel__content' }, Object.keys(datasets).length > 1 && _react2.default.createElement(_sourceDataSelector2.default, { inputTheme: 'secondary', datasets: datasets, disabled: filter.freeze, dataId: filter.dataId, onSelect: function onSelect(value) { return _setFilter(idx, 'dataId', value); } }), type && !enlarged && _react2.default.createElement( 'div', { className: 'filter-panel__filter' }, _react2.default.createElement(FilterComponent, { filter: filter, idx: idx, isAnyFilterAnimating: isAnyFilterAnimating, toggleAnimation: toggleAnimation, setFilter: function setFilter(value) { return _setFilter(idx, 'value', value); } }) ) ) ); } }]); return FilterPanel; }(_react.Component), _class.propTypes = { idx: _propTypes2.default.number, filters: _propTypes2.default.arrayOf(_propTypes2.default.any).isRequired, filter: _propTypes2.default.object.isRequired, setFilter: _propTypes2.default.func.isRequired, removeFilter: _propTypes2.default.func.isRequired, enlargeFilter: _propTypes2.default.func.isRequired, toggleAnimation: _propTypes2.default.func.isRequired, datasets: _propTypes2.default.object, showDatasetTable: _propTypes2.default.func, isAnyFilterAnimating: _propTypes2.default.bool }, _temp2); exports.default = FilterPanel; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbC5qcyJdLCJuYW1lcyI6WyJGaWx0ZXJzIiwiU3R5bGVkRmlsdGVyUGFuZWwiLCJzdHlsZWQiLCJkaXYiLCJTdHlsZWRGaWx0ZXJIZWFkZXIiLCJTdHlsZWRQYW5lbEhlYWRlciIsImV4dGVuZCIsIlN0eWxlZEZpbHRlckNvbnRlbnQiLCJwcm9wcyIsInRoZW1lIiwicGFuZWxCYWNrZ3JvdW5kIiwiRmlsdGVyUGFuZWwiLCJmaWVsZHNTZWxlY3RvciIsImZpbHRlciIsImRhdGFJZCIsImRhdGFzZXRzIiwiZmllbGRzIiwiZmlsdGVyU2VsZWN0b3IiLCJmaWx0ZXJzIiwibmFtZVNlbGVjdG9yIiwibmFtZSIsImRhdGFJZFNlbGVjdG9yIiwiYXZhaWxhYmxlRmllbGRzU2VsZWN0b3IiLCJmIiwidHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsImdlb2pzb24iLCJmaW5kIiwiZCIsImVubGFyZ2VGaWx0ZXIiLCJpZHgiLCJpc0FueUZpbHRlckFuaW1hdGluZyIsInJlbW92ZUZpbHRlciIsInNldEZpbHRlciIsInRvZ2dsZUFuaW1hdGlvbiIsImVubGFyZ2VkIiwiRmlsdGVyQ29tcG9uZW50IiwiRklMVEVSX0NPTVBPTkVOVFMiLCJhbGxBdmFpbGFibGVGaWVsZHMiLCJjb2xvciIsImZsZXhHcm93IiwidmFsdWUiLCJpZCIsIlRyYXNoIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiQ2xvY2siLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZnJlZXplIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiYXJyYXlPZiIsImFueSIsImlzUmVxdWlyZWQiLCJvYmplY3QiLCJmdW5jIiwic2hvd0RhdGFzZXRUYWJsZSIsImJvb2wiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUtBQUE7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ZixFQUF3QlcsS0FBeEIsQ0FBVDtBQUFBO0FBTGI7QUFERjtBQVpKO0FBOUJGLE9BREY7QUF3REQ7OztFQTVHc0NVLGdCLFVBQ2hDQyxTLEdBQVk7QUFDakJ0QixPQUFLdUIsb0JBQVVDLE1BREU7QUFFakJwQyxXQUFTbUMsb0JBQVVFLE9BQVYsQ0FBa0JGLG9CQUFVRyxHQUE1QixFQUFpQ0MsVUFGekI7QUFHakI1QyxVQUFRd0Msb0JBQVVLLE1BQVYsQ0FBaUJELFVBSFI7QUFJakJ4QixhQUFXb0Isb0JBQVVNLElBQVYsQ0FBZUYsVUFKVDtBQUtqQnpCLGdCQUFjcUIsb0JBQVVNLElBQVYsQ0FBZUYsVUFMWjtBQU1qQjVCLGlCQUFld0Isb0JBQVVNLElBQVYsQ0FBZUYsVUFOYjtBQU9qQnZCLG1CQUFpQm1CLG9CQUFVTSxJQUFWLENBQWVGLFVBUGY7QUFRakIxQyxZQUFVc0Msb0JBQVVLLE1BUkg7QUFTakJFLG9CQUFrQlAsb0JBQVVNLElBVFg7QUFVakI1Qix3QkFBc0JzQixvQkFBVVE7QUFWZixDO2tCQURBbEQsVyIsImZpbGUiOiJmaWx0ZXItcGFuZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBQYW5lbEhlYWRlckFjdGlvbiBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyLWFjdGlvbic7XG5pbXBvcnQgRmllbGRTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQge1RyYXNoLCBDbG9ja30gZnJvbSAnY29tcG9uZW50cy9jb21tb24vaWNvbnMnO1xuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvc291cmNlLWRhdGEtc2VsZWN0b3InO1xuaW1wb3J0IHtTdHlsZWRQYW5lbEhlYWRlcn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0ICogYXMgRmlsdGVycyBmcm9tICdjb21wb25lbnRzL2ZpbHRlcnMnO1xuXG5pbXBvcnQge0ZJTFRFUl9UWVBFUywgRklMVEVSX0NPTVBPTkVOVFN9IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5jb25zdCBTdHlsZWRGaWx0ZXJQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcblxuICAuZmlsdGVyLXBhbmVsX19maWx0ZXIge1xuICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEZpbHRlckhlYWRlciA9IFN0eWxlZFBhbmVsSGVhZGVyLmV4dGVuZGBcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRGaWx0ZXJDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wYW5lbEJhY2tncm91bmR9O1xuICBwYWRkaW5nOiAxMnB4O1xuYDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsdGVyUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGlkeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgIGZpbHRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIHNldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmVGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZW5sYXJnZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0b2dnbGVBbmltYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2hvd0RhdGFzZXRUYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNBbnlGaWx0ZXJBbmltYXRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH07XG5cbiAgLyogc2VsZWN0b3JzICovXG4gIGZpZWxkc1NlbGVjdG9yID0gcHJvcHMgPT5cbiAgICAocHJvcHMuZmlsdGVyLmRhdGFJZCAmJiBwcm9wcy5kYXRhc2V0c1twcm9wcy5maWx0ZXIuZGF0YUlkXS5maWVsZHMpIHx8IFtdO1xuICBmaWx0ZXJTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmZpbHRlcnM7XG4gIG5hbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmZpbHRlci5uYW1lO1xuICBkYXRhSWRTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmZpbHRlci5kYXRhSWQ7XG5cbiAgLy8gb25seSBzaG93IGN1cnJlbnQgZmllbGQgYW5kIGZpZWxkIHRoYXQncyBub3QgYWxyZWFkeSBiZWVuIHVzZWQgYXMgYSBmaWx0ZXJcbiAgYXZhaWxhYmxlRmllbGRzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmZpZWxkc1NlbGVjdG9yLFxuICAgIHRoaXMuZmlsdGVyU2VsZWN0b3IsXG4gICAgdGhpcy5uYW1lU2VsZWN0b3IsXG4gICAgdGhpcy5kYXRhSWRTZWxlY3RvcixcbiAgICAoZmllbGRzLCBmaWx0ZXJzLCBuYW1lLCBkYXRhSWQpID0+XG4gICAgICBmaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+XG4gICAgICAgICAgZi50eXBlICYmXG4gICAgICAgICAgZi50eXBlICE9PSBBTExfRklFTERfVFlQRVMuZ2VvanNvbiAmJlxuICAgICAgICAgIChmLm5hbWUgPT09IG5hbWUgfHxcbiAgICAgICAgICAgICFmaWx0ZXJzLmZpbmQoZCA9PiBkLm5hbWUgPT09IGYubmFtZSAmJiBkLmRhdGFJZCA9PT0gZGF0YUlkKSlcbiAgICAgIClcbiAgKTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YXNldHMsXG4gICAgICBlbmxhcmdlRmlsdGVyLFxuICAgICAgZmlsdGVyLFxuICAgICAgaWR4LFxuICAgICAgaXNBbnlGaWx0ZXJBbmltYXRpbmcsXG4gICAgICByZW1vdmVGaWx0ZXIsXG4gICAgICBzZXRGaWx0ZXIsXG4gICAgICB0b2dnbGVBbmltYXRpb25cbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7bmFtZSwgZW5sYXJnZWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG4gICAgY29uc3QgRmlsdGVyQ29tcG9uZW50ID0gdHlwZSAmJiBGaWx0ZXJzW0ZJTFRFUl9DT01QT05FTlRTW3R5cGVdXTtcbiAgICBjb25zdCBhbGxBdmFpbGFibGVGaWVsZHMgPSB0aGlzLmF2YWlsYWJsZUZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRGaWx0ZXJQYW5lbCBjbGFzc05hbWU9XCJmaWx0ZXItcGFuZWxcIj5cbiAgICAgICAgPFN0eWxlZEZpbHRlckhlYWRlciBjbGFzc05hbWU9XCJmaWx0ZXItcGFuZWxfX2hlYWRlclwiXG4gICAgICAgICAgbGFiZWxSQ0dDb2xvclZhbHVlcz17ZGF0YXNldHNbZGF0YUlkXS5jb2xvcn0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17e2ZsZXhHcm93OiAxfX0+XG4gICAgICAgICAgICA8RmllbGRTZWxlY3RvclxuICAgICAgICAgICAgICBpbnB1dFRoZW1lPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgZmllbGRzPXthbGxBdmFpbGFibGVGaWVsZHN9XG4gICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICBlcmFzYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt2YWx1ZSA9PiBzZXRGaWx0ZXIoaWR4LCAnbmFtZScsIHZhbHVlLm5hbWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgIGlkPXtmaWx0ZXIuaWR9XG4gICAgICAgICAgICB0b29sdGlwPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXBUeXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgb25DbGljaz17cmVtb3ZlRmlsdGVyfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17J2Vycm9yQ29sb3InfVxuICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17VHJhc2h9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiAoXG4gICAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgICAgaWQ9e2ZpbHRlci5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17ZW5sYXJnZUZpbHRlcn1cbiAgICAgICAgICAgICAgdG9vbHRpcD1cIlRpbWUgUGxheWJhY2tcIlxuICAgICAgICAgICAgICBJY29uQ29tcG9uZW50PXtDbG9ja31cbiAgICAgICAgICAgICAgYWN0aXZlPXtlbmxhcmdlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRGaWx0ZXJIZWFkZXI+XG4gICAgICAgIDxTdHlsZWRGaWx0ZXJDb250ZW50IGNsYXNzTmFtZT1cImZpbHRlci1wYW5lbF9fY29udGVudFwiPlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgIGlucHV0VGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmaWx0ZXIuZnJlZXplfVxuICAgICAgICAgICAgICBkYXRhSWQ9e2ZpbHRlci5kYXRhSWR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt2YWx1ZSA9PiBzZXRGaWx0ZXIoaWR4LCAnZGF0YUlkJywgdmFsdWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt0eXBlICYmXG4gICAgICAgICAgIWVubGFyZ2VkICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLXBhbmVsX19maWx0ZXJcIj5cbiAgICAgICAgICAgICAgPEZpbHRlckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgICAgICAgIGlzQW55RmlsdGVyQW5pbWF0aW5nPXtpc0FueUZpbHRlckFuaW1hdGluZ31cbiAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249e3RvZ2dsZUFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXI9e3ZhbHVlID0+IHNldEZpbHRlcihpZHgsICd2YWx1ZScsIHZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkRmlsdGVyQ29udGVudD5cbiAgICAgIDwvU3R5bGVkRmlsdGVyUGFuZWw+XG4gICAgKTtcbiAgfVxufVxuIl19