kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
186 lines (185 loc) • 33.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/localization/src");
var _icons = require("../common/icons");
var _styledComponents = require("../common/styled-components");
var _components = require("./export-map-modal/components");
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; })(); } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var getDataRowCount = function getDataRowCount(datasets, selectedDataset, filtered, intl) {
if (selectedDataset === undefined) {
return;
}
var selectedData = datasets[selectedDataset];
if (!selectedData) {
return intl.formatMessage({
id: 'modal.exportData.fileCount'
}, {
fileCount: Object.keys(datasets).length
});
}
var dataContainer = selectedData.dataContainer,
filteredIdxCPU = selectedData.filteredIdxCPU;
if (filtered && !filteredIdxCPU) {
return '-';
}
var rowCount = filtered ? filteredIdxCPU === null || filteredIdxCPU === void 0 ? void 0 : filteredIdxCPU.length : dataContainer.numRows();
return intl.formatMessage({
id: 'modal.exportData.rowCount'
}, {
rowCount: rowCount === null || rowCount === void 0 ? void 0 : rowCount.toLocaleString()
});
};
var ExportDataModalFactory = function ExportDataModalFactory() {
var ExportDataModal = /*#__PURE__*/function (_Component) {
function ExportDataModal() {
var _this;
(0, _classCallCheck2["default"])(this, ExportDataModal);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, ExportDataModal, [].concat(args));
(0, _defineProperty2["default"])(_this, "_onSelectDataset", function (_ref) {
var value = _ref.target.value;
_this.props.applyCPUFilter(value);
_this.props.onChangeExportSelectedDataset(value);
});
return _this;
}
(0, _inherits2["default"])(ExportDataModal, _Component);
return (0, _createClass2["default"])(ExportDataModal, [{
key: "componentDidMount",
value: function componentDidMount() {
var toCPUFilter = this.props.selectedDataset || Object.keys(this.props.datasets);
this.props.applyCPUFilter(toCPUFilter);
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
_this$props$supported = _this$props.supportedDataTypes,
supportedDataTypes = _this$props$supported === void 0 ? _src.EXPORT_DATA_TYPE_OPTIONS : _this$props$supported,
datasets = _this$props.datasets,
selectedDataset = _this$props.selectedDataset,
dataType = _this$props.dataType,
filtered = _this$props.filtered,
onChangeExportDataType = _this$props.onChangeExportDataType,
onChangeExportFiltered = _this$props.onChangeExportFiltered,
intl = _this$props.intl;
var exportAllDatasets = selectedDataset ? !datasets[selectedDataset] : true;
var showTiledDatasetWarning = Object.keys(datasets).some(function (datasetId) {
return (datasets[datasetId].type === _src.DatasetType.VECTOR_TILE || datasets[datasetId].type === _src.DatasetType.RASTER_TILE || datasets[datasetId].type === _src.DatasetType.WMS_TILE) && (selectedDataset === datasetId || exportAllDatasets);
});
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledModalContent, {
className: "export-data-modal"
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.datasetTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.datasetSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement("select", {
value: selectedDataset,
onChange: this._onSelectDataset
}, [intl.formatMessage({
id: 'modal.exportData.allDatasets'
})].concat(Object.keys(datasets)).map(function (d) {
return /*#__PURE__*/_react["default"].createElement("option", {
key: d,
value: d
}, datasets[d] && datasets[d].label || d);
})))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.dataTypeTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.dataTypeSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, supportedDataTypes.map(function (op) {
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledType, {
key: op.id,
selected: dataType === op.id,
onClick: function onClick() {
return op.available && onChangeExportDataType(op.id);
}
}, /*#__PURE__*/_react["default"].createElement(_icons.FileType, {
ext: op.label,
height: "80px",
fontSize: "11px"
}), dataType === op.id && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null));
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.dataTypeTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.filterDataSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
className: "unfiltered-option",
selected: !filtered,
onClick: function onClick() {
return onChangeExportFiltered(false);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.unfilteredData'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-subtitle"
}, getDataRowCount(datasets, selectedDataset, false, intl)), !filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
className: "filtered-option",
selected: filtered,
onClick: function onClick() {
return onChangeExportFiltered(true);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.filteredData'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-subtitle"
}, getDataRowCount(datasets, selectedDataset, true, intl)), filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)))), showTiledDatasetWarning ? /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_components.StyledWarning, null, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.exportData.tiledDatasetWarning'
}))) : null));
}
}]);
}(_react.Component);
return (0, _reactIntl.injectIntl)(ExportDataModal);
};
var _default = exports["default"] = ExportDataModalFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3NyYyIsIl9zcmMyIiwiX2ljb25zIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfY29tcG9uZW50cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiZ2V0RGF0YVJvd0NvdW50IiwiZGF0YXNldHMiLCJzZWxlY3RlZERhdGFzZXQiLCJmaWx0ZXJlZCIsImludGwiLCJ1bmRlZmluZWQiLCJzZWxlY3RlZERhdGEiLCJmb3JtYXRNZXNzYWdlIiwiaWQiLCJmaWxlQ291bnQiLCJrZXlzIiwibGVuZ3RoIiwiZGF0YUNvbnRhaW5lciIsImZpbHRlcmVkSWR4Q1BVIiwicm93Q291bnQiLCJudW1Sb3dzIiwidG9Mb2NhbGVTdHJpbmciLCJFeHBvcnREYXRhTW9kYWxGYWN0b3J5IiwiRXhwb3J0RGF0YU1vZGFsIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5MiIsIl9yZWYiLCJ2YWx1ZSIsInRhcmdldCIsInByb3BzIiwiYXBwbHlDUFVGaWx0ZXIiLCJvbkNoYW5nZUV4cG9ydFNlbGVjdGVkRGF0YXNldCIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiY29tcG9uZW50RGlkTW91bnQiLCJ0b0NQVUZpbHRlciIsInJlbmRlciIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkc3VwcG9ydGVkIiwic3VwcG9ydGVkRGF0YVR5cGVzIiwiRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TIiwiZGF0YVR5cGUiLCJvbkNoYW5nZUV4cG9ydERhdGFUeXBlIiwib25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCIsImV4cG9ydEFsbERhdGFzZXRzIiwic2hvd1RpbGVkRGF0YXNldFdhcm5pbmciLCJzb21lIiwiZGF0YXNldElkIiwidHlwZSIsIkRhdGFzZXRUeXBlIiwiVkVDVE9SX1RJTEUiLCJSQVNURVJfVElMRSIsIldNU19USUxFIiwiY3JlYXRlRWxlbWVudCIsIlN0eWxlZE1vZGFsQ29udGVudCIsImNsYXNzTmFtZSIsIlN0eWxlZEV4cG9ydFNlY3Rpb24iLCJGb3JtYXR0ZWRNZXNzYWdlIiwib25DaGFuZ2UiLCJfb25TZWxlY3REYXRhc2V0IiwibWFwIiwiZCIsImxhYmVsIiwib3AiLCJTdHlsZWRUeXBlIiwic2VsZWN0ZWQiLCJvbkNsaWNrIiwiYXZhaWxhYmxlIiwiRmlsZVR5cGUiLCJleHQiLCJoZWlnaHQiLCJmb250U2l6ZSIsIkNoZWNrTWFyayIsIlN0eWxlZEZpbHRlcmVkT3B0aW9uIiwiU3R5bGVkV2FybmluZyIsIkNvbXBvbmVudCIsImluamVjdEludGwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvbW9kYWxzL2V4cG9ydC1kYXRhLW1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7aW5qZWN0SW50bCwgSW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcblxuaW1wb3J0IHtEYXRhc2V0VHlwZSwgRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge0ZpbGVUeXBlfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtcbiAgU3R5bGVkRXhwb3J0U2VjdGlvbixcbiAgU3R5bGVkRmlsdGVyZWRPcHRpb24sXG4gIFN0eWxlZE1vZGFsQ29udGVudCxcbiAgU3R5bGVkVHlwZSxcbiAgQ2hlY2tNYXJrXG59IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1N0eWxlZFdhcm5pbmd9IGZyb20gJy4vZXhwb3J0LW1hcC1tb2RhbC9jb21wb25lbnRzJztcblxuY29uc3QgZ2V0RGF0YVJvd0NvdW50ID0gKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIHNlbGVjdGVkRGF0YXNldDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmaWx0ZXJlZDogYm9vbGVhbixcbiAgaW50bDogSW50bFNoYXBlXG4pID0+IHtcbiAgaWYgKHNlbGVjdGVkRGF0YXNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkRGF0YSA9IGRhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF07XG4gIGlmICghc2VsZWN0ZWREYXRhKSB7XG4gICAgcmV0dXJuIGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgIHtpZDogJ21vZGFsLmV4cG9ydERhdGEuZmlsZUNvdW50J30sXG4gICAgICB7ZmlsZUNvdW50OiBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RofVxuICAgICk7XG4gIH1cbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSWR4Q1BVfSA9IHNlbGVjdGVkRGF0YTtcblxuICBpZiAoZmlsdGVyZWQgJiYgIWZpbHRlcmVkSWR4Q1BVKSB7XG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIGNvbnN0IHJvd0NvdW50ID0gZmlsdGVyZWQgPyBmaWx0ZXJlZElkeENQVT8ubGVuZ3RoIDogZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG5cbiAgcmV0dXJuIGludGwuZm9ybWF0TWVzc2FnZShcbiAgICB7aWQ6ICdtb2RhbC5leHBvcnREYXRhLnJvd0NvdW50J30sXG4gICAge3Jvd0NvdW50OiByb3dDb3VudD8udG9Mb2NhbGVTdHJpbmcoKX1cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGF0YU1vZGFsUHJvcHMge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIHNlbGVjdGVkRGF0YXNldD86IHN0cmluZztcbiAgZGF0YVR5cGU6IHN0cmluZztcbiAgZmlsdGVyZWQ6IGJvb2xlYW47XG4gIC8vIGNhbGxiYWNrc1xuICBhcHBseUNQVUZpbHRlcjogKGZpbHRlcjogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0OiAoZGF0YXNldDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNoYW5nZUV4cG9ydERhdGFUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNoYW5nZUV4cG9ydEZpbHRlcmVkOiAoaXNGaWx0ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgaW50bDogSW50bFNoYXBlO1xuICBzdXBwb3J0ZWREYXRhVHlwZXM6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlOiBib29sZWFuO1xuICB9W107XG59XG5cbmNvbnN0IEV4cG9ydERhdGFNb2RhbEZhY3RvcnkgPSAoKSA9PiB7XG4gIGNsYXNzIEV4cG9ydERhdGFNb2RhbCBleHRlbmRzIENvbXBvbmVudDxFeHBvcnREYXRhTW9kYWxQcm9wcz4ge1xuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgdG9DUFVGaWx0ZXIgPSB0aGlzLnByb3BzLnNlbGVjdGVkRGF0YXNldCB8fCBPYmplY3Qua2V5cyh0aGlzLnByb3BzLmRhdGFzZXRzKTtcbiAgICAgIHRoaXMucHJvcHMuYXBwbHlDUFVGaWx0ZXIodG9DUFVGaWx0ZXIpO1xuICAgIH1cblxuICAgIF9vblNlbGVjdERhdGFzZXQ6IFJlYWN0LkNoYW5nZUV2ZW50SGFuZGxlcjxIVE1MU2VsZWN0RWxlbWVudD4gPSAoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMuYXBwbHlDUFVGaWx0ZXIodmFsdWUpO1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZUV4cG9ydFNlbGVjdGVkRGF0YXNldCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3VwcG9ydGVkRGF0YVR5cGVzID0gRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TLFxuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgc2VsZWN0ZWREYXRhc2V0LFxuICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgZmlsdGVyZWQsXG4gICAgICAgIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUsXG4gICAgICAgIG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQsXG4gICAgICAgIGludGxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBleHBvcnRBbGxEYXRhc2V0cyA9IHNlbGVjdGVkRGF0YXNldCA/ICFkYXRhc2V0c1tzZWxlY3RlZERhdGFzZXRdIDogdHJ1ZTtcbiAgICAgIGNvbnN0IHNob3dUaWxlZERhdGFzZXRXYXJuaW5nID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLnNvbWUoZGF0YXNldElkID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZGF0YXNldHNbZGF0YXNldElkXS50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSB8fFxuICAgICAgICAgICAgZGF0YXNldHNbZGF0YXNldElkXS50eXBlID09PSBEYXRhc2V0VHlwZS5SQVNURVJfVElMRSB8fFxuICAgICAgICAgICAgZGF0YXNldHNbZGF0YXNldElkXS50eXBlID09PSBEYXRhc2V0VHlwZS5XTVNfVElMRSkgJiZcbiAgICAgICAgICAoc2VsZWN0ZWREYXRhc2V0ID09PSBkYXRhc2V0SWQgfHwgZXhwb3J0QWxsRGF0YXNldHMpXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1vZGFsQ29udGVudCBjbGFzc05hbWU9XCJleHBvcnQtZGF0YS1tb2RhbFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhc2V0VGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhc2V0U3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtzZWxlY3RlZERhdGFzZXR9IG9uQ2hhbmdlPXt0aGlzLl9vblNlbGVjdERhdGFzZXR9PlxuICAgICAgICAgICAgICAgICAge1tpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnbW9kYWwuZXhwb3J0RGF0YS5hbGxEYXRhc2V0cyd9KV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyhkYXRhc2V0cykpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2R9IHZhbHVlPXtkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsoZGF0YXNldHNbZF0gJiYgZGF0YXNldHNbZF0ubGFiZWwpIHx8IGR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFUeXBlVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhVHlwZVN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAge3N1cHBvcnRlZERhdGFUeXBlcy5tYXAob3AgPT4gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFR5cGVcbiAgICAgICAgICAgICAgICAgICAga2V5PXtvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGFUeXBlID09PSBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3AuYXZhaWxhYmxlICYmIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUob3AuaWQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RmlsZVR5cGUgZXh0PXtvcC5sYWJlbH0gaGVpZ2h0PVwiODBweFwiIGZvbnRTaXplPVwiMTFweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIHtkYXRhVHlwZSA9PT0gb3AuaWQgJiYgPENoZWNrTWFyayAvPn1cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkVHlwZT5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhVHlwZVRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZmlsdGVyRGF0YVN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEZpbHRlcmVkT3B0aW9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ1bmZpbHRlcmVkLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17IWZpbHRlcmVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZChmYWxzZSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItb3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS51bmZpbHRlcmVkRGF0YSd9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIGZhbHNlLCBpbnRsKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgeyFmaWx0ZXJlZCAmJiA8Q2hlY2tNYXJrIC8+fVxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRmlsdGVyZWRPcHRpb24+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEZpbHRlcmVkT3B0aW9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWx0ZXJlZC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbHRlcmVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCh0cnVlKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1vcHRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmZpbHRlcmVkRGF0YSd9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIHRydWUsIGludGwpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWQgJiYgPENoZWNrTWFyayAvPn1cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEZpbHRlcmVkT3B0aW9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgIHtzaG93VGlsZWREYXRhc2V0V2FybmluZyA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRXYXJuaW5nPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLnRpbGVkRGF0YXNldFdhcm5pbmcnfSAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkV2FybmluZz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TdHlsZWRNb2RhbENvbnRlbnQ+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmplY3RJbnRsKEV4cG9ydERhdGFNb2RhbCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBv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