UNPKG

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>

210 lines 30.8 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var _excluded = ["className", "defaultValue", "disabled", "max", "min", "onBlur", "onChange", "onFocus", "onKeyDown", "precision", "step", "value"], _excluded2 = ["leftElement", "rightElement"], _excluded3 = ["leftElement", "rightElement"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } import React, { forwardRef, useImperativeHandle, useRef, useState, memo } from "react"; import PropTypes from "prop-types"; import classNames from "classnames"; import Input from "../input"; import Icon from "../icon"; import "./style"; import { isLegal, stringToNumber, getDecimalNumber } from "./core"; var prefix = "adui-numeric-input"; var NumericInput = forwardRef(function (_ref, ref) { var className = _ref.className, defaultValue = _ref.defaultValue, disabled = _ref.disabled, max = _ref.max, min = _ref.min, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, precisionProp = _ref.precision, step = _ref.step, valueProp = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var precision = precisionProp === undefined ? getDecimalNumber(step || 1) : precisionProp; var _useState = useState(function () { var valueState = valueProp !== null ? valueProp : defaultValue; if (typeof valueState !== "number") { valueState = ""; } return valueState; }), _useState2 = _slicedToArray(_useState, 2), value = _useState2[0], setValue = _useState2[1]; var _useState3 = useState(typeof value === "number" ? value.toFixed(precision) : ""), _useState4 = _slicedToArray(_useState3, 2), inputValue = _useState4[0], setInputValue = _useState4[1]; var inputRef = useRef(null); if (valueProp !== null && value !== valueProp) { var _inputRef$current; setValue(typeof valueProp === "number" ? valueProp : ""); if (document.activeElement !== ((_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.input)) { setInputValue(typeof valueProp === "number" ? valueProp.toFixed(precision) : ""); } } useImperativeHandle(ref, function () { return { current: inputRef.current }; }); var handleValueStepChange = function handleValueStepChange(type, stp, inputVal) { var val = stringToNumber(inputVal); var decimal = getDecimalNumber(stp); if (type === "plus") { return (val * Math.pow(10, decimal) + stp * Math.pow(10, decimal)) / Math.pow(10, decimal); } return (val * Math.pow(10, decimal) - stp * Math.pow(10, decimal)) / Math.pow(10, decimal); }; var handleButtonClick = function handleButtonClick(type) { var valueStepChanged = handleValueStepChange(type, step || 1, inputValue); if (min !== undefined && valueStepChanged < min) { valueStepChanged = min; } else if (max !== undefined && valueStepChanged > max) { valueStepChanged = max; } if (valueProp === null) { setValue(valueStepChanged); setInputValue(valueStepChanged.toFixed(precision)); } if (onChange) { onChange(valueStepChanged); } }; var handleInputChange = function handleInputChange(_ref2) { var val = _ref2.target.value; if (isLegal(step || 1, val, min, max)) { if (valueProp === null) { setValue(stringToNumber(val)); } if (onChange) { onChange(stringToNumber(val)); } } if (valueProp === null) { setInputValue(val); } }; var handleInputBlur = function handleInputBlur(e) { var val = e.target.value; if (typeof value !== "number") { setInputValue(""); } else { var valueFixed = value.toFixed(precision); if (!isLegal(step || 1, val, min, max) || val !== valueFixed) { setInputValue(valueFixed); } } if (onBlur) { onBlur(e); } }; var handleMouseDown = function handleMouseDown(type) { handleButtonClick(type); setTimeout(function () { if (inputRef.current && document.activeElement !== inputRef.current.input) { var input = inputRef.current.input; var end = input.value.length; input.setSelectionRange(end, end); input.focus(); } }, 100); }; var handleKeyDown = function handleKeyDown(e) { var key = e.key; if (key === "ArrowUp") { e.preventDefault(); e.stopPropagation(); handleButtonClick("plus"); } if (key === "ArrowDown") { e.preventDefault(); e.stopPropagation(); handleButtonClick("minus"); } }; return React.createElement(Input, _extends({ className: classNames(className, "".concat(prefix), _defineProperty({}, "".concat(prefix, "-disabled"), disabled)), cleaveOptions: { numeral: true, numeralDecimalScale: precision, delimiter: "" }, disabled: disabled, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleKeyDown, value: inputValue, ref: inputRef, rightElement: React.createElement("div", { className: "".concat(prefix, "-buttons") }, React.createElement("div", { className: "".concat(prefix, "-button"), onClick: function onClick() { return handleMouseDown("plus"); }, role: "none" }, React.createElement(Icon, { icon: "arrow-up", interactive: !disabled, size: 12 })), React.createElement("div", { className: "".concat(prefix, "-button"), onClick: function onClick() { return handleMouseDown("minus"); }, role: "none" }, React.createElement(Icon, { icon: "arrow-down", interactive: !disabled, size: 12 }))) }, otherProps)); }); NumericInput.displayName = "NumericInput"; NumericInput.propTypes = { defaultValue: PropTypes.number, max: PropTypes.number, min: PropTypes.number, onChange: PropTypes.func, precision: PropTypes.number, step: PropTypes.number, value: PropTypes.number }; NumericInput.defaultProps = { defaultValue: null, max: undefined, min: undefined, onChange: function onChange() {}, precision: undefined, step: 1, value: null }; var MemoNumericInput = memo(NumericInput, function (_ref3, _ref4) { var leftElementNext = _ref4.leftElement, rightElementNext = _ref4.rightElement, nextProps = _objectWithoutProperties(_ref4, _excluded2); var leftElement = _ref3.leftElement, rightElement = _ref3.rightElement, prevProps = _objectWithoutProperties(_ref3, _excluded3); return JSON.stringify(prevProps) === JSON.stringify(nextProps); }); MemoNumericInput.displayName = "NumericInput"; export default MemoNumericInput; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwidXNlU3RhdGUiLCJtZW1vIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIklucHV0IiwiSWNvbiIsImlzTGVnYWwiLCJzdHJpbmdUb051bWJlciIsImdldERlY2ltYWxOdW1iZXIiLCJwcmVmaXgiLCJOdW1lcmljSW5wdXQiLCJfcmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJtYXgiLCJtaW4iLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJwcmVjaXNpb25Qcm9wIiwicHJlY2lzaW9uIiwic3RlcCIsInZhbHVlUHJvcCIsInZhbHVlIiwib3RoZXJQcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInVuZGVmaW5lZCIsIl91c2VTdGF0ZSIsInZhbHVlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXRWYWx1ZSIsIl91c2VTdGF0ZTMiLCJ0b0ZpeGVkIiwiX3VzZVN0YXRlNCIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiaW5wdXRSZWYiLCJfaW5wdXRSZWYkY3VycmVudCIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsImN1cnJlbnQiLCJpbnB1dCIsImhhbmRsZVZhbHVlU3RlcENoYW5nZSIsInR5cGUiLCJzdHAiLCJpbnB1dFZhbCIsInZhbCIsImRlY2ltYWwiLCJNYXRoIiwicG93IiwiaGFuZGxlQnV0dG9uQ2xpY2siLCJ2YWx1ZVN0ZXBDaGFuZ2VkIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJfcmVmMiIsInRhcmdldCIsImhhbmRsZUlucHV0Qmx1ciIsImUiLCJ2YWx1ZUZpeGVkIiwiaGFuZGxlTW91c2VEb3duIiwic2V0VGltZW91dCIsImVuZCIsImxlbmd0aCIsInNldFNlbGVjdGlvblJhbmdlIiwiZm9jdXMiLCJoYW5kbGVLZXlEb3duIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkiLCJjbGVhdmVPcHRpb25zIiwibnVtZXJhbCIsIm51bWVyYWxEZWNpbWFsU2NhbGUiLCJkZWxpbWl0ZXIiLCJyaWdodEVsZW1lbnQiLCJvbkNsaWNrIiwicm9sZSIsImljb24iLCJpbnRlcmFjdGl2ZSIsInNpemUiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJNZW1vTnVtZXJpY0lucHV0IiwiX3JlZjMiLCJfcmVmNCIsImxlZnRFbGVtZW50TmV4dCIsImxlZnRFbGVtZW50IiwicmlnaHRFbGVtZW50TmV4dCIsIm5leHRQcm9wcyIsIl9leGNsdWRlZDIiLCJwcmV2UHJvcHMiLCJfZXhjbHVkZWQzIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvbnVtZXJpYy1pbnB1dC9OdW1lcmljSW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICBtZW1vLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgSW5wdXQsIHsgSUlucHV0UHJvcHMsIElJbnB1dFJlZiB9IGZyb20gXCIuLi9pbnB1dFwiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vaWNvblwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCB7IGlzTGVnYWwsIHN0cmluZ1RvTnVtYmVyLCBnZXREZWNpbWFsTnVtYmVyIH0gZnJvbSBcIi4vY29yZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1udW1lcmljLWlucHV0XCJcblxuZXhwb3J0IGludGVyZmFjZSBJTnVtZXJpY0lucHV0UHJvcHNcbiAgZXh0ZW5kcyBPbWl0PElJbnB1dFByb3BzLCBcImRlZmF1bHRWYWx1ZVwiIHwgXCJvbkNoYW5nZVwiIHwgXCJ2YWx1ZVwiPiB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6buY6K6k55qE5Yid5aeL5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBudW1iZXIgfCBudWxsXG4gIC8qKlxuICAgKiDorr7nva7mnIDlpKflgLxcbiAgICovXG4gIG1heD86IG51bWJlclxuICAvKipcbiAgICog6K6+572u5pyA5bCP5YC8XG4gICAqL1xuICBtaW4/OiBudW1iZXJcbiAgLyoqXG4gICAqIOWAvOaUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZT86IG51bWJlcikgPT4gdm9pZFxuICAvKipcbiAgICog6K6+572u57K+5bqmXG4gICAqL1xuICBwcmVjaXNpb24/OiBudW1iZXJcbiAgLyoqXG4gICAqIOiuvue9ruWinuWKoOeahOW5heW6plxuICAgKi9cbiAgc3RlcD86IG51bWJlclxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IG51bWJlciB8IG51bGxcbn1cblxuLyoqXG4gKiDmlbDlrZfovpPlhaXmoYbjgIJcbiAqL1xuY29uc3QgTnVtZXJpY0lucHV0OiBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICBJTnVtZXJpY0lucHV0UHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbj4gPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBtYXgsXG4gICAgICBtaW4sXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblByb3AsXG4gICAgICBzdGVwLFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJTnVtZXJpY0lucHV0UHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IHByZWNpc2lvbiA9XG4gICAgICBwcmVjaXNpb25Qcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWNpbWFsTnVtYmVyKHN0ZXAgfHwgMSkgOiBwcmVjaXNpb25Qcm9wXG5cbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPG51bWJlciB8IHN0cmluZz4oKCkgPT4ge1xuICAgICAgbGV0IHZhbHVlU3RhdGU6IFJlYWN0LlJlYWN0VGV4dCB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICAgICB2YWx1ZVByb3AgIT09IG51bGwgPyB2YWx1ZVByb3AgOiBkZWZhdWx0VmFsdWVcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVTdGF0ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB2YWx1ZVN0YXRlID0gXCJcIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlU3RhdGVcbiAgICB9KVxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgPyB2YWx1ZS50b0ZpeGVkKHByZWNpc2lvbikgOiBcIlwiXG4gICAgKVxuICAgIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPElJbnB1dFJlZj4obnVsbClcblxuICAgIC8vIOebuOW9k+S6jueUn+WRveWRqOacnyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsICYmIHZhbHVlICE9PSB2YWx1ZVByb3ApIHtcbiAgICAgIHNldFZhbHVlKHR5cGVvZiB2YWx1ZVByb3AgPT09IFwibnVtYmVyXCIgPyB2YWx1ZVByb3AgOiBcIlwiKVxuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGlucHV0UmVmLmN1cnJlbnQ/LmlucHV0KSB7XG4gICAgICAgIHNldElucHV0VmFsdWUoXG4gICAgICAgICAgdHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJudW1iZXJcIiA/IHZhbHVlUHJvcC50b0ZpeGVkKHByZWNpc2lvbikgOiBcIlwiXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGN1cnJlbnQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgfSkpXG5cbiAgICBjb25zdCBoYW5kbGVWYWx1ZVN0ZXBDaGFuZ2UgPSAoXG4gICAgICB0eXBlOiBcInBsdXNcIiB8IFwibWludXNcIixcbiAgICAgIHN0cDogbnVtYmVyLFxuICAgICAgaW5wdXRWYWw/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIC8vIOWwhiBpbnB1dFZhbCDovazmiJDmlbDlrZfvvIzlpoLmnpzmmK/nqbrlrZfnrKbkuLLvvIzliJnorqTkuLrku44gMCDlvIDlp4vliqDlh49cbiAgICAgIGNvbnN0IHZhbCA9IHN0cmluZ1RvTnVtYmVyKGlucHV0VmFsKVxuICAgICAgY29uc3QgZGVjaW1hbCA9IGdldERlY2ltYWxOdW1iZXIoc3RwKVxuICAgICAgaWYgKHR5cGUgPT09IFwicGx1c1wiKSB7XG4gICAgICAgIHJldHVybiAodmFsICogMTAgKiogZGVjaW1hbCArIHN0cCAqIDEwICoqIGRlY2ltYWwpIC8gMTAgKiogZGVjaW1hbFxuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWwgKiAxMCAqKiBkZWNpbWFsIC0gc3RwICogMTAgKiogZGVjaW1hbCkgLyAxMCAqKiBkZWNpbWFsXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQnV0dG9uQ2xpY2sgPSAodHlwZTogXCJwbHVzXCIgfCBcIm1pbnVzXCIpID0+IHtcbiAgICAgIGxldCB2YWx1ZVN0ZXBDaGFuZ2VkID0gaGFuZGxlVmFsdWVTdGVwQ2hhbmdlKHR5cGUsIHN0ZXAgfHwgMSwgaW5wdXRWYWx1ZSlcbiAgICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZVN0ZXBDaGFuZ2VkIDwgbWluKSB7XG4gICAgICAgIHZhbHVlU3RlcENoYW5nZWQgPSBtaW5cbiAgICAgIH0gZWxzZSBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsdWVTdGVwQ2hhbmdlZCA+IG1heCkge1xuICAgICAgICB2YWx1ZVN0ZXBDaGFuZ2VkID0gbWF4XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlU3RlcENoYW5nZWQpXG4gICAgICAgIHNldElucHV0VmFsdWUodmFsdWVTdGVwQ2hhbmdlZC50b0ZpeGVkKHByZWNpc2lvbikpXG4gICAgICB9XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UodmFsdWVTdGVwQ2hhbmdlZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9ICh7XG4gICAgICB0YXJnZXQ6IHsgdmFsdWU6IHZhbCB9LFxuICAgIH06IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoaXNMZWdhbChzdGVwIHx8IDEsIHZhbCwgbWluLCBtYXgpKSB7XG4gICAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRWYWx1ZShzdHJpbmdUb051bWJlcih2YWwpKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgIG9uQ2hhbmdlKHN0cmluZ1RvTnVtYmVyKHZhbCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRCbHVyID0gKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdGFyZ2V0OiB7IHZhbHVlOiB2YWwgfSxcbiAgICAgIH0gPSBlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHNldElucHV0VmFsdWUoXCJcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlRml4ZWQgPSB2YWx1ZS50b0ZpeGVkKHByZWNpc2lvbilcbiAgICAgICAgaWYgKCFpc0xlZ2FsKHN0ZXAgfHwgMSwgdmFsLCBtaW4sIG1heCkgfHwgdmFsICE9PSB2YWx1ZUZpeGVkKSB7XG4gICAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZUZpeGVkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9ICh0eXBlOiBcInBsdXNcIiB8IFwibWludXNcIikgPT4ge1xuICAgICAgaGFuZGxlQnV0dG9uQ2xpY2sodHlwZSlcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGlucHV0UmVmLmN1cnJlbnQuaW5wdXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgeyBpbnB1dCB9ID0gaW5wdXRSZWYuY3VycmVudFxuICAgICAgICAgIGNvbnN0IGVuZCA9IGlucHV0LnZhbHVlLmxlbmd0aFxuICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGVuZCwgZW5kKVxuICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgeyBrZXkgfSA9IGVcbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGhhbmRsZUJ1dHRvbkNsaWNrKFwicGx1c1wiKVxuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBoYW5kbGVCdXR0b25DbGljayhcIm1pbnVzXCIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxJbnB1dFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3NOYW1lLCBgJHtwcmVmaXh9YCwge1xuICAgICAgICAgIFtgJHtwcmVmaXh9LWRpc2FibGVkYF06IGRpc2FibGVkLFxuICAgICAgICB9KX1cbiAgICAgICAgY2xlYXZlT3B0aW9ucz17e1xuICAgICAgICAgIG51bWVyYWw6IHRydWUsXG4gICAgICAgICAgbnVtZXJhbERlY2ltYWxTY2FsZTogcHJlY2lzaW9uLFxuICAgICAgICAgIGRlbGltaXRlcjogXCJcIixcbiAgICAgICAgfX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlSW5wdXRCbHVyfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICByaWdodEVsZW1lbnQ9e1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWJ1dHRvbnNgfT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWJ1dHRvbmB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vdXNlRG93bihcInBsdXNcIil9XG4gICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gaWNvbj1cImFycm93LXVwXCIgaW50ZXJhY3RpdmU9eyFkaXNhYmxlZH0gc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWJ1dHRvbmB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vdXNlRG93bihcIm1pbnVzXCIpfVxuICAgICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIGljb249XCJhcnJvdy1kb3duXCIgaW50ZXJhY3RpdmU9eyFkaXNhYmxlZH0gc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG4pXG5cbk51bWVyaWNJbnB1dC5kaXNwbGF5TmFtZSA9IFwiTnVtZXJpY0lucHV0XCJcblxuTnVtZXJpY0lucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOm7mOiupOeahOWIneWni+WAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog6K6+572u5pyA5aSn5YC8XG4gICAqL1xuICBtYXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDorr7nva7mnIDlsI/lgLxcbiAgICovXG4gIG1pbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOWAvOaUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7nsr7luqZcbiAgICovXG4gIHByZWNpc2lvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOWinuWHj+eahOW5heW6plxuICAgKi9cbiAgc3RlcDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOWAvCAtIOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG59XG5cbk51bWVyaWNJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgbWF4OiB1bmRlZmluZWQsXG4gIG1pbjogdW5kZWZpbmVkLFxuICBvbkNoYW5nZTogKCkgPT4ge30sXG4gIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICBzdGVwOiAxLFxuICB2YWx1ZTogbnVsbCxcbn1cblxuY29uc3QgTWVtb051bWVyaWNJbnB1dCA9IG1lbW8oXG4gIE51bWVyaWNJbnB1dCxcbiAgKFxuICAgIHsgbGVmdEVsZW1lbnQsIHJpZ2h0RWxlbWVudCwgLi4ucHJldlByb3BzIH0sXG4gICAge1xuICAgICAgbGVmdEVsZW1lbnQ6IGxlZnRFbGVtZW50TmV4dCxcbiAgICAgIHJpZ2h0RWxlbWVudDogcmlnaHRFbGVtZW50TmV4dCxcbiAgICAgIC4uLm5leHRQcm9wc1xuICAgIH1cbiAgKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2UHJvcHMpID09PSBKU09OLnN0cmluZ2lmeShuZXh0UHJvcHMpXG4pXG5cbk1lbW9OdW1lcmljSW5wdXQuZGlzcGxheU5hbWUgPSBcIk51bWVyaWNJbnB1dFwiXG5cbmV4cG9ydCBkZWZhdWx0IE1lbW9OdW1lcmljSW5wdXRcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQUssSUFDVkMsVUFBVSxFQUNWQyxtQkFBbUIsRUFDbkJDLE1B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