UNPKG

kepler.gl

Version:

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

187 lines (186 loc) 38.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"] = exports.LayerBlendingSelector = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); 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 _utils = require("@kepler.gl/utils"); var _excluded = ["rasterTile"]; 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 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 = function LayerManager(_ref3) { var layers = _ref3.layers, datasets = _ref3.datasets, intl = _ref3.intl, layerOrder = _ref3.layerOrder, panelListView = _ref3.panelListView, panelMetadata = _ref3.panelMetadata, layerClasses = _ref3.layerClasses, layerBlending = _ref3.layerBlending, overlayBlending = _ref3.overlayBlending, showAddDataModal = _ref3.showAddDataModal, updateTableColor = _ref3.updateTableColor, showDatasetTable = _ref3.showDatasetTable, removeDataset = _ref3.removeDataset, uiStateActions = _ref3.uiStateActions, visStateActions = _ref3.visStateActions, mapStateActions = _ref3.mapStateActions; var addLayer = visStateActions.addLayer; var togglePanelListView = uiStateActions.togglePanelListView; var onAddLayer = (0, _react.useCallback)(function (dataset) { addLayer(undefined, dataset); }, [addLayer]); var onTogglePanelListView = (0, _react.useCallback)(function (listView) { togglePanelListView({ panelId: 'layer', listView: listView }); }, [togglePanelListView]); var isSortByDatasetMode = panelListView === _constants.PANEL_VIEW_TOGGLES.byDataset; var enableRasterTileLayer = (0, _utils.getApplicationConfig)().enableRasterTileLayer; var filteredLayerClasses = (0, _react.useMemo)(function () { if (enableRasterTileLayer) return layerClasses; /* eslint-disable @typescript-eslint/no-unused-vars */ var rasterTile = layerClasses.rasterTile, restClasses = (0, _objectWithoutProperties2["default"])(layerClasses, _excluded); return restClasses; }, [enableRasterTileLayer, layerClasses]); return /*#__PURE__*/_react["default"].createElement("div", { className: "layer-manager" }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(PanelViewListToggle, { togglePanelListView: onTogglePanelListView, 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: onAddLayer }))), /*#__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: filteredLayerClasses, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, showDeleteDataset: true }) : /*#__PURE__*/_react["default"].createElement(LayerList, { layers: layers, datasets: datasets, layerOrder: layerOrder, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, layerClasses: filteredLayerClasses })), /*#__PURE__*/_react["default"].createElement(LayerBlendingSelector, { layerBlending: layerBlending, updateLayerBlending: visStateActions.updateLayerBlending, intl: intl }), /*#__PURE__*/_react["default"].createElement(OverlayBlendingSelector, { overlayBlending: overlayBlending, updateOverlayBlending: visStateActions.updateOverlayBlending, intl: intl, infoHelper: /*#__PURE__*/_react["default"].createElement(InfoHelper, { id: "overlayBlending-description", description: 'overlayBlending.description' }) })); }; return (0, _reactIntl.injectIntl)(LayerManager); } var _default = exports["default"] = LayerManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvY2FsaXphdGlvbiIsIl9sYXllckxpc3QiLCJfZGF0YXNldExheWVyR3JvdXAiLCJfcGFuZWxWaWV3TGlzdFRvZ2dsZSIsIl9wYW5lbFRpdGxlIiwiX2RhdGFzZXRTZWN0aW9uIiwiX2FkZExheWVyQnV0dG9uIiwiX2l0ZW1TZWxlY3RvciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pbmZvSGVscGVyIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9leGNsdWRlZCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJMYXllckJsZW5kaW5nU2VsZWN0b3IiLCJleHBvcnRzIiwiUmVhY3QiLCJtZW1vIiwiX3JlZiIsImxheWVyQmxlbmRpbmciLCJ1cGRhdGVMYXllckJsZW5kaW5nIiwiaW50bCIsImNsYXNzTmFtZSIsImxhYmVsZWRMYXllckJsZW5kaW5ncyIsIkxBWUVSX0JMRU5ESU5HUyIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJmb3JtYXRNZXNzYWdlIiwiaWQiLCJsYWJlbCIsIm9uQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJibGVuZGluZyIsImNyZWF0ZUVsZW1lbnQiLCJTaWRlUGFuZWxTZWN0aW9uIiwiUGFuZWxMYWJlbCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJzZWxlY3RlZEl0ZW1zIiwib3B0aW9ucyIsIm11bHRpU2VsZWN0Iiwic2VhcmNoYWJsZSIsImRpc3BsYXlOYW1lIiwiSW5mb0hlbHBlcldyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIk92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yVGl0bGVSb3ciLCJPdmVybGF5QmxlbmRpbmdTZWxlY3RvciIsIl9yZWYyIiwib3ZlcmxheUJsZW5kaW5nIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nIiwiaW5mb0hlbHBlciIsImxhYmVsZWRPdmVybGF5QmxlbmRpbmdzIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJMYXllck1hbmFnZXJGYWN0b3J5IiwiZGVwcyIsIkxheWVyTGlzdEZhY3RvcnkiLCJEYXRhc2V0TGF5ZXJHcm91cEZhY3RvcnkiLCJQYW5lbFZpZXdMaXN0VG9nZ2xlRmFjdG9yeSIsIlBhbmVsVGl0bGVGYWN0b3J5IiwiRGF0YXNldFNlY3Rpb25GYWN0b3J5IiwiQWRkTGF5ZXJCdXR0b25GYWN0b3J5IiwiSW5mb0hlbHBlckZhY3RvcnkiLCJMYXllckxpc3QiLCJEYXRhc2V0TGF5ZXJHcm91cCIsIlBhbmVsVmlld0xpc3RUb2dnbGUiLCJQYW5lbFRpdGxlIiwiRGF0YXNldFNlY3Rpb24iLCJBZGRMYXllckJ1dHRvbiIsIkluZm9IZWxwZXIiLCJMYXllck1hbmFnZXIiLCJfcmVmMyIsImxheWVycyIsImRhdGFzZXRzIiwibGF5ZXJPcmRlciIsInBhbmVsTGlzdFZpZXciLCJwYW5lbE1ldGFkYXRhIiwibGF5ZXJDbGFzc2VzIiwic2hvd0FkZERhdGFNb2RhbCIsInVwZGF0ZVRhYmxlQ29sb3IiLCJzaG93RGF0YXNldFRhYmxlIiwicmVtb3ZlRGF0YXNldCIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwiYWRkTGF5ZXIiLCJ0b2dnbGVQYW5lbExpc3RWaWV3Iiwib25BZGRMYXllciIsImRhdGFzZXQiLCJ1bmRlZmluZWQiLCJvblRvZ2dsZVBhbmVsTGlzdFZpZXciLCJsaXN0VmlldyIsInBhbmVsSWQiLCJpc1NvcnRCeURhdGFzZXRNb2RlIiwiUEFORUxfVklFV19UT0dHTEVTIiwiYnlEYXRhc2V0IiwiZW5hYmxlUmFzdGVyVGlsZUxheWVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJmaWx0ZXJlZExheWVyQ2xhc3NlcyIsInVzZU1lbW8iLCJyYXN0ZXJUaWxlIiwicmVzdENsYXNzZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwibW9kZSIsInNob3dEZWxldGVEYXRhc2V0Iiwic2hvd0RhdGFzZXRMaXN0IiwiU2lkZVBhbmVsRGl2aWRlciIsInRpdGxlIiwib25BZGQiLCJkZXNjcmlwdGlvbiIsImluamVjdEludGwiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLW1hbmFnZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7aW5qZWN0SW50bCwgV3JhcHBlZENvbXBvbmVudFByb3BzfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmltcG9ydCBMYXllckxpc3RGYWN0b3J5IGZyb20gJy4vbGF5ZXItcGFuZWwvbGF5ZXItbGlzdCc7XG5pbXBvcnQgRGF0YXNldExheWVyR3JvdXBGYWN0b3J5IGZyb20gJy4vbGF5ZXItcGFuZWwvZGF0YXNldC1sYXllci1ncm91cCc7XG5pbXBvcnQgUGFuZWxWaWV3TGlzdFRvZ2dsZUZhY3RvcnkgZnJvbSAnLi9wYW5lbC12aWV3LWxpc3QtdG9nZ2xlJztcbmltcG9ydCBQYW5lbFRpdGxlRmFjdG9yeSBmcm9tICcuL3BhbmVsLXRpdGxlJztcbmltcG9ydCBEYXRhc2V0U2VjdGlvbkZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC9kYXRhc2V0LXNlY3Rpb24nO1xuaW1wb3J0IEFkZExheWVyQnV0dG9uRmFjdG9yeSBmcm9tICcuL2xheWVyLXBhbmVsL2FkZC1sYXllci1idXR0b24nO1xuXG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuaW1wb3J0IHtQYW5lbExhYmVsLCBTaWRlUGFuZWxEaXZpZGVyLCBTaWRlUGFuZWxTZWN0aW9ufSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEluZm9IZWxwZXJGYWN0b3J5IGZyb20gJy4uL2NvbW1vbi9pbmZvLWhlbHBlcic7XG5cbmltcG9ydCB7TEFZRVJfQkxFTkRJTkdTLCBPVkVSTEFZX0JMRU5ESU5HUywgUEFORUxfVklFV19UT0dHTEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xheWVyLCBMYXllckNsYXNzZXNUeXBlfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1VJU3RhdGVBY3Rpb25zLCBWaXNTdGF0ZUFjdGlvbnMsIE1hcFN0YXRlQWN0aW9ucywgQWN0aW9uSGFuZGxlcn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7U2lkZVBhbmVsSXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtQYW5lbExpc3RWaWV3fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbnR5cGUgTGF5ZXJCbGVuZGluZ1NlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyQmxlbmRpbmc6IHN0cmluZztcbiAgdXBkYXRlTGF5ZXJCbGVuZGluZzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUxheWVyQmxlbmRpbmc+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59ICYgV3JhcHBlZENvbXBvbmVudFByb3BzO1xuXG50eXBlIE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yUHJvcHMgPSB7XG4gIG92ZXJsYXlCbGVuZGluZzogc3RyaW5nO1xuICB1cGRhdGVPdmVybGF5QmxlbmRpbmc6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy51cGRhdGVPdmVybGF5QmxlbmRpbmc+O1xuICBpbmZvSGVscGVyOiBSZWFjdC5SZWFjdE5vZGU7XG59ICYgV3JhcHBlZENvbXBvbmVudFByb3BzO1xuXG50eXBlIExheWVyTWFuYWdlclByb3BzID0ge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJPcmRlcjogc3RyaW5nW107XG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzVHlwZTtcbiAgbGF5ZXJCbGVuZGluZzogc3RyaW5nO1xuICBvdmVybGF5QmxlbmRpbmc6IHN0cmluZztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIHNob3dBZGREYXRhTW9kYWw6ICgpID0+IHZvaWQ7XG4gIHJlbW92ZURhdGFzZXQ6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFVJU3RhdGVBY3Rpb25zLm9wZW5EZWxldGVNb2RhbD47XG4gIHNob3dEYXRhc2V0VGFibGU6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5zaG93RGF0YXNldFRhYmxlPjtcbiAgdXBkYXRlVGFibGVDb2xvcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZVRhYmxlQ29sb3I+O1xuICBwYW5lbExpc3RWaWV3OiBQYW5lbExpc3RWaWV3O1xuICBwYW5lbE1ldGFkYXRhOiBTaWRlUGFuZWxJdGVtO1xufSAmIFdyYXBwZWRDb21wb25lbnRQcm9wcztcblxuZXhwb3J0IGNvbnN0IExheWVyQmxlbmRpbmdTZWxlY3RvciA9IFJlYWN0Lm1lbW8oXG4gICh7bGF5ZXJCbGVuZGluZywgdXBkYXRlTGF5ZXJCbGVuZGluZywgaW50bCwgY2xhc3NOYW1lfTogTGF5ZXJCbGVuZGluZ1NlbGVjdG9yUHJvcHMpID0+IHtcbiAgICBjb25zdCBsYWJlbGVkTGF5ZXJCbGVuZGluZ3MgPSBPYmplY3Qua2V5cyhMQVlFUl9CTEVORElOR1MpLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6IExBWUVSX0JMRU5ESU5HU1tjdXJyZW50XS5sYWJlbH0pXTogY3VycmVudFxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgYmxlbmRpbmcgPT4gdXBkYXRlTGF5ZXJCbGVuZGluZyhsYWJlbGVkTGF5ZXJCbGVuZGluZ3NbYmxlbmRpbmddKSxcbiAgICAgIFt1cGRhdGVMYXllckJsZW5kaW5nLCBsYWJlbGVkTGF5ZXJCbGVuZGluZ3NdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwibGF5ZXJCbGVuZGluZy50aXRsZVwiIC8+XG4gICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6IExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXS5sYWJlbH0pfVxuICAgICAgICAgIG9wdGlvbnM9e09iamVjdC5rZXlzKGxhYmVsZWRMYXllckJsZW5kaW5ncyl9XG4gICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICApO1xuICB9XG4pO1xuTGF5ZXJCbGVuZGluZ1NlbGVjdG9yLmRpc3BsYXlOYW1lID0gJ0xheWVyQmxlbmRpbmdTZWxlY3Rvcic7XG5cbmNvbnN0IEluZm9IZWxwZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZmxvYXQ6IHJpZ2h0O1xuYDtcblxuY29uc3QgT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JUaXRsZVJvdyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuXG5jb25zdCBPdmVybGF5QmxlbmRpbmdTZWxlY3RvciA9IFJlYWN0Lm1lbW8oXG4gICh7b3ZlcmxheUJsZW5kaW5nLCB1cGRhdGVPdmVybGF5QmxlbmRpbmcsIGludGwsIGluZm9IZWxwZXJ9OiBPdmVybGF5QmxlbmRpbmdTZWxlY3RvclByb3BzKSA9PiB7XG4gICAgY29uc3QgbGFiZWxlZE92ZXJsYXlCbGVuZGluZ3MgPSBPYmplY3Qua2V5cyhPVkVSTEFZX0JMRU5ESU5HUykucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudCkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogT1ZFUkxBWV9CTEVORElOR1NbY3VycmVudF0ubGFiZWx9KV06IGN1cnJlbnRcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIGJsZW5kaW5nID0+IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhsYWJlbGVkT3ZlcmxheUJsZW5kaW5nc1tibGVuZGluZ10pLFxuICAgICAgW3VwZGF0ZU92ZXJsYXlCbGVuZGluZywgbGFiZWxlZE92ZXJsYXlCbGVuZGluZ3NdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgPE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yVGl0bGVSb3c+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cIm92ZXJsYXlCbGVuZGluZy50aXRsZVwiIC8+XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgIDxJbmZvSGVscGVyV3JhcHBlcj57aW5mb0hlbHBlcn08L0luZm9IZWxwZXJXcmFwcGVyPlxuICAgICAgICA8L092ZXJsYXlCbGVuZGluZ1NlbGVjdG9yVGl0bGVSb3c+XG4gICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddLmxhYmVsfSl9XG4gICAgICAgICAgb3B0aW9ucz17T2JqZWN0LmtleXMobGFiZWxlZE92ZXJsYXlCbGVuZGluZ3MpfVxuICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgKTtcbiAgfVxuKTtcbk92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yLmRpc3BsYXlOYW1lID0gJ092ZXJsYXlCbGVuZGluZ1NlbGVjdG9yJztcblxuTGF5ZXJNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW1xuICBMYXllckxpc3RGYWN0b3J5LFxuICBEYXRhc2V0TGF5ZXJHcm91cEZhY3RvcnksXG4gIFBhbmVsVmlld0xpc3RUb2dnbGVGYWN0b3J5LFxuICBQYW5lbFRpdGxlRmFjdG9yeSxcbiAgRGF0YXNldFNlY3Rpb25GYWN0b3J5LFxuICBBZGRMYXllckJ1dHRvbkZhY3RvcnksXG4gIEluZm9IZWxwZXJGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBMYXllck1hbmFnZXJGYWN0b3J5KFxuICBMYXllckxpc3Q6IFJldHVyblR5cGU8dHlwZW9mIExheWVyTGlzdEZhY3Rvcnk+LFxuICBEYXRhc2V0TGF5ZXJHcm91cDogUmV0dXJuVHlwZTx0eXBlb2YgRGF0YXNldExheWVyR3JvdXBGYWN0b3J5PixcbiAgUGFuZWxWaWV3TGlzdFRvZ2dsZTogUmV0dXJuVHlwZTx0eXBlb2YgUGFuZWxWaWV3TGlzdFRvZ2dsZUZhY3Rvcnk+LFxuICBQYW5lbFRpdGxlOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbFRpdGxlRmFjdG9yeT4sXG4gIERhdGFzZXRTZWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBEYXRhc2V0U2VjdGlvbkZhY3Rvcnk+LFxuICBBZGRMYXllckJ1dHRvbjogUmV0dXJuVHlwZTx0eXBlb2YgQWRkTGF5ZXJCdXR0b25GYWN0b3J5PixcbiAgSW5mb0hlbHBlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW5mb0hlbHBlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJNYW5hZ2VyOiBSZWFjdC5GQzxMYXllck1hbmFnZXJQcm9wcz4gPSAoe1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0cyxcbiAgICBpbnRsLFxuICAgIGxheWVyT3JkZXIsXG4gICAgcGFuZWxMaXN0VmlldyxcbiAgICBwYW5lbE1ldGFkYXRhLFxuICAgIGxheWVyQ2xhc3NlcyxcbiAgICBsYXllckJsZW5kaW5nLFxuICAgIG92ZXJsYXlCbGVuZGluZyxcbiAgICBzaG93QWRkRGF0YU1vZGFsLFxuICAgIHVwZGF0ZVRhYmxlQ29sb3IsXG4gICAgc2hvd0RhdGFzZXRUYWJsZSxcbiAgICByZW1vdmVEYXRhc2V0LFxuICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICBtYXBTdGF0ZUFjdGlvbnNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHthZGRMYXllcn0gPSB2aXNTdGF0ZUFjdGlvbnM7XG4gICAgY29uc3Qge3RvZ2dsZVBhbmVsTGlzdFZpZXd9ID0gdWlTdGF0ZUFjdGlvbnM7XG4gICAgY29uc3Qgb25BZGRMYXllciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRhdGFzZXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBhZGRMYXllcih1bmRlZmluZWQsIGRhdGFzZXQpO1xuICAgICAgfSxcbiAgICAgIFthZGRMYXllcl1cbiAgICApO1xuXG4gICAgY29uc3Qgb25Ub2dnbGVQYW5lbExpc3RWaWV3ID0gdXNlQ2FsbGJhY2soXG4gICAgICAobGlzdFZpZXc6IHN0cmluZykgPT4ge1xuICAgICAgICB0b2dnbGVQYW5lbExpc3RWaWV3KHtwYW5lbElkOiAnbGF5ZXInLCBsaXN0Vmlld30pO1xuICAgICAgfSxcbiAgICAgIFt0b2dnbGVQYW5lbExpc3RWaWV3XVxuICAgICk7XG5cbiAgICBjb25zdCBpc1NvcnRCeURhdGFzZXRNb2RlID0gcGFuZWxMaXN0VmlldyA9PT0gUEFORUxfVklFV19UT0dHTEVTLmJ5RGF0YXNldDtcblxuICAgIGNvbnN0IGVuYWJsZVJhc3RlclRpbGVMYXllciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmFzdGVyVGlsZUxheWVyO1xuICAgIGNvbnN0IGZpbHRlcmVkTGF5ZXJDbGFzc2VzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlUmFzdGVyVGlsZUxheWVyKSByZXR1cm4gbGF5ZXJDbGFzc2VzO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4gICAgICBjb25zdCB7cmFzdGVyVGlsZSwgLi4ucmVzdENsYXNzZXN9ID0gbGF5ZXJDbGFzc2VzO1xuICAgICAgcmV0dXJuIHJlc3RDbGFzc2VzIGFzIExheWVyQ2xhc3Nlc1R5cGU7XG4gICAgfSwgW2VuYWJsZVJhc3RlclRpbGVMYXllciwgbGF5ZXJDbGFzc2VzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllci1tYW5hZ2VyXCI+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbFZpZXdMaXN0VG9nZ2xlIHRvZ2dsZVBhbmVsTGlzdFZpZXc9e29uVG9nZ2xlUGFuZWxMaXN0Vmlld30gbW9kZT17cGFuZWxMaXN0Vmlld30gLz5cbiAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICA8RGF0YXNldFNlY3Rpb25cbiAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICB1cGRhdGVUYWJsZUNvbG9yPXt1cGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgc2hvd0RlbGV0ZURhdGFzZXRcbiAgICAgICAgICBzaG93RGF0YXNldExpc3Q9eyFpc1NvcnRCeURhdGFzZXRNb2RlfVxuICAgICAgICAgIHNob3dBZGREYXRhTW9kYWw9e3Nob3dBZGREYXRhTW9kYWx9XG4gICAgICAgIC8+XG4gICAgICAgIDxTaWRlUGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbFRpdGxlXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllci1tYW5hZ2VyLXRpdGxlXCJcbiAgICAgICAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBwYW5lbE1ldGFkYXRhLmxhYmVsfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFkZExheWVyQnV0dG9uIGRhdGFzZXRzPXtkYXRhc2V0c30gb25BZGQ9e29uQWRkTGF5ZXJ9IC8+XG4gICAgICAgICAgPC9QYW5lbFRpdGxlPlxuICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIHtpc1NvcnRCeURhdGFzZXRNb2RlID8gKFxuICAgICAgICAgICAgPERhdGFzZXRMYXllckdyb3VwXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgIHVwZGF0ZVRhYmxlQ29sb3I9e3VwZGF0ZVRhYmxlQ29sb3J9XG4gICAgICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgIGxheWVyQ2xhc3Nlcz17ZmlsdGVyZWRMYXllckNsYXNzZXN9XG4gICAgICAgICAgICAgIHVpU3RhdGVBY3Rpb25zPXt1aVN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zPXt2aXNTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBzaG93RGVsZXRlRGF0YXNldFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExheWVyTGlzdFxuICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICB1aVN0YXRlQWN0aW9ucz17dWlTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucz17dmlzU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnM9e21hcFN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzPXtmaWx0ZXJlZExheWVyQ2xhc3Nlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICA8TGF5ZXJCbGVuZGluZ1NlbGVjdG9yXG4gICAgICAgICAgbGF5ZXJCbGVuZGluZz17bGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICB1cGRhdGVMYXllckJsZW5kaW5nPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlTGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICBpbnRsPXtpbnRsfVxuICAgICAgICAvPlxuICAgICAgICA8T3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JcbiAgICAgICAgICBvdmVybGF5QmxlbmRpbmc9e292ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmc9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVPdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgaW50bD17aW50bH1cbiAgICAgICAgICBpbmZvSGVscGVyPXtcbiAgICAgICAgICAgIDxJbmZvSGVscGVyXG4gICAgICAgICAgICAgIGlkPXtgb3ZlcmxheUJsZW5kaW5nLWRlc2NyaXB0aW9uYH1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249eydvdmVybGF5QmxlbmRpbmcuZGVzY3JpcHRpb24nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBpbmplY3RJbnRsKExheWVyTWFuYWdlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyTWFuYWdlckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFNLGtCQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxvQkFBQSxHQUFBSixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVMsZUFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBUCxzQkFBQSxDQUFBSCxPQUFBO0FBRUEsSUFBQVcsYUFBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVksa0JBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFdBQUEsR0FBQVYsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFjLFVBQUEsR0FBQWQsT0FBQTtBQU1BLElBQUFlLE1BQUEsR0FBQWYsT0FBQTtBQUFzRCxJQUFBZ0IsU0FBQTtBQUFBLElBQUFDLGVBQUEsRUFBQUMsZ0JBQUE7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FB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