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>

337 lines (336 loc) 67 kB
"use strict"; 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); } 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 _react2 = _interopRequireDefault(require("cleave.js/react")); var _warning = _interopRequireDefault(require("../_util/warning")); var _configProvider = require("../config-provider"); var _Textarea = _interopRequireDefault(require("./Textarea")); require("./style"); var _excluded = ["autoComplete", "autoFocus", "className", "cleaveOptions", "contentJustify", "countHanzi", "defaultValue", "disabled", "id", "intent", "leftElement", "limit", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "onPressEnter", "placeholder", "required", "rightElement", "size", "style", "theme", "type", "value"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } 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; } 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; } var prefix = "adui-channels-input"; var Input = (0, _react.forwardRef)(function (_ref, ref) { var _cleaveRef$current; var autoComplete = _ref.autoComplete, autoFocus = _ref.autoFocus, className = _ref.className, cleaveOptions = _ref.cleaveOptions, contentJustify = _ref.contentJustify, countHanzi = _ref.countHanzi, defaultValue = _ref.defaultValue, disabled = _ref.disabled, id = _ref.id, intent = _ref.intent, leftElement = _ref.leftElement, limit = _ref.limit, name = _ref.name, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, onPressEnter = _ref.onPressEnter, placeholder = _ref.placeholder, required = _ref.required, rightElement = _ref.rightElement, sizeProp = _ref.size, style = _ref.style, theme = _ref.theme, type = _ref.type, value = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = (0, _react.useState)(null), _useState2 = _slicedToArray(_useState, 2), leftElementWidth = _useState2[0], setLeftElementWidth = _useState2[1]; var _useState3 = (0, _react.useState)(null), _useState4 = _slicedToArray(_useState3, 2), rightElementWidth = _useState4[0], setRightElementWidth = _useState4[1]; var inputRef = (0, _react.useRef)(null); var wrapperElementRef = (0, _react.useRef)(null); var leftElementRef = (0, _react.useRef)(null); var rightElementRef = (0, _react.useRef)(null); var justifyElementRef = (0, _react.useRef)(null); var cleaveRef = (0, _react.useRef)(null); var inputElement = (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) || (cleaveRef === null || cleaveRef === void 0 || (_cleaveRef$current = cleaveRef.current) === null || _cleaveRef$current === void 0 ? void 0 : _cleaveRef$current.element); var _useContext = (0, _react.useContext)(_configProvider.ConfigContext), sizeContext = _useContext.size; var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext); var handleChange = function handleChange(e) { if (!disabled && onChange) { var val = e.target.value.replace(/\u0008|\u0009|\u000A|\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) { if (onBlur) { onBlur(e); } }; var handleFocus = function handleFocus(e) { if (onFocus) { onFocus(e); } }; var handleAttachedElementClick = function handleAttachedElementClick(position) { if (position === "left" && leftElement && leftElement.type && leftElement.type.name === "Icon") { inputElement.focus(); inputElement.select(); } if (position === "right" && rightElement && rightElement.type && rightElement.type.name === "Icon") { inputElement.focus(); inputElement.select(); } }; var fixControlledValue = function fixControlledValue(val) { if (typeof val === "undefined" || val === null) { return ""; } return val; }; var updateElementsWidth = function updateElementsWidth() { if (leftElementRef !== null && leftElementRef !== void 0 && leftElementRef.current) { var clientWidth = leftElementRef.current.clientWidth; if (Math.abs(clientWidth - (leftElementWidth || 0)) > 2) { setLeftElementWidth(clientWidth); } } else if (leftElementWidth) { setLeftElementWidth(null); } if (rightElementRef !== null && rightElementRef !== void 0 && rightElementRef.current) { var _clientWidth = rightElementRef.current.clientWidth; if (Math.abs(_clientWidth - (rightElementWidth || 0)) > 2) { setRightElementWidth(_clientWidth); } } else if (rightElementWidth) { setRightElementWidth(null); } if (justifyElementRef !== null && justifyElementRef !== void 0 && justifyElementRef.current) { var scrollWidth = justifyElementRef.current.scrollWidth; if (wrapperElementRef.current && Math.ceil(scrollWidth) !== wrapperElementRef.current.clientWidth) { wrapperElementRef.current.style.width = "".concat(Math.ceil(scrollWidth), "px"); } } }; 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); }; (0, _react.useEffect)(function () { updateElementsWidth(); if (cleaveRef !== null && cleaveRef !== void 0 && cleaveRef.current) { var el = cleaveRef.current.element; if (cleaveRef.current.lastInputValue !== value) { cleaveRef.current.lastInputValue = value; } if (cleaveRef.current.state.value !== value) { cleaveRef.current.state.value = value; } if (cleaveRef.current.properties.result !== value) { cleaveRef.current.properties.result = value; } if (el && el.value !== value && value) { el.value = value; } } }); (0, _react.useImperativeHandle)(ref, function () { var _cleaveRef$current2; var realRef = (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) || (cleaveRef === null || cleaveRef === void 0 || (_cleaveRef$current2 = cleaveRef.current) === null || _cleaveRef$current2 === void 0 ? void 0 : _cleaveRef$current2.element); return { cleave: cleaveRef === null || cleaveRef === void 0 ? void 0 : cleaveRef.current, input: realRef, leftElement: leftElementRef === null || leftElementRef === void 0 ? void 0 : leftElementRef.current, rightElement: rightElementRef === null || rightElementRef === void 0 ? void 0 : rightElementRef.current, updateElementsWidth: updateElementsWidth, handleChange: handleChange, handleKeyDown: handleKeyDown, handleBlur: handleBlur, handleFocus: handleFocus, handleAttachedElementClick: handleAttachedElementClick, focus: function focus() { return realRef.focus(); }, blur: function blur() { return realRef.blur(); } }; }); var inputProps = { autoComplete: autoComplete, autoFocus: autoFocus, className: "".concat(prefix, "-base"), disabled: disabled, id: id, name: name, onBlur: handleBlur, onChange: handleChange, onFocus: handleFocus, onKeyDown: handleKeyDown, placeholder: placeholder, ref: inputRef, required: required, style: { paddingLeft: leftElementWidth ? "".concat(leftElementWidth, "px") : undefined, paddingRight: rightElementWidth ? "".concat(rightElementWidth, "px") : undefined }, type: type }; var cleaveInputProps = _objectSpread({}, inputProps); if (value !== null) { inputProps.value = fixControlledValue(value); } else { inputProps.defaultValue = fixControlledValue(defaultValue); } cleaveInputProps.value = value || defaultValue || ""; var input = !cleaveOptions || Object.keys(cleaveOptions).length === 0 ? _react["default"].createElement("input", inputProps) : _react["default"].createElement(_react2["default"], _extends({ options: cleaveOptions }, cleaveInputProps, { ref: cleaveRef })); var length; if (limit) { (0, _warning["default"])(!rightElement, "Input", "不允许同时使用 prop `limit` 与 prop `rightElement`"); if (value) { length = countHanzi ? getFormatStrLeng(value) : value.length; } else { (0, _warning["default"])(value !== null, "Input", "如果要使用 limit Prop,必须从外部控制 value。"); length = 0; } } if (contentJustify) { (0, _warning["default"])(value !== null, "Input", "如果使用 contentJusfity Prop,必须从外部控制 value。"); } var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-").concat(size), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-").concat(theme), theme), "".concat(prefix, "-disabled"), disabled), "".concat(prefix, "-limited"), limit), "".concat(prefix, "-limited_digit-over-2"), limit && limit.toString().length > 2), "".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)); var leftType = leftElement && leftElement.type ? leftElement.type.type : ""; var rightType = rightElement && rightElement.type ? rightElement.type.type : ""; return _react["default"].createElement("div", _extends({ ref: wrapperElementRef, className: classSet, style: style }, otherProps), !!leftElement && _react["default"].createElement("div", { ref: leftElementRef, onClick: function onClick() { return handleAttachedElementClick("left"); }, role: "none", className: (0, _classnames["default"])("".concat(prefix, "-left"), _defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-left_button"), leftType === "Button"), "".concat(prefix, "-left_icon"), leftType === "Icon"), "".concat(prefix, "-left_select"), leftType === "Select")) }, leftElement), input, !!rightElement && _react["default"].createElement("div", { ref: rightElementRef, onClick: function onClick() { return handleAttachedElementClick("right"); }, role: "none", className: (0, _classnames["default"])("".concat(prefix, "-right"), _defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-right_button"), rightType === "Button"), "".concat(prefix, "-right_icon"), rightType === "Icon"), "".concat(prefix, "-right_select"), rightType === "Select")) }, rightElement), limit && _react["default"].createElement("div", { className: "".concat(prefix, "-limit") }, _react["default"].createElement("span", null, "".concat(length, "/").concat(limit))), contentJustify && _react["default"].createElement("div", { className: "".concat(prefix, "-justify"), ref: justifyElementRef, style: { paddingLeft: leftElementWidth ? "".concat(leftElementWidth, "px") : undefined, paddingRight: rightElementWidth ? "".concat(rightElementWidth, "px") : undefined, minWidth: style === null || style === void 0 ? void 0 : style.minWidth } }, fixControlledValue(value))); }); Input.Textarea = _Textarea["default"]; Input.displayName = "Input"; Input.propTypes = { autoComplete: _propTypes["default"].oneOf(["on", "off"]), autoFocus: _propTypes["default"].bool, className: _propTypes["default"].string, cleaveOptions: _propTypes["default"].object, contentJustify: _propTypes["default"].bool, countHanzi: _propTypes["default"].bool, defaultValue: _propTypes["default"].string, disabled: _propTypes["default"].bool, id: _propTypes["default"].string, intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]), leftElement: _propTypes["default"].any, limit: _propTypes["default"].number, name: _propTypes["default"].string, onBlur: _propTypes["default"].func, onChange: _propTypes["default"].func, onFocus: _propTypes["default"].func, onKeyDown: _propTypes["default"].func, onPressEnter: _propTypes["default"].func, placeholder: _propTypes["default"].string, required: _propTypes["default"].bool, rightElement: _propTypes["default"].any, size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]), style: _propTypes["default"].object, theme: _propTypes["default"].oneOf([null, "light"]), type: _propTypes["default"].string, value: _propTypes["default"].string }; Input.defaultProps = { autoComplete: "off", autoFocus: false, className: undefined, cleaveOptions: {}, contentJustify: false, countHanzi: true, defaultValue: null, disabled: false, id: null, intent: "normal", leftElement: undefined, limit: null, name: null, onBlur: function onBlur() {}, onChange: function onChange() {}, onFocus: function onFocus() {}, onKeyDown: function onKeyDown() {}, onPressEnter: function onPressEnter() {}, placeholder: "请输入", required: false, rightElement: undefined, size: "small", style: {}, theme: null, type: null, value: null }; var _default = exports["default"] = Input; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX3JlYWN0MiIsIl93YXJuaW5nIiwiX2NvbmZpZ1Byb3ZpZGVyIiwiX1RleHRhcmVhIiwiX2V4Y2x1ZGVkIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsIiwiaXRlcmF0b3IiLCJmIiwibmV4dCIsImRvbmUiLCJpc0FycmF5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInByZWZpeCIsIklucHV0IiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJfY2xlYXZlUmVmJGN1cnJlbnQiLCJhdXRvQ29tcGxldGUiLCJhdXRvRm9jdXMiLCJjbGFzc05hbWUiLCJjbGVhdmVPcHRpb25zIiwiY29udGVudEp1c3RpZnkiLCJjb3VudEhhbnppIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJpZCIsImludGVudCIsImxlZnRFbGVtZW50IiwibGltaXQiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJvblByZXNzRW50ZXIiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicmlnaHRFbGVtZW50Iiwic2l6ZVByb3AiLCJzaXplIiwic3R5bGUiLCJ0aGVtZSIsInR5cGUiLCJvdGhlclByb3BzIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwibGVmdEVsZW1lbnRXaWR0aCIsInNldExlZnRFbGVtZW50V2lkdGgiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInJpZ2h0RWxlbWVudFdpZHRoIiwic2V0UmlnaHRFbGVtZW50V2lkdGgiLCJpbnB1dFJlZiIsInVzZVJlZiIsIndyYXBwZXJFbGVtZW50UmVmIiwibGVmdEVsZW1lbnRSZWYiLCJyaWdodEVsZW1lbnRSZWYiLCJqdXN0aWZ5RWxlbWVudFJlZiIsImNsZWF2ZVJlZiIsImlucHV0RWxlbWVudCIsImN1cnJlbnQiLCJlbGVtZW50IiwiX3VzZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiQ29uZmlnQ29udGV4dCIsInNpemVDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwiaGFuZGxlQ2hhbmdlIiwidmFsIiwidGFyZ2V0IiwicmVwbGFjZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJoYW5kbGVCbHVyIiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVBdHRhY2hlZEVsZW1lbnRDbGljayIsInBvc2l0aW9uIiwiZm9jdXMiLCJzZWxlY3QiLCJmaXhDb250cm9sbGVkVmFsdWUiLCJ1cGRhdGVFbGVtZW50c1dpZHRoIiwiY2xpZW50V2lkdGgiLCJNYXRoIiwiYWJzIiwic2Nyb2xsV2lkdGgiLCJjZWlsIiwid2lkdGgiLCJjb25jYXQiLCJnZXRGb3JtYXRTdHJMZW5nIiwic3RyIiwibGVuIiwicmVhbExlbmd0aCIsImNoYXJDb2RlIiwiY2hhckNvZGVBdCIsInVzZUVmZmVjdCIsImVsIiwibGFzdElucHV0VmFsdWUiLCJzdGF0ZSIsInByb3BlcnRpZXMiLCJyZXN1bHQiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiX2NsZWF2ZVJlZiRjdXJyZW50MiIsInJlYWxSZWYiLCJjbGVhdmUiLCJpbnB1dCIsImJsdXIiLCJpbnB1dFByb3BzIiwicGFkZGluZ0xlZnQiLCJ1bmRlZmluZWQiLCJwYWRkaW5nUmlnaHQiLCJjbGVhdmVJbnB1dFByb3BzIiwiY3JlYXRlRWxlbWVudCIsIm9wdGlvbnMiLCJ3YXJuaW5nIiwiY2xhc3NTZXQiLCJjbGFzc05hbWVzIiwibGVmdFR5cGUiLCJyaWdodFR5cGUiLCJvbkNsaWNrIiwicm9sZSIsIm1pbldpZHRoIiwiVGV4dGFyZWEiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9uZU9mIiwiYm9vbCIsInN0cmluZyIsIm9iamVjdCIsImFueSIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2NoYW5uZWxzLWlucHV0L0lucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlQ29udGV4dCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQ2xlYXZlIGZyb20gXCJjbGVhdmUuanMvcmVhY3RcIlxuaW1wb3J0IHdhcm5pbmcgZnJvbSBcIi4uL191dGlsL3dhcm5pbmdcIlxuaW1wb3J0IHsgQ29uZmlnQ29udGV4dCwgZ2V0Q29tcHV0ZWRTaXplIH0gZnJvbSBcIi4uL2NvbmZpZy1wcm92aWRlclwiXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4vVGV4dGFyZWFcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1jaGFubmVscy1pbnB1dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0UHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIGF1dG9Db21wbGV0ZVxuICAgKi9cbiAgYXV0b0NvbXBsZXRlPzogXCJvblwiIHwgXCJvZmZcIlxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5a6e546w5omL5py65Y+344CB5pel5pyf44CB5pWw5a2X5Y+K6Ieq5a6a5LmJ5qC85byP77yM5Y+v5p+l55yLW+ekuuS+i10oaHR0cDovL3d4YWQuZGVzaWduL2FkdWkvY29tcG9uZW50cy9pbnB1dCnjgIJcbiAgICovXG4gIGNsZWF2ZU9wdGlvbnM/OiBvYmplY3RcbiAgLyoqXG4gICAqIOWuveW6puaYr+WQpuS4juWGheWuueWuveW6puWvuem9kFxuICAgKi9cbiAgY29udGVudEp1c3RpZnk/OiBib29sZWFuXG4gIC8qKlxuICAgKiDmmK/lkKbmjInnhafkuIDkuKrmsYnlrZfnrpcgMiDlrZfmlbDnmoTmlrnlvI/pmZDliLbplb/luqZcbiAgICovXG4gIGNvdW50SGFuemk/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpu5jorqTlgLwgLSDlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDovpPlhaXmoYbnmoQgaWRcbiAgICovXG4gIGlkPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog57G75Z6LXG4gICAqL1xuICBpbnRlbnQ/OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5YmN572u5YWD57SgXG4gICAqL1xuICBsZWZ0RWxlbWVudD86IEpTWC5FbGVtZW50XG4gIC8qKlxuICAgKiDpmZDliLbplb/luqZcbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgbnVsbFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gbmFtZVxuICAgKi9cbiAgbmFtZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIGJsdXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmx1cj86IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sIHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBmb2N1cyDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25Gb2N1cz86IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBrZXlkb3duIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbktleURvd24/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogZW50ZXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uUHJlc3NFbnRlcj86IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHJlcXVpcmVkXG4gICAqL1xuICByZXF1aXJlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWQjue9ruWFg+e0oFxuICAgKi9cbiAgcmlnaHRFbGVtZW50PzogSlNYLkVsZW1lbnRcbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZT86IFwibWluaVwiIHwgXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIlxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW5wdXRcbiAgZXh0ZW5kcyBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICAgIElJbnB1dFByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4gID4ge1xuICBUZXh0YXJlYTogdHlwZW9mIFRleHRhcmVhXG59XG5cbi8qKlxuICog6L6T5YWl5qGG55So5LqO5paH5pys6L6T5YWl55qE5Yy65Z+f77yM5Y+v57uT5ZCI5Zu+5qCH44CB5oyJ6ZKu44CB6YCJ5oup5Zmo562J57uE5Lu25L2/55So44CCXG4gKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IElucHV0OiBJSW5wdXQgPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xlYXZlT3B0aW9ucyxcbiAgICAgIGNvbnRlbnRKdXN0aWZ5LFxuICAgICAgY291bnRIYW56aSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaWQsXG4gICAgICBpbnRlbnQsXG4gICAgICBsZWZ0RWxlbWVudCxcbiAgICAgIGxpbWl0LFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uUHJlc3NFbnRlcixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQsXG4gICAgICByaWdodEVsZW1lbnQsXG4gICAgICBzaXplOiBzaXplUHJvcCxcbiAgICAgIHN0eWxlLFxuICAgICAgdGhlbWUsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSUlucHV0UHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IFtsZWZ0RWxlbWVudFdpZHRoLCBzZXRMZWZ0RWxlbWVudFdpZHRoXSA9IHVzZVN0YXRlPG51bGwgfCBudW1iZXI+KFxuICAgICAgbnVsbFxuICAgIClcbiAgICBjb25zdCBbcmlnaHRFbGVtZW50V2lkdGgsIHNldFJpZ2h0RWxlbWVudFdpZHRoXSA9IHVzZVN0YXRlPG51bGwgfCBudW1iZXI+KFxuICAgICAgbnVsbFxuICAgIClcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG4gICAgY29uc3Qgd3JhcHBlckVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gICAgY29uc3QgbGVmdEVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gICAgY29uc3QgcmlnaHRFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICAgIGNvbnN0IGp1c3RpZnlFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICAgIGNvbnN0IGNsZWF2ZVJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG5cbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBpbnB1dFJlZj8uY3VycmVudCB8fCBjbGVhdmVSZWY/LmN1cnJlbnQ/LmVsZW1lbnRcblxuICAgIGNvbnN0IHsgc2l6ZTogc2l6ZUNvbnRleHQgfSA9IHVzZUNvbnRleHQoQ29uZmlnQ29udGV4dClcblxuICAgIGNvbnN0IHNpemUgPSBnZXRDb21wdXRlZFNpemUoc2l6ZVByb3AsIHNpemVDb250ZXh0KVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkICYmIG9uQ2hhbmdlKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRyb2wtcmVnZXgsIG1heC1sZW4gKi9cbiAgICAgICAgLy8gMDggQmFja3NwYWNlLCAwOSBUYWIsIDBBIOaNouihjOespiwgMEIg5Z6C55u05Yi26KGo56ymLCAwQyDmjaLpobUsIDBEIOWbnui9piwgQTAg5LiN6Ze05pat56m65qC8LFxuICAgICAgICAvLyAyMDI4LzIwMjkg5YiG6ZqU56ymLCBGRWZmIOWtl+iKgumhuuW6j+agh+iusOOAglxuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgIC9cXHUwMDA4fFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBCfFxcdTAwMEN8XFx1MDAwRHxcXHUwMEEwfFxcdTIwMjh8XFx1MjAyOXxcXHVGRUZGL2csXG4gICAgICAgICAgXCJcIlxuICAgICAgICApXG4gICAgICAgIG9uQ2hhbmdlKGUsIHZhbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiICYmIG9uUHJlc3NFbnRlcikge1xuICAgICAgICBvblByZXNzRW50ZXIoZSlcbiAgICAgIH1cbiAgICAgIGlmIChvbktleURvd24pIHtcbiAgICAgICAgb25LZXlEb3duKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQmx1ciA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICAgIG9uRm9jdXMoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVBdHRhY2hlZEVsZW1lbnRDbGljayA9IChwb3NpdGlvbjogXCJsZWZ0XCIgfCBcInJpZ2h0XCIpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcG9zaXRpb24gPT09IFwibGVmdFwiICYmXG4gICAgICAgIGxlZnRFbGVtZW50ICYmXG4gICAgICAgIGxlZnRFbGVtZW50LnR5cGUgJiZcbiAgICAgICAgbGVmdEVsZW1lbnQudHlwZS5uYW1lID09PSBcIkljb25cIlxuICAgICAgKSB7XG4gICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpXG4gICAgICAgIGlucHV0RWxlbWVudC5zZWxlY3QoKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBwb3NpdGlvbiA9PT0gXCJyaWdodFwiICYmXG4gICAgICAgIHJpZ2h0RWxlbWVudCAmJlxuICAgICAgICByaWdodEVsZW1lbnQudHlwZSAmJlxuICAgICAgICByaWdodEVsZW1lbnQudHlwZS5uYW1lID09PSBcIkljb25cIlxuICAgICAgKSB7XG4gICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpXG4gICAgICAgIGlucHV0RWxlbWVudC5zZWxlY3QoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpeENvbnRyb2xsZWRWYWx1ZSA9ICh2YWw/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVFbGVtZW50c1dpZHRoID0gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiDov5nkuKrmlrnms5XkvJrlnKggZGlkVXBkYXRlIOWSjCBkaWRNb3VudCDml7bljrsgc2V0U3RhdGVcbiAgICAgICAqIOS4gOWumuimgemBv+WFjemAoOaIkOW+queOr+OAglxuICAgICAgICovXG4gICAgICBpZiAobGVmdEVsZW1lbnRSZWY/LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCB9ID0gbGVmdEVsZW1lbnRSZWYuY3VycmVudFxuXG4gICAgICAgIC8vIOmYsuatouW+queOr1xuICAgICAgICBpZiAoTWF0aC5hYnMoY2xpZW50V2lkdGggLSAobGVmdEVsZW1lbnRXaWR0aCB8fCAwKSkgPiAyKSB7XG4gICAgICAgICAgc2V0TGVmdEVsZW1lbnRXaWR0aChjbGllbnRXaWR0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsZWZ0RWxlbWVudFdpZHRoKSB7XG4gICAgICAgIHNldExlZnRFbGVtZW50V2lkdGgobnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKHJpZ2h0RWxlbWVudFJlZj8uY3VycmVudCkge1xuICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoIH0gPSByaWdodEVsZW1lbnRSZWYuY3VycmVudFxuXG4gICAgICAgIC8vIOmYsuatouW+queOr1xuICAgICAgICBpZiAoTWF0aC5hYnMoY2xpZW50V2lkdGggLSAocmlnaHRFbGVtZW50V2lkdGggfHwgMCkpID4gMikge1xuICAgICAgICAgIHNldFJpZ2h0RWxlbWVudFdpZHRoKGNsaWVudFdpZHRoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0RWxlbWVudFdpZHRoKSB7XG4gICAgICAgIHNldFJpZ2h0RWxlbWVudFdpZHRoKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChqdXN0aWZ5RWxlbWVudFJlZj8uY3VycmVudCkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFdpZHRoIH0gPSBqdXN0aWZ5RWxlbWVudFJlZi5jdXJyZW50XG4gICAgICAgIGlmIChcbiAgICAgICAgICB3cmFwcGVyRWxlbWVudFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgTWF0aC5jZWlsKHNjcm9sbFdpZHRoKSAhPT0gd3JhcHBlckVsZW1lbnRSZWYuY3VycmVudC5jbGllbnRXaWR0aFxuICAgICAgICApIHtcbiAgICAgICAgICB3cmFwcGVyRWxlbWVudFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYCR7TWF0aC5jZWlsKHNjcm9sbFdpZHRoKX1weGBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldEZvcm1hdFN0ckxlbmcgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgICAgIGxldCByZWFsTGVuZ3RoID0gMFxuICAgICAgbGV0IGNoYXJDb2RlID0gLTFcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgICAgICBpZiAoY2hhckNvZGUgPj0gMCAmJiBjaGFyQ29kZSA8PSAxMjgpIHtcbiAgICAgICAgICByZWFsTGVuZ3RoICs9IDAuNVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlYWxMZW5ndGggKz0gMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHJlYWxMZW5ndGgpXG4gICAgfVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHVwZGF0ZUVsZW1lbnRzV2lkdGgoKVxuICAgICAgaWYgKGNsZWF2ZVJlZj8uY3VycmVudCkge1xuICAgICAgICBjb25zdCBlbCA9IGNsZWF2ZVJlZi5jdXJyZW50LmVsZW1lbnRcbiAgICAgICAgLyoqXG4gICAgICAgICAqIOS/ruWkjSBjbGVhdmUuMS40LjcgYnVnOlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGNsZWF2ZVJlZi5jdXJyZW50Lmxhc3RJbnB1dFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIGNsZWF2ZVJlZi5jdXJyZW50Lmxhc3RJbnB1dFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xlYXZlUmVmLmN1cnJlbnQuc3RhdGUudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgY2xlYXZlUmVmLmN1cnJlbnQuc3RhdGUudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhdmVSZWYuY3VycmVudC5wcm9wZXJ0aWVzLnJlc3VsdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBjbGVhdmVSZWYuY3VycmVudC5wcm9wZXJ0aWVzLnJlc3VsdCA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsICYmIGVsLnZhbHVlICE9PSB2YWx1ZSAmJiB2YWx1ZSkge1xuICAgICAgICAgIGVsLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVhbFJlZiA9IGlucHV0UmVmPy5jdXJyZW50IHx8IGNsZWF2ZVJlZj8uY3VycmVudD8uZWxlbWVudFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXZlOiBjbGVhdmVSZWY/LmN1cnJlbnQsXG4gICAgICAgIGlucHV0OiByZWFsUmVmLFxuICAgICAgICBsZWZ0RWxlbWVudDogbGVmdEVsZW1lbnRSZWY/LmN1cnJlbnQsXG4gICAgICAgIHJpZ2h0RWxlbWVudDogcmlnaHRFbGVtZW50UmVmPy5jdXJyZW50LFxuICAgICAgICB1cGRhdGVFbGVtZW50c1dpZHRoLFxuICAgICAgICBoYW5kbGVDaGFuZ2UsXG4gICAgICAgIGhhbmRsZUtleURvd24sXG4gICAgICAgIGhhbmRsZUJsdXIsXG4gICAgICAgIGhhbmRsZUZvY3VzLFxuICAgICAgICBoYW5kbGVBdHRhY2hlZEVsZW1lbnRDbGljayxcbiAgICAgICAgZm9jdXM6ICgpID0+IHJlYWxSZWYuZm9jdXMoKSxcbiAgICAgICAgYmx1cjogKCkgPT4gcmVhbFJlZi5ibHVyKCksXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGlucHV0UHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICBhdXRvQ29tcGxldGUsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tYmFzZWAsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgcGFkZGluZ0xlZnQ6IGxlZnRFbGVtZW50V2lkdGggPyBgJHtsZWZ0RWxlbWVudFdpZHRofXB4YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiByaWdodEVsZW1lbnRXaWR0aCA/IGAke3JpZ2h0RWxlbWVudFdpZHRofXB4YCA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB0eXBlLFxuICAgIH1cblxuICAgIGNvbnN0IGNsZWF2ZUlucHV0UHJvcHMgPSB7IC4uLmlucHV0UHJvcHMgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICBpbnB1dFByb3BzLnZhbHVlID0gZml4Q29udHJvbGxlZFZhbHVlKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzLmRlZmF1bHRWYWx1ZSA9IGZpeENvbnRyb2xsZWRWYWx1ZShkZWZhdWx0VmFsdWUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2xlYXZlIOS4jeaOpeaUtuWOn+eUn+eahCBkZWZhdWx0VmFsdWXvvIzlv4XpobvkvKDlhaUgdmFsdWUgcHJvcCDmnaXlrp7njrAgZGVmYXVsdFZhbHVlIOeahOS9nOeUqFxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3Npci9jbGVhdmUuanMvYmxvYi9tYXN0ZXIvZG9jL3JlYWN0anMtY29tcG9uZW50LXVzYWdlLm1kI2hvdy10by1wYXNzLWRlZmF1bHQtdmFsdWVcbiAgICAgKi9cbiAgICBjbGVhdmVJbnB1dFByb3BzLnZhbHVlID0gdmFsdWUgfHwgZGVmYXVsdFZhbHVlIHx8IFwiXCJcblxuICAgIGNvbnN0IGlucHV0ID1cbiAgICAgICFjbGVhdmVPcHRpb25zIHx8IE9iamVjdC5rZXlzKGNsZWF2ZU9wdGlvbnMpLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPGlucHV0IHsuLi5pbnB1dFByb3BzfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPENsZWF2ZSBvcHRpb25zPXtjbGVhdmVPcHRpb25zfSB7Li4uY2xlYXZlSW5wdXRQcm9wc30gcmVmPXtjbGVhdmVSZWZ9IC8+XG4gICAgICApXG5cbiAgICBsZXQgbGVuZ3RoXG4gICAgaWYgKGxpbWl0KSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhcmlnaHRFbGVtZW50LFxuICAgICAgICBcIklucHV0XCIsXG4gICAgICAgIFwi5LiN5YWB6K645ZCM5pe25L2/55SoIHByb3AgYGxpbWl0YCDkuI4gcHJvcCBgcmlnaHRFbGVtZW50YFwiXG4gICAgICApXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgbGVuZ3RoID0gY291bnRIYW56aSA/IGdldEZvcm1hdFN0ckxlbmcodmFsdWUpIDogdmFsdWUubGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgIHZhbHVlICE9PSBudWxsLFxuICAgICAgICAgIFwiSW5wdXRcIixcbiAgICAgICAgICBcIuWmguaenOimgeS9v+eUqCBsaW1pdCBQcm9w77yM5b+F6aG75LuO5aSW6YOo5o6n5Yi2IHZhbHVl44CCXCJcbiAgICAgICAgKVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50SnVzdGlmeSkge1xuICAgICAgd2FybmluZyhcbiAgICAgICAgdmFsdWUgIT09IG51bGwsXG4gICAgICAgIFwiSW5wdXRcIixcbiAgICAgICAgXCLlpoLmnpzkvb/nlKggY29udGVudEp1c2ZpdHkgUHJvcO+8jOW/hemhu+S7juWklumDqOaOp+WItiB2YWx1ZeOAglwiXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYCR7cHJlZml4fS13cmFwcGVyYCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWAsXG4gICAgICB7XG4gICAgICAgIFtgJHtwcmVmaXh9LSR7dGhlbWV9YF06IHRoZW1lLFxuICAgICAgICBbYCR7cHJlZml4fS1kaXNhYmxlZGBdOiBkaXNhYmxlZCxcbiAgICAgICAgW2Ake3ByZWZpeH0tbGltaXRlZGBdOiBsaW1pdCxcbiAgICAgICAgW2Ake3ByZWZpeH0tbGltaXRlZF9kaWdpdC1vdmVyLTJgXTpcbiAgICAgICAgICBsaW1pdCAmJiBsaW1pdC50b1N0cmluZygpLmxlbmd0aCA+IDIsXG4gICAgICAgIFtgJHtwcmVmaXh9LW5vcm1hbGBdOiBpbnRlbnQgPT09IFwibm9ybWFsXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXByaW1hcnlgXTogaW50ZW50ID09PSBcInByaW1hcnlcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tc3VjY2Vzc2BdOiBpbnRlbnQgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgICBbYCR7cHJlZml4fS13YXJuaW5nYF06IGludGVudCA9PT0gXCJ3YXJuaW5nXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRhbmdlcmBdOlxuICAgICAgICAgIGludGVudCA9PT0gXCJkYW5nZXJcIiB8fCAobGVuZ3RoICYmIGxpbWl0ICYmIGxlbmd0aCA+IGxpbWl0KSxcbiAgICAgIH1cbiAgICApXG5cbiAgICBjb25zdCBsZWZ0VHlwZSA9XG4gICAgICBsZWZ0RWxlbWVudCAmJiBsZWZ0RWxlbWVudC50eXBlID8gbGVmdEVsZW1lbnQudHlwZS50eXBlIDogXCJcIlxuICAgIGNvbnN0IHJpZ2h0VHlwZSA9XG4gICAgICByaWdodEVsZW1lbnQgJiYgcmlnaHRFbGVtZW50LnR5cGUgPyByaWdodEVsZW1lbnQudHlwZS50eXBlIDogXCJcIlxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt3cmFwcGVyRWxlbWVudFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc1NldH1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAgeyEhbGVmdEVsZW1lbnQgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17bGVmdEVsZW1lbnRSZWZ9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2hlZEVsZW1lbnRDbGljayhcImxlZnRcIil9XG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1sZWZ0YCwge1xuICAgICAgICAgICAgICBbYCR7cHJlZml4fS1sZWZ0X2J1dHRvbmBdOiBsZWZ0VHlwZSA9PT0gXCJCdXR0b25cIixcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tbGVmdF9pY29uYF06IGxlZnRUeXBlID09PSBcIkljb25cIixcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tbGVmdF9zZWxlY3RgXTogbGVmdFR5cGUgPT09IFwiU2VsZWN0XCIsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGVmdEVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtpbnB1dH1cbiAgICAgICAgeyEhcmlnaHRFbGVtZW50ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByZWY9e3JpZ2h0RWxlbWVudFJlZn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaGVkRWxlbWVudENsaWNrKFwicmlnaHRcIil9XG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1yaWdodGAsIHtcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tcmlnaHRfYnV0dG9uYF06IHJpZ2h0VHlwZSA9PT0gXCJCdXR0b25cIixcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tcmlnaHRfaWNvbmBdOiByaWdodFR5cGUgPT09IFwiSWNvblwiLFxuICAgICAgICAgICAgICBbYCR7cHJlZml4fS1yaWdodF9zZWxlY3RgXTogcmlnaHRUeXBlID09PSBcIlNlbGVjdFwiLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3JpZ2h0RWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2xpbWl0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1saW1pdGB9PlxuICAgICAgICAgICAgPHNwYW4+e2Ake2xlbmd0aH0vJHtsaW1pdH1gfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2NvbnRlbnRKdXN0aWZ5ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0tanVzdGlmeWB9XG4gICAgICAgICAgICByZWY9e2p1c3RpZnlFbGVtZW50UmVmfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGxlZnRFbGVtZW50V2lkdGhcbiAgICAgICAgICAgICAgICA/IGAke2xlZnRFbGVtZW50V2lkdGh9cHhgXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogcmlnaHRFbGVtZW50V2lkdGhcbiAgICAgICAgICAgICAgICA/IGAke3JpZ2h0RWxlbWVudFdpZHRofXB4YFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogc3R5bGU/Lm1pbldpZHRoLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zml4Q29udHJvbGxlZFZhbHVlKHZhbHVlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuKVxuXG5JbnB1dC5UZXh0YXJlYSA9IFRleHRhcmVhXG5cbklucHV0LmRpc3BsYXlOYW1lID0gXCJJbnB1dFwiXG5cbklucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIGF1dG9Db21wbGV0ZVxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlrp7njrDmiYvmnLrlj7fjgIHml6XmnJ/jgIHmlbDlrZflj4roh6rlrprkuYnmoLzlvI/vvIzlj6/mn6XnnItb56S65L6LXShodHRwOi8vd3hhZC5kZXNpZ24vYWR1aS9jb21wb25lbnRzL2lucHV0KeOAglxuICAgKi9cbiAgY2xlYXZlT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOWuveW6puaYr+WQpuS4juWGheWuueWuveW6puWvuem9kFxuICAgKi9cbiAgY29udGVudEp1c3RpZnk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5piv5ZCm5oyJ54Wn5LiA5Liq5rGJ5a2X566XIDIg5a2X5pWw55qE5pa55byP6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBjb3VudEhhbnppOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOm7mOiupOWAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDovpPlhaXmoYbnmoQgaWRcbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgXCJub3JtYWxcIixcbiAgICBcInByaW1hcnlcIixcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcIndhcm5pbmdcIixcbiAgICBcImRhbmdlclwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOWJjee9ruWFg+e0oFxuICAgKi9cbiAgbGVmdEVsZW1lbnQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDpmZDliLbplb/luqZcbiAgICovXG4gIGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gbmFtZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIGJsdXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogZm9jdXMg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICoga2V5ZG93biDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGVudGVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblByZXNzRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gcmVxdWlyZWRcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWQjue9ruWFg+e0oFxuICAgKi9cbiAgcmlnaHRFbGVtZW50OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZihbbnVsbCwgXCJsaWdodFwiXSksXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbn1cblxuSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjbGVhdmVPcHRpb25zOiB7fSxcbiAgY29udGVudEp1c3RpZnk6IGZhbHNlLFxuICBjb3VudEhhbnppOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbGVmdEVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgbGltaXQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIG9uQmx1cjogKCkgPT4ge30sXG4gIG9uQ2hhbmdlOiAoKSA9PiB7fSxcbiAgb25Gb2N1czogKCkgPT4ge30sXG4gIG9uS2V5RG93bjogKCkgPT4ge30sXG4gIG9uUHJlc3NFbnRlcjogKCkgPT4ge30sXG4gIHBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpVwiLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIHJpZ2h0RWxlbWVudDogdW5kZWZpbmVkLFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHN0eWxlOiB7fSxcbiAgdGhlbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnB1dFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBUUEsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0FBLE9BQUE7QUFBZ0IsSUFBQVEsU0FBQTtBQUFBLFNBQUFOLHVCQUFBTyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSx5QkFBQUYsQ0FBQSxXQUFBQSxDQUFBLEdBQUFLLENBQUEsR0FBQUQsQ0FBQSxLQUFBSixDQUFBO0FBQUEsU0FBQVYsd0JBQUFVLENBQUEsRUFBQUksQ0FBQSxTQUFBQSxDQUFBLElBQUFKLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLFNBQUFELENBQUEsZUFBQUEsQ0FBQSxnQkFBQU0sT0FBQSxDQUFBTixDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFLLENBQUEsR0FBQUgsd0JBQUEsQ0FBQUUsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUUsR0FBQSxDQUFBUCxDQUFBLFVBQUFLLENBQUEsQ0FBQUcsR0FBQSxDQUFBUixDQUFBLE9BQUFTLENBQUEsS0FBQUMsU0FBQSxVQUFB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