adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
223 lines (186 loc) • 29 kB
JavaScript
var _excluded = ["currentHour", "currentMinute", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "size", "selectedValue", "type"];
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import React, { forwardRef, useContext, useImperativeHandle, useRef, useEffect, memo } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import { getRequestAnimationFrame } from "../_util/raf";
import "./style";
import { extractHMSFromTime, hours, minutes, seconds } from "./core";
import { ConfigContext, getComputedSize } from "../config-provider";
var prefix = "adui-time";
var noop = function noop() {};
var scrollTo = function scrollTo(element, to, duration) {
var reqAnimFrame = getRequestAnimationFrame();
if (duration <= 0) {
element.scrollTop = to;
return;
}
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
reqAnimFrame(function () {
element.scrollTop += perTick;
if (element.scrollTop === to) {
return;
}
scrollTo(element, to, duration - 10);
});
};
var TimeSelect = forwardRef(function (_ref, ref) {
var currentHour = _ref.currentHour,
currentMinute = _ref.currentMinute,
disabledHours = _ref.disabledHours,
disabledMinutes = _ref.disabledMinutes,
disabledSeconds = _ref.disabledSeconds,
maxTime = _ref.maxTime,
minTime = _ref.minTime,
onChange = _ref.onChange,
onlyHour = _ref.onlyHour,
size = _ref.size,
selectedValue = _ref.selectedValue,
type = _ref.type,
otherProps = _objectWithoutProperties(_ref, _excluded);
var selectRef = useRef(null);
useImperativeHandle(ref, function () {
return {
select: selectRef
};
});
var handleClick = function handleClick(item) {
onChange(item, type);
};
var _useContext = useContext(ConfigContext),
sizeContext = _useContext.size;
var isDisabled = function isDisabled(value, minHour, minMinute, minSecond, maxHour, maxMinute, maxSecond, isOnlyHour) {
if (type === "hour") {
return value < minHour || value > (isOnlyHour && !maxTime ? "24:00" : maxHour);
}
if (type === "minute") {
if (minHour === maxHour) {
return value < minMinute || value > maxMinute;
}
if (minHour === currentHour) {
return value < minMinute;
}
if (maxHour === currentHour) {
return value > maxMinute;
}
}
if (type === "second") {
if (minHour === maxHour) {
if (minMinute === maxMinute) {
return value < minSecond || value > maxSecond;
}
if (minMinute === currentMinute) {
return value < minSecond;
}
if (maxMinute === currentMinute) {
return value > maxSecond;
}
}
if (minHour === currentHour) {
if (minMinute === currentMinute) {
return value < minSecond;
}
}
if (maxHour === currentHour) {
if (maxMinute === currentMinute) {
return value > maxSecond;
}
}
}
return false;
};
var updateScrollTop = function updateScrollTop(duration) {
if (selectRef !== null && selectRef !== void 0 && selectRef.current) {
var activeItem = selectRef.current.getElementsByClassName("".concat(prefix, "-active"))[0];
if (activeItem) {
var offsetTop = activeItem.offsetTop;
if (offsetTop !== undefined) {
if (duration) {
scrollTo(selectRef.current, offsetTop, duration);
} else {
selectRef.current.scrollTop = offsetTop;
}
}
}
}
};
useEffect(function () {
updateScrollTop(0);
}, []);
useEffect(function () {
updateScrollTop(120);
}, [selectedValue]);
var classSet = classNames("".concat(prefix, "-timeSelect"), "".concat(prefix, "-").concat(getComputedSize(size, sizeContext)), _defineProperty({}, "".concat(prefix, "-integerTimeSelect"), onlyHour));
var _extractHMSFromTime = extractHMSFromTime(minTime),
minHour = _extractHMSFromTime.hour,
minMinute = _extractHMSFromTime.minute,
minSecond = _extractHMSFromTime.second;
var _extractHMSFromTime2 = extractHMSFromTime(maxTime),
maxHour = _extractHMSFromTime2.hour,
maxMinute = _extractHMSFromTime2.minute,
maxSecond = _extractHMSFromTime2.second;
var items = [];
if (type === "second") {
items = seconds;
} else if (type === "minute") {
items = minutes;
} else {
items = hours;
}
return React.createElement("div", _extends({
className: classSet,
ref: selectRef
}, otherProps), items.map(function (value) {
var _classNames2;
var disabled = isDisabled(parseInt(value, 10), parseInt(minHour || "00", 10), parseInt(minMinute || "00", 10), parseInt(minSecond || "00", 10), parseInt(maxHour || "24", 10), parseInt(maxMinute || "59", 10), parseInt(maxSecond || "59", 10), onlyHour);
if ((disabled || disabledHours && disabledHours(value)) && type === "hour" || disabledMinutes && disabledMinutes(value) && type === "minute" || disabledSeconds && disabledSeconds(value) && type === "second") {
return null;
}
var itemClassSet = classNames("".concat(prefix, "-item"), (_classNames2 = {}, _defineProperty(_classNames2, "".concat(prefix, "-active"), selectedValue === value), _defineProperty(_classNames2, "".concat(prefix, "-disabled"), disabled), _classNames2));
return React.createElement("div", {
role: "none",
className: itemClassSet,
key: value,
onClick: function onClick() {
if (!disabled) {
handleClick(value);
}
}
}, onlyHour ? "".concat(value, ":00") : value);
}));
});
TimeSelect.displayName = "TimeSelect";
TimeSelect.propTypes = {
currentHour: PropTypes.number,
currentMinute: PropTypes.number,
disabledHours: PropTypes.func,
disabledMinutes: PropTypes.func,
disabledSeconds: PropTypes.func,
maxTime: PropTypes.string,
minTime: PropTypes.string,
onChange: PropTypes.any,
onlyHour: PropTypes.bool,
selectedValue: PropTypes.string,
size: PropTypes.oneOf(["mini", "small", "medium", "large"]),
type: PropTypes.any
};
TimeSelect.defaultProps = {
currentHour: null,
currentMinute: null,
disabledHours: noop,
disabledMinutes: noop,
disabledSeconds: noop,
maxTime: "24:00",
minTime: "00:00",
onChange: noop,
onlyHour: false,
selectedValue: null,
size: "small",
type: "hour"
};
export default memo(TimeSelect);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsIm1lbW8iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXh0cmFjdEhNU0Zyb21UaW1lIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIkNvbmZpZ0NvbnRleHQiLCJnZXRDb21wdXRlZFNpemUiLCJwcmVmaXgiLCJub29wIiwic2Nyb2xsVG8iLCJlbGVtZW50IiwidG8iLCJkdXJhdGlvbiIsInJlcUFuaW1GcmFtZSIsInNjcm9sbFRvcCIsImRpZmZlcmVuY2UiLCJwZXJUaWNrIiwiVGltZVNlbGVjdCIsInJlZiIsImN1cnJlbnRIb3VyIiwiY3VycmVudE1pbnV0ZSIsImRpc2FibGVkSG91cnMiLCJkaXNhYmxlZE1pbnV0ZXMiLCJkaXNhYmxlZFNlY29uZHMiLCJtYXhUaW1lIiwibWluVGltZSIsIm9uQ2hhbmdlIiwib25seUhvdXIiLCJzaXplIiwic2VsZWN0ZWRWYWx1ZSIsInR5cGUiLCJvdGhlclByb3BzIiwic2VsZWN0UmVmIiwic2VsZWN0IiwiaGFuZGxlQ2xpY2siLCJpdGVtIiwic2l6ZUNvbnRleHQiLCJpc0Rpc2FibGVkIiwidmFsdWUiLCJtaW5Ib3VyIiwibWluTWludXRlIiwibWluU2Vjb25kIiwibWF4SG91ciIsIm1heE1pbnV0ZSIsIm1heFNlY29uZCIsImlzT25seUhvdXIiLCJ1cGRhdGVTY3JvbGxUb3AiLCJjdXJyZW50IiwiYWN0aXZlSXRlbSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJvZmZzZXRUb3AiLCJ1bmRlZmluZWQiLCJjbGFzc1NldCIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJpdGVtcyIsIm1hcCIsImRpc2FibGVkIiwicGFyc2VJbnQiLCJpdGVtQ2xhc3NTZXQiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIm51bWJlciIsImZ1bmMiLCJzdHJpbmciLCJhbnkiLCJib29sIiwib25lT2YiLCJkZWZhdWx0UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3RpbWUtcGlja2VyL1RpbWVTZWxlY3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgbWVtbyxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IHsgZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIH0gZnJvbSBcIi4uL191dGlsL3JhZlwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCB7IGV4dHJhY3RITVNGcm9tVGltZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSBmcm9tIFwiLi9jb3JlXCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQsIGdldENvbXB1dGVkU2l6ZSB9IGZyb20gXCIuLi9jb25maWctcHJvdmlkZXJcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktdGltZVwiXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJVGltZVNlbGVjdFByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIGN1cnJlbnRIb3VyPzogbnVtYmVyIHwgbnVsbFxuICBjdXJyZW50TWludXRlPzogbnVtYmVyIHwgbnVsbFxuICBkaXNhYmxlZEhvdXJzPzogKGhvdXI/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICBkaXNhYmxlZE1pbnV0ZXM/OiAobWludXRlPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgZGlzYWJsZWRTZWNvbmRzPzogKHNlY29uZD86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIG1heFRpbWU/OiBzdHJpbmcgfCBudWxsXG4gIG1pblRpbWU/OiBzdHJpbmcgfCBudWxsXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZywgdHlwZTogXCJob3VyXCIgfCBcIm1pbnV0ZVwiIHwgXCJzZWNvbmRcIikgPT4gdm9pZFxuICBvbmx5SG91cj86IGJvb2xlYW5cbiAgc2l6ZT86IFwibWluaVwiIHwgXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIlxuICBzZWxlY3RlZFZhbHVlPzogbnVsbCB8IHN0cmluZ1xuICB0eXBlOiBcImhvdXJcIiB8IFwibWludXRlXCIgfCBcInNlY29uZFwiXG59XG5cbmNvbnN0IHNjcm9sbFRvID0gKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50LCB0bzogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHJlcUFuaW1GcmFtZSA9IGdldFJlcXVlc3RBbmltYXRpb25GcmFtZSgpXG5cbiAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRvXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgZGlmZmVyZW5jZSA9IHRvIC0gZWxlbWVudC5zY3JvbGxUb3BcbiAgY29uc3QgcGVyVGljayA9IChkaWZmZXJlbmNlIC8gZHVyYXRpb24pICogMTBcblxuICByZXFBbmltRnJhbWUoKCkgPT4ge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wICs9IHBlclRpY2tcbiAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApXG4gIH0pXG59XG5cbmNvbnN0IFRpbWVTZWxlY3Q6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUaW1lU2VsZWN0UHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbj4gPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgY3VycmVudEhvdXIsXG4gICAgICBjdXJyZW50TWludXRlLFxuICAgICAgZGlzYWJsZWRIb3VycyxcbiAgICAgIGRpc2FibGVkTWludXRlcyxcbiAgICAgIGRpc2FibGVkU2Vjb25kcyxcbiAgICAgIG1heFRpbWUsXG4gICAgICBtaW5UaW1lLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbmx5SG91cixcbiAgICAgIHNpemUsXG4gICAgICBzZWxlY3RlZFZhbHVlLFxuICAgICAgdHlwZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGltZVNlbGVjdFByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBzZWxlY3RSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgc2VsZWN0OiBzZWxlY3RSZWYsXG4gICAgfSkpXG5cbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgIG9uQ2hhbmdlKGl0ZW0sIHR5cGUpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IChcbiAgICAgIHZhbHVlOiBudW1iZXIsXG4gICAgICBtaW5Ib3VyOiBudW1iZXIsXG4gICAgICBtaW5NaW51dGU6IG51bWJlcixcbiAgICAgIG1pblNlY29uZDogbnVtYmVyLFxuICAgICAgbWF4SG91cjogbnVtYmVyLFxuICAgICAgbWF4TWludXRlOiBudW1iZXIsXG4gICAgICBtYXhTZWNvbmQ6IG51bWJlcixcbiAgICAgIGlzT25seUhvdXI/OiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gXCJob3VyXCIpIHtcbiAgICAgICAgLy8g6L+Z6YeM6KaB5rOo5oSP5oqK5pW054K56YCJ5oupIDI0OjAwIOeahOaDheWGteeJueauiuWkhOeQhlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIDwgbWluSG91ciB8fFxuICAgICAgICAgIHZhbHVlID4gKGlzT25seUhvdXIgJiYgIW1heFRpbWUgPyBcIjI0OjAwXCIgOiBtYXhIb3VyKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gXCJtaW51dGVcIikge1xuICAgICAgICAvLyDlnKjlkIzkuIDkuKrlsI/ml7blhoVcbiAgICAgICAgaWYgKG1pbkhvdXIgPT09IG1heEhvdXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW5NaW51dGUgfHwgdmFsdWUgPiBtYXhNaW51dGVcbiAgICAgICAgfVxuICAgICAgICAvLyDlnKjmnIDlsI/nmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWluTWludXRlIOS7peS4i+eahCBkaXNhYmxlZFxuICAgICAgICBpZiAobWluSG91ciA9PT0gY3VycmVudEhvdXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW5NaW51dGVcbiAgICAgICAgfVxuICAgICAgICAvLyDlnKjmnIDlpKfnmoTlsI/ml7blhoXml7bvvIzov5nml7blgJnopoHmioogbWF4TWludXRlIOS7peS4iueahCBkaXNhYmxlZFxuICAgICAgICBpZiAobWF4SG91ciA9PT0gY3VycmVudEhvdXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPiBtYXhNaW51dGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFwic2Vjb25kXCIpIHtcbiAgICAgICAgLy8g5Zyo5ZCM5LiA5Liq5bCP5pe25YaFXG4gICAgICAgIGlmIChtaW5Ib3VyID09PSBtYXhIb3VyKSB7XG4gICAgICAgICAgLy8g5Zyo5ZCM5LiA5Liq5YiG6ZKf5YaFXG4gICAgICAgICAgaWYgKG1pbk1pbnV0ZSA9PT0gbWF4TWludXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW5TZWNvbmQgfHwgdmFsdWUgPiBtYXhTZWNvbmRcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g5Zyo5pyA5bCP55qE5YiG6ZKf5YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1pblNlY29uZCDku6XkuIvnmoQgZGlzYWJsZWRcbiAgICAgICAgICBpZiAobWluTWludXRlID09PSBjdXJyZW50TWludXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW5TZWNvbmRcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g5Zyo5pyA5aSn55qE5YiG6ZKf5YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1heFNlY29uZCDku6XkuIrnmoQgZGlzYWJsZWRcbiAgICAgICAgICBpZiAobWF4TWludXRlID09PSBjdXJyZW50TWludXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiBtYXhTZWNvbmRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g5Zyo5pyA5bCP55qE5bCP5pe25YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1pbk1pbnV0ZSDku6XkuIvnmoQgZGlzYWJsZWRcbiAgICAgICAgaWYgKG1pbkhvdXIgPT09IGN1cnJlbnRIb3VyKSB7XG4gICAgICAgICAgLy8g5Zyo5pyA5bCP55qE5bCP5pe25YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1pbk1pbnV0ZSDku6XkuIvnmoQgZGlzYWJsZWRcbiAgICAgICAgICBpZiAobWluTWludXRlID09PSBjdXJyZW50TWludXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW5TZWNvbmRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g5Zyo5pyA5aSn55qE5bCP5pe25YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1heE1pbnV0ZSDku6XkuIrnmoQgZGlzYWJsZWRcbiAgICAgICAgaWYgKG1heEhvdXIgPT09IGN1cnJlbnRIb3VyKSB7XG4gICAgICAgICAgLy8g5Zyo5pyA5aSn55qE5bCP5pe25YaF5pe277yM6L+Z5pe25YCZ6KaB5oqKIG1heE1pbnV0ZSDku6XkuIrnmoQgZGlzYWJsZWRcbiAgICAgICAgICBpZiAobWF4TWludXRlID09PSBjdXJyZW50TWludXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiBtYXhTZWNvbmRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlU2Nyb2xsVG9wID0gKGR1cmF0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChzZWxlY3RSZWY/LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbTogUGFydGlhbDxIVE1MRGl2RWxlbWVudD4gPVxuICAgICAgICAgIHNlbGVjdFJlZi5jdXJyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYCR7cHJlZml4fS1hY3RpdmVgKVswXVxuICAgICAgICBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0VG9wIH0gPSBhY3RpdmVJdGVtXG4gICAgICAgICAgaWYgKG9mZnNldFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG8oc2VsZWN0UmVmLmN1cnJlbnQsIG9mZnNldFRvcCwgZHVyYXRpb24pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBvZmZzZXRUb3BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgdXBkYXRlU2Nyb2xsVG9wKDApXG4gICAgfSwgW10pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgdXBkYXRlU2Nyb2xsVG9wKDEyMClcbiAgICB9LCBbc2VsZWN0ZWRWYWx1ZV0pXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBgJHtwcmVmaXh9LXRpbWVTZWxlY3RgLFxuICAgICAgYCR7cHJlZml4fS0ke2dldENvbXB1dGVkU2l6ZShzaXplLCBzaXplQ29udGV4dCl9YCxcbiAgICAgIHtcbiAgICAgICAgW2Ake3ByZWZpeH0taW50ZWdlclRpbWVTZWxlY3RgXTogb25seUhvdXIsXG4gICAgICB9XG4gICAgKVxuXG4gICAgY29uc3Qge1xuICAgICAgaG91cjogbWluSG91cixcbiAgICAgIG1pbnV0ZTogbWluTWludXRlLFxuICAgICAgc2Vjb25kOiBtaW5TZWNvbmQsXG4gICAgfSA9IGV4dHJhY3RITVNGcm9tVGltZShtaW5UaW1lKVxuICAgIGNvbnN0IHtcbiAgICAgIGhvdXI6IG1heEhvdXIsXG4gICAgICBtaW51dGU6IG1heE1pbnV0ZSxcbiAgICAgIHNlY29uZDogbWF4U2Vjb25kLFxuICAgIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUobWF4VGltZSlcblxuICAgIGxldCBpdGVtczogc3RyaW5nW10gPSBbXVxuICAgIGlmICh0eXBlID09PSBcInNlY29uZFwiKSB7XG4gICAgICBpdGVtcyA9IHNlY29uZHNcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibWludXRlXCIpIHtcbiAgICAgIGl0ZW1zID0gbWludXRlc1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IGhvdXJzXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc1NldH0gcmVmPXtzZWxlY3RSZWZ9IHsuLi5vdGhlclByb3BzfT5cbiAgICAgICAge2l0ZW1zLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGlzRGlzYWJsZWQoXG4gICAgICAgICAgICBwYXJzZUludCh2YWx1ZSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWluSG91ciB8fCBcIjAwXCIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbk1pbnV0ZSB8fCBcIjAwXCIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pblNlY29uZCB8fCBcIjAwXCIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1heEhvdXIgfHwgXCIyNFwiLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtYXhNaW51dGUgfHwgXCI1OVwiLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtYXhTZWNvbmQgfHwgXCI1OVwiLCAxMCksXG4gICAgICAgICAgICBvbmx5SG91clxuICAgICAgICAgIClcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgoZGlzYWJsZWQgfHwgKGRpc2FibGVkSG91cnMgJiYgZGlzYWJsZWRIb3Vycyh2YWx1ZSkpKSAmJlxuICAgICAgICAgICAgICB0eXBlID09PSBcImhvdXJcIikgfHxcbiAgICAgICAgICAgIChkaXNhYmxlZE1pbnV0ZXMgJiYgZGlzYWJsZWRNaW51dGVzKHZhbHVlKSAmJiB0eXBlID09PSBcIm1pbnV0ZVwiKSB8fFxuICAgICAgICAgICAgKGRpc2FibGVkU2Vjb25kcyAmJiBkaXNhYmxlZFNlY29uZHModmFsdWUpICYmIHR5cGUgPT09IFwic2Vjb25kXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyDlsI/ml7bnmoQgZGlzYWJsZWQg55u05o6l5LiN5pi+56S677yM6ICM5LiN5piv5YGaIGRpc2FibGVkIOWkhOeQhlxuICAgICAgICAgICAgLy8g5YiG6ZKf55qEIGRpc2FibGVkIOaYvuekuu+8jOWmguaenOS8oOWFpeS6hiBkaXNhYmxlZE1pbnV0ZXMg5YiZ5LiN5pi+56S6XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGl0ZW1DbGFzc1NldCA9IGNsYXNzTmFtZXMoYCR7cHJlZml4fS1pdGVtYCwge1xuICAgICAgICAgICAgW2Ake3ByZWZpeH0tYWN0aXZlYF06IHNlbGVjdGVkVmFsdWUgPT09IHZhbHVlLFxuICAgICAgICAgICAgW2Ake3ByZWZpeH0tZGlzYWJsZWRgXTogZGlzYWJsZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzU2V0fVxuICAgICAgICAgICAgICBrZXk9e3ZhbHVlfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xpY2sodmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7b25seUhvdXIgPyBgJHt2YWx1ZX06MDBgIDogdmFsdWV9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG4pXG5cblRpbWVTZWxlY3QuZGlzcGxheU5hbWUgPSBcIlRpbWVTZWxlY3RcIlxuXG5UaW1lU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOW9k+WJjeWwj+aXtuWAvFxuICAgKi9cbiAgY3VycmVudEhvdXI6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlvZPliY3liIbpkp/lgLxcbiAgICovXG4gIGN1cnJlbnRNaW51dGU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDkuI3lj6/pgInnmoTlsI/ml7ZcbiAgICovXG4gIGRpc2FibGVkSG91cnM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5LiN5Y+v6YCJ55qE5YiG6ZKfXG4gICAqL1xuICBkaXNhYmxlZE1pbnV0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5LiN5Y+v6YCJ55qE56eSXG4gICAqL1xuICBkaXNhYmxlZFNlY29uZHM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze05q6155qE5pyA5aSn5YC8XG4gICAqL1xuICBtYXhUaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze05q6155qE5pyA5bCP5YC8XG4gICAqL1xuICBtaW5UaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5pS55Y+Y6YCJ5oup55qE5YC8XG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpuaYr+aVtOeCuVxuICAgKi9cbiAgb25seUhvdXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5bey57uP6YCJ5oup55qE5YC8XG4gICAqL1xuICBzZWxlY3RlZFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog5Yik5pat6YCJ5oup5qGG55qE57G75Z6LXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxufVxuXG5UaW1lU2VsZWN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY3VycmVudEhvdXI6IG51bGwsXG4gIGN1cnJlbnRNaW51dGU6IG51bGwsXG4gIGRpc2FibGVkSG91cnM6IG5vb3AsXG4gIGRpc2FibGVkTWludXRlczogbm9vcCxcbiAgZGlzYWJsZWRTZWNvbmRzOiBub29wLFxuICBtYXhUaW1lOiBcIjI0OjAwXCIsXG4gIG1pblRpbWU6IFwiMDA6MDBcIixcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIG9ubHlIb3VyOiBmYWxzZSxcbiAgc2VsZWN0ZWRWYWx1ZTogbnVsbCxcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB0eXBlOiBcImhvdXJcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhUaW1lU2VsZWN0KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUNFQyxVQURGLEVBRUVD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