UNPKG

kepler.gl

Version:

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

216 lines (183 loc) 20.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ListItem = exports.classList = 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, _temp; var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n background-color: ', ';\n border-top: 1px solid ', ';\n ', ';\n'], ['\n background-color: ', ';\n border-top: 1px solid ', ';\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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var classList = exports.classList = { list: 'list-selector', listHeader: 'list__header', listSection: 'list__section', listItem: 'list__item', listItemAnchor: 'list__item__anchor' }; var defaultDisplay = function defaultDisplay(d) { return d; }; var ListItem = exports.ListItem = function ListItem(_ref) { var value = _ref.value, _ref$displayOption = _ref.displayOption, displayOption = _ref$displayOption === undefined ? defaultDisplay : _ref$displayOption; return _react2.default.createElement( 'span', { className: classList.listItemAnchor }, displayOption(value) ); }; var DropdownListWrapper = _styledComponents2.default.div(_templateObject, function (props) { return props.theme.dropdownListBgd; }, function (props) { return props.theme.dropdownListBorderTop; }, function (props) { return props.theme.dropdownList; }); var DropdownList = (_temp = _class = function (_Component) { (0, _inherits3.default)(DropdownList, _Component); function DropdownList() { (0, _classCallCheck3.default)(this, DropdownList); return (0, _possibleConstructorReturn3.default)(this, (DropdownList.__proto__ || Object.getPrototypeOf(DropdownList)).apply(this, arguments)); } (0, _createClass3.default)(DropdownList, [{ key: '_onClick', value: function _onClick(result, event) { event.preventDefault(); this.props.onOptionSelected(result, event); } }, { key: 'render', value: function render() { var _this2 = this; var fixedOptions = this.props.fixedOptions; var display = this.props.displayOption; // Don't render if there are no options to display if (!this.props.options.length && this.props.allowCustomValues <= 0) { return false; } var valueOffset = Array.isArray(fixedOptions) ? fixedOptions.length : 0; // For some reason onClick is not fired when clicked on an option // onMouseDown is used here as a workaround of #205 and other return _react2.default.createElement( DropdownListWrapper, { className: classList.list }, this.props.customListHeaderComponent ? _react2.default.createElement( 'div', { className: classList.listHeader }, _react2.default.createElement(this.props.customListHeaderComponent, null) ) : null, valueOffset > 0 ? _react2.default.createElement( 'div', { className: classList.listSection }, fixedOptions.map(function (value, i) { return _react2.default.createElement( 'div', { className: (0, _classnames2.default)(classList.listItem, { hover: _this2.props.selectionIndex === i, fixed: true }), key: display(value) + '_' + i, onMouseDown: function onMouseDown(e) { return _this2._onClick(value, e); }, onClick: function onClick(e) { return _this2._onClick(value, e); } }, _react2.default.createElement(_this2.props.customListItemComponent, { value: value, displayOption: display }) ); }) ) : null, this.props.options.map(function (value, i) { return _react2.default.createElement( 'div', { className: (0, _classnames2.default)(classList.listItem, { hover: _this2.props.selectionIndex === i + valueOffset }), key: display(value) + '_' + i, onMouseDown: function onMouseDown(e) { return _this2._onClick(value, e); }, onClick: function onClick(e) { return _this2._onClick(value, e); } }, _react2.default.createElement(_this2.props.customListItemComponent, { value: value, displayOption: display }) ); }) ); } }]); return DropdownList; }(_react.Component), _class.propTypes = { options: _propTypes2.default.arrayOf(_propTypes2.default.any), allowCustomValues: _propTypes2.default.number, customClasses: _propTypes2.default.object, customValues: _propTypes2.default.arrayOf(_propTypes2.default.any), customListItemComponent: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.func]), customListHeaderComponent: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.func]), selectionIndex: _propTypes2.default.number, onOptionSelected: _propTypes2.default.func, displayOption: _propTypes2.default.func.isRequired, defaultClassNames: _propTypes2.default.bool, areResultsTruncated: _propTypes2.default.bool, resultsTruncatedMessage: _propTypes2.default.string, listItemComponent: _propTypes2.default.func }, _class.defaultProps = { customClasses: {}, customListItemComponent: ListItem, customListHeaderComponent: null, allowCustomValues: 0, customValues: [], displayOption: defaultDisplay, onOptionSelected: function onOptionSelected() {}, defaultClassNames: true, selectionIndex: null }, _temp); exports.default = DropdownList; ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2Ryb3Bkb3duLWxpc3QuanMiXSwibmFtZXMiOlsiY2xhc3NMaXN0IiwibGlzdCIsImxpc3RIZWFkZXIiLCJsaXN0U2VjdGlvbiIsImxpc3RJdGVtIiwibGlzdEl0ZW1BbmNob3IiLCJkZWZhdWx0RGlzcGxheSIsImQiLCJMaXN0SXRlbSIsInZhbHVlIiwiZGlzcGxheU9wdGlvbiIsIkRyb3Bkb3duTGlzdFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJwcm9wcyIsInRoZW1lIiwiZHJvcGRvd25MaXN0QmdkIiwiZHJvcGRvd25MaXN0Qm9yZGVyVG9wIiwiZHJvcGRvd25MaXN0IiwiRHJvcGRvd25MaXN0IiwicmVzdWx0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJmaXhlZE9wdGlvbnMiLCJkaXNwbGF5Iiwib3B0aW9ucyIsImxlbmd0aCIsImFsbG93Q3VzdG9tVmFsdWVzIiwidmFsdWVPZmZzZXQiLCJBcnJheSIsImlzQXJyYXkiLCJjdXN0b21MaXN0SGVhZGVyQ29tcG9uZW50IiwibWFwIiwiaSIsImhvdmVyIiwic2VsZWN0aW9uSW5kZXgiLCJmaXhlZCIsIl9vbkNsaWNrIiwiZSIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFycmF5T2YiLCJhbnkiLCJudW1iZXIiLCJjdXN0b21DbGFzc2VzIiwib2JqZWN0IiwiY3VzdG9tVmFsdWVzIiwiY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQiLCJvbmVPZlR5cGUiLCJlbGVtZW50IiwiZnVuYyIsImlzUmVxdWlyZWQiLCJkZWZhdWx0Q2xhc3NOYW1lcyIsImJvb2wiLCJhcmVSZXN1bHRzVHJ1bmNhdGVkIiwicmVzdWx0c1RydW5jYXRlZE1lc3NhZ2UiLCJzdHJpbmciLCJsaXN0SXRlbUNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7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VUcsTUFiVDtBQWNqQnRCLG9CQUFrQm1CLG9CQUFVVSxJQWRYO0FBZWpCMUMsaUJBQWVnQyxvQkFBVVUsSUFBVixDQUFlQyxVQWZiO0FBZ0JqQkMscUJBQW1CWixvQkFBVWEsSUFoQlo7QUFpQmpCQyx1QkFBcUJkLG9CQUFVYSxJQWpCZDtBQWtCakJFLDJCQUF5QmYsb0JBQVVnQixNQWxCbEI7QUFtQmpCQyxxQkFBbUJqQixvQkFBVVU7QUFuQlosQyxTQXNCWlEsWSxHQUFlO0FBQ3BCZCxpQkFBZSxFQURLO0FBRXBCRywyQkFBeUJ6QyxRQUZMO0FBR3BCd0IsNkJBQTJCLElBSFA7QUFJcEJKLHFCQUFtQixDQUpDO0FBS3BCb0IsZ0JBQWMsRUFMTTtBQU1wQnRDLGlCQUFlSixjQU5LO0FBT3BCaUIsb0JBQWtCLDRCQUFNLENBQUUsQ0FQTjtBQVFwQitCLHFCQUFtQixJQVJDO0FBU3BCbEIsa0JBQWdCO0FBVEksQztrQkF2QkhqQixZO0FBb0dwQiIsImZpbGUiOiJkcm9wZG93bi1saXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE4IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuZXhwb3J0IGNvbnN0IGNsYXNzTGlzdCA9IHtcbiAgbGlzdDogJ2xpc3Qtc2VsZWN0b3InLFxuICBsaXN0SGVhZGVyOiAnbGlzdF9faGVhZGVyJyxcbiAgbGlzdFNlY3Rpb246ICdsaXN0X19zZWN0aW9uJyxcbiAgbGlzdEl0ZW06ICdsaXN0X19pdGVtJyxcbiAgbGlzdEl0ZW1BbmNob3I6ICdsaXN0X19pdGVtX19hbmNob3InXG59O1xuXG5jb25zdCBkZWZhdWx0RGlzcGxheSA9IGQgPT4gZDtcbmV4cG9ydCBjb25zdCBMaXN0SXRlbSA9ICh7dmFsdWUsIGRpc3BsYXlPcHRpb24gPSBkZWZhdWx0RGlzcGxheX0pID0+IChcbiAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc0xpc3QubGlzdEl0ZW1BbmNob3J9PntkaXNwbGF5T3B0aW9uKHZhbHVlKX08L3NwYW4+XG4pO1xuXG5jb25zdCBEcm9wZG93bkxpc3RXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RCZ2R9O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RCb3JkZXJUb3B9O1xuICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmRyb3Bkb3duTGlzdH07XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93bkxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLFxuICAgIGFsbG93Q3VzdG9tVmFsdWVzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGN1c3RvbUNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY3VzdG9tVmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KSxcbiAgICBjdXN0b21MaXN0SXRlbUNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuZWxlbWVudCxcbiAgICAgIFByb3BUeXBlcy5mdW5jXG4gICAgXSksXG4gICAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuZWxlbWVudCxcbiAgICAgIFByb3BUeXBlcy5mdW5jXG4gICAgXSksXG4gICAgc2VsZWN0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25PcHRpb25TZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGlzcGxheU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBkZWZhdWx0Q2xhc3NOYW1lczogUHJvcFR5cGVzLmJvb2wsXG4gICAgYXJlUmVzdWx0c1RydW5jYXRlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVzdWx0c1RydW5jYXRlZE1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGlzdEl0ZW1Db21wb25lbnQ6IFByb3BUeXBlcy5mdW5jXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjdXN0b21DbGFzc2VzOiB7fSxcbiAgICBjdXN0b21MaXN0SXRlbUNvbXBvbmVudDogTGlzdEl0ZW0sXG4gICAgY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudDogbnVsbCxcbiAgICBhbGxvd0N1c3RvbVZhbHVlczogMCxcbiAgICBjdXN0b21WYWx1ZXM6IFtdLFxuICAgIGRpc3BsYXlPcHRpb246IGRlZmF1bHREaXNwbGF5LFxuICAgIG9uT3B0aW9uU2VsZWN0ZWQ6ICgpID0+IHt9LFxuICAgIGRlZmF1bHRDbGFzc05hbWVzOiB0cnVlLFxuICAgIHNlbGVjdGlvbkluZGV4OiBudWxsXG4gIH07XG5cbiAgX29uQ2xpY2socmVzdWx0LCBldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5vbk9wdGlvblNlbGVjdGVkKHJlc3VsdCwgZXZlbnQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtmaXhlZE9wdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5wcm9wcy5kaXNwbGF5T3B0aW9uO1xuXG4gICAgLy8gRG9uJ3QgcmVuZGVyIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRvIGRpc3BsYXlcbiAgICBpZiAoIXRoaXMucHJvcHMub3B0aW9ucy5sZW5ndGggJiYgdGhpcy5wcm9wcy5hbGxvd0N1c3RvbVZhbHVlcyA8PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVPZmZzZXQgPSBBcnJheS5pc0FycmF5KGZpeGVkT3B0aW9ucykgPyBmaXhlZE9wdGlvbnMubGVuZ3RoIDogMDtcblxuICAgIC8vIEZvciBzb21lIHJlYXNvbiBvbkNsaWNrIGlzIG5vdCBmaXJlZCB3aGVuIGNsaWNrZWQgb24gYW4gb3B0aW9uXG4gICAgLy8gb25Nb3VzZURvd24gaXMgdXNlZCBoZXJlIGFzIGEgd29ya2Fyb3VuZCBvZiAjMjA1IGFuZCBvdGhlclxuICAgIHJldHVybiAoXG4gICAgICA8RHJvcGRvd25MaXN0V3JhcHBlciBjbGFzc05hbWU9e2NsYXNzTGlzdC5saXN0fT5cbiAgICAgICAge3RoaXMucHJvcHMuY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NMaXN0Lmxpc3RIZWFkZXJ9PlxuICAgICAgICAgICAgPHRoaXMucHJvcHMuY3VzdG9tTGlzdEhlYWRlckNvbXBvbmVudCAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7dmFsdWVPZmZzZXQgPiAwID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc0xpc3QubGlzdFNlY3Rpb259PlxuICAgICAgICAgICAge2ZpeGVkT3B0aW9ucy5tYXAoKHZhbHVlLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3NMaXN0Lmxpc3RJdGVtLCB7XG4gICAgICAgICAgICAgICAgICBob3ZlcjogdGhpcy5wcm9wcy5zZWxlY3Rpb25JbmRleCA9PT0gaSxcbiAgICAgICAgICAgICAgICAgIGZpeGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAga2V5PXtgJHtkaXNwbGF5KHZhbHVlKX1fJHtpfWB9XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2UgPT4gdGhpcy5fb25DbGljayh2YWx1ZSwgZSl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB0aGlzLl9vbkNsaWNrKHZhbHVlLCBlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0aGlzLnByb3BzLmN1c3RvbUxpc3RJdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtkaXNwbGF5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKCh2YWx1ZSwgaSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc0xpc3QubGlzdEl0ZW0sIHtcbiAgICAgICAgICAgICAgaG92ZXI6IHRoaXMucHJvcHMuc2VsZWN0aW9uSW5kZXggPT09IGkgKyB2YWx1ZU9mZnNldFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBrZXk9e2Ake2Rpc3BsYXkodmFsdWUpfV8ke2l9YH1cbiAgICAgICAgICAgIG9uTW91c2VEb3duPXtlID0+IHRoaXMuX29uQ2xpY2sodmFsdWUsIGUpfVxuICAgICAgICAgICAgb25DbGljaz17ZSA9PiB0aGlzLl9vbkNsaWNrKHZhbHVlLCBlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGhpcy5wcm9wcy5jdXN0b21MaXN0SXRlbUNvbXBvbmVudFxuICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgIGRpc3BsYXlPcHRpb249e2Rpc3BsYXl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvRHJvcGRvd25MaXN0V3JhcHBlcj5cbiAgICApO1xuICB9XG59O1xuIl19