kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
149 lines (148 loc) • 29 kB
JavaScript
;
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _classnames2 = _interopRequireDefault(require("classnames"));
var _button = _interopRequireDefault(require("./button"));
var _icons = require("../../common/icons");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _optionDropdown = _interopRequireWildcard(require("./option-dropdown"));
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _fieldToken = _interopRequireDefault(require("../../common/field-token"));
var _templateObject; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
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; }
var StyledHeaderCell = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 1px solid ", ";\n border-top: 1px solid ", ";\n padding-top: ", "px;\n padding-right: 0;\n padding-bottom: ", "px;\n padding-left: ", "px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n flex-direction: row;\n background-color: ", ";\n\n .n-sort-idx {\n font-size: 9px;\n }\n .details {\n font-weight: 500;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n height: 100%;\n overflow: hidden;\n flex-grow: 1;\n\n .col-name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n .col-name__left {\n display: flex;\n align-items: center;\n overflow: hidden;\n\n svg {\n margin-left: 6px;\n }\n }\n .col-name__name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .more {\n margin-left: 5px;\n }\n\n .col-name__format svg {\n width: 10px;\n height: 10px;\n stroke-width: 1;\n }\n"])), function (props) {
return props.theme.headerCellBorderColor;
}, function (props) {
return props.theme.headerCellBorderColor;
}, function (props) {
return props.theme.headerPaddingTop;
}, function (props) {
return props.theme.headerPaddingBottom;
}, function (props) {
return props.theme.cellPaddingSide;
}, function (props) {
return props.theme.headerCellBackground;
});
var HeaderCellFactory = function HeaderCellFactory(FieldToken) {
var HeaderCell = function HeaderCell(_ref) {
var _colMeta$column;
var cellInfo = _ref.cellInfo,
columns = _ref.columns,
isPinned = _ref.isPinned,
props = _ref.props,
toggleMoreOptions = _ref.toggleMoreOptions,
moreOptionsColumn = _ref.moreOptionsColumn;
var columnIndex = cellInfo.columnIndex,
key = cellInfo.key,
style = cellInfo.style;
var colMeta = props.colMeta,
sortColumn = props.sortColumn,
sortTableColumn = props.sortTableColumn,
pinTableColumn = props.pinTableColumn,
copyTableColumn = props.copyTableColumn,
setColumnDisplayFormat = props.setColumnDisplayFormat;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
showFormatter = _useState2[0],
setShowFormatter = _useState2[1];
var column = columns[columnIndex];
var isGhost = column.ghost;
var isSorted = sortColumn[column];
var firstCell = columnIndex === 0;
var isFormatted = Boolean((_colMeta$column = colMeta[column]) === null || _colMeta$column === void 0 ? void 0 : _colMeta$column.displayFormat);
var formatLabels = isFormatted ? (0, _src2.getFieldFormatLabels)(colMeta[column].type) : [];
var onSortTable = (0, _react.useCallback)(function () {
return sortTableColumn === null || sortTableColumn === void 0 ? void 0 : sortTableColumn(column);
}, [sortTableColumn, column]);
var onToggleOptionMenu = (0, _react.useCallback)(function () {
return toggleMoreOptions(column);
}, [toggleMoreOptions, column]);
var onPin = (0, _react.useCallback)(function () {
return pinTableColumn(column);
}, [pinTableColumn, column]);
var onCopy = (0, _react.useCallback)(function () {
return copyTableColumn(column);
}, [copyTableColumn, column]);
var onSetDisplayFormat = (0, _react.useCallback)(function (displayFormat) {
setColumnDisplayFormat === null || setColumnDisplayFormat === void 0 || setColumnDisplayFormat((0, _defineProperty2["default"])({}, column, displayFormat.format));
}, [column, setColumnDisplayFormat]);
var onToggleDisplayFormat = (0, _react.useCallback)(function () {
setShowFormatter(!showFormatter);
}, [showFormatter]);
return /*#__PURE__*/_react["default"].createElement(StyledHeaderCell, {
className: (0, _classnames2["default"])('header-cell', (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "column-".concat(columnIndex), true), 'pinned-header-cell', isPinned), 'first-cell', firstCell)),
key: key,
style: style,
onClick: function onClick(e) {
e.shiftKey ? sortTableColumn(column) : null;
},
onDoubleClick: onSortTable,
title: column
}, isGhost ? /*#__PURE__*/_react["default"].createElement("div", null) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("section", {
className: "details"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "col-name"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "col-name__left"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "col-name__name"
}, colMeta[column].name), /*#__PURE__*/_react["default"].createElement(_button["default"], {
className: "col-name__sort",
onClick: onSortTable
}, isSorted ? isSorted === _src.SORT_ORDER.ASCENDING ? /*#__PURE__*/_react["default"].createElement(_icons.ArrowUp, {
height: "14px"
}) : /*#__PURE__*/_react["default"].createElement(_icons.ArrowDown, {
height: "14px"
}) : null), /*#__PURE__*/_react["default"].createElement(_button["default"], {
className: "col-name__format",
onClick: onToggleDisplayFormat
}, isFormatted ? /*#__PURE__*/_react["default"].createElement(_icons.Hash, {
height: "14px"
}) : null, /*#__PURE__*/_react["default"].createElement(_optionDropdown.FormatterDropdown, {
left: 0,
top: 0,
isOpened: isFormatted && showFormatter,
displayFormat: colMeta[column].displayFormat,
setDisplayFormat: onSetDisplayFormat,
onClose: function onClose() {
return setShowFormatter(false);
},
formatLabels: formatLabels
}))), /*#__PURE__*/_react["default"].createElement(_button["default"], {
className: "more",
onClick: onToggleOptionMenu
}, /*#__PURE__*/_react["default"].createElement(_icons.VertThreeDots, {
height: "14px"
}))), /*#__PURE__*/_react["default"].createElement(FieldToken, {
type: colMeta[column].type
})), /*#__PURE__*/_react["default"].createElement("section", {
className: "options"
}, /*#__PURE__*/_react["default"].createElement(_optionDropdown["default"], {
isOpened: moreOptionsColumn === column,
column: column,
colMeta: colMeta,
toggleMoreOptions: toggleMoreOptions,
sortTableColumn: sortTableColumn ? function (mode) {
return sortTableColumn(column, mode);
} : undefined,
pinTableColumn: onPin,
copyTableColumn: onCopy,
setDisplayFormat: setColumnDisplayFormat ? onSetDisplayFormat : undefined
}))));
};
return HeaderCell;
};
HeaderCellFactory.deps = [_fieldToken["default"]];
var _default = exports["default"] = HeaderCellFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczIiLCJfYnV0dG9uIiwiX2ljb25zIiwiX3NyYyIsIl9vcHRpb25Ecm9wZG93biIsIl9zcmMyIiwiX2ZpZWxkVG9rZW4iLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRIZWFkZXJDZWxsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiaGVhZGVyQ2VsbEJvcmRlckNvbG9yIiwiaGVhZGVyUGFkZGluZ1RvcCIsImhlYWRlclBhZGRpbmdCb3R0b20iLCJjZWxsUGFkZGluZ1NpZGUiLCJoZWFkZXJDZWxsQmFja2dyb3VuZCIsIkhlYWRlckNlbGxGYWN0b3J5IiwiRmllbGRUb2tlbiIsIkhlYWRlckNlbGwiLCJfcmVmIiwiX2NvbE1ldGEkY29sdW1uIiwiY2VsbEluZm8iLCJjb2x1bW5zIiwiaXNQaW5uZWQiLCJ0b2dnbGVNb3JlT3B0aW9ucyIsIm1vcmVPcHRpb25zQ29sdW1uIiwiY29sdW1uSW5kZXgiLCJrZXkiLCJzdHlsZSIsImNvbE1ldGEiLCJzb3J0Q29sdW1uIiwic29ydFRhYmxlQ29sdW1uIiwicGluVGFibGVDb2x1bW4iLCJjb3B5VGFibGVDb2x1bW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2hvd0Zvcm1hdHRlciIsInNldFNob3dGb3JtYXR0ZXIiLCJjb2x1bW4iLCJpc0dob3N0IiwiZ2hvc3QiLCJpc1NvcnRlZCIsImZpcnN0Q2VsbCIsImlzRm9ybWF0dGVkIiwiQm9vbGVhbiIsImRpc3BsYXlGb3JtYXQiLCJmb3JtYXRMYWJlbHMiLCJnZXRGaWVsZEZvcm1hdExhYmVscyIsInR5cGUiLCJvblNvcnRUYWJsZSIsInVzZUNhbGxiYWNrIiwib25Ub2dnbGVPcHRpb25NZW51Iiwib25QaW4iLCJvbkNvcHkiLCJvblNldERpc3BsYXlGb3JtYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZm9ybWF0Iiwib25Ub2dnbGVEaXNwbGF5Rm9ybWF0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNsYXNzbmFtZXMiLCJjb25jYXQiLCJvbkNsaWNrIiwic2hpZnRLZXkiLCJvbkRvdWJsZUNsaWNrIiwidGl0bGUiLCJGcmFnbWVudCIsIm5hbWUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiQXJyb3dVcCIsImhlaWdodCIsIkFycm93RG93biIsIkhhc2giLCJGb3JtYXR0ZXJEcm9wZG93biIsImxlZnQiLCJ0b3AiLCJpc09wZW5lZCIsInNldERpc3BsYXlGb3JtYXQiLCJvbkNsb3NlIiwiVmVydFRocmVlRG90cyIsIm1vZGUiLCJ1bmRlZmluZWQiLCJkZXBzIiwiRmllbGRUb2tlbkZhY3RvcnkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2RhdGEtdGFibGUvaGVhZGVyLWNlbGwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NTU1Byb3BlcnRpZXMsIHVzZVN0YXRlLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHtBcnJvd1VwLCBBcnJvd0Rvd24sIFZlcnRUaHJlZURvdHMsIEhhc2h9IGZyb20gJy4uLy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge1NPUlRfT1JERVJ9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBPcHRpb25Ecm9wZG93biwge0Zvcm1hdHRlckRyb3Bkb3dufSBmcm9tICcuL29wdGlvbi1kcm9wZG93bic7XG5pbXBvcnQge2dldEZpZWxkRm9ybWF0TGFiZWxzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Q29sTWV0YX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQgRmllbGRUb2tlbkZhY3RvcnksIHtGaWVsZFRva2VuUHJvcHN9IGZyb20gJy4uLy4uL2NvbW1vbi9maWVsZC10b2tlbic7XG5pbXBvcnQge0RhdGFUYWJsZVByb3BzfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgU3R5bGVkSGVhZGVyQ2VsbCA9IHN0eWxlZC5kaXZgXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlckNlbGxCb3JkZXJDb2xvcn07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlckNlbGxCb3JkZXJDb2xvcn07XG4gIHBhZGRpbmctdG9wOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlclBhZGRpbmdUb3B9cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlclBhZGRpbmdCb3R0b219cHg7XG4gIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5jZWxsUGFkZGluZ1NpZGV9cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQmFja2dyb3VuZH07XG5cbiAgLm4tc29ydC1pZHgge1xuICAgIGZvbnQtc2l6ZTogOXB4O1xuICB9XG4gIC5kZXRhaWxzIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZmxleC1ncm93OiAxO1xuXG4gICAgLmNvbC1uYW1lIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICAuY29sLW5hbWVfX2xlZnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLmNvbC1uYW1lX19uYW1lIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1vcmUge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIH1cblxuICAuY29sLW5hbWVfX2Zvcm1hdCBzdmcge1xuICAgIHdpZHRoOiAxMHB4O1xuICAgIGhlaWdodDogMTBweDtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbmA7XG5cbnR5cGUgQ2VsbEluZm8gPSB7XG4gIGNvbHVtbkluZGV4OiBudW1iZXI7XG4gIGlzU2Nyb2xsaW5nOiBib29sZWFuO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGtleTogc3RyaW5nO1xuICBwYXJlbnQ6IGFueTtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgc3R5bGU6IENTU1Byb3BlcnRpZXM7XG59O1xuXG50eXBlIEhlYWRlckNlbGxQcm9wcyA9IHtcbiAgLy8gcGFzc2VkIGRvd24gZnJvbSByZWFjdCB2aXJ0dWFsaXplZCBHcmlkXG4gIGNlbGxJbmZvOiBDZWxsSW5mbztcbiAgY29sdW1uczogRGF0YVRhYmxlUHJvcHNbJ2NvbHVtbnMnXTtcbiAgY29sTWV0YT86IENvbE1ldGE7XG4gIGlzUGlubmVkPzogYm9vbGVhbjtcbiAgc2hvd1N0YXRzPzogYm9vbGVhbjtcbiAgcHJvcHM6IERhdGFUYWJsZVByb3BzO1xuICB0b2dnbGVNb3JlT3B0aW9uczogKG1vcmVPcHRpb25zQ29sdW1uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG1vcmVPcHRpb25zQ29sdW1uOiBudWxsIHwgc3RyaW5nO1xuICBzdHlsZTogQ1NTUHJvcGVydGllcztcbn07XG5cbmNvbnN0IEhlYWRlckNlbGxGYWN0b3J5ID0gKEZpZWxkVG9rZW46IFJlYWN0LkZDPEZpZWxkVG9rZW5Qcm9wcz4pID0+IHtcbiAgY29uc3QgSGVhZGVyQ2VsbCA9ICh7XG4gICAgY2VsbEluZm8sXG4gICAgY29sdW1ucyxcbiAgICBpc1Bpbm5lZCxcbiAgICBwcm9wcyxcbiAgICB0b2dnbGVNb3JlT3B0aW9ucyxcbiAgICBtb3JlT3B0aW9uc0NvbHVtblxuICB9OiBIZWFkZXJDZWxsUHJvcHMpID0+IHtcbiAgICBjb25zdCB7Y29sdW1uSW5kZXgsIGtleSwgc3R5bGV9ID0gY2VsbEluZm87XG4gICAgY29uc3Qge1xuICAgICAgY29sTWV0YSxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0VGFibGVDb2x1bW4sXG4gICAgICBwaW5UYWJsZUNvbHVtbixcbiAgICAgIGNvcHlUYWJsZUNvbHVtbixcbiAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3Nob3dGb3JtYXR0ZXIsIHNldFNob3dGb3JtYXR0ZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSW5kZXhdO1xuXG4gICAgY29uc3QgaXNHaG9zdCA9IGNvbHVtbi5naG9zdDtcbiAgICBjb25zdCBpc1NvcnRlZCA9IHNvcnRDb2x1bW5bY29sdW1uXTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSBjb2x1bW5JbmRleCA9PT0gMDtcbiAgICBjb25zdCBpc0Zvcm1hdHRlZCA9IEJvb2xlYW4oY29sTWV0YVtjb2x1bW5dPy5kaXNwbGF5Rm9ybWF0KTtcbiAgICBjb25zdCBmb3JtYXRMYWJlbHMgPSBpc0Zvcm1hdHRlZCA/IGdldEZpZWxkRm9ybWF0TGFiZWxzKGNvbE1ldGFbY29sdW1uXS50eXBlKSA6IFtdO1xuICAgIGNvbnN0IG9uU29ydFRhYmxlID0gdXNlQ2FsbGJhY2soKCkgPT4gc29ydFRhYmxlQ29sdW1uPy4oY29sdW1uKSwgW3NvcnRUYWJsZUNvbHVtbiwgY29sdW1uXSk7XG4gICAgY29uc3Qgb25Ub2dnbGVPcHRpb25NZW51ID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiB0b2dnbGVNb3JlT3B0aW9ucyhjb2x1bW4pLFxuICAgICAgW3RvZ2dsZU1vcmVPcHRpb25zLCBjb2x1bW5dXG4gICAgKTtcbiAgICBjb25zdCBvblBpbiA9IHVzZUNhbGxiYWNrKCgpID0+IHBpblRhYmxlQ29sdW1uKGNvbHVtbiksIFtwaW5UYWJsZUNvbHVtbiwgY29sdW1uXSk7XG4gICAgY29uc3Qgb25Db3B5ID0gdXNlQ2FsbGJhY2soKCkgPT4gY29weVRhYmxlQ29sdW1uKGNvbHVtbiksIFtjb3B5VGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uU2V0RGlzcGxheUZvcm1hdCA9IHVzZUNhbGxiYWNrKFxuICAgICAgZGlzcGxheUZvcm1hdCA9PiB7XG4gICAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXQ/Lih7W2NvbHVtbl06IGRpc3BsYXlGb3JtYXQuZm9ybWF0fSk7XG4gICAgICB9LFxuICAgICAgW2NvbHVtbiwgc2V0Q29sdW1uRGlzcGxheUZvcm1hdF1cbiAgICApO1xuXG4gICAgY29uc3Qgb25Ub2dnbGVEaXNwbGF5Rm9ybWF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0U2hvd0Zvcm1hdHRlcighc2hvd0Zvcm1hdHRlcik7XG4gICAgfSwgW3Nob3dGb3JtYXR0ZXJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkSGVhZGVyQ2VsbFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2hlYWRlci1jZWxsJywge1xuICAgICAgICAgIFtgY29sdW1uLSR7Y29sdW1uSW5kZXh9YF06IHRydWUsXG4gICAgICAgICAgJ3Bpbm5lZC1oZWFkZXItY2VsbCc6IGlzUGlubmVkLFxuICAgICAgICAgICdmaXJzdC1jZWxsJzogZmlyc3RDZWxsXG4gICAgICAgIH0pfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnNoaWZ0S2V5ID8gc29ydFRhYmxlQ29sdW1uKGNvbHVtbikgOiBudWxsO1xuICAgICAgICB9fVxuICAgICAgICBvbkRvdWJsZUNsaWNrPXtvblNvcnRUYWJsZX1cbiAgICAgICAgdGl0bGU9e2NvbHVtbn1cbiAgICAgID5cbiAgICAgICAge2lzR2hvc3QgPyAoXG4gICAgICAgICAgPGRpdiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW5hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lX19uYW1lXCI+e2NvbE1ldGFbY29sdW1uXS5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fc29ydFwiIG9uQ2xpY2s9e29uU29ydFRhYmxlfT5cbiAgICAgICAgICAgICAgICAgICAge2lzU29ydGVkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIGlzU29ydGVkID09PSBTT1JUX09SREVSLkFTQ0VORElORyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJvd1VwIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QXJyb3dEb3duIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiY29sLW5hbWVfX2Zvcm1hdFwiIG9uQ2xpY2s9e29uVG9nZ2xlRGlzcGxheUZvcm1hdH0+XG4gICAgICAgICAgICAgICAgICAgIHtpc0Zvcm1hdHRlZCA/IDxIYXNoIGhlaWdodD1cIjE0cHhcIiAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZXJEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgIGxlZnQ9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgdG9wPXswfVxuICAgICAgICAgICAgICAgICAgICAgIGlzT3BlbmVkPXtpc0Zvcm1hdHRlZCAmJiBzaG93Rm9ybWF0dGVyfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9e2NvbE1ldGFbY29sdW1uXS5kaXNwbGF5Rm9ybWF0fVxuICAgICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXlGb3JtYXQ9e29uU2V0RGlzcGxheUZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Rm9ybWF0dGVyKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRMYWJlbHM9e2Zvcm1hdExhYmVsc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwibW9yZVwiIG9uQ2xpY2s9e29uVG9nZ2xlT3B0aW9uTWVudX0+XG4gICAgICAgICAgICAgICAgICA8VmVydFRocmVlRG90cyBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxGaWVsZFRva2VuIHR5cGU9e2NvbE1ldGFbY29sdW1uXS50eXBlfSAvPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxPcHRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgIGlzT3BlbmVkPXttb3JlT3B0aW9uc0NvbHVtbiA9PT0gY29sdW1ufVxuICAgICAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgICAgIGNvbE1ldGE9e2NvbE1ldGF9XG4gICAgICAgICAgICAgICAgdG9nZ2xlTW9yZU9wdGlvbnM9e3RvZ2dsZU1vcmVPcHRpb25zfVxuICAgICAgICAgICAgICAgIHNvcnRUYWJsZUNvbHVtbj17XG4gICAgICAgICAgICAgICAgICBzb3J0VGFibGVDb2x1bW4gPyBtb2RlID0+IHNvcnRUYWJsZUNvbHVtbihjb2x1bW4sIG1vZGUpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBpblRhYmxlQ29sdW1uPXtvblBpbn1cbiAgICAgICAgICAgICAgICBjb3B5VGFibGVDb2x1bW49e29uQ29weX1cbiAgICAgICAgICAgICAgICBzZXREaXNwbGF5Rm9ybWF0PXtzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0ID8gb25TZXREaXNwbGF5Rm9ybWF0IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRIZWFkZXJDZWxsPlxuICAgICk7XG4gIH07XG4gIHJldHVybiBIZWFkZXJDZWxsO1xufTtcbkhlYWRlckNlbGxGYWN0b3J5LmRlcHMgPSBbRmllbGRUb2tlbkZhY3RvcnldO1xuZXhwb3J0IGRlZmF1bHQgSGVhZGVyQ2VsbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVIsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLFdBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUE0RSxJQUFBVSxlQUFBLEVBWjVFO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFB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