kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
249 lines (201 loc) • 29.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.DatasetTabs = exports.DatasetModalTab = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _datasetLabel = _interopRequireDefault(require("../common/dataset-label"));
var _dataTable = _interopRequireDefault(require("../common/data-table"));
var _reselect = require("reselect");
var _cellSize = require("../common/data-table/cell-size");
var _canvas = _interopRequireDefault(require("../common/data-table/canvas"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var dgSettings = {
sidePadding: '38px',
verticalPadding: '16px',
height: '36px'
};
var StyledModal = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 70vh;\n overflow: hidden;\n display: flex;\n"])));
var DatasetCatalog = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: ", " ", " 0;\n"])), dgSettings.verticalPadding, dgSettings.sidePadding);
var DatasetModalTab = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n border-bottom: 3px solid ", ";\n cursor: pointer;\n display: flex;\n height: 35px;\n margin: 0 3px;\n padding: 0 5px;\n\n :first-child {\n margin-left: 0;\n padding-left: 0;\n }\n"])), function (props) {
return props.active ? 'black' : 'transparent';
});
exports.DatasetModalTab = DatasetModalTab;
var DatasetTabsUnmemoized = function DatasetTabsUnmemoized(_ref) {
var activeDataset = _ref.activeDataset,
datasets = _ref.datasets,
showDatasetTable = _ref.showDatasetTable;
return /*#__PURE__*/_react["default"].createElement(DatasetCatalog, {
className: "dataset-modal-catalog"
}, Object.values(datasets).map(function (dataset) {
return /*#__PURE__*/_react["default"].createElement(DatasetModalTab, {
className: "dataset-modal-tab",
active: dataset === activeDataset,
key: dataset.id,
onClick: function onClick() {
return showDatasetTable(dataset.id);
}
}, /*#__PURE__*/_react["default"].createElement(_datasetLabel["default"], {
dataset: dataset
}));
}));
};
var DatasetTabs = /*#__PURE__*/_react["default"].memo(DatasetTabsUnmemoized);
exports.DatasetTabs = DatasetTabs;
DatasetTabs.displayName = 'DatasetTabs';
DataTableModalFactory.deps = [_dataTable["default"]];
var TableContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 100%;\n max-height: 100%;\n"])));
function DataTableModalFactory(DataTable) {
var DataTableModal = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(DataTableModal, _React$Component);
var _super = _createSuper(DataTableModal);
function DataTableModal() {
var _this;
(0, _classCallCheck2["default"])(this, DataTableModal);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "datasetCellSizeCache", {});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dataId", function (props) {
return props.dataId;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "datasets", function (props) {
return props.datasets;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "fields", function (props) {
return (props.datasets[props.dataId] || {}).fields;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "columns", (0, _reselect.createSelector)(_this.fields, function (fields) {
return fields.map(function (f) {
return f.name;
});
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "colMeta", (0, _reselect.createSelector)(_this.fields, function (fields) {
return fields.reduce(function (acc, _ref2) {
var name = _ref2.name,
displayName = _ref2.displayName,
type = _ref2.type;
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, name, {
name: displayName || name,
type: type
}));
}, {});
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "cellSizeCache", (0, _reselect.createSelector)(_this.dataId, _this.datasets, function (dataId, datasets) {
if (!datasets[dataId]) {
return {};
}
var _datasets$dataId = datasets[dataId],
fields = _datasets$dataId.fields,
dataContainer = _datasets$dataId.dataContainer;
var showCalculate = null;
if (!_this.datasetCellSizeCache[dataId]) {
showCalculate = true;
} else if (_this.datasetCellSizeCache[dataId].fields !== fields || _this.datasetCellSizeCache[dataId].dataContainer !== dataContainer) {
showCalculate = true;
}
if (!showCalculate) {
return _this.datasetCellSizeCache[dataId].cellSizeCache;
}
var cellSizeCache = fields.reduce(function (acc, field, colIdx) {
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, field.name, (0, _cellSize.renderedSize)({
text: {
dataContainer: dataContainer,
column: field.name
},
colIdx: colIdx,
type: field.type,
fontSize: _this.props.theme.cellFontSize,
font: _this.props.theme.fontFamily
})));
}, {}); // save it to cache
_this.datasetCellSizeCache[dataId] = {
cellSizeCache: cellSizeCache,
fields: fields,
dataContainer: dataContainer
};
return cellSizeCache;
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "copyTableColumn", function (column) {
var _this$props = _this.props,
dataId = _this$props.dataId,
copyTableColumn = _this$props.copyTableColumn;
copyTableColumn(dataId, column);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "pinTableColumn", function (column) {
var _this$props2 = _this.props,
dataId = _this$props2.dataId,
pinTableColumn = _this$props2.pinTableColumn;
pinTableColumn(dataId, column);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "sortTableColumn", function (column, mode) {
var _this$props3 = _this.props,
dataId = _this$props3.dataId,
sortTableColumn = _this$props3.sortTableColumn;
sortTableColumn(dataId, column, mode);
});
return _this;
}
(0, _createClass2["default"])(DataTableModal, [{
key: "render",
value: function render() {
var _this$props4 = this.props,
datasets = _this$props4.datasets,
dataId = _this$props4.dataId,
showDatasetTable = _this$props4.showDatasetTable,
showTab = _this$props4.showTab;
if (!datasets || !dataId) {
return null;
}
var activeDataset = datasets[dataId];
var columns = this.columns(this.props);
var colMeta = this.colMeta(this.props);
var cellSizeCache = this.cellSizeCache(this.props);
return /*#__PURE__*/_react["default"].createElement(StyledModal, {
className: "dataset-modal",
id: "dataset-modal"
}, /*#__PURE__*/_react["default"].createElement(_canvas["default"], null), /*#__PURE__*/_react["default"].createElement(TableContainer, null, showTab ? /*#__PURE__*/_react["default"].createElement(DatasetTabs, {
activeDataset: activeDataset,
datasets: datasets,
showDatasetTable: showDatasetTable
}) : null, datasets[dataId] ? /*#__PURE__*/_react["default"].createElement(DataTable, {
key: dataId,
columns: columns,
colMeta: colMeta,
cellSizeCache: cellSizeCache,
dataContainer: activeDataset.dataContainer,
pinnedColumns: activeDataset.pinnedColumns,
sortOrder: activeDataset.sortOrder,
sortColumn: activeDataset.sortColumn,
copyTableColumn: this.copyTableColumn,
pinTableColumn: this.pinTableColumn,
sortTableColumn: this.sortTableColumn
}) : null));
}
}]);
return DataTableModal;
}(_react["default"].Component);
DataTableModal.defaultProps = {
showTab: true
};
return (0, _styledComponents.withTheme)(DataTableModal);
}
var _default = DataTableModalFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9kYXRhLXRhYmxlLW1vZGFsLmpzIl0sIm5hbWVzIjpbImRnU2V0dGluZ3MiLCJzaWRlUGFkZGluZyIsInZlcnRpY2FsUGFkZGluZyIsImhlaWdodCIsIlN0eWxlZE1vZGFsIiwic3R5bGVkIiwiZGl2IiwiRGF0YXNldENhdGFsb2ciLCJEYXRhc2V0TW9kYWxUYWIiLCJwcm9wcyIsImFjdGl2ZSIsIkRhdGFzZXRUYWJzVW5tZW1vaXplZCIsImFjdGl2ZURhdGFzZXQiLCJkYXRhc2V0cyIsInNob3dEYXRhc2V0VGFibGUiLCJPYmplY3QiLCJ2YWx1ZXMiLCJtYXAiLCJkYXRhc2V0IiwiaWQiLCJEYXRhc2V0VGFicyIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiRGF0YVRhYmxlTW9kYWxGYWN0b3J5IiwiZGVwcyIsIkRhdGFUYWJsZUZhY3RvcnkiLCJUYWJsZUNvbnRhaW5lciIsIkRhdGFUYWJsZSIsIkRhdGFUYWJsZU1vZGFsIiwiZGF0YUlkIiwiZmllbGRzIiwiZiIsIm5hbWUiLCJyZWR1Y2UiLCJhY2MiLCJ0eXBlIiwiZGF0YUNvbnRhaW5lciIsInNob3dDYWxjdWxhdGUiLCJkYXRhc2V0Q2VsbFNpemVDYWNoZSIsImNlbGxTaXplQ2FjaGUiLCJmaWVsZCIsImNvbElkeCIsInRleHQiLCJjb2x1bW4iLCJmb250U2l6ZSIsInRoZW1lIiwiY2VsbEZvbnRTaXplIiwiZm9udCIsImZvbnRGYW1pbHkiLCJjb3B5VGFibGVDb2x1bW4iLCJwaW5UYWJsZUNvbHVtbiIsIm1vZGUiLCJzb3J0VGFibGVDb2x1bW4iLCJzaG93VGFiIiwiY29sdW1ucyIsImNvbE1ldGEiLCJwaW5uZWRDb2x1bW5zIiwic29ydE9yZGVyIiwic29ydENvbHVtbiIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNB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QUFBLEdBQUcsRUFBRUEsTUFEUDtBQUVFLFVBQUEsT0FBTyxFQUFFeUIsT0FGWDtBQUdFLFVBQUEsT0FBTyxFQUFFQyxPQUhYO0FBSUUsVUFBQSxhQUFhLEVBQUVoQixhQUpqQjtBQUtFLFVBQUEsYUFBYSxFQUFFNUIsYUFBYSxDQUFDeUIsYUFML0I7QUFNRSxVQUFBLGFBQWEsRUFBRXpCLGFBQWEsQ0FBQzZDLGFBTi9CO0FBT0UsVUFBQSxTQUFTLEVBQUU3QyxhQUFhLENBQUM4QyxTQVAzQjtBQVFFLFVBQUEsVUFBVSxFQUFFOUMsYUFBYSxDQUFDK0MsVUFSNUI7QUFTRSxVQUFBLGVBQWUsRUFBRSxLQUFLVCxlQVR4QjtBQVVFLFVBQUEsY0FBYyxFQUFFLEtBQUtDLGNBVnZCO0FBV0UsVUFBQSxlQUFlLEVBQUUsS0FBS0U7QUFYeEIsVUFERCxHQWNHLElBdEJOLENBRkYsQ0FERjtBQTZCRDtBQXZIcUM7QUFBQTtBQUFBLElBQ1hoQyxrQkFBTXVDLFNBREs7O0FBeUh4Qy9CLEVBQUFBLGNBQWMsQ0FBQ2dDLFlBQWYsR0FBOEI7QUFDNUJQLElBQUFBLE9BQU8sRUFBRTtBQURtQixHQUE5QjtBQUdBLFNBQU8saUNBQVV6QixjQUFWLENBQVA7QUFDRDs7ZUFFY0wscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjEgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IERhdGFzZXRMYWJlbCBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9kYXRhc2V0LWxhYmVsJztcbmltcG9ydCBEYXRhVGFibGVGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2RhdGEtdGFibGUnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtyZW5kZXJlZFNpemV9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2RhdGEtdGFibGUvY2VsbC1zaXplJztcbmltcG9ydCBDYW52YXNIYWNrIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2RhdGEtdGFibGUvY2FudmFzJztcblxuY29uc3QgZGdTZXR0aW5ncyA9IHtcbiAgc2lkZVBhZGRpbmc6ICczOHB4JyxcbiAgdmVydGljYWxQYWRkaW5nOiAnMTZweCcsXG4gIGhlaWdodDogJzM2cHgnXG59O1xuXG5jb25zdCBTdHlsZWRNb2RhbCA9IHN0eWxlZC5kaXZgXG4gIG1pbi1oZWlnaHQ6IDcwdmg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IGZsZXg7XG5gO1xuXG5jb25zdCBEYXRhc2V0Q2F0YWxvZyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6ICR7ZGdTZXR0aW5ncy52ZXJ0aWNhbFBhZGRpbmd9ICR7ZGdTZXR0aW5ncy5zaWRlUGFkZGluZ30gMDtcbmA7XG5cbmV4cG9ydCBjb25zdCBEYXRhc2V0TW9kYWxUYWIgPSBzdHlsZWQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAzcHggc29saWQgJHtwcm9wcyA9PiAocHJvcHMuYWN0aXZlID8gJ2JsYWNrJyA6ICd0cmFuc3BhcmVudCcpfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDM1cHg7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHBhZGRpbmc6IDAgNXB4O1xuXG4gIDpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG5gO1xuXG5jb25zdCBEYXRhc2V0VGFic1VubWVtb2l6ZWQgPSAoe2FjdGl2ZURhdGFzZXQsIGRhdGFzZXRzLCBzaG93RGF0YXNldFRhYmxlfSkgPT4gKFxuICA8RGF0YXNldENhdGFsb2cgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbC1jYXRhbG9nXCI+XG4gICAge09iamVjdC52YWx1ZXMoZGF0YXNldHMpLm1hcChkYXRhc2V0ID0+IChcbiAgICAgIDxEYXRhc2V0TW9kYWxUYWJcbiAgICAgICAgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbC10YWJcIlxuICAgICAgICBhY3RpdmU9e2RhdGFzZXQgPT09IGFjdGl2ZURhdGFzZXR9XG4gICAgICAgIGtleT17ZGF0YXNldC5pZH1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2hvd0RhdGFzZXRUYWJsZShkYXRhc2V0LmlkKX1cbiAgICAgID5cbiAgICAgICAgPERhdGFzZXRMYWJlbCBkYXRhc2V0PXtkYXRhc2V0fSAvPlxuICAgICAgPC9EYXRhc2V0TW9kYWxUYWI+XG4gICAgKSl9XG4gIDwvRGF0YXNldENhdGFsb2c+XG4pO1xuXG5leHBvcnQgY29uc3QgRGF0YXNldFRhYnMgPSBSZWFjdC5tZW1vKERhdGFzZXRUYWJzVW5tZW1vaXplZCk7XG5cbkRhdGFzZXRUYWJzLmRpc3BsYXlOYW1lID0gJ0RhdGFzZXRUYWJzJztcblxuRGF0YVRhYmxlTW9kYWxGYWN0b3J5LmRlcHMgPSBbRGF0YVRhYmxlRmFjdG9yeV07XG5cbmNvbnN0IFRhYmxlQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuYDtcblxuZnVuY3Rpb24gRGF0YVRhYmxlTW9kYWxGYWN0b3J5KERhdGFUYWJsZSkge1xuICBjbGFzcyBEYXRhVGFibGVNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgZGF0YXNldENlbGxTaXplQ2FjaGUgPSB7fTtcbiAgICBkYXRhSWQgPSBwcm9wcyA9PiBwcm9wcy5kYXRhSWQ7XG4gICAgZGF0YXNldHMgPSBwcm9wcyA9PiBwcm9wcy5kYXRhc2V0cztcbiAgICBmaWVsZHMgPSBwcm9wcyA9PiAocHJvcHMuZGF0YXNldHNbcHJvcHMuZGF0YUlkXSB8fCB7fSkuZmllbGRzO1xuICAgIGNvbHVtbnMgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpZWxkcywgZmllbGRzID0+IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgICBjb2xNZXRhID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWVsZHMsIGZpZWxkcyA9PlxuICAgICAgZmllbGRzLnJlZHVjZShcbiAgICAgICAgKGFjYywge25hbWUsIGRpc3BsYXlOYW1lLCB0eXBlfSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICBuYW1lOiBkaXNwbGF5TmFtZSB8fCBuYW1lLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgKTtcblxuICAgIGNlbGxTaXplQ2FjaGUgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmRhdGFJZCwgdGhpcy5kYXRhc2V0cywgKGRhdGFJZCwgZGF0YXNldHMpID0+IHtcbiAgICAgIGlmICghZGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCB7ZmllbGRzLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgICAgIGxldCBzaG93Q2FsY3VsYXRlID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdKSB7XG4gICAgICAgIHNob3dDYWxjdWxhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdLmZpZWxkcyAhPT0gZmllbGRzIHx8XG4gICAgICAgIHRoaXMuZGF0YXNldENlbGxTaXplQ2FjaGVbZGF0YUlkXS5kYXRhQ29udGFpbmVyICE9PSBkYXRhQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgc2hvd0NhbGN1bGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvd0NhbGN1bGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdLmNlbGxTaXplQ2FjaGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxTaXplQ2FjaGUgPSBmaWVsZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBmaWVsZCwgY29sSWR4KSA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbZmllbGQubmFtZV06IHJlbmRlcmVkU2l6ZSh7XG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgICAgICAgIGNvbHVtbjogZmllbGQubmFtZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbElkeCxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBmb250U2l6ZTogdGhpcy5wcm9wcy50aGVtZS5jZWxsRm9udFNpemUsXG4gICAgICAgICAgICBmb250OiB0aGlzLnByb3BzLnRoZW1lLmZvbnRGYW1pbHlcbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG4gICAgICAvLyBzYXZlIGl0IHRvIGNhY2hlXG4gICAgICB0aGlzLmRhdGFzZXRDZWxsU2l6ZUNhY2hlW2RhdGFJZF0gPSB7XG4gICAgICAgIGNlbGxTaXplQ2FjaGUsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgfTtcbiAgICAgIHJldHVybiBjZWxsU2l6ZUNhY2hlO1xuICAgIH0pO1xuXG4gICAgY29weVRhYmxlQ29sdW1uID0gY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IHtkYXRhSWQsIGNvcHlUYWJsZUNvbHVtbn0gPSB0aGlzLnByb3BzO1xuICAgICAgY29weVRhYmxlQ29sdW1uKGRhdGFJZCwgY29sdW1uKTtcbiAgICB9O1xuXG4gICAgcGluVGFibGVDb2x1bW4gPSBjb2x1bW4gPT4ge1xuICAgICAgY29uc3Qge2RhdGFJZCwgcGluVGFibGVDb2x1bW59ID0gdGhpcy5wcm9wcztcbiAgICAgIHBpblRhYmxlQ29sdW1uKGRhdGFJZCwgY29sdW1uKTtcbiAgICB9O1xuXG4gICAgc29ydFRhYmxlQ29sdW1uID0gKGNvbHVtbiwgbW9kZSkgPT4ge1xuICAgICAgY29uc3Qge2RhdGFJZCwgc29ydFRhYmxlQ29sdW1ufSA9IHRoaXMucHJvcHM7XG4gICAgICBzb3J0VGFibGVDb2x1bW4oZGF0YUlkLCBjb2x1bW4sIG1vZGUpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7ZGF0YXNldHMsIGRhdGFJZCwgc2hvd0RhdGFzZXRUYWJsZSwgc2hvd1RhYn0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFkYXRhc2V0cyB8fCAhZGF0YUlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aXZlRGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgY29sTWV0YSA9IHRoaXMuY29sTWV0YSh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGNlbGxTaXplQ2FjaGUgPSB0aGlzLmNlbGxTaXplQ2FjaGUodGhpcy5wcm9wcyk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRNb2RhbCBjbGFzc05hbWU9XCJkYXRhc2V0LW1vZGFsXCIgaWQ9XCJkYXRhc2V0LW1vZGFsXCI+XG4gICAgICAgICAgPENhbnZhc0hhY2sgLz5cbiAgICAgICAgICA8VGFibGVDb250YWluZXI+XG4gICAgICAgICAgICB7c2hvd1RhYiA/IChcbiAgICAgICAgICAgICAgPERhdGFzZXRUYWJzXG4gICAgICAgICAgICAgICAgYWN0aXZlRGF0YXNldD17YWN0aXZlRGF0YXNldH1cbiAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge2RhdGFzZXRzW2RhdGFJZF0gPyAoXG4gICAgICAgICAgICAgIDxEYXRhVGFibGVcbiAgICAgICAgICAgICAgICBrZXk9e2RhdGFJZH1cbiAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgIGNvbE1ldGE9e2NvbE1ldGF9XG4gICAgICAgICAgICAgICAgY2VsbFNpemVDYWNoZT17Y2VsbFNpemVDYWNoZX1cbiAgICAgICAgICAgICAgICBkYXRhQ29udGFpbmVyPXthY3RpdmVEYXRhc2V0LmRhdGFDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgcGlubmVkQ29sdW1ucz17YWN0aXZlRGF0YXNldC5waW5uZWRDb2x1bW5zfVxuICAgICAgICAgICAgICAgIHNvcnRPcmRlcj17YWN0aXZlRGF0YXNldC5zb3J0T3JkZXJ9XG4gICAgICAgICAgICAgICAgc29ydENvbHVtbj17YWN0aXZlRGF0YXNldC5zb3J0Q29sdW1ufVxuICAgICAgICAgICAgICAgIGNvcHlUYWJsZUNvbHVtbj17dGhpcy5jb3B5VGFibGVDb2x1bW59XG4gICAgICAgICAgICAgICAgcGluVGFibGVDb2x1bW49e3RoaXMucGluVGFibGVDb2x1bW59XG4gICAgICAgICAgICAgICAgc29ydFRhYmxlQ29sdW1uPXt0aGlzLnNvcnRUYWJsZUNvbHVtbn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVGFibGVDb250YWluZXI+XG4gICAgICAgIDwvU3R5bGVkTW9kYWw+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICBEYXRhVGFibGVNb2RhbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc2hvd1RhYjogdHJ1ZVxuICB9O1xuICByZXR1cm4gd2l0aFRoZW1lKERhdGFUYWJsZU1vZGFsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF0YVRhYmxlTW9kYWxGYWN0b3J5O1xuIl19