kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
130 lines (128 loc) • 25 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 _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _timeRangeFilter = _interopRequireDefault(require("../time-range-filter"));
var _icons = require("../../common/icons");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _filterPanelHeader = _interopRequireDefault(require("../../side-panel/filter-panel/filter-panel-header"));
var _panelHeaderAction = _interopRequireDefault(require("../../side-panel/panel-header-action"));
var _fieldSelector = _interopRequireDefault(require("../../common/field-selector"));
var _styledComponents = require("../../common/styled-components");
var _newFilterPanel = require("./new-filter-panel");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _timeSyncedFieldSelector = _interopRequireDefault(require("./time-synced-field-selector"));
var _filterSyncedDatasetPanel = _interopRequireDefault(require("./filter-synced-dataset-panel"));
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; }
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var SYNC_FILTER_ID_LENGTH = 2;
TimeRangeFilterPanelFactory.deps = [_timeRangeFilter["default"], _filterPanelHeader["default"], _fieldSelector["default"], _panelHeaderAction["default"], _timeSyncedFieldSelector["default"], _filterSyncedDatasetPanel["default"]];
function TimeRangeFilterPanelFactory(TimeRangeFilter, FilterPanelHeader, FieldSelector, PanelHeaderAction, TimeSyncedFieldSelector, FilterSyncedDatasetPanel) {
var TimeRangeFilterPanel = _react["default"].memo(function (_ref) {
var idx = _ref.idx,
datasets = _ref.datasets,
layers = _ref.layers,
allAvailableFields = _ref.allAvailableFields,
filter = _ref.filter,
enlargeFilter = _ref.enlargeFilter,
setFilter = _ref.setFilter,
setFilterPlot = _ref.setFilterPlot,
removeFilter = _ref.removeFilter,
toggleAnimation = _ref.toggleAnimation,
syncTimeFilterWithLayerTimeline = _ref.syncTimeFilterWithLayerTimeline;
var onSetFilterValue = (0, _react.useCallback)(function (value) {
return setFilter(idx, 'value', value);
}, [idx, setFilter]);
var onSetFilterPlot = (0, _react.useCallback)(function (newProp, valueIndex) {
return setFilterPlot(idx, newProp, valueIndex);
}, [idx, setFilterPlot]);
var isEnlarged = (0, _react.useMemo)(function () {
return !(0, _src.isSideFilter)(filter);
}, [filter]);
var panelActions = (0, _react.useMemo)(function () {
return [{
id: filter.id,
onClick: enlargeFilter,
tooltip: 'tooltip.timePlayback',
iconComponent: _icons.Clock,
active: isEnlarged
}];
}, [filter.id, isEnlarged, enlargeFilter]);
var onFieldSelector = (0, _react.useCallback)(function (field, valueIndex) {
return setFilter(idx, 'name', field.name, valueIndex);
}, [setFilter, idx]);
var onSourceDataSelector = (0, _react.useCallback)(function (value) {
return setFilter(idx, 'dataId', value, 0);
}, [idx, setFilter]);
var dataset = datasets[filter.dataId[0]];
var supportedFields = (0, _react.useMemo)(function () {
return (0, _newFilterPanel.getSupportedFilterFields)(dataset.supportedFilterTypes, allAvailableFields);
}, [dataset.supportedFilterTypes, allAvailableFields]);
var isSynced = (0, _react.useMemo)(function () {
return filter.dataId.length >= SYNC_FILTER_ID_LENGTH && filter.type === _src2.FILTER_TYPES.timeRange;
}, [filter.dataId, filter.type]);
var isHistogramVisible = (0, _react.useMemo)(function () {
return filter.type && !isEnlarged;
}, [filter.type, isEnlarged]);
var timeline = (0, _src.getTimelineFromFilter)(filter);
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(FilterPanelHeader, {
datasets: [dataset],
allAvailableFields: supportedFields,
idx: idx,
filter: filter,
removeFilter: removeFilter
}, isSynced ? /*#__PURE__*/_react["default"].createElement(TimeSyncedFieldSelector, null) : /*#__PURE__*/_react["default"].createElement(FieldSelector, {
inputTheme: "secondary",
fields: supportedFields,
value: Array.isArray(filter.name) ? filter.name[0] : filter.name,
erasable: false,
onSelect: function onSelect(field) {
return onFieldSelector(field, 0);
}
}), panelActions.map(function (panelAction) {
return /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
id: panelAction.id,
key: panelAction.id,
onClick: panelAction.onClick,
tooltip: panelAction.tooltip,
IconComponent: panelAction.iconComponent,
active: panelAction.active
});
})), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilterContent, {
className: "filter-panel__content"
}, /*#__PURE__*/_react["default"].createElement(FilterSyncedDatasetPanel, {
datasets: datasets,
layers: layers,
filter: filter,
idx: idx,
onFieldSelector: onFieldSelector,
onSourceDataSelector: onSourceDataSelector,
setFilter: setFilter,
supportedFields: supportedFields,
syncTimeFilterWithLayerTimeline: syncTimeFilterWithLayerTimeline
}), isHistogramVisible && /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-panel__filter"
}, /*#__PURE__*/_react["default"].createElement(TimeRangeFilter, {
filter: filter,
datasets: datasets,
layers: layers,
idx: idx,
toggleAnimation: toggleAnimation,
setFilter: onSetFilterValue,
setFilterPlot: onSetFilterPlot,
isAnimatable: true,
hideTimeTitle: true,
timeline: timeline
}))));
});
TimeRangeFilterPanel.displayName = 'TimeRangeFilterPanel';
return TimeRangeFilterPanel;
}
var _default = exports["default"] = TimeRangeFilterPanelFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdGltZVJhbmdlRmlsdGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9pY29ucyIsIl9zcmMiLCJfZmlsdGVyUGFuZWxIZWFkZXIiLCJfcGFuZWxIZWFkZXJBY3Rpb24iLCJfZmllbGRTZWxlY3RvciIsIl9zdHlsZWRDb21wb25lbnRzIiwiX25ld0ZpbHRlclBhbmVsIiwiX3NyYzIiLCJfdGltZVN5bmNlZEZpZWxkU2VsZWN0b3IiLCJfZmlsdGVyU3luY2VkRGF0YXNldFBhbmVsIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU1lOQ19GSUxURVJfSURfTEVOR1RIIiwiVGltZVJhbmdlRmlsdGVyUGFuZWxGYWN0b3J5IiwiZGVwcyIsIlRpbWVSYW5nZUZpbHRlckZhY3RvcnkiLCJGaWx0ZXJQYW5lbEhlYWRlckZhY3RvcnkiLCJGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIlBhbmVsSGVhZGVyQWN0aW9uRmFjdG9yeSIsIlRpbWVTeW5jZWRGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIkZpbHRlclN5bmNlZERhdGFzZXRQYW5lbEZhY3RvcnkiLCJUaW1lUmFuZ2VGaWx0ZXIiLCJGaWx0ZXJQYW5lbEhlYWRlciIsIkZpZWxkU2VsZWN0b3IiLCJQYW5lbEhlYWRlckFjdGlvbiIsIlRpbWVTeW5jZWRGaWVsZFNlbGVjdG9yIiwiRmlsdGVyU3luY2VkRGF0YXNldFBhbmVsIiwiVGltZVJhbmdlRmlsdGVyUGFuZWwiLCJSZWFjdCIsIm1lbW8iLCJfcmVmIiwiaWR4IiwiZGF0YXNldHMiLCJsYXllcnMiLCJhbGxBdmFpbGFibGVGaWVsZHMiLCJmaWx0ZXIiLCJlbmxhcmdlRmlsdGVyIiwic2V0RmlsdGVyIiwic2V0RmlsdGVyUGxvdCIsInJlbW92ZUZpbHRlciIsInRvZ2dsZUFuaW1hdGlvbiIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmUiLCJvblNldEZpbHRlclZhbHVlIiwidXNlQ2FsbGJhY2siLCJ2YWx1ZSIsIm9uU2V0RmlsdGVyUGxvdCIsIm5ld1Byb3AiLCJ2YWx1ZUluZGV4IiwiaXNFbmxhcmdlZCIsInVzZU1lbW8iLCJpc1NpZGVGaWx0ZXIiLCJwYW5lbEFjdGlvbnMiLCJpZCIsIm9uQ2xpY2siLCJ0b29sdGlwIiwiaWNvbkNvbXBvbmVudCIsIkNsb2NrIiwiYWN0aXZlIiwib25GaWVsZFNlbGVjdG9yIiwiZmllbGQiLCJuYW1lIiwib25Tb3VyY2VEYXRhU2VsZWN0b3IiLCJkYXRhc2V0IiwiZGF0YUlkIiwic3VwcG9ydGVkRmllbGRzIiwiZ2V0U3VwcG9ydGVkRmlsdGVyRmllbGRzIiwic3VwcG9ydGVkRmlsdGVyVHlwZXMiLCJpc1N5bmNlZCIsImxlbmd0aCIsInR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJpc0hpc3RvZ3JhbVZpc2libGUiLCJ0aW1lbGluZSIsImdldFRpbWVsaW5lRnJvbUZpbHRlciIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImlucHV0VGhlbWUiLCJmaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJlcmFzYWJsZSIsIm9uU2VsZWN0IiwibWFwIiwicGFuZWxBY3Rpb24iLCJrZXkiLCJJY29uQ29tcG9uZW50IiwiU3R5bGVkRmlsdGVyQ29udGVudCIsImNsYXNzTmFtZSIsImlzQW5pbWF0YWJsZSIsImhpZGVUaW1lVGl0bGUiLCJkaXNwbGF5TmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9maWx0ZXJzL2ZpbHRlci1wYW5lbHMvdGltZS1yYW5nZS1maWx0ZXItcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVGltZVJhbmdlRmlsdGVyRmFjdG9yeSBmcm9tICcuLi90aW1lLXJhbmdlLWZpbHRlcic7XG5pbXBvcnQge0Nsb2NrfSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtUaW1lUmFuZ2VGaWx0ZXJQYW5lbENvbXBvbmVudH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2lzU2lkZUZpbHRlciwgZ2V0VGltZWxpbmVGcm9tRmlsdGVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCBGaWx0ZXJQYW5lbEhlYWRlckZhY3RvcnkgZnJvbSAnLi4vLi4vc2lkZS1wYW5lbC9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLWhlYWRlcic7XG5pbXBvcnQgUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyLWFjdGlvbic7XG5pbXBvcnQgRmllbGRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vLi4vY29tbW9uL2ZpZWxkLXNlbGVjdG9yJztcbmltcG9ydCB7U3R5bGVkRmlsdGVyQ29udGVudH0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Z2V0U3VwcG9ydGVkRmlsdGVyRmllbGRzfSBmcm9tICcuL25ldy1maWx0ZXItcGFuZWwnO1xuaW1wb3J0IHtGSUxURVJfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBUaW1lU3luY2VkRmllbGRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi90aW1lLXN5bmNlZC1maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgRmlsdGVyU3luY2VkRGF0YXNldFBhbmVsRmFjdG9yeSBmcm9tICcuL2ZpbHRlci1zeW5jZWQtZGF0YXNldC1wYW5lbCc7XG5cbmNvbnN0IFNZTkNfRklMVEVSX0lEX0xFTkdUSCA9IDI7XG5cblRpbWVSYW5nZUZpbHRlclBhbmVsRmFjdG9yeS5kZXBzID0gW1xuICBUaW1lUmFuZ2VGaWx0ZXJGYWN0b3J5LFxuICBGaWx0ZXJQYW5lbEhlYWRlckZhY3RvcnksXG4gIEZpZWxkU2VsZWN0b3JGYWN0b3J5LFxuICBQYW5lbEhlYWRlckFjdGlvbkZhY3RvcnksXG4gIFRpbWVTeW5jZWRGaWVsZFNlbGVjdG9yRmFjdG9yeSxcbiAgRmlsdGVyU3luY2VkRGF0YXNldFBhbmVsRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gVGltZVJhbmdlRmlsdGVyUGFuZWxGYWN0b3J5KFxuICBUaW1lUmFuZ2VGaWx0ZXI6IFJldHVyblR5cGU8dHlwZW9mIFRpbWVSYW5nZUZpbHRlckZhY3Rvcnk+LFxuICBGaWx0ZXJQYW5lbEhlYWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgRmlsdGVyUGFuZWxIZWFkZXJGYWN0b3J5PixcbiAgRmllbGRTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgRmllbGRTZWxlY3RvckZhY3Rvcnk+LFxuICBQYW5lbEhlYWRlckFjdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5PixcbiAgVGltZVN5bmNlZEZpZWxkU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIFRpbWVTeW5jZWRGaWVsZFNlbGVjdG9yRmFjdG9yeT4sXG4gIEZpbHRlclN5bmNlZERhdGFzZXRQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgRmlsdGVyU3luY2VkRGF0YXNldFBhbmVsRmFjdG9yeT5cbikge1xuICBjb25zdCBUaW1lUmFuZ2VGaWx0ZXJQYW5lbDogVGltZVJhbmdlRmlsdGVyUGFuZWxDb21wb25lbnQgPSBSZWFjdC5tZW1vKFxuICAgICh7XG4gICAgICBpZHgsXG4gICAgICBkYXRhc2V0cyxcbiAgICAgIGxheWVycyxcbiAgICAgIGFsbEF2YWlsYWJsZUZpZWxkcyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGVubGFyZ2VGaWx0ZXIsXG4gICAgICBzZXRGaWx0ZXIsXG4gICAgICBzZXRGaWx0ZXJQbG90LFxuICAgICAgcmVtb3ZlRmlsdGVyLFxuICAgICAgdG9nZ2xlQW5pbWF0aW9uLFxuICAgICAgc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IG9uU2V0RmlsdGVyVmFsdWUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4gc2V0RmlsdGVyKGlkeCwgJ3ZhbHVlJywgdmFsdWUpLFxuICAgICAgICBbaWR4LCBzZXRGaWx0ZXJdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBvblNldEZpbHRlclBsb3QgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKG5ld1Byb3AsIHZhbHVlSW5kZXgpID0+IHNldEZpbHRlclBsb3QoaWR4LCBuZXdQcm9wLCB2YWx1ZUluZGV4KSxcbiAgICAgICAgW2lkeCwgc2V0RmlsdGVyUGxvdF1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlzRW5sYXJnZWQgPSB1c2VNZW1vKCgpID0+ICFpc1NpZGVGaWx0ZXIoZmlsdGVyKSwgW2ZpbHRlcl0pO1xuXG4gICAgICBjb25zdCBwYW5lbEFjdGlvbnMgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGVubGFyZ2VGaWx0ZXIsXG4gICAgICAgICAgICB0b29sdGlwOiAndG9vbHRpcC50aW1lUGxheWJhY2snLFxuICAgICAgICAgICAgaWNvbkNvbXBvbmVudDogQ2xvY2ssXG4gICAgICAgICAgICBhY3RpdmU6IGlzRW5sYXJnZWRcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFtmaWx0ZXIuaWQsIGlzRW5sYXJnZWQsIGVubGFyZ2VGaWx0ZXJdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBvbkZpZWxkU2VsZWN0b3IgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGZpZWxkLCB2YWx1ZUluZGV4KSA9PiBzZXRGaWx0ZXIoaWR4LCAnbmFtZScsIGZpZWxkLm5hbWUsIHZhbHVlSW5kZXgpLFxuICAgICAgICBbc2V0RmlsdGVyLCBpZHhdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBvblNvdXJjZURhdGFTZWxlY3RvciA9IHVzZUNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiBzZXRGaWx0ZXIoaWR4LCAnZGF0YUlkJywgdmFsdWUsIDApLFxuICAgICAgICBbaWR4LCBzZXRGaWx0ZXJdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZmlsdGVyLmRhdGFJZFswXV07XG4gICAgICBjb25zdCBzdXBwb3J0ZWRGaWVsZHMgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBnZXRTdXBwb3J0ZWRGaWx0ZXJGaWVsZHMoZGF0YXNldC5zdXBwb3J0ZWRGaWx0ZXJUeXBlcywgYWxsQXZhaWxhYmxlRmllbGRzKSxcbiAgICAgICAgW2RhdGFzZXQuc3VwcG9ydGVkRmlsdGVyVHlwZXMsIGFsbEF2YWlsYWJsZUZpZWxkc11cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlzU3luY2VkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmlsdGVyLmRhdGFJZC5sZW5ndGggPj0gU1lOQ19GSUxURVJfSURfTEVOR1RIICYmIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlXG4gICAgICAgICk7XG4gICAgICB9LCBbZmlsdGVyLmRhdGFJZCwgZmlsdGVyLnR5cGVdKTtcblxuICAgICAgY29uc3QgaXNIaXN0b2dyYW1WaXNpYmxlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gZmlsdGVyLnR5cGUgJiYgIWlzRW5sYXJnZWQsXG4gICAgICAgIFtmaWx0ZXIudHlwZSwgaXNFbmxhcmdlZF1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRpbWVsaW5lID0gZ2V0VGltZWxpbmVGcm9tRmlsdGVyKGZpbHRlcik7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEZpbHRlclBhbmVsSGVhZGVyXG4gICAgICAgICAgICBkYXRhc2V0cz17W2RhdGFzZXRdfVxuICAgICAgICAgICAgYWxsQXZhaWxhYmxlRmllbGRzPXtzdXBwb3J0ZWRGaWVsZHN9XG4gICAgICAgICAgICBpZHg9e2lkeH1cbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgcmVtb3ZlRmlsdGVyPXtyZW1vdmVGaWx0ZXJ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2lzU3luY2VkID8gKFxuICAgICAgICAgICAgICA8VGltZVN5bmNlZEZpZWxkU2VsZWN0b3IgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxGaWVsZFNlbGVjdG9yXG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgZmllbGRzPXtzdXBwb3J0ZWRGaWVsZHN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e0FycmF5LmlzQXJyYXkoZmlsdGVyLm5hbWUpID8gZmlsdGVyLm5hbWVbMF0gOiBmaWx0ZXIubmFtZX1cbiAgICAgICAgICAgICAgICBlcmFzYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e2ZpZWxkID0+IG9uRmllbGRTZWxlY3RvcihmaWVsZCwgMCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3BhbmVsQWN0aW9ucy5tYXAocGFuZWxBY3Rpb24gPT4gKFxuICAgICAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgICAgICBpZD17cGFuZWxBY3Rpb24uaWR9XG4gICAgICAgICAgICAgICAga2V5PXtwYW5lbEFjdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtwYW5lbEFjdGlvbi5vbkNsaWNrfVxuICAgICAgICAgICAgICAgIHRvb2x0aXA9e3BhbmVsQWN0aW9uLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17cGFuZWxBY3Rpb24uaWNvbkNvbXBvbmVudH1cbiAgICAgICAgICAgICAgICBhY3RpdmU9e3BhbmVsQWN0aW9uLmFjdGl2ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvRmlsdGVyUGFuZWxIZWFkZXI+XG4gICAgICAgICAgPFN0eWxlZEZpbHRlckNvbnRlbnQgY2xhc3NOYW1lPVwiZmlsdGVyLXBhbmVsX19jb250ZW50XCI+XG4gICAgICAgICAgICA8RmlsdGVyU3luY2VkRGF0YXNldFBhbmVsXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICBpZHg9e2lkeH1cbiAgICAgICAgICAgICAgb25GaWVsZFNlbGVjdG9yPXtvbkZpZWxkU2VsZWN0b3J9XG4gICAgICAgICAgICAgIG9uU291cmNlRGF0YVNlbGVjdG9yPXtvblNvdXJjZURhdGFTZWxlY3Rvcn1cbiAgICAgICAgICAgICAgc2V0RmlsdGVyPXtzZXRGaWx0ZXJ9XG4gICAgICAgICAgICAgIHN1cHBvcnRlZEZpZWxkcz17c3VwcG9ydGVkRmllbGRzfVxuICAgICAgICAgICAgICBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lPXtzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtpc0hpc3RvZ3JhbVZpc2libGUgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1wYW5lbF9fZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgPFRpbWVSYW5nZUZpbHRlclxuICAgICAgICAgICAgICAgICAgZmlsdGVyPXtmaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uPXt0b2dnbGVBbmltYXRpb259XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXI9e29uU2V0RmlsdGVyVmFsdWV9XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJQbG90PXtvblNldEZpbHRlclBsb3R9XG4gICAgICAgICAgICAgICAgICBpc0FuaW1hdGFibGVcbiAgICAgICAgICAgICAgICAgIGhpZGVUaW1lVGl0bGVcbiAgICAgICAgICAgICAgICAgIHRpbWVsaW5lPXt0aW1lbGluZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TdHlsZWRGaWx0ZXJDb250ZW50PlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIFRpbWVSYW5nZUZpbHRlclBhbmVsLmRpc3BsYXlOYW1lID0gJ1RpbWVSYW5nZUZpbHRlclBhbmVsJztcblxuICByZXR1cm4gVGltZVJhbmdlRmlsdGVyUGFuZWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbWVSYW5nZUZpbHRlclBhbmVsRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksSUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElB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