UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

132 lines (131 loc) 28.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = FloatingTimeDisplayFactory; 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 _classnames = _interopRequireDefault(require("classnames")); var _icons = require("../icons"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _styledComponents2 = require("../../common/styled-components"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8; // 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 StyledTimeDisplayWrapper = _styledComponents["default"].div.attrs({ className: 'floating-time-display' })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n bottom: ", ";\n display: flex;\n position: absolute;\n width: 100%;\n margin-left: -", "px;\n justify-content: center;\n pointer-events: none; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"])), function (props) { return "calc(100% + ".concat(props.theme.bottomPanelGap, "px)"); }, function (props) { return props.theme.bottomInnerPdSide; }); var StyledTimeDisplay = _styledComponents["default"].div.attrs(function (props) { return { className: (0, _classnames["default"])('floating-time-display__inner', props.className) }; })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n border-radius: ", "px;\n color: ", ";\n display: flex;\n height: ", "px;\n justify-content: center;\n min-width: ", "px;\n opacity: ", ";\n padding: ", ";\n"])), function (props) { return props.theme.panelBackground; }, function (props) { return props.theme.timeDisplayBorderRadius; }, function (props) { return props.theme.titleTextColor; }, function (props) { return props.theme.timeDisplayHeight; }, function (props) { return props.theme.timeDisplayMinWidth; }, function (props) { return props.theme.timeDisplayOpacity; }, function (props) { return props.theme.timeDisplayPadding; }); var StyledTimeDisplayGroups = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n display: flex;\n flex-direction: row;\n"]))); var StyledTimeDisplayRows = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n"]))); var StyledTimeDisplayTop = _styledComponents["default"].div.attrs({ className: 'animation-control__time-display__top' })(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 12px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) { return props.theme.textColor; }); var StyledTimeDisplayBottom = _styledComponents["default"].div.attrs({ className: 'animation-control__time-display__bottom' })(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 14px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) { return props.theme.titleTextColor; }); var StyledTimeValueGroup = _styledComponents["default"].div.attrs({ className: 'animation-control__time-value-group' })(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"]))); var StyledHorizontalBar = _styledComponents["default"].div.attrs({ className: 'animation-control__horizontal-bar' })(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0 12px;\n"]))); var TimeDivider = function TimeDivider() { return /*#__PURE__*/_react["default"].createElement(StyledHorizontalBar, null, /*#__PURE__*/_react["default"].createElement(_icons.Minus, { height: "12px" })); }; var TimeDisplayRow = function TimeDisplayRow(_ref) { var _ref$timeValues = _ref.timeValues, timeValues = _ref$timeValues === void 0 ? [] : _ref$timeValues; return /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, null, /*#__PURE__*/_react["default"].createElement("div", { className: "time-value" }, timeValues[0]), timeValues[1] ? /*#__PURE__*/_react["default"].createElement(TimeDivider, null) : null, timeValues[1] ? /*#__PURE__*/_react["default"].createElement("div", { className: "time-value" }, timeValues[1]) : null); }; function FloatingTimeDisplayFactory() { var FloatingTimeDisplay = function FloatingTimeDisplay(_ref2) { var currentTime = _ref2.currentTime, defaultTimeFormat = _ref2.defaultTimeFormat, timeFormat = _ref2.timeFormat, timezone = _ref2.timezone; var _useMemo = (0, _react.useMemo)(function () { var groupTime = Array.isArray(currentTime) ? currentTime : [currentTime]; var hasUserFormat = typeof timeFormat === 'string'; var currentFormat = (hasUserFormat ? timeFormat : defaultTimeFormat) || _src.DEFAULT_TIME_FORMAT; var dateFunc = (0, _src2.datetimeFormatter)(timezone); if (hasUserFormat) { // dont split time if user defined it return { displayDate: groupTime.map(dateFunc(currentFormat)), displayTime: [] }; } return groupTime.reduce(function (accu, curr) { var _currentFormat$split = currentFormat.split(' '), _currentFormat$split2 = (0, _slicedToArray2["default"])(_currentFormat$split, 2), dateFormat = _currentFormat$split2[0], datetimeFormat = _currentFormat$split2[1]; var dateString = dateFunc(dateFormat)(curr); var timeString = datetimeFormat ? dateFunc(datetimeFormat)(curr) : null; if (!accu.displayDate.includes(dateString)) { accu.displayDate.push(dateString); } if (timeString) { accu.displayTime.push(timeString); } return accu; }, { displayDate: [], displayTime: [] }); }, [currentTime, timeFormat, defaultTimeFormat, timezone]), displayDate = _useMemo.displayDate, displayTime = _useMemo.displayTime; var twoGroups = displayDate.length === 2 && displayTime.length === 2; var bottomRow = displayTime.length ? displayTime : displayDate.length ? displayDate : null; var topRow = displayDate.length && displayTime.length ? displayDate : null; return /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplay, { className: "animation-control__time-display" }, twoGroups ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayGroups, null, /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[0]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[0])), /*#__PURE__*/_react["default"].createElement(TimeDivider, null), /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[1]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[1]))) : /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayRows, null, topRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, { timeValues: topRow })) : null, bottomRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, { timeValues: bottomRow })) : null))); }; return FloatingTimeDisplay; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl9pY29ucyIsIl9zcmMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3JjMiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRUaW1lRGlzcGxheVdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJjb25jYXQiLCJ0aGVtZSIsImJvdHRvbVBhbmVsR2FwIiwiYm90dG9tSW5uZXJQZFNpZGUiLCJTdHlsZWRUaW1lRGlzcGxheSIsImNsYXNzbmFtZXMiLCJwYW5lbEJhY2tncm91bmQiLCJ0aW1lRGlzcGxheUJvcmRlclJhZGl1cyIsInRpdGxlVGV4dENvbG9yIiwidGltZURpc3BsYXlIZWlnaHQiLCJ0aW1lRGlzcGxheU1pbldpZHRoIiwidGltZURpc3BsYXlPcGFjaXR5IiwidGltZURpc3BsYXlQYWRkaW5nIiwiU3R5bGVkVGltZURpc3BsYXlHcm91cHMiLCJTdHlsZWRUaW1lRGlzcGxheVJvd3MiLCJTdHlsZWRUaW1lRGlzcGxheVRvcCIsInRleHRDb2xvciIsIlN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tIiwiU3R5bGVkVGltZVZhbHVlR3JvdXAiLCJTdHlsZWRIb3Jpem9udGFsQmFyIiwiVGltZURpdmlkZXIiLCJjcmVhdGVFbGVtZW50IiwiTWludXMiLCJoZWlnaHQiLCJUaW1lRGlzcGxheVJvdyIsIl9yZWYiLCJfcmVmJHRpbWVWYWx1ZXMiLCJ0aW1lVmFsdWVzIiwiQ2VudGVyRmxleGJveCIsIkZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5IiwiRmxvYXRpbmdUaW1lRGlzcGxheSIsIl9yZWYyIiwiY3VycmVudFRpbWUiLCJkZWZhdWx0VGltZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsIl91c2VNZW1vIiwidXNlTWVtbyIsImdyb3VwVGltZSIsIkFycmF5IiwiaXNBcnJheSIsImhhc1VzZXJGb3JtYXQiLCJjdXJyZW50Rm9ybWF0IiwiREVGQVVMVF9USU1FX0ZPUk1BVCIsImRhdGVGdW5jIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJkaXNwbGF5RGF0ZSIsIm1hcCIsImRpc3BsYXlUaW1lIiwicmVkdWNlIiwiYWNjdSIsImN1cnIiLCJfY3VycmVudEZvcm1hdCRzcGxpdCIsInNwbGl0IiwiX2N1cnJlbnRGb3JtYXQkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZGF0ZUZvcm1hdCIsImRhdGV0aW1lRm9ybWF0IiwiZGF0ZVN0cmluZyIsInRpbWVTdHJpbmciLCJpbmNsdWRlcyIsInB1c2giLCJ0d29Hcm91cHMiLCJsZW5ndGgiLCJib3R0b21Sb3ciLCJ0b3BSb3ciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2FuaW1hdGlvbi1jb250cm9sL2Zsb2F0aW5nLXRpbWUtZGlzcGxheS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7TWludXN9IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCB7REVGQVVMVF9USU1FX0ZPUk1BVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDZW50ZXJGbGV4Ym94fSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtkYXRldGltZUZvcm1hdHRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5V3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdmbG9hdGluZy10aW1lLWRpc3BsYXknXG59KWBcbiAgYm90dG9tOiAke3Byb3BzID0+IGBjYWxjKDEwMCUgKyAke3Byb3BzLnRoZW1lLmJvdHRvbVBhbmVsR2FwfXB4KWB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tbGVmdDogLSR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm90dG9tSW5uZXJQZFNpZGV9cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheSA9IHN0eWxlZC5kaXYuYXR0cnMocHJvcHMgPT4gKHtcbiAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKCdmbG9hdGluZy10aW1lLWRpc3BsYXlfX2lubmVyJywgcHJvcHMuY2xhc3NOYW1lKVxufSkpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlCb3JkZXJSYWRpdXN9cHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpdGxlVGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpbWVEaXNwbGF5SGVpZ2h0fXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpbWVEaXNwbGF5TWluV2lkdGh9cHg7XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlPcGFjaXR5fTtcbiAgcGFkZGluZzogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aW1lRGlzcGxheVBhZGRpbmd9O1xuYDtcblxuY29uc3QgU3R5bGVkVGltZURpc3BsYXlHcm91cHMgPSBzdHlsZWQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuYDtcblxuY29uc3QgU3R5bGVkVGltZURpc3BsYXlSb3dzID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheVRvcCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9fdGltZS1kaXNwbGF5X190b3AnXG59KWBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2FuaW1hdGlvbi1jb250cm9sX190aW1lLWRpc3BsYXlfX2JvdHRvbSdcbn0pYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aXRsZVRleHRDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lVmFsdWVHcm91cCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9fdGltZS12YWx1ZS1ncm91cCdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYDtcblxuY29uc3QgU3R5bGVkSG9yaXpvbnRhbEJhciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhbmltYXRpb24tY29udHJvbF9faG9yaXpvbnRhbC1iYXInXG59KWBcbiAgbWFyZ2luOiAwIDEycHg7XG5gO1xuXG5jb25zdCBUaW1lRGl2aWRlciA9ICgpID0+IChcbiAgPFN0eWxlZEhvcml6b250YWxCYXI+XG4gICAgPE1pbnVzIGhlaWdodD1cIjEycHhcIiAvPlxuICA8L1N0eWxlZEhvcml6b250YWxCYXI+XG4pO1xuXG5pbnRlcmZhY2UgVGltZURpc3BsYXlSb3dQcm9wcyB7XG4gIHRpbWVWYWx1ZXM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3QgVGltZURpc3BsYXlSb3cgPSAoe3RpbWVWYWx1ZXMgPSBbXX06IFRpbWVEaXNwbGF5Um93UHJvcHMpID0+IChcbiAgPENlbnRlckZsZXhib3g+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJ0aW1lLXZhbHVlXCI+e3RpbWVWYWx1ZXNbMF19PC9kaXY+XG4gICAge3RpbWVWYWx1ZXNbMV0gPyA8VGltZURpdmlkZXIgLz4gOiBudWxsfVxuICAgIHt0aW1lVmFsdWVzWzFdID8gPGRpdiBjbGFzc05hbWU9XCJ0aW1lLXZhbHVlXCI+e3RpbWVWYWx1ZXNbMV19PC9kaXY+IDogbnVsbH1cbiAgPC9DZW50ZXJGbGV4Ym94PlxuKTtcblxuaW50ZXJmYWNlIEZsb2F0aW5nVGltZURpc3BsYXlQcm9wcyB7XG4gIGN1cnJlbnRUaW1lOiBudW1iZXIgfCBudW1iZXJbXTtcbiAgZGVmYXVsdFRpbWVGb3JtYXQ/OiBzdHJpbmcgfCBudWxsO1xuICB0aW1lRm9ybWF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGbG9hdGluZ1RpbWVEaXNwbGF5RmFjdG9yeSgpIHtcbiAgY29uc3QgRmxvYXRpbmdUaW1lRGlzcGxheSA9ICh7XG4gICAgY3VycmVudFRpbWUsXG4gICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgdGltZUZvcm1hdCxcbiAgICB0aW1lem9uZVxuICB9OiBGbG9hdGluZ1RpbWVEaXNwbGF5UHJvcHMpID0+IHtcbiAgICBjb25zdCB7ZGlzcGxheURhdGUsIGRpc3BsYXlUaW1lfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBUaW1lID0gQXJyYXkuaXNBcnJheShjdXJyZW50VGltZSkgPyBjdXJyZW50VGltZSA6IFtjdXJyZW50VGltZV07XG4gICAgICBjb25zdCBoYXNVc2VyRm9ybWF0ID0gdHlwZW9mIHRpbWVGb3JtYXQgPT09ICdzdHJpbmcnO1xuICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9IChoYXNVc2VyRm9ybWF0ID8gdGltZUZvcm1hdCA6IGRlZmF1bHRUaW1lRm9ybWF0KSB8fCBERUZBVUxUX1RJTUVfRk9STUFUO1xuICAgICAgY29uc3QgZGF0ZUZ1bmMgPSBkYXRldGltZUZvcm1hdHRlcih0aW1lem9uZSk7XG5cbiAgICAgIGlmIChoYXNVc2VyRm9ybWF0KSB7XG4gICAgICAgIC8vIGRvbnQgc3BsaXQgdGltZSBpZiB1c2VyIGRlZmluZWQgaXRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5RGF0ZTogZ3JvdXBUaW1lLm1hcChkYXRlRnVuYyhjdXJyZW50Rm9ybWF0KSksXG4gICAgICAgICAgZGlzcGxheVRpbWU6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXBUaW1lLnJlZHVjZTx7ZGlzcGxheURhdGU6IHN0cmluZ1tdOyBkaXNwbGF5VGltZTogc3RyaW5nW119PihcbiAgICAgICAgKGFjY3UsIGN1cnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbZGF0ZUZvcm1hdCwgZGF0ZXRpbWVGb3JtYXRdID0gY3VycmVudEZvcm1hdC5zcGxpdCgnICcpO1xuICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlRnVuYyhkYXRlRm9ybWF0KShjdXJyKTtcbiAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nID0gZGF0ZXRpbWVGb3JtYXQgPyBkYXRlRnVuYyhkYXRldGltZUZvcm1hdCkoY3VycikgOiBudWxsO1xuXG4gICAgICAgICAgaWYgKCFhY2N1LmRpc3BsYXlEYXRlLmluY2x1ZGVzKGRhdGVTdHJpbmcpKSB7XG4gICAgICAgICAgICBhY2N1LmRpc3BsYXlEYXRlLnB1c2goZGF0ZVN0cmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgICAgICAgICBhY2N1LmRpc3BsYXlUaW1lLnB1c2godGltZVN0cmluZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICAgIH0sXG4gICAgICAgIHtkaXNwbGF5RGF0ZTogW10sIGRpc3BsYXlUaW1lOiBbXX0gYXMge2Rpc3BsYXlEYXRlOiBzdHJpbmdbXTsgZGlzcGxheVRpbWU6IHN0cmluZ1tdfVxuICAgICAgKTtcbiAgICB9LCBbY3VycmVudFRpbWUsIHRpbWVGb3JtYXQsIGRlZmF1bHRUaW1lRm9ybWF0LCB0aW1lem9uZV0pO1xuXG4gICAgY29uc3QgdHdvR3JvdXBzID0gZGlzcGxheURhdGUubGVuZ3RoID09PSAyICYmIGRpc3BsYXlUaW1lLmxlbmd0aCA9PT0gMjtcbiAgICBjb25zdCBib3R0b21Sb3cgPSBkaXNwbGF5VGltZS5sZW5ndGggPyBkaXNwbGF5VGltZSA6IGRpc3BsYXlEYXRlLmxlbmd0aCA/IGRpc3BsYXlEYXRlIDogbnVsbDtcbiAgICBjb25zdCB0b3BSb3cgPSBkaXNwbGF5RGF0ZS5sZW5ndGggJiYgZGlzcGxheVRpbWUubGVuZ3RoID8gZGlzcGxheURhdGUgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheSBjbGFzc05hbWU9XCJhbmltYXRpb24tY29udHJvbF9fdGltZS1kaXNwbGF5XCI+XG4gICAgICAgICAge3R3b0dyb3VwcyA/IChcbiAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheUdyb3Vwcz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRpbWVWYWx1ZUdyb3VwPlxuICAgICAgICAgICAgICAgIHsvKiBUaW1lIFN0YXJ0ICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMF19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzBdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgIDxUaW1lRGl2aWRlciAvPlxuICAgICAgICAgICAgICA8U3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgICAgey8qIFRpbWUgRW5kICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMV19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzFdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5R3JvdXBzPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICAgICB7dG9wUm93ID8gKFxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICAgIDxUaW1lRGlzcGxheVJvdyB0aW1lVmFsdWVzPXt0b3BSb3d9IC8+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtib3R0b21Sb3cgPyAoXG4gICAgICAgICAgICAgICAgPFN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICAgICAgPFRpbWVEaXNwbGF5Um93IHRpbWVWYWx1ZXM9e2JvdHRvbVJvd30gLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXk+XG4gICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5V3JhcHBlcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBGbG9hdGluZ1RpbWVEaXNwbGF5O1xufVxuIl0sIm1h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