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>

209 lines 34.6 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 = ["autoFocus", "className", "countHanzi", "defaultValue", "disabled", "id", "inputClassName", "inputStyle", "intent", "limit", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "onPressEnter", "onScroll", "placeholder", "required", "resize", "size", "theme", "type", "value"]; 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 ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 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, useContext, useImperativeHandle, useRef, useState } from "react"; import PropTypes from "prop-types"; import classNames from "classnames"; import warning from "../_util/warning"; import { ConfigContext, getComputedSize } from "../config-provider"; import "./style"; var noop = function noop() {}; var prefix = "adui-input"; var Textarea = forwardRef(function (_ref, ref) { var autoFocus = _ref.autoFocus, className = _ref.className, countHanzi = _ref.countHanzi, defaultValue = _ref.defaultValue, disabled = _ref.disabled, id = _ref.id, inputClassName = _ref.inputClassName, inputStyle = _ref.inputStyle, intent = _ref.intent, limit = _ref.limit, name = _ref.name, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, onPressEnter = _ref.onPressEnter, onScroll = _ref.onScroll, placeholder = _ref.placeholder, required = _ref.required, resize = _ref.resize, sizeProp = _ref.size, theme = _ref.theme, type = _ref.type, value = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), focused = _useState2[0], setFocused = _useState2[1]; var textareaRef = useRef(null); var _useContext = useContext(ConfigContext), sizeContext = _useContext.size; var size = getComputedSize(sizeProp, sizeContext); var handleChange = function handleChange(e) { if (!disabled && onChange) { var val = e.target.value.replace(/\u0008|\u0009|\u000B|\u000C|\u000D|\u00A0|\u2028|\u2029|\uFEFF/g, ""); onChange(e, val); } }; var handleKeyDown = function handleKeyDown(e) { if (e.key === "Enter" && onPressEnter) { onPressEnter(e); } if (onKeyDown) { onKeyDown(e); } }; var handleBlur = function handleBlur(e) { setFocused(false); if (onBlur) { onBlur(e); } }; var handleFocus = function handleFocus(e) { setFocused(true); if (onFocus) { onFocus(e); } }; var fixControlledValue = function fixControlledValue(val) { if (typeof val === "undefined" || val === null) { return ""; } return val; }; var getFormatStrLeng = function getFormatStrLeng(str) { var len = str.length; var realLength = 0; var charCode = -1; for (var i = 0; i < len; i += 1) { charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) { realLength += 0.5; } else { realLength += 1; } } return Math.ceil(realLength); }; useImperativeHandle(ref, function () { return { input: textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current, handleChange: handleChange, handleKeyDown: handleKeyDown, handleBlur: handleBlur, handleFocus: handleFocus }; }); var textareaProps = { autoFocus: autoFocus, className: classNames("".concat(prefix, "-base"), inputClassName), disabled: disabled, id: id, name: name, onBlur: handleBlur, onChange: handleChange, onFocus: handleFocus, onKeyDown: handleKeyDown, onScroll: onScroll, placeholder: placeholder, ref: textareaRef, required: required, style: _objectSpread({ resize: resize }, inputStyle), type: type }; if (value !== null) { textareaProps.value = fixControlledValue(value); } else { textareaProps.defaultValue = fixControlledValue(defaultValue); } var length; if (limit) { warning(resize === "none", "Input.Textarea", "不允许同时使用 prop `limit` 与 prop `resize`"); if (value) { length = countHanzi ? getFormatStrLeng(value) : value.length; } else { warning(value !== null, "Input.Textarea", "如果要限制字数,必须从外部控制 value。"); length = 0; } } var classSet = classNames(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-wrapper_textarea"), "".concat(prefix, "-").concat(size), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-").concat(theme), theme), "".concat(prefix, "-resizable"), resize !== "none"), "".concat(prefix, "-disabled"), disabled), "".concat(prefix, "-limited"), !!limit), "".concat(prefix, "-normal"), intent === "normal"), "".concat(prefix, "-primary"), intent === "primary"), "".concat(prefix, "-success"), intent === "success"), "".concat(prefix, "-warning"), intent === "warning"), "".concat(prefix, "-danger"), intent === "danger" || length && limit && length > limit), "".concat(prefix, "-focused"), focused)); return React.createElement("div", _extends({ className: classSet }, otherProps), React.createElement("textarea", textareaProps), !!limit && React.createElement("div", { className: "".concat(prefix, "-limit") }, React.createElement("span", null, "".concat(length, "/").concat(limit)))); }); Textarea.propTypes = { autoFocus: PropTypes.bool, className: PropTypes.string, countHanzi: PropTypes.bool, defaultValue: PropTypes.string, disabled: PropTypes.bool, id: PropTypes.string, inputClassName: PropTypes.string, inputStyle: PropTypes.object, intent: PropTypes.oneOf(["normal", "primary", "success", "warning", "danger"]), limit: PropTypes.number, name: PropTypes.string, onBlur: PropTypes.func, onChange: PropTypes.func, onFocus: PropTypes.func, onKeyDown: PropTypes.func, onPressEnter: PropTypes.func, onScroll: PropTypes.func, placeholder: PropTypes.string, required: PropTypes.bool, resize: PropTypes.oneOf(["none", "both", "horizontal", "vertical"]), size: PropTypes.oneOf(["mini", "small", "medium", "large"]), theme: PropTypes.oneOf([null, "light"]), type: PropTypes.string, value: PropTypes.string }; Textarea.defaultProps = { autoFocus: false, className: undefined, countHanzi: true, defaultValue: null, disabled: false, id: null, inputClassName: undefined, inputStyle: {}, intent: "normal", limit: null, name: null, onBlur: noop, onChange: noop, onFocus: noop, onKeyDown: noop, onPressEnter: noop, onScroll: noop, placeholder: "请输入", required: false, resize: "none", size: "small", theme: null, type: null, value: null }; Textarea.displayName = "Textarea"; export default Textarea; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIndhcm5pbmciLCJDb25maWdDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwibm9vcCIsInByZWZpeCIsIlRleHRhcmVhIiwiX3JlZiIsInJlZiIsImF1dG9Gb2N1cyIsImNsYXNzTmFtZSIsImNvdW50SGFuemkiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImlkIiwiaW5wdXRDbGFzc05hbWUiLCJpbnB1dFN0eWxlIiwiaW50ZW50IiwibGltaXQiLCJuYW1lIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25LZXlEb3duIiwib25QcmVzc0VudGVyIiwib25TY3JvbGwiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicmVzaXplIiwic2l6ZVByb3AiLCJzaXplIiwidGhlbWUiLCJ0eXBlIiwidmFsdWUiLCJvdGhlclByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZm9jdXNlZCIsInNldEZvY3VzZWQiLCJ0ZXh0YXJlYVJlZiIsIl91c2VDb250ZXh0Iiwic2l6ZUNvbnRleHQiLCJoYW5kbGVDaGFuZ2UiLCJlIiwidmFsIiwidGFyZ2V0IiwicmVwbGFjZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJoYW5kbGVCbHVyIiwiaGFuZGxlRm9jdXMiLCJmaXhDb250cm9sbGVkVmFsdWUiLCJnZXRGb3JtYXRTdHJMZW5nIiwic3RyIiwibGVuIiwibGVuZ3RoIiwicmVhbExlbmd0aCIsImNoYXJDb2RlIiwiaSIsImNoYXJDb2RlQXQiLCJNYXRoIiwiY2VpbCIsImlucHV0IiwiY3VycmVudCIsInRleHRhcmVhUHJvcHMiLCJjb25jYXQiLCJzdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJjbGFzc1NldCIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsInByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJvYmplY3QiLCJvbmVPZiIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvaW5wdXQvVGV4dGFyZWEudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgd2FybmluZyBmcm9tIFwiLi4vX3V0aWwvd2FybmluZ1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLWlucHV0XCJcblxuZXhwb3J0IGludGVyZmFjZSBJVGV4dGFyZWFQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5oyJ54Wn5LiA5Liq5rGJ5a2X566XIDIg5a2X5pWw55qE5pa55byP6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBjb3VudEhhbnppPzogYm9vbGVhblxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog6L6T5YWl5qGG55qEIGlkXG4gICAqL1xuICBpZD86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTnsbvlkI1cbiAgICovXG4gIGlucHV0Q2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE5qC35byPXG4gICAqL1xuICBpbnB1dFN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdD86IG51bWJlciB8IG51bGxcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCB2YWx1ZT86IHN0cmluZykgPT4gdm9pZFxuICAvKipcbiAgICogZm9jdXMg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRm9jdXM/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICoga2V5ZG93biDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25LZXlEb3duPzogKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIGVudGVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblByZXNzRW50ZXI/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogc2Nyb2xsIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblNjcm9sbD86IChlOiBSZWFjdC5VSUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHJlcXVpcmVkXG4gICAqL1xuICByZXF1aXJlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplPzogXCJub25lXCIgfCBcImJvdGhcIiB8IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbn1cblxuLyoqXG4gKiDovpPlhaXljLrln5/vvIznlKjkuo7lpJrooYznuq/mlofmnKznvJbovpHjgIJcbiAqL1xuY29uc3QgVGV4dGFyZWE6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUZXh0YXJlYVByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvdW50SGFuemksXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICBpbnB1dFN0eWxlLFxuICAgICAgaW50ZW50LFxuICAgICAgbGltaXQsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25QcmVzc0VudGVyLFxuICAgICAgb25TY3JvbGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgcmVzaXplLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB0aGVtZSxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGV4dGFyZWFQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgICBjb25zdCB0ZXh0YXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgb25DaGFuZ2UpIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCwgbWF4LWxlbiAqL1xuICAgICAgICAvLyAwOCBCYWNrc3BhY2UsIDA5IFRhYiwgMEIg5Z6C55u05Yi26KGo56ymLCAwQyDmjaLpobUsIDBEIOWbnui9piwgQTAg5LiN6Ze05pat56m65qC8LFxuICAgICAgICAvLyAyMDI4LzIwMjkg5YiG6ZqU56ymLCBGRWZmIOWtl+iKgumhuuW6j+agh+iusOOAglxuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgIC9cXHUwMDA4fFxcdTAwMDl8XFx1MDAwQnxcXHUwMDBDfFxcdTAwMER8XFx1MDBBMHxcXHUyMDI4fFxcdTIwMjl8XFx1RkVGRi9nLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKVxuICAgICAgICBvbkNoYW5nZShlLCB2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBvblByZXNzRW50ZXIpIHtcbiAgICAgICAgb25QcmVzc0VudGVyKGUpXG4gICAgICB9XG4gICAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICAgIG9uS2V5RG93bihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJsdXIgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSlcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKVxuICAgICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgICAgb25Gb2N1cyhlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpeENvbnRyb2xsZWRWYWx1ZSA9ICh2YWw/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGb3JtYXRTdHJMZW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgICBsZXQgcmVhbExlbmd0aCA9IDBcbiAgICAgIGxldCBjaGFyQ29kZSA9IC0xXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICAgICAgaWYgKGNoYXJDb2RlID49IDAgJiYgY2hhckNvZGUgPD0gMTI4KSB7XG4gICAgICAgICAgcmVhbExlbmd0aCArPSAwLjVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWFsTGVuZ3RoICs9IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguY2VpbChyZWFsTGVuZ3RoKVxuICAgIH1cblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgaW5wdXQ6IHRleHRhcmVhUmVmPy5jdXJyZW50LFxuICAgICAgaGFuZGxlQ2hhbmdlLFxuICAgICAgaGFuZGxlS2V5RG93bixcbiAgICAgIGhhbmRsZUJsdXIsXG4gICAgICBoYW5kbGVGb2N1cyxcbiAgICB9KSlcblxuICAgIGNvbnN0IHRleHRhcmVhUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoYCR7cHJlZml4fS1iYXNlYCwgaW5wdXRDbGFzc05hbWUpLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvblNjcm9sbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVmOiB0ZXh0YXJlYVJlZixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc3R5bGU6IHsgcmVzaXplLCAuLi5pbnB1dFN0eWxlIH0sXG4gICAgICB0eXBlLFxuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGV4dGFyZWFQcm9wcy52YWx1ZSA9IGZpeENvbnRyb2xsZWRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dGFyZWFQcm9wcy5kZWZhdWx0VmFsdWUgPSBmaXhDb250cm9sbGVkVmFsdWUoZGVmYXVsdFZhbHVlKVxuICAgIH1cblxuICAgIGxldCBsZW5ndGhcbiAgICBpZiAobGltaXQpIHtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgIHJlc2l6ZSA9PT0gXCJub25lXCIsXG4gICAgICAgIFwiSW5wdXQuVGV4dGFyZWFcIixcbiAgICAgICAgXCLkuI3lhYHorrjlkIzml7bkvb/nlKggcHJvcCBgbGltaXRgIOS4jiBwcm9wIGByZXNpemVgXCJcbiAgICAgIClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsZW5ndGggPSBjb3VudEhhbnppID8gZ2V0Rm9ybWF0U3RyTGVuZyh2YWx1ZSkgOiB2YWx1ZS5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgdmFsdWUgIT09IG51bGwsXG4gICAgICAgICAgXCJJbnB1dC5UZXh0YXJlYVwiLFxuICAgICAgICAgIFwi5aaC5p6c6KaB6ZmQ5Yi25a2X5pWw77yM5b+F6aG75LuO5aSW6YOo5o6n5Yi2IHZhbHVl44CCXCJcbiAgICAgICAgKVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYCR7cHJlZml4fS13cmFwcGVyYCxcbiAgICAgIGAke3ByZWZpeH0td3JhcHBlcl90ZXh0YXJlYWAsXG4gICAgICBgJHtwcmVmaXh9LSR7c2l6ZX1gLFxuICAgICAge1xuICAgICAgICBbYCR7cHJlZml4fS0ke3RoZW1lfWBdOiB0aGVtZSxcbiAgICAgICAgW2Ake3ByZWZpeH0tcmVzaXphYmxlYF06IHJlc2l6ZSAhPT0gXCJub25lXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRpc2FibGVkYF06IGRpc2FibGVkLFxuICAgICAgICBbYCR7cHJlZml4fS1saW1pdGVkYF06ICEhbGltaXQsXG4gICAgICAgIFtgJHtwcmVmaXh9LW5vcm1hbGBdOiBpbnRlbnQgPT09IFwibm9ybWFsXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXByaW1hcnlgXTogaW50ZW50ID09PSBcInByaW1hcnlcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tc3VjY2Vzc2BdOiBpbnRlbnQgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgICBbYCR7cHJlZml4fS13YXJuaW5nYF06IGludGVudCA9PT0gXCJ3YXJuaW5nXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRhbmdlcmBdOlxuICAgICAgICAgIGludGVudCA9PT0gXCJkYW5nZXJcIiB8fCAobGVuZ3RoICYmIGxpbWl0ICYmIGxlbmd0aCA+IGxpbWl0KSxcbiAgICAgICAgW2Ake3ByZWZpeH0tZm9jdXNlZGBdOiBmb2N1c2VkLFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NTZXR9IHsuLi5vdGhlclByb3BzfT5cbiAgICAgICAgPHRleHRhcmVhIHsuLi50ZXh0YXJlYVByb3BzfSAvPlxuICAgICAgICB7ISFsaW1pdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbGltaXRgfT5cbiAgICAgICAgICAgIDxzcGFuPntgJHtsZW5ndGh9LyR7bGltaXR9YH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbmjInnhafkuIDkuKrmsYnlrZfnrpcgMiDlrZfmlbDnmoTmlrnlvI/pmZDliLbplb/luqZcbiAgICovXG4gIGNvdW50SGFuemk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOi+k+WFpeahhueahCBpZFxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE57G75ZCNXG4gICAqL1xuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTmoLflvI9cbiAgICovXG4gIGlucHV0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwid2FybmluZ1wiLFxuICAgIFwiZGFuZ2VyXCIsXG4gIF0pLFxuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGZvY3VzIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGtleWRvd24g5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBlbnRlciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25QcmVzc0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIHNjcm9sbCDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25TY3JvbGw6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gcmVxdWlyZWRcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcImJvdGhcIiwgXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0pLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIHR5cGVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5UZXh0YXJlYS5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjb3VudEhhbnppOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGlucHV0Q2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGlucHV0U3R5bGU6IHt9LFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIGxpbWl0OiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBvbkJsdXI6IG5vb3AsXG4gIG9uQ2hhbmdlOiBub29wLFxuICBvbkZvY3VzOiBub29wLFxuICBvbktleURvd246IG5vb3AsXG4gIG9uUHJlc3NFbnRlcjogbm9vcCxcbiAgb25TY3JvbGw6IG5vb3AsXG4gIHBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpVwiLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIHJlc2l6ZTogXCJub25lXCIsXG4gIHNpemU6IFwic21hbGxcIixcbiAgdGhlbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufVxuXG5UZXh0YXJlYS5kaXNwbGF5TmFtZSA9IFwiVGV4dGFyZWFcIlxuXG5leHBvcnQgZGVmYXVsdCBUZXh0YXJlYVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUNWQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsbUJBQW1CLEVBQ25CQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FBT0MsT0FBTyxNQUFNLGtCQUFrQjtBQUN0QyxTQUFTQyxhQUFhLEVBQUVDLGVBQWUsUUFBUSxvQkFBb0I7QUFDbkUsT0FBTyxTQUFTO0FBRWhCLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBLEVBQVMsQ0FBQyxDQUFDO0FBRXJCLElBQU1DLE1BQU0sR0FBRyxZQUFZO0FBeUczQixJQUFNQyxRQUVMLEdBQUdaLFVBQVUsQ0FDWixVQUFBYSxJQUFBLEVBNEJFQyxHQUFHLEVBQ0E7RUFBQSxJQTNCREMsU0FBUyxHQUFBRixJQUFBLENBQVRFLFNBQVM7SUFDVEMsU0FBUyxHQUFBSCxJQUFBLENBQVRHLFNBQVM7SUFDVEMsVUFBVSxHQUFBSixJQUFBLENBQVZJLFVBQVU7SUFDVkMsWUFBWSxHQUFBTCxJQUFBLENBQVpLLFlBQVk7SUFDWkMsUUFBUSxHQUFBTixJQUFBLENBQVJNLFFBQVE7SUFDUkMsRUFBRSxHQUFBUCxJQUFBLENBQUZPLEVBQUU7SUFDRkMsY0FBYyxHQUFBUixJQUFBLENBQWRRLGNBQWM7SUFDZEMsVUFBVSxHQUFBVCxJQUFBLENBQVZTLFVBQVU7SUFDVkMsTUFBTSxHQUFBVixJQUFBLENBQU5VLE1BQU07SUFDTkMsS0FBSyxHQUFB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