UNPKG

kepler.gl

Version:

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

200 lines (199 loc) 40.6 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"] = exports.LayerBlendingSelector = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactIntl = require("react-intl"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _localization = require("@kepler.gl/localization"); var _layerList = _interopRequireDefault(require("./layer-panel/layer-list")); var _datasetLayerGroup = _interopRequireDefault(require("./layer-panel/dataset-layer-group")); var _panelViewListToggle = _interopRequireDefault(require("./panel-view-list-toggle")); var _panelTitle = _interopRequireDefault(require("./panel-title")); var _datasetSection = _interopRequireDefault(require("./layer-panel/dataset-section")); var _addLayerButton = _interopRequireDefault(require("./layer-panel/add-layer-button")); var _itemSelector = _interopRequireDefault(require("../common/item-selector/item-selector")); var _styledComponents2 = require("../common/styled-components"); var _infoHelper = _interopRequireDefault(require("../common/info-helper")); var _constants = require("@kepler.gl/constants"); var _templateObject, _templateObject2; 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; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var LayerBlendingSelector = exports.LayerBlendingSelector = /*#__PURE__*/_react["default"].memo(function (_ref) { var layerBlending = _ref.layerBlending, updateLayerBlending = _ref.updateLayerBlending, intl = _ref.intl, className = _ref.className; var labeledLayerBlendings = Object.keys(_constants.LAYER_BLENDINGS).reduce(function (acc, current) { return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, intl.formatMessage({ id: _constants.LAYER_BLENDINGS[current].label }), current)); }, {}); var onChange = (0, _react.useCallback)(function (blending) { return updateLayerBlending(labeledLayerBlendings[blending]); }, [updateLayerBlending, labeledLayerBlendings]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, { className: className }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: "layerBlending.title" })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { selectedItems: intl.formatMessage({ id: _constants.LAYER_BLENDINGS[layerBlending].label }), options: Object.keys(labeledLayerBlendings), multiSelect: false, searchable: false, onChange: onChange })); }); LayerBlendingSelector.displayName = 'LayerBlendingSelector'; var InfoHelperWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n float: right;\n"]))); var OverlayBlendingSelectorTitleRow = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n align-items: center;\n"]))); var OverlayBlendingSelector = /*#__PURE__*/_react["default"].memo(function (_ref2) { var overlayBlending = _ref2.overlayBlending, updateOverlayBlending = _ref2.updateOverlayBlending, intl = _ref2.intl, infoHelper = _ref2.infoHelper; var labeledOverlayBlendings = Object.keys(_constants.OVERLAY_BLENDINGS).reduce(function (acc, current) { return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, intl.formatMessage({ id: _constants.OVERLAY_BLENDINGS[current].label }), current)); }, {}); var onChange = (0, _react.useCallback)(function (blending) { return updateOverlayBlending(labeledOverlayBlendings[blending]); }, [updateOverlayBlending, labeledOverlayBlendings]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(OverlayBlendingSelectorTitleRow, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: "overlayBlending.title" })), /*#__PURE__*/_react["default"].createElement(InfoHelperWrapper, null, infoHelper)), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { selectedItems: intl.formatMessage({ id: _constants.OVERLAY_BLENDINGS[overlayBlending].label }), options: Object.keys(labeledOverlayBlendings), multiSelect: false, searchable: false, onChange: onChange })); }); OverlayBlendingSelector.displayName = 'OverlayBlendingSelector'; LayerManagerFactory.deps = [_layerList["default"], _datasetLayerGroup["default"], _panelViewListToggle["default"], _panelTitle["default"], _datasetSection["default"], _addLayerButton["default"], _infoHelper["default"]]; function LayerManagerFactory(LayerList, DatasetLayerGroup, PanelViewListToggle, PanelTitle, DatasetSection, AddLayerButton, InfoHelper) { var LayerManager = /*#__PURE__*/function (_Component) { function LayerManager() { var _this; (0, _classCallCheck2["default"])(this, LayerManager); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, LayerManager, [].concat(args)); (0, _defineProperty2["default"])(_this, "_addLayer", function (dataset) { var visStateActions = _this.props.visStateActions; visStateActions.addLayer(undefined, dataset); }); (0, _defineProperty2["default"])(_this, "_togglePanelListView", function (listView) { var uiStateActions = _this.props.uiStateActions; uiStateActions.togglePanelListView({ panelId: 'layer', listView: listView }); }); return _this; } (0, _inherits2["default"])(LayerManager, _Component); return (0, _createClass2["default"])(LayerManager, [{ key: "render", value: function render() { var _this$props = this.props, layers = _this$props.layers, datasets = _this$props.datasets, intl = _this$props.intl, layerOrder = _this$props.layerOrder, showAddDataModal = _this$props.showAddDataModal, updateTableColor = _this$props.updateTableColor, showDatasetTable = _this$props.showDatasetTable, removeDataset = _this$props.removeDataset, uiStateActions = _this$props.uiStateActions, visStateActions = _this$props.visStateActions, mapStateActions = _this$props.mapStateActions, panelListView = _this$props.panelListView, panelMetadata = _this$props.panelMetadata; var isSortByDatasetMode = panelListView === _constants.PANEL_VIEW_TOGGLES.byDataset; return /*#__PURE__*/_react["default"].createElement("div", { className: "layer-manager" }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(PanelViewListToggle, { togglePanelListView: this._togglePanelListView, mode: panelListView })), /*#__PURE__*/_react["default"].createElement(DatasetSection, { datasets: datasets, showDatasetTable: showDatasetTable, updateTableColor: updateTableColor, removeDataset: removeDataset, showDeleteDataset: true, showDatasetList: !isSortByDatasetMode, showAddDataModal: showAddDataModal }), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelDivider, null), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(PanelTitle, { className: "layer-manager-title", title: intl.formatMessage({ id: panelMetadata.label }) }, /*#__PURE__*/_react["default"].createElement(AddLayerButton, { datasets: datasets, onAdd: this._addLayer }))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, isSortByDatasetMode ? /*#__PURE__*/_react["default"].createElement(DatasetLayerGroup, { datasets: datasets, showDatasetTable: showDatasetTable, layers: layers, updateTableColor: updateTableColor, removeDataset: removeDataset, layerOrder: layerOrder, layerClasses: this.props.layerClasses, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, showDeleteDataset: true }) : /*#__PURE__*/ // TODO replace ignore // @ts-ignore _react["default"].createElement(LayerList, { layers: layers, datasets: datasets, layerOrder: layerOrder, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, layerClasses: this.props.layerClasses })), /*#__PURE__*/_react["default"].createElement(LayerBlendingSelector, { layerBlending: this.props.layerBlending, updateLayerBlending: visStateActions.updateLayerBlending, intl: intl }), /*#__PURE__*/_react["default"].createElement(OverlayBlendingSelector, { overlayBlending: this.props.overlayBlending, updateOverlayBlending: visStateActions.updateOverlayBlending, intl: intl, infoHelper: /*#__PURE__*/_react["default"].createElement(InfoHelper, { id: "overlayBlending-description", description: 'overlayBlending.description' }) })); } }]); }(_react.Component); return (0, _reactIntl.injectIntl)(LayerManager); } var _default = exports["default"] = LayerManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvY2FsaXphdGlvbiIsIl9sYXllckxpc3QiLCJfZGF0YXNldExheWVyR3JvdXAiLCJfcGFuZWxWaWV3TGlzdFRvZ2dsZSIsIl9wYW5lbFRpdGxlIiwiX2RhdGFzZXRTZWN0aW9uIiwiX2FkZExheWVyQnV0dG9uIiwiX2l0ZW1TZWxlY3RvciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pbmZvSGVscGVyIiwiX2NvbnN0YW50cyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkxheWVyQmxlbmRpbmdTZWxlY3RvciIsImV4cG9ydHMiLCJSZWFjdCIsIm1lbW8iLCJfcmVmIiwibGF5ZXJCbGVuZGluZyIsInVwZGF0ZUxheWVyQmxlbmRpbmciLCJpbnRsIiwiY2xhc3NOYW1lIiwibGFiZWxlZExheWVyQmxlbmRpbmdzIiwiTEFZRVJfQkxFTkRJTkdTIiwicmVkdWNlIiwiYWNjIiwiY3VycmVudCIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsImxhYmVsIiwib25DaGFuZ2UiLCJ1c2VDYWxsYmFjayIsImJsZW5kaW5nIiwiY3JlYXRlRWxlbWVudCIsIlNpZGVQYW5lbFNlY3Rpb24iLCJQYW5lbExhYmVsIiwiRm9ybWF0dGVkTWVzc2FnZSIsInNlbGVjdGVkSXRlbXMiLCJvcHRpb25zIiwibXVsdGlTZWxlY3QiLCJzZWFyY2hhYmxlIiwiZGlzcGxheU5hbWUiLCJJbmZvSGVscGVyV3JhcHBlciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JUaXRsZVJvdyIsIk92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yIiwiX3JlZjIiLCJvdmVybGF5QmxlbmRpbmciLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJpbmZvSGVscGVyIiwibGFiZWxlZE92ZXJsYXlCbGVuZGluZ3MiLCJPVkVSTEFZX0JMRU5ESU5HUyIsIkxheWVyTWFuYWdlckZhY3RvcnkiLCJkZXBzIiwiTGF5ZXJMaXN0RmFjdG9yeSIsIkRhdGFzZXRMYXllckdyb3VwRmFjdG9yeSIsIlBhbmVsVmlld0xpc3RUb2dnbGVGYWN0b3J5IiwiUGFuZWxUaXRsZUZhY3RvcnkiLCJEYXRhc2V0U2VjdGlvbkZhY3RvcnkiLCJBZGRMYXllckJ1dHRvbkZhY3RvcnkiLCJJbmZvSGVscGVyRmFjdG9yeSIsIkxheWVyTGlzdCIsIkRhdGFzZXRMYXllckdyb3VwIiwiUGFuZWxWaWV3TGlzdFRvZ2dsZSIsIlBhbmVsVGl0bGUiLCJEYXRhc2V0U2VjdGlvbiIsIkFkZExheWVyQnV0dG9uIiwiSW5mb0hlbHBlciIsIkxheWVyTWFuYWdlciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsImRhdGFzZXQiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJwcm9wcyIsImFkZExheWVyIiwidW5kZWZpbmVkIiwibGlzdFZpZXciLCJ1aVN0YXRlQWN0aW9ucyIsInRvZ2dsZVBhbmVsTGlzdFZpZXciLCJwYW5lbElkIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsInJlbmRlciIsIl90aGlzJHByb3BzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJsYXllck9yZGVyIiwic2hvd0FkZERhdGFNb2RhbCIsInVwZGF0ZVRhYmxlQ29sb3IiLCJzaG93RGF0YXNldFRhYmxlIiwicmVtb3ZlRGF0YXNldCIsIm1hcFN0YXRlQWN0aW9ucyIsInBhbmVsTGlzdFZpZXciLCJwYW5lbE1ldGFkYXRhIiwiaXNTb3J0QnlEYXRhc2V0TW9kZSIsIlBBTkVMX1ZJRVdfVE9HR0xFUyIsImJ5RGF0YXNldCIsIl90b2dnbGVQYW5lbExpc3RWaWV3IiwibW9kZSIsInNob3dEZWxldGVEYXRhc2V0Iiwic2hvd0RhdGFzZXRMaXN0IiwiU2lkZVBhbmVsRGl2aWRlciIsInRpdGxlIiwib25BZGQiLCJfYWRkTGF5ZXIiLCJsYXllckNsYXNzZXMiLCJkZXNjcmlwdGlvbiIsIkNvbXBvbmVudCIsImluamVjdEludGwiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLW1hbmFnZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgdXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtpbmplY3RJbnRsLCBXcmFwcGVkQ29tcG9uZW50UHJvcHN9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IExheWVyTGlzdEZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC9sYXllci1saXN0JztcbmltcG9ydCBEYXRhc2V0TGF5ZXJHcm91cEZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC9kYXRhc2V0LWxheWVyLWdyb3VwJztcbmltcG9ydCBQYW5lbFZpZXdMaXN0VG9nZ2xlRmFjdG9yeSBmcm9tICcuL3BhbmVsLXZpZXctbGlzdC10b2dnbGUnO1xuaW1wb3J0IFBhbmVsVGl0bGVGYWN0b3J5IGZyb20gJy4vcGFuZWwtdGl0bGUnO1xuaW1wb3J0IERhdGFzZXRTZWN0aW9uRmFjdG9yeSBmcm9tICcuL2xheWVyLXBhbmVsL2RhdGFzZXQtc2VjdGlvbic7XG5pbXBvcnQgQWRkTGF5ZXJCdXR0b25GYWN0b3J5IGZyb20gJy4vbGF5ZXItcGFuZWwvYWRkLWxheWVyLWJ1dHRvbic7XG5cbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnLi4vY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5pbXBvcnQge1BhbmVsTGFiZWwsIFNpZGVQYW5lbERpdmlkZXIsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSW5mb0hlbHBlckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL2luZm8taGVscGVyJztcblxuaW1wb3J0IHtMQVlFUl9CTEVORElOR1MsIE9WRVJMQVlfQkxFTkRJTkdTLCBQQU5FTF9WSUVXX1RPR0dMRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3Nlc1R5cGV9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7VUlTdGF0ZUFjdGlvbnMsIFZpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBBY3Rpb25IYW5kbGVyfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtTaWRlUGFuZWxJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1BhbmVsTGlzdFZpZXd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbnR5cGUgTGF5ZXJCbGVuZGluZ1NlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyQmxlbmRpbmc6IHN0cmluZztcbiAgdXBkYXRlTGF5ZXJCbGVuZGluZzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUxheWVyQmxlbmRpbmc+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59ICYgV3JhcHBlZENvbXBvbmVudFByb3BzO1xuXG50eXBlIE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yUHJvcHMgPSB7XG4gIG92ZXJsYXlCbGVuZGluZzogc3RyaW5nO1xuICB1cGRhdGVPdmVybGF5QmxlbmRpbmc6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy51cGRhdGVPdmVybGF5QmxlbmRpbmc+O1xuICBpbmZvSGVscGVyOiBSZWFjdC5SZWFjdE5vZGU7XG59ICYgV3JhcHBlZENvbXBvbmVudFByb3BzO1xuXG50eXBlIExheWVyTWFuYWdlclByb3BzID0ge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJPcmRlcjogc3RyaW5nW107XG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzVHlwZTtcbiAgbGF5ZXJCbGVuZGluZzogc3RyaW5nO1xuICBvdmVybGF5QmxlbmRpbmc6IHN0cmluZztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIHNob3dBZGREYXRhTW9kYWw6ICgpID0+IHZvaWQ7XG4gIHJlbW92ZURhdGFzZXQ6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFVJU3RhdGVBY3Rpb25zLm9wZW5EZWxldGVNb2RhbD47XG4gIHNob3dEYXRhc2V0VGFibGU6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5zaG93RGF0YXNldFRhYmxlPjtcbiAgdXBkYXRlVGFibGVDb2xvcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZVRhYmxlQ29sb3I+O1xuICBwYW5lbExpc3RWaWV3OiBQYW5lbExpc3RWaWV3O1xuICBwYW5lbE1ldGFkYXRhOiBTaWRlUGFuZWxJdGVtO1xufSAmIFdyYXBwZWRDb21wb25lbnRQcm9wcztcblxuZXhwb3J0IGNvbnN0IExheWVyQmxlbmRpbmdTZWxlY3RvciA9IFJlYWN0Lm1lbW8oXG4gICh7bGF5ZXJCbGVuZGluZywgdXBkYXRlTGF5ZXJCbGVuZGluZywgaW50bCwgY2xhc3NOYW1lfTogTGF5ZXJCbGVuZGluZ1NlbGVjdG9yUHJvcHMpID0+IHtcbiAgICBjb25zdCBsYWJlbGVkTGF5ZXJCbGVuZGluZ3MgPSBPYmplY3Qua2V5cyhMQVlFUl9CTEVORElOR1MpLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6IExBWUVSX0JMRU5ESU5HU1tjdXJyZW50XS5sYWJlbH0pXTogY3VycmVudFxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgYmxlbmRpbmcgPT4gdXBkYXRlTGF5ZXJCbGVuZGluZyhsYWJlbGVkTGF5ZXJCbGVuZGluZ3NbYmxlbmRpbmddKSxcbiAgICAgIFt1cGRhdGVMYXllckJsZW5kaW5nLCBsYWJlbGVkTGF5ZXJCbGVuZGluZ3NdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwibGF5ZXJCbGVuZGluZy50aXRsZVwiIC8+XG4gICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6IExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXS5sYWJlbH0pfVxuICAgICAgICAgIG9wdGlvbnM9e09iamVjdC5rZXlzKGxhYmVsZWRMYXllckJsZW5kaW5ncyl9XG4gICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICApO1xuICB9XG4pO1xuTGF5ZXJCbGVuZGluZ1NlbGVjdG9yLmRpc3BsYXlOYW1lID0gJ0xheWVyQmxlbmRpbmdTZWxlY3Rvcic7XG5cbmNvbnN0IEluZm9IZWxwZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZmxvYXQ6IHJpZ2h0O1xuYDtcblxuY29uc3QgT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JUaXRsZVJvdyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuXG5jb25zdCBPdmVybGF5QmxlbmRpbmdTZWxlY3RvciA9IFJlYWN0Lm1lbW8oXG4gICh7b3ZlcmxheUJsZW5kaW5nLCB1cGRhdGVPdmVybGF5QmxlbmRpbmcsIGludGwsIGluZm9IZWxwZXJ9OiBPdmVybGF5QmxlbmRpbmdTZWxlY3RvclByb3BzKSA9PiB7XG4gICAgY29uc3QgbGFiZWxlZE92ZXJsYXlCbGVuZGluZ3MgPSBPYmplY3Qua2V5cyhPVkVSTEFZX0JMRU5ESU5HUykucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudCkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogT1ZFUkxBWV9CTEVORElOR1NbY3VycmVudF0ubGFiZWx9KV06IGN1cnJlbnRcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIGJsZW5kaW5nID0+IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhsYWJlbGVkT3ZlcmxheUJsZW5kaW5nc1tibGVuZGluZ10pLFxuICAgICAgW3VwZGF0ZU92ZXJsYXlCbGVuZGluZywgbGFiZWxlZE92ZXJsYXlCbGVuZGluZ3NdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgPE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yVGl0bGVSb3c+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cIm92ZXJsYXlCbGVuZGluZy50aXRsZVwiIC8+XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgIDxJbmZvSGVscGVyV3JhcHBlcj57aW5mb0hlbHBlcn08L0luZm9IZWxwZXJXcmFwcGVyPlxuICAgICAgICA8L092ZXJsYXlCbGVuZGluZ1NlbGVjdG9yVGl0bGVSb3c+XG4gICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddLmxhYmVsfSl9XG4gICAgICAgICAgb3B0aW9ucz17T2JqZWN0LmtleXMobGFiZWxlZE92ZXJsYXlCbGVuZGluZ3MpfVxuICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgKTtcbiAgfVxuKTtcbk92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yLmRpc3BsYXlOYW1lID0gJ092ZXJsYXlCbGVuZGluZ1NlbGVjdG9yJztcblxuTGF5ZXJNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW1xuICBMYXllckxpc3RGYWN0b3J5LFxuICBEYXRhc2V0TGF5ZXJHcm91cEZhY3RvcnksXG4gIFBhbmVsVmlld0xpc3RUb2dnbGVGYWN0b3J5LFxuICBQYW5lbFRpdGxlRmFjdG9yeSxcbiAgRGF0YXNldFNlY3Rpb25GYWN0b3J5LFxuICBBZGRMYXllckJ1dHRvbkZhY3RvcnksXG4gIEluZm9IZWxwZXJGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBMYXllck1hbmFnZXJGYWN0b3J5KFxuICBMYXllckxpc3Q6IFJldHVyblR5cGU8dHlwZW9mIExheWVyTGlzdEZhY3Rvcnk+LFxuICBEYXRhc2V0TGF5ZXJHcm91cDogUmV0dXJuVHlwZTx0eXBlb2YgRGF0YXNldExheWVyR3JvdXBGYWN0b3J5PixcbiAgUGFuZWxWaWV3TGlzdFRvZ2dsZTogUmV0dXJuVHlwZTx0eXBlb2YgUGFuZWxWaWV3TGlzdFRvZ2dsZUZhY3Rvcnk+LFxuICBQYW5lbFRpdGxlOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbFRpdGxlRmFjdG9yeT4sXG4gIERhdGFzZXRTZWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBEYXRhc2V0U2VjdGlvbkZhY3Rvcnk+LFxuICBBZGRMYXllckJ1dHRvbjogUmV0dXJuVHlwZTx0eXBlb2YgQWRkTGF5ZXJCdXR0b25GYWN0b3J5PixcbiAgSW5mb0hlbHBlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW5mb0hlbHBlckZhY3Rvcnk+XG4pIHtcbiAgY2xhc3MgTGF5ZXJNYW5hZ2VyIGV4dGVuZHMgQ29tcG9uZW50PExheWVyTWFuYWdlclByb3BzPiB7XG4gICAgX2FkZExheWVyID0gKGRhdGFzZXQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLmFkZExheWVyKHVuZGVmaW5lZCwgZGF0YXNldCk7XG4gICAgfTtcblxuICAgIF90b2dnbGVQYW5lbExpc3RWaWV3ID0gKGxpc3RWaWV3OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHt1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlUGFuZWxMaXN0Vmlldyh7cGFuZWxJZDogJ2xheWVyJywgbGlzdFZpZXd9KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXllcnMsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBpbnRsLFxuICAgICAgICBsYXllck9yZGVyLFxuICAgICAgICBzaG93QWRkRGF0YU1vZGFsLFxuICAgICAgICB1cGRhdGVUYWJsZUNvbG9yLFxuICAgICAgICBzaG93RGF0YXNldFRhYmxlLFxuICAgICAgICByZW1vdmVEYXRhc2V0LFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHBhbmVsTGlzdFZpZXcsXG4gICAgICAgIHBhbmVsTWV0YWRhdGFcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpc1NvcnRCeURhdGFzZXRNb2RlID0gcGFuZWxMaXN0VmlldyA9PT0gUEFORUxfVklFV19UT0dHTEVTLmJ5RGF0YXNldDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllci1tYW5hZ2VyXCI+XG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICA8UGFuZWxWaWV3TGlzdFRvZ2dsZVxuICAgICAgICAgICAgICB0b2dnbGVQYW5lbExpc3RWaWV3PXt0aGlzLl90b2dnbGVQYW5lbExpc3RWaWV3fVxuICAgICAgICAgICAgICBtb2RlPXtwYW5lbExpc3RWaWV3fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPERhdGFzZXRTZWN0aW9uXG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBzaG93RGF0YXNldFRhYmxlPXtzaG93RGF0YXNldFRhYmxlfVxuICAgICAgICAgICAgdXBkYXRlVGFibGVDb2xvcj17dXBkYXRlVGFibGVDb2xvcn1cbiAgICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgICBzaG93RGVsZXRlRGF0YXNldFxuICAgICAgICAgICAgc2hvd0RhdGFzZXRMaXN0PXshaXNTb3J0QnlEYXRhc2V0TW9kZX1cbiAgICAgICAgICAgIHNob3dBZGREYXRhTW9kYWw9e3Nob3dBZGREYXRhTW9kYWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2lkZVBhbmVsRGl2aWRlciAvPlxuICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgPFBhbmVsVGl0bGVcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXItbWFuYWdlci10aXRsZVwiXG4gICAgICAgICAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBwYW5lbE1ldGFkYXRhLmxhYmVsfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBZGRMYXllckJ1dHRvbiBkYXRhc2V0cz17ZGF0YXNldHN9IG9uQWRkPXt0aGlzLl9hZGRMYXllcn0gLz5cbiAgICAgICAgICAgIDwvUGFuZWxUaXRsZT5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICB7aXNTb3J0QnlEYXRhc2V0TW9kZSA/IChcbiAgICAgICAgICAgICAgPERhdGFzZXRMYXllckdyb3VwXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIHNob3dEYXRhc2V0VGFibGU9e3Nob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgICAgdXBkYXRlVGFibGVDb2xvcj17dXBkYXRlVGFibGVDb2xvcn1cbiAgICAgICAgICAgICAgICByZW1vdmVEYXRhc2V0PXtyZW1vdmVEYXRhc2V0fVxuICAgICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzPXt0aGlzLnByb3BzLmxheWVyQ2xhc3Nlc31cbiAgICAgICAgICAgICAgICB1aVN0YXRlQWN0aW9ucz17dWlTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zPXt2aXNTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgc2hvd0RlbGV0ZURhdGFzZXRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIC8vIFRPRE8gcmVwbGFjZSBpZ25vcmVcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICA8TGF5ZXJMaXN0XG4gICAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgICAgdWlTdGF0ZUFjdGlvbnM9e3VpU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucz17dmlzU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIGxheWVyQ2xhc3Nlcz17dGhpcy5wcm9wcy5sYXllckNsYXNzZXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8TGF5ZXJCbGVuZGluZ1NlbGVjdG9yXG4gICAgICAgICAgICBsYXllckJsZW5kaW5nPXt0aGlzLnByb3BzLmxheWVyQmxlbmRpbmd9XG4gICAgICAgICAgICB1cGRhdGVMYXllckJsZW5kaW5nPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlTGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICAgIGludGw9e2ludGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8T3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JcbiAgICAgICAgICAgIG92ZXJsYXlCbGVuZGluZz17dGhpcy5wcm9wcy5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmc9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVPdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgICBpbnRsPXtpbnRsfVxuICAgICAgICAgICAgaW5mb0hlbHBlcj17XG4gICAgICAgICAgICAgIDxJbmZvSGVscGVyXG4gICAgICAgICAgICAgICAgaWQ9e2BvdmVybGF5QmxlbmRpbmctZGVzY3JpcHRpb25gfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXsnb3ZlcmxheUJsZW5kaW5nLmRlc2NyaXB0aW9uJ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmplY3RJbnRsKExheWVyTWFuYWdlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyTWFuYWdlckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxhQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxVQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFTLGVBQUEsR0FBQU4sc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFVLGVBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFXLGFBQUEsR0FBQVIsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFZLGtCQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxXQUFBLEdBQUFWLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBYyxVQUFBLEdBQUFkLE9BQUE7QUFBNEYsSUFBQWUsZUFBQSxFQUFBQyxnQkFBQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBbkIsd0JBQUFtQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FB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