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>
273 lines (217 loc) • 31.1 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _input = _interopRequireDefault(require("../input"));
var _icon = _interopRequireDefault(require("../icon"));
require("./style");
var _core = require("./core");
var _excluded = ["className", "defaultValue", "disabled", "max", "min", "onBlur", "onChange", "onFocus", "onKeyDown", "precision", "step", "value"],
_excluded2 = ["leftElement", "rightElement"],
_excluded3 = ["leftElement", "rightElement"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _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(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
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; }
var prefix = "adui-numeric-input";
var NumericInput = (0, _react.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 ? (0, _core.getDecimalNumber)(step || 1) : precisionProp;
var _useState = (0, _react.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 = (0, _react.useState)(typeof value === "number" ? value.toFixed(precision) : ""),
_useState4 = _slicedToArray(_useState3, 2),
inputValue = _useState4[0],
setInputValue = _useState4[1];
var inputRef = (0, _react.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) : "");
}
}
(0, _react.useImperativeHandle)(ref, function () {
return {
current: inputRef.current
};
});
var handleValueStepChange = function handleValueStepChange(type, stp, inputVal) {
var val = (0, _core.stringToNumber)(inputVal);
var decimal = (0, _core.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 ((0, _core.isLegal)(step || 1, val, min, max)) {
if (valueProp === null) {
setValue((0, _core.stringToNumber)(val));
}
if (onChange) {
onChange((0, _core.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 (!(0, _core.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["default"].createElement(_input["default"], _extends({
className: (0, _classnames["default"])(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["default"].createElement("div", {
className: "".concat(prefix, "-buttons")
}, _react["default"].createElement("div", {
className: "".concat(prefix, "-button"),
onClick: function onClick() {
return handleMouseDown("plus");
},
role: "none"
}, _react["default"].createElement(_icon["default"], {
icon: "arrow-up",
interactive: !disabled,
size: 12
})), _react["default"].createElement("div", {
className: "".concat(prefix, "-button"),
onClick: function onClick() {
return handleMouseDown("minus");
},
role: "none"
}, _react["default"].createElement(_icon["default"], {
icon: "arrow-down",
interactive: !disabled,
size: 12
})))
}, otherProps));
});
NumericInput.displayName = "NumericInput";
NumericInput.propTypes = {
defaultValue: _propTypes["default"].number,
max: _propTypes["default"].number,
min: _propTypes["default"].number,
onChange: _propTypes["default"].func,
precision: _propTypes["default"].number,
step: _propTypes["default"].number,
value: _propTypes["default"].number
};
NumericInput.defaultProps = {
defaultValue: null,
max: undefined,
min: undefined,
onChange: function onChange() {},
precision: undefined,
step: 1,
value: null
};
var MemoNumericInput = (0, _react.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";
var _default = MemoNumericInput;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJOdW1lcmljSW5wdXQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJtYXgiLCJtaW4iLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJwcmVjaXNpb25Qcm9wIiwicHJlY2lzaW9uIiwic3RlcCIsInZhbHVlUHJvcCIsInZhbHVlIiwib3RoZXJQcm9wcyIsInVuZGVmaW5lZCIsImdldERlY2ltYWxOdW1iZXIiLCJ1c2VTdGF0ZSIsInZhbHVlU3RhdGUiLCJzZXRWYWx1ZSIsInRvRml4ZWQiLCJpbnB1dFZhbHVlIiwic2V0SW5wdXRWYWx1ZSIsImlucHV0UmVmIiwidXNlUmVmIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiY3VycmVudCIsImlucHV0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImhhbmRsZVZhbHVlU3RlcENoYW5nZSIsInR5cGUiLCJzdHAiLCJpbnB1dFZhbCIsInZhbCIsInN0cmluZ1RvTnVtYmVyIiwiZGVjaW1hbCIsImhhbmRsZUJ1dHRvbkNsaWNrIiwidmFsdWVTdGVwQ2hhbmdlZCIsImhhbmRsZUlucHV0Q2hhbmdlIiwidGFyZ2V0IiwiaXNMZWdhbCIsImhhbmRsZUlucHV0Qmx1ciIsImUiLCJ2YWx1ZUZpeGVkIiwiaGFuZGxlTW91c2VEb3duIiwic2V0VGltZW91dCIsImVuZCIsImxlbmd0aCIsInNldFNlbGVjdGlvblJhbmdlIiwiZm9jdXMiLCJoYW5kbGVLZXlEb3duIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjbGFzc05hbWVzIiwibnVtZXJhbCIsIm51bWVyYWxEZWNpbWFsU2NhbGUiLCJkZWxpbWl0ZXIiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJNZW1vTnVtZXJpY0lucHV0IiwibWVtbyIsImxlZnRFbGVtZW50TmV4dCIsImxlZnRFbGVtZW50IiwicmlnaHRFbGVtZW50TmV4dCIsInJpZ2h0RWxlbWVudCIsIm5leHRQcm9wcyIsInByZXZQcm9wcyIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL251bWVyaWMtaW5wdXQvTnVtZXJpY0lucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgbWVtbyxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IElucHV0LCB7IElJbnB1dFByb3BzLCBJSW5wdXRSZWYgfSBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5pbXBvcnQgeyBpc0xlZ2FsLCBzdHJpbmdUb051bWJlciwgZ2V0RGVjaW1hbE51bWJlciB9IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktbnVtZXJpYy1pbnB1dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWVyaWNJbnB1dFByb3BzXG4gIGV4dGVuZHMgT21pdDxJSW5wdXRQcm9wcywgXCJkZWZhdWx0VmFsdWVcIiB8IFwib25DaGFuZ2VcIiB8IFwidmFsdWVcIj4ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOm7mOiupOeahOWIneWni+WAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogbnVtYmVyIHwgbnVsbFxuICAvKipcbiAgICog6K6+572u5pyA5aSn5YC8XG4gICAqL1xuICBtYXg/OiBudW1iZXJcbiAgLyoqXG4gICAqIOiuvue9ruacgOWwj+WAvFxuICAgKi9cbiAgbWluPzogbnVtYmVyXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAodmFsdWU/OiBudW1iZXIpID0+IHZvaWRcbiAgLyoqXG4gICAqIOiuvue9rueyvuW6plxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyXG4gIC8qKlxuICAgKiDorr7nva7lop7liqDnmoTluYXluqZcbiAgICovXG4gIHN0ZXA/OiBudW1iZXJcbiAgLyoqXG4gICAqIOWAvCAtIOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU/OiBudW1iZXIgfCBudWxsXG59XG5cbi8qKlxuICog5pWw5a2X6L6T5YWl5qGG44CCXG4gKi9cbmNvbnN0IE51bWVyaWNJbnB1dDogUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgSU51bWVyaWNJbnB1dFByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgbWF4LFxuICAgICAgbWluLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb25Qcm9wLFxuICAgICAgc3RlcCxcbiAgICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSU51bWVyaWNJbnB1dFByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBwcmVjaXNpb24gPVxuICAgICAgcHJlY2lzaW9uUHJvcCA9PT0gdW5kZWZpbmVkID8gZ2V0RGVjaW1hbE51bWJlcihzdGVwIHx8IDEpIDogcHJlY2lzaW9uUHJvcFxuXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxudW1iZXIgfCBzdHJpbmc+KCgpID0+IHtcbiAgICAgIGxldCB2YWx1ZVN0YXRlOiBSZWFjdC5SZWFjdFRleHQgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdmFsdWVQcm9wICE9PSBudWxsID8gdmFsdWVQcm9wIDogZGVmYXVsdFZhbHVlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlU3RhdGUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdmFsdWVTdGF0ZSA9IFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVN0YXRlXG4gICAgfSlcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pIDogXCJcIlxuICAgIClcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxJSW5wdXRSZWY+KG51bGwpXG5cbiAgICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgaWYgKHZhbHVlUHJvcCAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdmFsdWVQcm9wKSB7XG4gICAgICBzZXRWYWx1ZSh0eXBlb2YgdmFsdWVQcm9wID09PSBcIm51bWJlclwiID8gdmFsdWVQcm9wIDogXCJcIilcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZVByb3AgPT09IFwibnVtYmVyXCIgPyB2YWx1ZVByb3AudG9GaXhlZChwcmVjaXNpb24pIDogXCJcIlxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBjdXJyZW50OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIH0pKVxuXG4gICAgY29uc3QgaGFuZGxlVmFsdWVTdGVwQ2hhbmdlID0gKFxuICAgICAgdHlwZTogXCJwbHVzXCIgfCBcIm1pbnVzXCIsXG4gICAgICBzdHA6IG51bWJlcixcbiAgICAgIGlucHV0VmFsPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICAvLyDlsIYgaW5wdXRWYWwg6L2s5oiQ5pWw5a2X77yM5aaC5p6c5piv56m65a2X56ym5Liy77yM5YiZ6K6k5Li65LuOIDAg5byA5aeL5Yqg5YePXG4gICAgICBjb25zdCB2YWwgPSBzdHJpbmdUb051bWJlcihpbnB1dFZhbClcbiAgICAgIGNvbnN0IGRlY2ltYWwgPSBnZXREZWNpbWFsTnVtYmVyKHN0cClcbiAgICAgIGlmICh0eXBlID09PSBcInBsdXNcIikge1xuICAgICAgICByZXR1cm4gKHZhbCAqIDEwICoqIGRlY2ltYWwgKyBzdHAgKiAxMCAqKiBkZWNpbWFsKSAvIDEwICoqIGRlY2ltYWxcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsICogMTAgKiogZGVjaW1hbCAtIHN0cCAqIDEwICoqIGRlY2ltYWwpIC8gMTAgKiogZGVjaW1hbFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJ1dHRvbkNsaWNrID0gKHR5cGU6IFwicGx1c1wiIHwgXCJtaW51c1wiKSA9PiB7XG4gICAgICBsZXQgdmFsdWVTdGVwQ2hhbmdlZCA9IGhhbmRsZVZhbHVlU3RlcENoYW5nZSh0eXBlLCBzdGVwIHx8IDEsIGlucHV0VmFsdWUpXG4gICAgICBpZiAobWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVTdGVwQ2hhbmdlZCA8IG1pbikge1xuICAgICAgICB2YWx1ZVN0ZXBDaGFuZ2VkID0gbWluXG4gICAgICB9IGVsc2UgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlU3RlcENoYW5nZWQgPiBtYXgpIHtcbiAgICAgICAgdmFsdWVTdGVwQ2hhbmdlZCA9IG1heFxuICAgICAgfVxuICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZVN0ZXBDaGFuZ2VkKVxuICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlU3RlcENoYW5nZWQudG9GaXhlZChwcmVjaXNpb24pKVxuICAgICAgfVxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKHZhbHVlU3RlcENoYW5nZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoe1xuICAgICAgdGFyZ2V0OiB7IHZhbHVlOiB2YWwgfSxcbiAgICB9OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGlzTGVnYWwoc3RlcCB8fCAxLCB2YWwsIG1pbiwgbWF4KSkge1xuICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmFsdWUoc3RyaW5nVG9OdW1iZXIodmFsKSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZShzdHJpbmdUb051bWJlcih2YWwpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIHNldElucHV0VmFsdWUodmFsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Qmx1ciA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRhcmdldDogeyB2YWx1ZTogdmFsIH0sXG4gICAgICB9ID0gZVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKFwiXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZUZpeGVkID0gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pXG4gICAgICAgIGlmICghaXNMZWdhbChzdGVwIHx8IDEsIHZhbCwgbWluLCBtYXgpIHx8IHZhbCAhPT0gdmFsdWVGaXhlZCkge1xuICAgICAgICAgIHNldElucHV0VmFsdWUodmFsdWVGaXhlZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9uQmx1cikge1xuICAgICAgICBvbkJsdXIoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAodHlwZTogXCJwbHVzXCIgfCBcIm1pbnVzXCIpID0+IHtcbiAgICAgIGhhbmRsZUJ1dHRvbkNsaWNrKHR5cGUpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBpbnB1dFJlZi5jdXJyZW50LmlucHV0XG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBlbmQgPSBpbnB1dC52YWx1ZS5sZW5ndGhcbiAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShlbmQsIGVuZClcbiAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMClcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHsga2V5IH0gPSBlXG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBoYW5kbGVCdXR0b25DbGljayhcInBsdXNcIilcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgaGFuZGxlQnV0dG9uQ2xpY2soXCJtaW51c1wiKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8SW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzTmFtZSwgYCR7cHJlZml4fWAsIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS1kaXNhYmxlZGBdOiBkaXNhYmxlZCxcbiAgICAgICAgfSl9XG4gICAgICAgIGNsZWF2ZU9wdGlvbnM9e3tcbiAgICAgICAgICBudW1lcmFsOiB0cnVlLFxuICAgICAgICAgIG51bWVyYWxEZWNpbWFsU2NhbGU6IHByZWNpc2lvbixcbiAgICAgICAgICBkZWxpbWl0ZXI6IFwiXCIsXG4gICAgICAgIH19XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2hhbmRsZUlucHV0Qmx1cn1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcmlnaHRFbGVtZW50PXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25zYH0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb3VzZURvd24oXCJwbHVzXCIpfVxuICAgICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIGljb249XCJhcnJvdy11cFwiIGludGVyYWN0aXZlPXshZGlzYWJsZWR9IHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb3VzZURvd24oXCJtaW51c1wiKX1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpY29uPVwiYXJyb3ctZG93blwiIGludGVyYWN0aXZlPXshZGlzYWJsZWR9IHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuKVxuXG5OdW1lcmljSW5wdXQuZGlzcGxheU5hbWUgPSBcIk51bWVyaWNJbnB1dFwiXG5cbk51bWVyaWNJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDpu5jorqTnmoTliJ3lp4vlgLwgLSDlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOiuvue9ruacgOWkp+WAvFxuICAgKi9cbiAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog6K6+572u5pyA5bCP5YC8XG4gICAqL1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog6K6+572u57K+5bqmXG4gICAqL1xuICBwcmVjaXNpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlop7lh4/nmoTluYXluqZcbiAgICovXG4gIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxufVxuXG5OdW1lcmljSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIG1heDogdW5kZWZpbmVkLFxuICBtaW46IHVuZGVmaW5lZCxcbiAgb25DaGFuZ2U6ICgpID0+IHt9LFxuICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgc3RlcDogMSxcbiAgdmFsdWU6IG51bGwsXG59XG5cbmNvbnN0IE1lbW9OdW1lcmljSW5wdXQgPSBtZW1vKFxuICBOdW1lcmljSW5wdXQsXG4gIChcbiAgICB7IGxlZnRFbGVtZW50LCByaWdodEVsZW1lbnQsIC4uLnByZXZQcm9wcyB9LFxuICAgIHtcbiAgICAgIGxlZnRFbGVtZW50OiBsZWZ0RWxlbWVudE5leHQsXG4gICAgICByaWdodEVsZW1lbnQ6IHJpZ2h0RWxlbWVudE5leHQsXG4gICAgICAuLi5uZXh0UHJvcHNcbiAgICB9XG4gICkgPT4gSlNPTi5zdHJpbmdpZnkocHJldlByb3BzKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV4dFByb3BzKVxuKVxuXG5NZW1vTnVtZXJpY0lucHV0LmRpc3BsYXlOYW1lID0gXCJOdW1lcmljSW5wdXRcIlxuXG5leHBvcnQgZGVmYXVsdCBNZW1vTnVtZXJpY0lucHV0XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLE1BQU0sR0FBRyxvQkFBZjtBQXNDQSxJQUFNQyxZQUVMLEdBQUcsSUFBQUMsaUJBQUEsRUFDRixnQkFnQkVDLEdBaEJGLEVBaUJLO0VBQUEsSUFmREMsU0FlQyxRQWZEQSxTQWVDO0VBQUEsSUFkREMsWUFjQyxRQWREQSxZQWNDO0VBQUEsSUFiREMsUUFhQyxRQWJEQSxRQWFDO0VBQUEsSUFaREMsR0FZQyxRQVpEQSxHQVlDO0VBQUEsSUFYREMsR0FXQyxRQVhEQSxHQVdDO0VBQUEsSUFWREMsTUFVQyxRQVZEQSxNQVVDO0VBQUEsSUFUREMsUUFTQyxRQVREQSxRQVNDO0VBQUEsSUFSREMsT0FRQyxRQVJEQSxPQVFDO0VBQUEsSUFQREMsU0FPQyxR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