kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
258 lines (202 loc) • 25.6 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
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 _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
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"));
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 _templateObject4() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 70vh;\n max-height: 70vh;\n"]);
_templateObject4 = function _templateObject4() {
return data;
};
return data;
}
function _templateObject3() {
var data = (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"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: ", " ", " 0;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 70vh;\n overflow: hidden;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var dgSettings = {
sidePadding: '38px',
verticalPadding: '16px',
height: '36px'
};
var StyledModal = _styledComponents["default"].div(_templateObject());
var DatasetCatalog = _styledComponents["default"].div(_templateObject2(), dgSettings.verticalPadding, dgSettings.sidePadding);
var DatasetModalTab = _styledComponents["default"].div(_templateObject3(), function (props) {
return props.active ? 'black' : 'transparent';
});
exports.DatasetModalTab = DatasetModalTab;
var DatasetTabs = _react["default"].memo(function (_ref) {
var activeDataset = _ref.activeDataset,
datasets = _ref.datasets,
showDatasetTable = _ref.showDatasetTable;
return _react["default"].createElement(DatasetCatalog, {
className: "dataset-modal-catalog"
}, Object.values(datasets).map(function (dataset) {
return _react["default"].createElement(DatasetModalTab, {
className: "dataset-modal-tab",
active: dataset === activeDataset,
key: dataset.id,
onClick: function onClick() {
return showDatasetTable(dataset.id);
}
}, _react["default"].createElement(_datasetLabel["default"], {
dataset: dataset
}));
}));
});
exports.DatasetTabs = DatasetTabs;
DatasetTabs.displayName = 'DatasetTabs';
DataTableModalFactory.deps = [_dataTable["default"]];
var TableContainer = _styledComponents["default"].div(_templateObject4());
function DataTableModalFactory(DataTable) {
var DataTableModal =
/*#__PURE__*/
function (_React$Component) {
(0, _inherits2["default"])(DataTableModal, _React$Component);
function DataTableModal() {
var _getPrototypeOf2;
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 = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(DataTableModal)).call.apply(_getPrototypeOf2, [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,
type = _ref2.type;
return _objectSpread({}, acc, (0, _defineProperty2["default"])({}, name, type));
}, {});
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "cellSizeCache", (0, _reselect.createSelector)(_this.dataId, _this.datasets, function (dataId, datasets) {
if (!_this.props.datasets[dataId]) {
return {};
}
var _this$props$datasets$ = _this.props.datasets[dataId],
fields = _this$props$datasets$.fields,
allData = _this$props$datasets$.allData;
var showCalculate = null;
if (!_this.datasetCellSizeCache[dataId]) {
showCalculate = true;
} else if (_this.datasetCellSizeCache[dataId].fields !== fields || _this.datasetCellSizeCache[dataId].allData !== allData) {
showCalculate = true;
}
if (!showCalculate) {
return _this.datasetCellSizeCache[dataId].cellSizeCache;
}
var cellSizeCache = fields.reduce(function (acc, field, colIdx) {
return _objectSpread({}, acc, (0, _defineProperty2["default"])({}, field.name, (0, _cellSize.renderedSize)({
text: {
rows: allData,
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,
allData: allData
};
return cellSizeCache;
}));
return _this;
}
(0, _createClass2["default"])(DataTableModal, [{
key: "render",
value: function render() {
var _this$props = this.props,
datasets = _this$props.datasets,
dataId = _this$props.dataId,
showDatasetTable = _this$props.showDatasetTable;
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 _react["default"].createElement(StyledModal, {
className: "dataset-modal",
id: "dataset-modal"
}, _react["default"].createElement(_canvas["default"], null), _react["default"].createElement(TableContainer, null, _react["default"].createElement(DatasetTabs, {
activeDataset: activeDataset,
datasets: datasets,
showDatasetTable: showDatasetTable
}), datasets[dataId] ? _react["default"].createElement(DataTable, {
key: dataId,
dataId: dataId,
columns: columns,
colMeta: colMeta,
cellSizeCache: cellSizeCache,
rows: activeDataset.allData,
pinnedColumns: activeDataset.pinnedColumns,
sortOrder: activeDataset.sortOrder,
sortColumn: activeDataset.sortColumn,
copyTableColumn: this.props.copyTableColumn,
pinTableColumn: this.props.pinTableColumn,
sortTableColumn: this.props.sortTableColumn
}) : null));
}
}]);
return DataTableModal;
}(_react["default"].Component);
return (0, _styledComponents.withTheme)(DataTableModal);
}
var _default = DataTableModalFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9kYXRhLXRhYmxlLW1vZGFsLmpzIl0sIm5hbWVzIjpbImRnU2V0dGluZ3MiLCJzaWRlUGFkZGluZyIsInZlcnRpY2FsUGFkZGluZyIsImhlaWdodCIsIlN0eWxlZE1vZGFsIiwic3R5bGVkIiwiZGl2IiwiRGF0YXNldENhdGFsb2ciLCJEYXRhc2V0TW9kYWxUYWIiLCJwcm9wcyIsImFjdGl2ZSIsIkRhdGFzZXRUYWJzIiwiUmVhY3QiLCJtZW1vIiwiYWN0aXZlRGF0YXNldCIsImRhdGFzZXRzIiwic2hvd0RhdGFzZXRUYWJsZSIsIk9iamVjdCIsInZhbHVlcyIsIm1hcCIsImRhdGFzZXQiLCJpZCIsImRpc3BsYXlOYW1lIiwiRGF0YVRhYmxlTW9kYWxGYWN0b3J5IiwiZGVwcyIsIkRhdGFUYWJsZUZhY3RvcnkiLCJUYWJsZUNvbnRhaW5lciIsIkRhdGFUYWJsZSIsIkRhdGFUYWJsZU1vZGFsIiwiZGF0YUlkIiwiZmllbGRzIiwiZiIsIm5hbWUiLCJyZWR1Y2UiLCJhY2MiLCJ0eXBlIiwiYWxsRGF0YSIsInNob3dDYWxjdWxhdGUiLCJkYXRhc2V0Q2VsbFNpemVDYWNoZSIsImNlbGxTaXplQ2FjaGUiLCJmaWVsZCIsImNvbElkeCIsInRleHQiLCJyb3dzIiwiY29sdW1uIiwiZm9udFNpemUiLCJ0aGVtZSIsImNlbGxGb250U2l6ZSIsImZvbnQiLCJmb250RmFtaWx5IiwiY29sdW1ucyIsImNvbE1ldGEiLCJwaW5uZWRDb2x1bW5zIiwic29ydE9yZGVyIiwic29ydENvbHVtbiIsImNvcHlUYWJsZUNvbHVtbiIsInBpblRhYmxlQ29sdW1uIiwic29ydFRhYmxlQ29sdW1uIiwiQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLFdBQVcsRUFBRSxNQURJO0FBRWpCQyxFQUFBQSxlQUFlLEVBQUUsTUFGQTtBQUdqQkMsRUFBQUEsTUFBTSxFQUFFO0FBSFMsQ0FBbkI7O0FBTUEsSUFBTUMsV0FBVyxHQUFHQyw2QkFBT0MsR0FBVixtQkFBakI7O0FBS0EsSUFBTUMsY0FBYyxHQUFHRiw2QkFBT0MsR0FBVixxQkFFUE4sVUFBVSxDQUFDRSxlQUZKLEVBRXVCRixVQUFVLENBQUNDLFdBRmxDLENBQXBCOztBQUtPLElBQU1PLGVBQWUsR0FBR0gsNkJBQU9DLEdBQVYscUJBRUMsVUFBQUcsS0FBSztBQUFBLFNBQUtBLEtBQUssQ0FBQ0MsTUFBTixHQUFlLE9BQWYsR0FBeUIsYUFBOUI7QUFBQSxDQUZOLENBQXJCOzs7O0FBZUEsSUFBTUMsV0FBVyxHQUFHQyxrQkFBTUMsSUFBTixDQUFXO0FBQUEsTUFBRUMsYUFBRixRQUFFQSxhQUFGO0FBQUEsTUFBaUJDLFFBQWpCLFFBQWlCQSxRQUFqQjtBQUFBLE1BQTJCQyxnQkFBM0IsUUFBMkJBLGdCQUEzQjtBQUFBLFNBQ3BDLGdDQUFDLGNBQUQ7QUFBZ0IsSUFBQSxTQUFTLEVBQUM7QUFBMUIsS0FDR0MsTUFBTSxDQUFDQyxNQUFQLENBQWNILFFBQWQsRUFBd0JJLEdBQXhCLENBQTRCLFVBQUFDLE9BQU87QUFBQSxXQUNsQyxnQ0FBQyxlQUFEO0FBQ0UsTUFBQSxTQUFTLEVBQUMsbUJBRFo7QUFFRSxNQUFBLE1BQU0sRUFBRUEsT0FBTyxLQUFLTixhQUZ0QjtBQUdFLE1BQUEsR0FBRyxFQUFFTSxPQUFPLENBQUNDLEVBSGY7QUFJRSxNQUFBLE9BQU8sRUFBRTtBQUFBLGVBQU1MLGdCQUFnQixDQUFDSSxPQUFPLENBQUNDLEVBQVQsQ0FBdEI7QUFBQTtBQUpYLE9BTUUsZ0NBQUMsd0JBQUQ7QUFBYyxNQUFBLE9BQU8sRUFBRUQ7QUFBdkIsTUFORixDQURrQztBQUFBLEdBQW5DLENBREgsQ0FEb0M7QUFBQSxDQUFYLENBQXBCOzs7QUFlUFQsV0FBVyxDQUFDVyxXQUFaLEdBQTBCLGFBQTFCO0FBRUFDLHFCQUFxQixDQUFDQyxJQUF0QixHQUE2QixDQUFDQyxxQkFBRCxDQUE3Qjs7QUFFQSxJQUFNQyxjQUFjLEdBQUdyQiw2QkFBT0MsR0FBVixvQkFBcEI7O0FBUUEsU0FBU2lCLHFCQUFULENBQStCSSxTQUEvQixFQUEwQztBQUFBLE1BQ2xDQyxjQURrQztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLCtHQUVmLEVBRmU7QUFBQSxpR0FHN0IsVUFBQW5CLEtBQUs7QUFBQSxlQUFJQSxLQUFLLENBQUNvQixNQUFWO0FBQUEsT0FId0I7QUFBQSxtR0FJM0IsVUFBQXBCLEtBQUs7QUFBQSxlQUFJQSxLQUFLLENBQUNNLFFBQVY7QUFBQSxPQUpzQjtBQUFBLGlHQUs3QixVQUFBTixLQUFLO0FBQUEsZUFBSSxDQUFDQSxLQUFLLENBQUNNLFFBQU4sQ0FBZU4sS0FBSyxDQUFDb0IsTUFBckIsS0FBZ0MsRUFBakMsRUFBcUNDLE1BQXpDO0FBQUEsT0FMd0I7QUFBQSxrR0FNNUIsOEJBQWUsTUFBS0EsTUFBcEIsRUFBNEIsVUFBQUEsTUFBTTtBQUFBLGVBQUlBLE1BQU0sQ0FBQ1gsR0FBUCxDQUFXLFVBQUFZLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDQyxJQUFOO0FBQUEsU0FBWixDQUFKO0FBQUEsT0FBbEMsQ0FONEI7QUFBQSxrR0FPNUIsOEJBQWUsTUFBS0YsTUFBcEIsRUFBNEIsVUFBQUEsTUFBTTtBQUFBLGVBQzFDQSxNQUFNLENBQUNHLE1BQVAsQ0FDRSxVQUFDQyxHQUFEO0FBQUEsY0FBT0YsSUFBUCxTQUFPQSxJQUFQO0FBQUEsY0FBYUcsSUFBYixTQUFhQSxJQUFiO0FBQUEsbUNBQ0tELEdBREwsdUNBRUdGLElBRkgsRUFFVUcsSUFGVjtBQUFBLFNBREYsRUFLRSxFQUxGLENBRDBDO0FBQUEsT0FBbEMsQ0FQNEI7QUFBQSx3R0FnQnRCLDhCQUFlLE1BQUtOLE1BQXBCLEVBQTRCLE1BQUtkLFFBQWpDLEVBQTJDLFVBQUNjLE1BQUQsRUFBU2QsUUFBVCxFQUFzQjtBQUMvRSxZQUFJLENBQUMsTUFBS04sS0FBTCxDQUFXTSxRQUFYLENBQW9CYyxNQUFwQixDQUFMLEVBQWtDO0FBQ2hDLGlCQUFPLEVBQVA7QUFDRDs7QUFIOEUsb0NBSXJELE1BQUtwQixLQUFMLENBQVdNLFFBQVgsQ0FBb0JjLE1BQXBCLENBSnFEO0FBQUEsWUFJeEVDLE1BSndFLHlCQUl4RUEsTUFKd0U7QUFBQSxZQUloRU0sT0FKZ0UseUJBSWhFQSxPQUpnRTtBQU0vRSxZQUFJQyxhQUFhLEdBQUcsSUFBcEI7O0FBQ0EsWUFBSSxDQUFDLE1BQUtDLG9CQUFMLENBQTBCVCxNQUExQixDQUFMLEVBQXdDO0FBQ3RDUSxVQUFBQSxhQUFhLEdBQUcsSUFBaEI7QUFDRCxTQUZELE1BRU8sSUFDTCxNQUFLQyxvQkFBTCxDQUEwQlQsTUFBMUIsRUFBa0NDLE1BQWxDLEtBQTZDQSxNQUE3QyxJQUNBLE1BQUtRLG9CQUFMLENBQTBCVCxNQUExQixFQUFrQ08sT0FBbEMsS0FBOENBLE9BRnpDLEVBR0w7QUFDQUMsVUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDQSxhQUFMLEVBQW9CO0FBQ2xCLGlCQUFPLE1BQUtDLG9CQUFMLENBQTBCVCxNQUExQixFQUFrQ1UsYUFBekM7QUFDRDs7QUFFRCxZQUFNQSxhQUFhLEdBQUdULE1BQU0sQ0FBQ0csTUFBUCxDQUNwQixVQUFDQyxHQUFELEVBQU1NLEtBQU4sRUFBYUMsTUFBYjtBQUFBLG1DQUNLUCxHQURMLHVDQUVHTSxLQUFLLENBQUNSLElBRlQsRUFFZ0IsNEJBQWE7QUFDekJVLFlBQUFBLElBQUksRUFBRTtBQUNKQyxjQUFBQSxJQUFJLEVBQUVQLE9BREY7QUFFSlEsY0FBQUEsTUFBTSxFQUFFSixLQUFLLENBQUNSO0FBRlYsYUFEbUI7QUFLekJTLFlBQUFBLE1BQU0sRUFBTkEsTUFMeUI7QUFNekJOLFlBQUFBLElBQUksRUFBRUssS0FBSyxDQUFDTCxJQU5hO0FBT3pCVSxZQUFBQSxRQUFRLEVBQUUsTUFBS3BDLEtBQUwsQ0FBV3FDLEtBQVgsQ0FBaUJDLFlBUEY7QUFRekJDLFlBQUFBLElBQUksRUFBRSxNQUFLdkMsS0FBTCxDQUFXcUMsS0FBWCxDQUFpQkc7QUFSRSxXQUFiLENBRmhCO0FBQUEsU0FEb0IsRUFjcEIsRUFkb0IsQ0FBdEIsQ0FwQitFLENBb0MvRTs7QUFDQSxjQUFLWCxvQkFBTCxDQUEwQlQsTUFBMUIsSUFBb0M7QUFDbENVLFVBQUFBLGFBQWEsRUFBYkEsYUFEa0M7QUFFbENULFVBQUFBLE1BQU0sRUFBTkEsTUFGa0M7QUFHbENNLFVBQUFBLE9BQU8sRUFBUEE7QUFIa0MsU0FBcEM7QUFLQSxlQUFPRyxhQUFQO0FBQ0QsT0EzQ2UsQ0FoQnNCO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsK0JBNkQ3QjtBQUFBLDBCQUNzQyxLQUFLOUIsS0FEM0M7QUFBQSxZQUNBTSxRQURBLGVBQ0FBLFFBREE7QUFBQSxZQUNVYyxNQURWLGVBQ1VBLE1BRFY7QUFBQSxZQUNrQmIsZ0JBRGxCLGVBQ2tCQSxnQkFEbEI7O0FBRVAsWUFBSSxDQUFDRCxRQUFELElBQWEsQ0FBQ2MsTUFBbEIsRUFBMEI7QUFDeEIsaUJBQU8sSUFBUDtBQUNEOztBQUVELFlBQU1mLGFBQWEsR0FBR0MsUUFBUSxDQUFDYyxNQUFELENBQTlCO0FBQ0EsWUFBTXFCLE9BQU8sR0FBRyxLQUFLQSxPQUFMLENBQWEsS0FBS3pDLEtBQWxCLENBQWhCO0FBQ0EsWUFBTTBDLE9BQU8sR0FBRyxLQUFLQSxPQUFMLENBQWEsS0FBSzFDLEtBQWxCLENBQWhCO0FBQ0EsWUFBTThCLGFBQWEsR0FBRyxLQUFLQSxhQUFMLENBQW1CLEtBQUs5QixLQUF4QixDQUF0QjtBQUVBLGVBQ0UsZ0NBQUMsV0FBRDtBQUFhLFVBQUEsU0FBUyxFQUFDLGVBQXZCO0FBQXVDLFVBQUEsRUFBRSxFQUFDO0FBQTFDLFdBQ0UsZ0NBQUMsa0JBQUQsT0FERixFQUVFLGdDQUFDLGNBQUQsUUFDRSxnQ0FBQyxXQUFEO0FBQ0UsVUFBQSxhQUFhLEVBQUVLLGFBRGpCO0FBRUUsVUFBQSxRQUFRLEVBQUVDLFFBRlo7QUFHRSxVQUFBLGdCQUFnQixFQUFFQztBQUhwQixVQURGLEVBTUdELFFBQVEsQ0FBQ2MsTUFBRCxDQUFSLEdBQ0MsZ0NBQUMsU0FBRDtBQUNFLFVBQUEsR0FBRyxFQUFFQSxNQURQO0FBRUUsVUFBQSxNQUFNLEVBQUVBLE1BRlY7QUFHRSxVQUFBLE9BQU8sRUFBRXFCLE9BSFg7QUFJRSxVQUFBLE9BQU8sRUFBRUMsT0FKWDtBQUtFLFVBQUEsYUFBYSxFQUFFWixhQUxqQjtBQU1FLFVBQUEsSUFBSSxFQUFFekIsYUFBYSxDQUFDc0IsT0FOdEI7QUFPRSxVQUFBLGFBQWEsRUFBRXRCLGFBQWEsQ0FBQ3NDLGFBUC9CO0FBUUUsVUFBQSxTQUFTLEVBQUV0QyxhQUFhLENBQUN1QyxTQVIzQjtBQVNFLFVBQUEsVUFBVSxFQUFFdkMsYUFBYSxDQUFDd0MsVUFUNUI7QUFVRSxVQUFBLGVBQWUsRUFBRSxLQUFLN0MsS0FBTCxDQUFXOEMsZUFWOUI7QUFXRSxVQUFBLGNBQWMsRUFBRSxLQUFLOUMsS0FBTCxDQUFXK0MsY0FYN0I7QUFZRSxVQUFBLGVBQWUsRUFBRSxLQUFLL0MsS0FBTCxDQUFXZ0Q7QUFaOUIsVUFERCxHQWVHLElBckJOLENBRkYsQ0FERjtBQTRCRDtBQXBHcUM7QUFBQTtBQUFBLElBQ1g3QyxrQkFBTThDLFNBREs7O0FBdUd4QyxTQUFPLGlDQUFVOUIsY0FBVixDQUFQO0FBQ0Q7O2VBRWNMLHFCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIwIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBEYXRhc2V0TGFiZWwgZnJvbSAnY29tcG9uZW50cy9jb21tb24vZGF0YXNldC1sYWJlbCc7XG5pbXBvcnQgRGF0YVRhYmxlRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9kYXRhLXRhYmxlJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7cmVuZGVyZWRTaXplfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9kYXRhLXRhYmxlL2NlbGwtc2l6ZSc7XG5pbXBvcnQgQ2FudmFzSGFjayBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9kYXRhLXRhYmxlL2NhbnZhcyc7XG5cbmNvbnN0IGRnU2V0dGluZ3MgPSB7XG4gIHNpZGVQYWRkaW5nOiAnMzhweCcsXG4gIHZlcnRpY2FsUGFkZGluZzogJzE2cHgnLFxuICBoZWlnaHQ6ICczNnB4J1xufTtcblxuY29uc3QgU3R5bGVkTW9kYWwgPSBzdHlsZWQuZGl2YFxuICBtaW4taGVpZ2h0OiA3MHZoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYDtcblxuY29uc3QgRGF0YXNldENhdGFsb2cgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAke2RnU2V0dGluZ3MudmVydGljYWxQYWRkaW5nfSAke2RnU2V0dGluZ3Muc2lkZVBhZGRpbmd9IDA7XG5gO1xuXG5leHBvcnQgY29uc3QgRGF0YXNldE1vZGFsVGFiID0gc3R5bGVkLmRpdmBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICR7cHJvcHMgPT4gKHByb3BzLmFjdGl2ZSA/ICdibGFjaycgOiAndHJhbnNwYXJlbnQnKX07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAzNXB4O1xuICBtYXJnaW46IDAgM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcblxuICA6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IERhdGFzZXRUYWJzID0gUmVhY3QubWVtbygoe2FjdGl2ZURhdGFzZXQsIGRhdGFzZXRzLCBzaG93RGF0YXNldFRhYmxlfSkgPT4gKFxuICA8RGF0YXNldENhdGFsb2cgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbC1jYXRhbG9nXCI+XG4gICAge09iamVjdC52YWx1ZXMoZGF0YXNldHMpLm1hcChkYXRhc2V0ID0+IChcbiAgICAgIDxEYXRhc2V0TW9kYWxUYWJcbiAgICAgICAgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbC10YWJcIlxuICAgICAgICBhY3RpdmU9e2RhdGFzZXQgPT09IGFjdGl2ZURhdGFzZXR9XG4gICAgICAgIGtleT17ZGF0YXNldC5pZH1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2hvd0RhdGFzZXRUYWJsZShkYXRhc2V0LmlkKX1cbiAgICAgID5cbiAgICAgICAgPERhdGFzZXRMYWJlbCBkYXRhc2V0PXtkYXRhc2V0fSAvPlxuICAgICAgPC9EYXRhc2V0TW9kYWxUYWI+XG4gICAgKSl9XG4gIDwvRGF0YXNldENhdGFsb2c+XG4pKTtcblxuRGF0YXNldFRhYnMuZGlzcGxheU5hbWUgPSAnRGF0YXNldFRhYnMnO1xuXG5EYXRhVGFibGVNb2RhbEZhY3RvcnkuZGVwcyA9IFtEYXRhVGFibGVGYWN0b3J5XTtcblxuY29uc3QgVGFibGVDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LWdyb3c6IDE7XG4gIG1pbi1oZWlnaHQ6IDcwdmg7XG4gIG1heC1oZWlnaHQ6IDcwdmg7XG5gO1xuXG5mdW5jdGlvbiBEYXRhVGFibGVNb2RhbEZhY3RvcnkoRGF0YVRhYmxlKSB7XG4gIGNsYXNzIERhdGFUYWJsZU1vZGFsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBkYXRhc2V0Q2VsbFNpemVDYWNoZSA9IHt9O1xuICAgIGRhdGFJZCA9IHByb3BzID0+IHByb3BzLmRhdGFJZDtcbiAgICBkYXRhc2V0cyA9IHByb3BzID0+IHByb3BzLmRhdGFzZXRzO1xuICAgIGZpZWxkcyA9IHByb3BzID0+IChwcm9wcy5kYXRhc2V0c1twcm9wcy5kYXRhSWRdIHx8IHt9KS5maWVsZHM7XG4gICAgY29sdW1ucyA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmllbGRzLCBmaWVsZHMgPT4gZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICAgIGNvbE1ldGEgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpZWxkcywgZmllbGRzID0+XG4gICAgICBmaWVsZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCB7bmFtZSwgdHlwZX0pID0+ICh7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtuYW1lXTogdHlwZVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICApO1xuICAgIGNlbGxTaXplQ2FjaGUgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmRhdGFJZCwgdGhpcy5kYXRhc2V0cywgKGRhdGFJZCwgZGF0YXNldHMpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtmaWVsZHMsIGFsbERhdGF9ID0gdGhpcy5wcm9wcy5kYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgICBsZXQgc2hvd0NhbGN1bGF0ZSA9IG51bGw7XG4gICAgICBpZiAoIXRoaXMuZGF0YXNldENlbGxTaXplQ2FjaGVbZGF0YUlkXSkge1xuICAgICAgICBzaG93Q2FsY3VsYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuZGF0YXNldENlbGxTaXplQ2FjaGVbZGF0YUlkXS5maWVsZHMgIT09IGZpZWxkcyB8fFxuICAgICAgICB0aGlzLmRhdGFzZXRDZWxsU2l6ZUNhY2hlW2RhdGFJZF0uYWxsRGF0YSAhPT0gYWxsRGF0YVxuICAgICAgKSB7XG4gICAgICAgIHNob3dDYWxjdWxhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3dDYWxjdWxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNldENlbGxTaXplQ2FjaGVbZGF0YUlkXS5jZWxsU2l6ZUNhY2hlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsU2l6ZUNhY2hlID0gZmllbGRzLnJlZHVjZShcbiAgICAgICAgKGFjYywgZmllbGQsIGNvbElkeCkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2ZpZWxkLm5hbWVdOiByZW5kZXJlZFNpemUoe1xuICAgICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgICByb3dzOiBhbGxEYXRhLFxuICAgICAgICAgICAgICBjb2x1bW46IGZpZWxkLm5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2xJZHgsXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMucHJvcHMudGhlbWUuY2VsbEZvbnRTaXplLFxuICAgICAgICAgICAgZm9udDogdGhpcy5wcm9wcy50aGVtZS5mb250RmFtaWx5XG4gICAgICAgICAgfSlcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgICAgLy8gc2F2ZSBpdCB0byBjYWNoZVxuICAgICAgdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdID0ge1xuICAgICAgICBjZWxsU2l6ZUNhY2hlLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2VsbFNpemVDYWNoZTtcbiAgICB9KTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtkYXRhc2V0cywgZGF0YUlkLCBzaG93RGF0YXNldFRhYmxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIWRhdGFzZXRzIHx8ICFkYXRhSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2ZURhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGNvbE1ldGEgPSB0aGlzLmNvbE1ldGEodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBjZWxsU2l6ZUNhY2hlID0gdGhpcy5jZWxsU2l6ZUNhY2hlKHRoaXMucHJvcHMpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTW9kYWwgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbFwiIGlkPVwiZGF0YXNldC1tb2RhbFwiPlxuICAgICAgICAgIDxDYW52YXNIYWNrIC8+XG4gICAgICAgICAgPFRhYmxlQ29udGFpbmVyPlxuICAgICAgICAgICAgPERhdGFzZXRUYWJzXG4gICAgICAgICAgICAgIGFjdGl2ZURhdGFzZXQ9e2FjdGl2ZURhdGFzZXR9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ZGF0YXNldHNbZGF0YUlkXSA/IChcbiAgICAgICAgICAgICAgPERhdGFUYWJsZVxuICAgICAgICAgICAgICAgIGtleT17ZGF0YUlkfVxuICAgICAgICAgICAgICAgIGRhdGFJZD17ZGF0YUlkfVxuICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgY29sTWV0YT17Y29sTWV0YX1cbiAgICAgICAgICAgICAgICBjZWxsU2l6ZUNhY2hlPXtjZWxsU2l6ZUNhY2hlfVxuICAgICAgICAgICAgICAgIHJvd3M9e2FjdGl2ZURhdGFzZXQuYWxsRGF0YX1cbiAgICAgICAgICAgICAgICBwaW5uZWRDb2x1bW5zPXthY3RpdmVEYXRhc2V0LnBpbm5lZENvbHVtbnN9XG4gICAgICAgICAgICAgICAgc29ydE9yZGVyPXthY3RpdmVEYXRhc2V0LnNvcnRPcmRlcn1cbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uPXthY3RpdmVEYXRhc2V0LnNvcnRDb2x1bW59XG4gICAgICAgICAgICAgICAgY29weVRhYmxlQ29sdW1uPXt0aGlzLnByb3BzLmNvcHlUYWJsZUNvbHVtbn1cbiAgICAgICAgICAgICAgICBwaW5UYWJsZUNvbHVtbj17dGhpcy5wcm9wcy5waW5UYWJsZUNvbHVtbn1cbiAgICAgICAgICAgICAgICBzb3J0VGFibGVDb2x1bW49e3RoaXMucHJvcHMuc29ydFRhYmxlQ29sdW1ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9UYWJsZUNvbnRhaW5lcj5cbiAgICAgICAgPC9TdHlsZWRNb2RhbD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShEYXRhVGFibGVNb2RhbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFUYWJsZU1vZGFsRmFjdG9yeTtcbiJdfQ==
;