"use strict"; (self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-input-number_es_index_js-node_modules_rc-input_lib_utils_commonUtils_-994bf3"],{ /***/ "../../../node_modules/rc-input-number/es/InputNumber.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-input-number/es/InputNumber.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @rc-component/mini-decimal */ "../../../node_modules/@rc-component/mini-decimal/es/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_input__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-input */ "../../../node_modules/rc-input/es/index.js"); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var rc_util_es_proxyObject__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/proxyObject */ "../../../node_modules/rc-util/es/proxyObject.js"); /* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _hooks_useCursor__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useCursor */ "../../../node_modules/rc-input-number/es/hooks/useCursor.js"); /* harmony import */ var _StepHandler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./StepHandler */ "../../../node_modules/rc-input-number/es/StepHandler.js"); /* harmony import */ var _utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/numberUtil */ "../../../node_modules/rc-input-number/es/utils/numberUtil.js"); /* harmony import */ var rc_input_es_utils_commonUtils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! rc-input/es/utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js"); /* harmony import */ var _hooks_useFrame__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hooks/useFrame */ "../../../node_modules/rc-input-number/es/hooks/useFrame.js"); var _excluded = ["prefixCls", "className", "style", "min", "max", "step", "defaultValue", "value", "disabled", "readOnly", "upHandler", "downHandler", "keyboard", "changeOnWheel", "controls", "classNames", "stringMode", "parser", "formatter", "precision", "decimalSeparator", "onChange", "onInput", "onPressEnter", "onStep", "changeOnBlur", "domRef"], _excluded2 = ["disabled", "style", "prefixCls", "value", "prefix", "suffix", "addonBefore", "addonAfter", "className", "classNames"]; /** * We support `stringMode` which need handle correct type when user call in onChange * format max or min value * 1. if isInvalid return null * 2. if precision is undefined, return decimal * 3. format with precision * I. if max > 0, round down with precision. Example: max= 3.5, precision=0 afterFormat: 3 * II. if max < 0, round up with precision. Example: max= -3.5, precision=0 afterFormat: -4 * III. if min > 0, round up with precision. Example: min= 3.5, precision=0 afterFormat: 4 * IV. if min < 0, round down with precision. Example: max= -3.5, precision=0 afterFormat: -3 */ var getDecimalValue = function getDecimalValue(stringMode, decimalValue) { if (stringMode || decimalValue.isEmpty()) { return decimalValue.toString(); } return decimalValue.toNumber(); }; var getDecimalIfValidate = function getDecimalIfValidate(value) { var decimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value); return decimal.isInvalidate() ? null : decimal; }; var InternalInputNumber = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) { var prefixCls = props.prefixCls, className = props.className, style = props.style, min = props.min, max = props.max, _props$step = props.step, step = _props$step === void 0 ? 1 : _props$step, defaultValue = props.defaultValue, value = props.value, disabled = props.disabled, readOnly = props.readOnly, upHandler = props.upHandler, downHandler = props.downHandler, keyboard = props.keyboard, _props$changeOnWheel = props.changeOnWheel, changeOnWheel = _props$changeOnWheel === void 0 ? false : _props$changeOnWheel, _props$controls = props.controls, controls = _props$controls === void 0 ? true : _props$controls, classNames = props.classNames, stringMode = props.stringMode, parser = props.parser, formatter = props.formatter, precision = props.precision, decimalSeparator = props.decimalSeparator, onChange = props.onChange, onInput = props.onInput, onPressEnter = props.onPressEnter, onStep = props.onStep, _props$changeOnBlur = props.changeOnBlur, changeOnBlur = _props$changeOnBlur === void 0 ? true : _props$changeOnBlur, domRef = props.domRef, inputProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded); var inputClassName = "".concat(prefixCls, "-input"); var inputRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null); var _React$useState = react__WEBPACK_IMPORTED_MODULE_11__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), focus = _React$useState2[0], setFocus = _React$useState2[1]; var userTypingRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false); var compositionRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false); var shiftKeyRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false); // ============================ Value ============================= // Real value control var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_11__.useState(function () { return (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value !== null && value !== void 0 ? value : defaultValue); }), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2), decimalValue = _React$useState4[0], setDecimalValue = _React$useState4[1]; function setUncontrolledDecimalValue(newDecimal) { if (value === undefined) { setDecimalValue(newDecimal); } } // ====================== Parser & Formatter ====================== /** * `precision` is used for formatter & onChange. * It will auto generate by `value` & `step`. * But it will not block user typing. * * Note: Auto generate `precision` is used for legacy logic. * We should remove this since we already support high precision with BigInt. * * @param number Provide which number should calculate precision * @param userTyping Change by user typing */ var getPrecision = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (numStr, userTyping) { if (userTyping) { return undefined; } if (precision >= 0) { return precision; } return Math.max((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.getNumberPrecision)(numStr), (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.getNumberPrecision)(step)); }, [precision, step]); // >>> Parser var mergedParser = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (num) { var numStr = String(num); if (parser) { return parser(numStr); } var parsedStr = numStr; if (decimalSeparator) { parsedStr = parsedStr.replace(decimalSeparator, '.'); } // [Legacy] We still support auto convert `$ 123,456` to `123456` return parsedStr.replace(/[^\w.-]+/g, ''); }, [parser, decimalSeparator]); // >>> Formatter var inputValueRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(''); var mergedFormatter = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (number, userTyping) { if (formatter) { return formatter(number, { userTyping: userTyping, input: String(inputValueRef.current) }); } var str = typeof number === 'number' ? (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.num2str)(number) : number; // User typing will not auto format with precision directly if (!userTyping) { var mergedPrecision = getPrecision(str, userTyping); if ((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.validateNumber)(str) && (decimalSeparator || mergedPrecision >= 0)) { // Separator var separatorStr = decimalSeparator || '.'; str = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(str, separatorStr, mergedPrecision); } } return str; }, [formatter, getPrecision, decimalSeparator]); // ========================== InputValue ========================== /** * Input text value control * * User can not update input content directly. It updates with follow rules by priority: * 1. controlled `value` changed * * [SPECIAL] Typing like `1.` should not immediately convert to `1` * 2. User typing with format (not precision) * 3. Blur or Enter trigger revalidate */ var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_11__.useState(function () { var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value; if (decimalValue.isInvalidate() && ['string', 'number'].includes((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(initValue))) { return Number.isNaN(initValue) ? '' : initValue; } return mergedFormatter(decimalValue.toString(), false); }), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2), inputValue = _React$useState6[0], setInternalInputValue = _React$useState6[1]; inputValueRef.current = inputValue; // Should always be string function setInputValue(newValue, userTyping) { setInternalInputValue(mergedFormatter( // Invalidate number is sometime passed by external control, we should let it go // Otherwise is controlled by internal interactive logic which check by userTyping // You can ref 'show limited value when input is not focused' test for more info. newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping), userTyping)); } // >>> Max & Min limit var maxDecimal = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return getDecimalIfValidate(max); }, [max, precision]); var minDecimal = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return getDecimalIfValidate(min); }, [min, precision]); var upDisabled = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { if (!maxDecimal || !decimalValue || decimalValue.isInvalidate()) { return false; } return maxDecimal.lessEquals(decimalValue); }, [maxDecimal, decimalValue]); var downDisabled = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { if (!minDecimal || !decimalValue || decimalValue.isInvalidate()) { return false; } return decimalValue.lessEquals(minDecimal); }, [minDecimal, decimalValue]); // Cursor controller var _useCursor = (0,_hooks_useCursor__WEBPACK_IMPORTED_MODULE_12__["default"])(inputRef.current, focus), _useCursor2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useCursor, 2), recordCursor = _useCursor2[0], restoreCursor = _useCursor2[1]; // ============================= Data ============================= /** * Find target value closet within range. * e.g. [11, 28]: * 3 => 11 * 23 => 23 * 99 => 28 */ var getRangeValue = function getRangeValue(target) { // target > max if (maxDecimal && !target.lessEquals(maxDecimal)) { return maxDecimal; } // target < min if (minDecimal && !minDecimal.lessEquals(target)) { return minDecimal; } return null; }; /** * Check value is in [min, max] range */ var isInRange = function isInRange(target) { return !getRangeValue(target); }; /** * Trigger `onChange` if value validated and not equals of origin. * Return the value that re-align in range. */ var triggerValueUpdate = function triggerValueUpdate(newValue, userTyping) { var updateValue = newValue; var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty(); // Skip align value when trigger value is empty. // We just trigger onChange(null) // This should not block user typing if (!updateValue.isEmpty() && !userTyping) { // Revert value in range if needed updateValue = getRangeValue(updateValue) || updateValue; isRangeValidate = true; } if (!readOnly && !disabled && isRangeValidate) { var numStr = updateValue.toString(); var mergedPrecision = getPrecision(numStr, userTyping); if (mergedPrecision >= 0) { updateValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(numStr, '.', mergedPrecision)); // When to fixed. The value may out of min & max range. // 4 in [0, 3.8] => 3.8 => 4 (toFixed) if (!isInRange(updateValue)) { updateValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(numStr, '.', mergedPrecision, true)); } } // Trigger event if (!updateValue.equals(decimalValue)) { setUncontrolledDecimalValue(updateValue); onChange === null || onChange === void 0 || onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue)); // Reformat input if value is not controlled if (value === undefined) { setInputValue(updateValue, userTyping); } } return updateValue; } return decimalValue; }; // ========================== User Input ========================== var onNextPromise = (0,_hooks_useFrame__WEBPACK_IMPORTED_MODULE_16__["default"])(); // >>> Collect input value var collectInputValue = function collectInputValue(inputStr) { recordCursor(); // Update inputValue in case input can not parse as number // Refresh ref value immediately since it may used by formatter inputValueRef.current = inputStr; setInternalInputValue(inputStr); // Parse number if (!compositionRef.current) { var finalValue = mergedParser(inputStr); var finalDecimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(finalValue); if (!finalDecimal.isNaN()) { triggerValueUpdate(finalDecimal, true); } } // Trigger onInput later to let user customize value if they want to handle something after onChange onInput === null || onInput === void 0 || onInput(inputStr); // optimize for chinese input experience // https://github.com/ant-design/ant-design/issues/8196 onNextPromise(function () { var nextInputStr = inputStr; if (!parser) { nextInputStr = inputStr.replace(/。/g, '.'); } if (nextInputStr !== inputStr) { collectInputValue(nextInputStr); } }); }; // >>> Composition var onCompositionStart = function onCompositionStart() { compositionRef.current = true; }; var onCompositionEnd = function onCompositionEnd() { compositionRef.current = false; collectInputValue(inputRef.current.value); }; // >>> Input var onInternalInput = function onInternalInput(e) { collectInputValue(e.target.value); }; // ============================= Step ============================= var onInternalStep = function onInternalStep(up) { var _inputRef$current; // Ignore step since out of range if (up && upDisabled || !up && downDisabled) { return; } // Clear typing status since it may be caused by up & down key. // We should sync with input value. userTypingRef.current = false; var stepDecimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(shiftKeyRef.current ? (0,_utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__.getDecupleSteps)(step) : step); if (!up) { stepDecimal = stepDecimal.negate(); } var target = (decimalValue || (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(0)).add(stepDecimal.toString()); var updatedValue = triggerValueUpdate(target, false); onStep === null || onStep === void 0 || onStep(getDecimalValue(stringMode, updatedValue), { offset: shiftKeyRef.current ? (0,_utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__.getDecupleSteps)(step) : step, type: up ? 'up' : 'down' }); (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus(); }; // ============================ Flush ============================= /** * Flush current input content to trigger value change & re-formatter input if needed. * This will always flush input value for update. * If it's invalidate, will fallback to last validate value. */ var flushInputValue = function flushInputValue(userTyping) { var parsedValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(mergedParser(inputValue)); var formatValue; if (!parsedValue.isNaN()) { // Only validate value or empty value can be re-fill to inputValue // Reassign the formatValue within ranged of trigger control formatValue = triggerValueUpdate(parsedValue, userTyping); } else { formatValue = triggerValueUpdate(decimalValue, userTyping); } if (value !== undefined) { // Reset back with controlled value first setInputValue(decimalValue, false); } else if (!formatValue.isNaN()) { // Reset input back since no validate value setInputValue(formatValue, false); } }; // Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari) var onBeforeInput = function onBeforeInput() { userTypingRef.current = true; }; var onKeyDown = function onKeyDown(event) { var key = event.key, shiftKey = event.shiftKey; userTypingRef.current = true; shiftKeyRef.current = shiftKey; if (key === 'Enter') { if (!compositionRef.current) { userTypingRef.current = false; } flushInputValue(false); onPressEnter === null || onPressEnter === void 0 || onPressEnter(event); } if (keyboard === false) { return; } // Do step if (!compositionRef.current && ['Up', 'ArrowUp', 'Down', 'ArrowDown'].includes(key)) { onInternalStep(key === 'Up' || key === 'ArrowUp'); event.preventDefault(); } }; var onKeyUp = function onKeyUp() { userTypingRef.current = false; shiftKeyRef.current = false; }; react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { if (changeOnWheel && focus) { var onWheel = function onWheel(event) { // moving mouse wheel rises wheel event with deltaY < 0 // scroll value grows from top to bottom, as screen Y coordinate onInternalStep(event.deltaY < 0); event.preventDefault(); }; var input = inputRef.current; if (input) { // React onWheel is passive and we can't preventDefault() in it. // That's why we should subscribe with DOM listener // https://stackoverflow.com/questions/63663025/react-onwheel-handler-cant-preventdefault-because-its-a-passive-event-listenev input.addEventListener('wheel', onWheel, { passive: false }); return function () { return input.removeEventListener('wheel', onWheel); }; } } }); // >>> Focus & Blur var onBlur = function onBlur() { if (changeOnBlur) { flushInputValue(false); } setFocus(false); userTypingRef.current = false; }; // ========================== Controlled ========================== // Input by precision & formatter (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () { if (!decimalValue.isInvalidate()) { setInputValue(decimalValue, false); } }, [precision, formatter]); // Input by value (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () { var newValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value); setDecimalValue(newValue); var currentParsedValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(mergedParser(inputValue)); // When user typing from `1.2` to `1.`, we should not convert to `1` immediately. // But let it go if user set `formatter` if (!newValue.equals(currentParsedValue) || !userTypingRef.current || formatter) { // Update value as effect setInputValue(newValue, userTypingRef.current); } }, [value]); // ============================ Cursor ============================ (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () { if (formatter) { restoreCursor(); } }, [inputValue]); // ============================ Render ============================ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", { ref: domRef, className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-focused"), focus), "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-readonly"), readOnly), "".concat(prefixCls, "-not-a-number"), decimalValue.isNaN()), "".concat(prefixCls, "-out-of-range"), !decimalValue.isInvalidate() && !isInRange(decimalValue))), style: style, onFocus: function onFocus() { setFocus(true); }, onBlur: onBlur, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onCompositionStart: onCompositionStart, onCompositionEnd: onCompositionEnd, onBeforeInput: onBeforeInput }, controls && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_StepHandler__WEBPACK_IMPORTED_MODULE_13__["default"], { prefixCls: prefixCls, upNode: upHandler, downNode: downHandler, upDisabled: upDisabled, downDisabled: downDisabled, onStep: onInternalStep }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", { className: "".concat(inputClassName, "-wrap") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("input", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ autoComplete: "off", role: "spinbutton", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": decimalValue.isInvalidate() ? null : decimalValue.toString(), step: step }, inputProps, { ref: (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_10__.composeRef)(inputRef, ref), className: inputClassName, value: inputValue, onChange: onInternalInput, disabled: disabled, readOnly: readOnly })))); }); var InputNumber = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) { var disabled = props.disabled, style = props.style, _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls, value = props.value, prefix = props.prefix, suffix = props.suffix, addonBefore = props.addonBefore, addonAfter = props.addonAfter, className = props.className, classNames = props.classNames, rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2); var holderRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null); var inputNumberDomRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null); var inputFocusRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null); var focus = function focus(option) { if (inputFocusRef.current) { (0,rc_input_es_utils_commonUtils__WEBPACK_IMPORTED_MODULE_15__.triggerFocus)(inputFocusRef.current, option); } }; react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle(ref, function () { return (0,rc_util_es_proxyObject__WEBPACK_IMPORTED_MODULE_9__["default"])(inputFocusRef.current, { focus: focus, nativeElement: holderRef.current.nativeElement || inputNumberDomRef.current }); }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(rc_input__WEBPACK_IMPORTED_MODULE_7__.BaseInput, { className: className, triggerFocus: focus, prefixCls: prefixCls, value: value, disabled: disabled, style: style, prefix: prefix, suffix: suffix, addonAfter: addonAfter, addonBefore: addonBefore, classNames: classNames, components: { affixWrapper: 'div', groupWrapper: 'div', wrapper: 'div', groupAddon: 'div' }, ref: holderRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(InternalInputNumber, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ prefixCls: prefixCls, disabled: disabled, ref: inputFocusRef, domRef: inputNumberDomRef, className: classNames === null || classNames === void 0 ? void 0 : classNames.input }, rest))); }); if (true) { InputNumber.displayName = 'InputNumber'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InputNumber); /***/ }), /***/ "../../../node_modules/rc-input-number/es/StepHandler.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-input-number/es/StepHandler.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ StepHandler) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var rc_util_es_hooks_useMobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useMobile */ "../../../node_modules/rc-util/es/hooks/useMobile.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* eslint-disable react/no-unknown-property */ /** * When click and hold on a button - the speed of auto changing the value. */ var STEP_INTERVAL = 200; /** * When click and hold on a button - the delay before auto changing the value. */ var STEP_DELAY = 600; function StepHandler(_ref) { var prefixCls = _ref.prefixCls, upNode = _ref.upNode, downNode = _ref.downNode, upDisabled = _ref.upDisabled, downDisabled = _ref.downDisabled, onStep = _ref.onStep; // ======================== Step ======================== var stepTimeoutRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(); var frameIds = react__WEBPACK_IMPORTED_MODULE_2__.useRef([]); var onStepRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(); onStepRef.current = onStep; var onStopStep = function onStopStep() { clearTimeout(stepTimeoutRef.current); }; // We will interval update step when hold mouse down var onStepMouseDown = function onStepMouseDown(e, up) { e.preventDefault(); onStopStep(); onStepRef.current(up); // Loop step for interval function loopStep() { onStepRef.current(up); stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL); } // First time press will wait some time to trigger loop step update stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY); }; react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () { return function () { onStopStep(); frameIds.current.forEach(function (id) { return rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__["default"].cancel(id); }); }; }, []); // ======================= Render ======================= var isMobile = (0,rc_util_es_hooks_useMobile__WEBPACK_IMPORTED_MODULE_4__["default"])(); if (isMobile) { return null; } var handlerClassName = "".concat(prefixCls, "-handler"); var upClassName = classnames__WEBPACK_IMPORTED_MODULE_3___default()(handlerClassName, "".concat(handlerClassName, "-up"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(handlerClassName, "-up-disabled"), upDisabled)); var downClassName = classnames__WEBPACK_IMPORTED_MODULE_3___default()(handlerClassName, "".concat(handlerClassName, "-down"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(handlerClassName, "-down-disabled"), downDisabled)); // fix: https://github.com/ant-design/ant-design/issues/43088 // In Safari, When we fire onmousedown and onmouseup events in quick succession, // there may be a problem that the onmouseup events are executed first, // resulting in a disordered program execution. // So, we need to use requestAnimationFrame to ensure that the onmouseup event is executed after the onmousedown event. var safeOnStopStep = function safeOnStopStep() { return frameIds.current.push((0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__["default"])(onStopStep)); }; var sharedHandlerProps = { unselectable: 'on', role: 'button', onMouseUp: safeOnStopStep, onMouseLeave: safeOnStopStep }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(handlerClassName, "-wrap") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, sharedHandlerProps, { onMouseDown: function onMouseDown(e) { onStepMouseDown(e, true); }, "aria-label": "Increase Value", "aria-disabled": upDisabled, className: upClassName }), upNode || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { unselectable: "on", className: "".concat(prefixCls, "-handler-up-inner") })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, sharedHandlerProps, { onMouseDown: function onMouseDown(e) { onStepMouseDown(e, false); }, "aria-label": "Decrease Value", "aria-disabled": downDisabled, className: downClassName }), downNode || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { unselectable: "on", className: "".concat(prefixCls, "-handler-down-inner") }))); } /***/ }), /***/ "../../../node_modules/rc-input-number/es/hooks/useCursor.js": /*!*******************************************************************!*\ !*** ../../../node_modules/rc-input-number/es/hooks/useCursor.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useCursor) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /** * Keep input cursor in the correct position if possible. * Is this necessary since we have `formatter` which may mass the content? */ function useCursor(input, focused) { var selectionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); function recordCursor() { // Record position try { var start = input.selectionStart, end = input.selectionEnd, value = input.value; var beforeTxt = value.substring(0, start); var afterTxt = value.substring(end); selectionRef.current = { start: start, end: end, value: value, beforeTxt: beforeTxt, afterTxt: afterTxt }; } catch (e) { // Fix error in Chrome: // Failed to read the 'selectionStart' property from 'HTMLInputElement' // http://stackoverflow.com/q/21177489/3040605 } } /** * Restore logic: * 1. back string same * 2. start string same */ function restoreCursor() { if (input && selectionRef.current && focused) { try { var value = input.value; var _selectionRef$current = selectionRef.current, beforeTxt = _selectionRef$current.beforeTxt, afterTxt = _selectionRef$current.afterTxt, start = _selectionRef$current.start; var startPos = value.length; if (value.startsWith(beforeTxt)) { startPos = beforeTxt.length; } else if (value.endsWith(afterTxt)) { startPos = value.length - selectionRef.current.afterTxt.length; } else { var beforeLastChar = beforeTxt[start - 1]; var newIndex = value.indexOf(beforeLastChar, start - 1); if (newIndex !== -1) { startPos = newIndex + 1; } } input.setSelectionRange(startPos, startPos); } catch (e) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, "Something warning of cursor restore. Please fire issue about this: ".concat(e.message)); } } } return [recordCursor, restoreCursor]; } /***/ }), /***/ "../../../node_modules/rc-input-number/es/hooks/useFrame.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-input-number/es/hooks/useFrame.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /** * Always trigger latest once when call multiple time */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () { var idRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0); var cleanUp = function cleanUp() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(idRef.current); }; (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { return cleanUp; }, []); return function (callback) { cleanUp(); idRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(function () { callback(); }); }; }); /***/ }), /***/ "../../../node_modules/rc-input-number/es/index.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-input-number/es/index.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _InputNumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputNumber */ "../../../node_modules/rc-input-number/es/InputNumber.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_InputNumber__WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "../../../node_modules/rc-input-number/es/utils/numberUtil.js": /*!********************************************************************!*\ !*** ../../../node_modules/rc-input-number/es/utils/numberUtil.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDecupleSteps: () => (/* binding */ getDecupleSteps) /* harmony export */ }); /* harmony import */ var _rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rc-component/mini-decimal */ "../../../node_modules/@rc-component/mini-decimal/es/index.js"); function getDecupleSteps(step) { var stepStr = typeof step === 'number' ? (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.num2str)(step) : (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.trimNumber)(step).fullStr; var hasPoint = stepStr.includes('.'); if (!hasPoint) { return step + '0'; } return (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.trimNumber)(stepStr.replace(/(\d)\.(\d)/g, '$1$2.')).fullStr; } /***/ }), /***/ "../../../node_modules/rc-input/es/BaseInput.js": /*!******************************************************!*\ !*** ../../../node_modules/rc-input/es/BaseInput.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js"); var BaseInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().forwardRef(function (props, ref) { var _props, _props2, _props3; var inputEl = props.inputElement, children = props.children, prefixCls = props.prefixCls, prefix = props.prefix, suffix = props.suffix, addonBefore = props.addonBefore, addonAfter = props.addonAfter, className = props.className, style = props.style, disabled = props.disabled, readOnly = props.readOnly, focused = props.focused, triggerFocus = props.triggerFocus, allowClear = props.allowClear, value = props.value, handleReset = props.handleReset, hidden = props.hidden, classes = props.classes, classNames = props.classNames, dataAttrs = props.dataAttrs, styles = props.styles, components = props.components, onClear = props.onClear; var inputElement = children !== null && children !== void 0 ? children : inputEl; var AffixWrapperComponent = (components === null || components === void 0 ? void 0 : components.affixWrapper) || 'span'; var GroupWrapperComponent = (components === null || components === void 0 ? void 0 : components.groupWrapper) || 'span'; var WrapperComponent = (components === null || components === void 0 ? void 0 : components.wrapper) || 'span'; var GroupAddonComponent = (components === null || components === void 0 ? void 0 : components.groupAddon) || 'span'; var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null); var onInputClick = function onInputClick(e) { var _containerRef$current; if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) { triggerFocus === null || triggerFocus === void 0 || triggerFocus(); } }; var hasAffix = (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasPrefixSuffix)(props); var element = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_5__.cloneElement)(inputElement, { value: value, className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props = inputElement.props) === null || _props === void 0 ? void 0 : _props.className, !hasAffix && (classNames === null || classNames === void 0 ? void 0 : classNames.variant)) || null }); // ======================== Ref ======================== // var groupRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null); react__WEBPACK_IMPORTED_MODULE_5___default().useImperativeHandle(ref, function () { return { nativeElement: groupRef.current || containerRef.current }; }); // ================== Prefix & Suffix ================== // if (hasAffix) { // ================== Clear Icon ================== // var clearIcon = null; if (allowClear) { var needClear = !disabled && !readOnly && value; var clearIconCls = "".concat(prefixCls, "-clear-icon"); var iconNode = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖'; clearIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("button", { type: "button", tabIndex: -1, onClick: function onClick(event) { handleReset === null || handleReset === void 0 || handleReset(event); onClear === null || onClear === void 0 || onClear(); } // Do not trigger onBlur when clear input // https://github.com/ant-design/ant-design/issues/31200 , onMouseDown: function onMouseDown(e) { return e.preventDefault(); }, className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(clearIconCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(clearIconCls, "-hidden"), !needClear), "".concat(clearIconCls, "-has-suffix"), !!suffix)) }, iconNode); } var affixWrapperPrefixCls = "".concat(prefixCls, "-affix-wrapper"); var affixWrapperCls = classnames__WEBPACK_IMPORTED_MODULE_4___default()(affixWrapperPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-focused"), focused), "".concat(affixWrapperPrefixCls, "-readonly"), readOnly), "".concat(affixWrapperPrefixCls, "-input-with-clear-btn"), suffix && allowClear && value), classes === null || classes === void 0 ? void 0 : classes.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.variant); var suffixNode = (suffix || allowClear) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-suffix"), classNames === null || classNames === void 0 ? void 0 : classNames.suffix), style: styles === null || styles === void 0 ? void 0 : styles.suffix }, clearIcon, suffix); element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(AffixWrapperComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ className: affixWrapperCls, style: styles === null || styles === void 0 ? void 0 : styles.affixWrapper, onClick: onInputClick }, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.affixWrapper, { ref: containerRef }), prefix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-prefix"), classNames === null || classNames === void 0 ? void 0 : classNames.prefix), style: styles === null || styles === void 0 ? void 0 : styles.prefix }, prefix), element, suffixNode); } // ================== Addon ================== // if ((0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasAddon)(props)) { var wrapperCls = "".concat(prefixCls, "-group"); var addonCls = "".concat(wrapperCls, "-addon"); var groupWrapperCls = "".concat(wrapperCls, "-wrapper"); var mergedWrapperClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-wrapper"), wrapperCls, classes === null || classes === void 0 ? void 0 : classes.wrapper, classNames === null || classNames === void 0 ? void 0 : classNames.wrapper); var mergedGroupClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()(groupWrapperCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(groupWrapperCls, "-disabled"), disabled), classes === null || classes === void 0 ? void 0 : classes.group, classNames === null || classNames === void 0 ? void 0 : classNames.groupWrapper); // Need another wrapper for changing display:table to display:inline-block // and put style prop in wrapper element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupWrapperComponent, { className: mergedGroupClassName, ref: groupRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(WrapperComponent, { className: mergedWrapperClassName }, addonBefore && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, { className: addonCls }, addonBefore), element, addonAfter && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, { className: addonCls }, addonAfter))); } // `className` and `style` are always on the root element return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().cloneElement(element, { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props2 = element.props) === null || _props2 === void 0 ? void 0 : _props2.className, className) || null, style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, (_props3 = element.props) === null || _props3 === void 0 ? void 0 : _props3.style), style), hidden: hidden }); }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseInput); /***/ }), /***/ "../../../node_modules/rc-input/es/Input.js": /*!**************************************************!*\ !*** ../../../node_modules/rc-input/es/Input.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js"); /* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js"); /* harmony import */ var _hooks_useCount__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useCount */ "../../../node_modules/rc-input/es/hooks/useCount.js"); /* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js"); var _excluded = ["autoComplete", "onChange", "onFocus", "onBlur", "onPressEnter", "onKeyDown", "onKeyUp", "prefixCls", "disabled", "htmlSize", "className", "maxLength", "suffix", "showCount", "count", "type", "classes", "classNames", "styles", "onCompositionStart", "onCompositionEnd"]; var Input = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_9__.forwardRef)(function (props, ref) { var autoComplete = props.autoComplete, onChange = props.onChange, onFocus = props.onFocus, onBlur = props.onBlur, onPressEnter = props.onPressEnter, onKeyDown = props.onKeyDown, onKeyUp = props.onKeyUp, _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-input' : _props$prefixCls, disabled = props.disabled, htmlSize = props.htmlSize, className = props.className, maxLength = props.maxLength, suffix = props.suffix, showCount = props.showCount, count = props.count, _props$type = props.type, type = _props$type === void 0 ? 'text' : _props$type, classes = props.classes, classNames = props.classNames, styles = props.styles, _onCompositionStart = props.onCompositionStart, onCompositionEnd = props.onCompositionEnd, rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded); var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(false), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState, 2), focused = _useState2[0], setFocused = _useState2[1]; var compositionRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false); var keyLockRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false); var inputRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null); var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null); var focus = function focus(option) { if (inputRef.current) { (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.triggerFocus)(inputRef.current, option); } }; // ====================== Value ======================= var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__["default"])(props.defaultValue, { value: props.value }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2), value = _useMergedState2[0], setValue = _useMergedState2[1]; var formatValue = value === undefined || value === null ? '' : String(value); // =================== Select Range =================== var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(null), _useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState3, 2), selection = _useState4[0], setSelection = _useState4[1]; // ====================== Count ======================= var countConfig = (0,_hooks_useCount__WEBPACK_IMPORTED_MODULE_11__["default"])(count, showCount); var mergedMax = countConfig.max || maxLength; var valueLength = countConfig.strategy(formatValue); var isOutOfRange = !!mergedMax && valueLength > mergedMax; // ======================= Ref ======================== (0,react__WEBPACK_IMPORTED_MODULE_9__.useImperativeHandle)(ref, function () { var _holderRef$current; return { focus: focus, blur: function blur() { var _inputRef$current; (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.blur(); }, setSelectionRange: function setSelectionRange(start, end, direction) { var _inputRef$current2; (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.setSelectionRange(start, end, direction); }, select: function select() { var _inputRef$current3; (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.select(); }, input: inputRef.current, nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || inputRef.current }; }); (0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () { if (keyLockRef.current) { keyLockRef.current = false; } setFocused(function (prev) { return prev && disabled ? false : prev; }); }, [disabled]); var triggerChange = function triggerChange(e, currentValue, info) { var cutValue = currentValue; if (!compositionRef.current && countConfig.exceedFormatter && countConfig.max && countConfig.strategy(currentValue) > countConfig.max) { cutValue = countConfig.exceedFormatter(currentValue, { max: countConfig.max }); if (currentValue !== cutValue) { var _inputRef$current4, _inputRef$current5; setSelection([((_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.selectionStart) || 0, ((_inputRef$current5 = inputRef.current) === null || _inputRef$current5 === void 0 ? void 0 : _inputRef$current5.selectionEnd) || 0]); } } else if (info.source === 'compositionEnd') { // Avoid triggering twice // https://github.com/ant-design/ant-design/issues/46587 return; } setValue(cutValue); if (inputRef.current) { (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange, cutValue); } }; (0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () { if (selection) { var _inputRef$current6; (_inputRef$current6 = inputRef.current) === null || _inputRef$current6 === void 0 || _inputRef$current6.setSelectionRange.apply(_inputRef$current6, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(selection)); } }, [selection]); var onInternalChange = function onInternalChange(e) { triggerChange(e, e.target.value, { source: 'change' }); }; var onInternalCompositionEnd = function onInternalCompositionEnd(e) { compositionRef.current = false; triggerChange(e, e.currentTarget.value, { source: 'compositionEnd' }); onCompositionEnd === null || onCompositionEnd === void 0 || onCompositionEnd(e); }; var handleKeyDown = function handleKeyDown(e) { if (onPressEnter && e.key === 'Enter' && !keyLockRef.current) { keyLockRef.current = true; onPressEnter(e); } onKeyDown === null || onKeyDown === void 0 || onKeyDown(e); }; var handleKeyUp = function handleKeyUp(e) { if (e.key === 'Enter') { keyLockRef.current = false; } onKeyUp === null || onKeyUp === void 0 || onKeyUp(e); }; var handleFocus = function handleFocus(e) { setFocused(true); onFocus === null || onFocus === void 0 || onFocus(e); }; var handleBlur = function handleBlur(e) { if (keyLockRef.current) { keyLockRef.current = false; } setFocused(false); onBlur === null || onBlur === void 0 || onBlur(e); }; var handleReset = function handleReset(e) { setValue(''); focus(); if (inputRef.current) { (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange); } }; // ====================== Input ======================= var outOfRangeCls = isOutOfRange && "".concat(prefixCls, "-out-of-range"); var getInputElement = function getInputElement() { // Fix https://fb.me/react-unknown-prop var otherProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__["default"])(props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear', // Input elements must be either controlled or uncontrolled, // specify either the value prop, or the defaultValue prop, but not both. 'defaultValue', 'showCount', 'count', 'classes', 'htmlSize', 'styles', 'classNames', 'onClear']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("input", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ autoComplete: autoComplete }, otherProps, { onChange: onInternalChange, onFocus: handleFocus, onBlur: handleBlur, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), classNames === null || classNames === void 0 ? void 0 : classNames.input), style: styles === null || styles === void 0 ? void 0 : styles.input, ref: inputRef, size: htmlSize, type: type, onCompositionStart: function onCompositionStart(e) { compositionRef.current = true; _onCompositionStart === null || _onCompositionStart === void 0 || _onCompositionStart(e); }, onCompositionEnd: onInternalCompositionEnd })); }; var getSuffix = function getSuffix() { // Max length value var hasMaxLength = Number(mergedMax) > 0; if (suffix || countConfig.show) { var dataCount = countConfig.showFormatter ? countConfig.showFormatter({ value: formatValue, count: valueLength, maxLength: mergedMax }) : "".concat(valueLength).concat(hasMaxLength ? " / ".concat(mergedMax) : ''); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement((react__WEBPACK_IMPORTED_MODULE_9___default().Fragment), null, countConfig.show && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-show-count-suffix"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-show-count-has-suffix"), !!suffix), classNames === null || classNames === void 0 ? void 0 : classNames.count), style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, styles === null || styles === void 0 ? void 0 : styles.count) }, dataCount), suffix); } return null; }; // ====================== Render ====================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(_BaseInput__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest, { prefixCls: prefixCls, className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(className, outOfRangeCls), handleReset: handleReset, value: formatValue, focused: focused, triggerFocus: focus, suffix: getSuffix(), disabled: disabled, classes: classes, classNames: classNames, styles: styles, ref: holderRef }), getInputElement()); }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Input); /***/ }), /***/ "../../../node_modules/rc-input/es/hooks/useCount.js": /*!***********************************************************!*\ !*** ../../../node_modules/rc-input/es/hooks/useCount.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useCount), /* harmony export */ inCountRange: () => (/* binding */ inCountRange) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); var _excluded = ["show"]; /** * Cut `value` by the `count.max` prop. */ function inCountRange(value, countConfig) { if (!countConfig.max) { return true; } var count = countConfig.strategy(value); return count <= countConfig.max; } function useCount(count, showCount) { return react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { var mergedConfig = {}; if (showCount) { mergedConfig.show = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(showCount) === 'object' && showCount.formatter ? showCount.formatter : !!showCount; } mergedConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedConfig), count); var _ref = mergedConfig, show = _ref.show, rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded); return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest), {}, { show: !!show, showFormatter: typeof show === 'function' ? show : undefined, strategy: rest.strategy || function (value) { return value.length; } }); }, [count, showCount]); } /***/ }), /***/ "../../../node_modules/rc-input/es/index.js": /*!**************************************************!*\ !*** ../../../node_modules/rc-input/es/index.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BaseInput: () => (/* reexport safe */ _BaseInput__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js"); /* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Input */ "../../../node_modules/rc-input/es/Input.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Input__WEBPACK_IMPORTED_MODULE_1__["default"]); /***/ }), /***/ "../../../node_modules/rc-input/es/utils/commonUtils.js": /*!**************************************************************!*\ !*** ../../../node_modules/rc-input/es/utils/commonUtils.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hasAddon: () => (/* binding */ hasAddon), /* harmony export */ hasPrefixSuffix: () => (/* binding */ hasPrefixSuffix), /* harmony export */ resolveOnChange: () => (/* binding */ resolveOnChange), /* harmony export */ triggerFocus: () => (/* binding */ triggerFocus) /* harmony export */ }); function hasAddon(props) { return !!(props.addonBefore || props.addonAfter); } function hasPrefixSuffix(props) { return !!(props.prefix || props.suffix || props.allowClear); } // TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11. function cloneEvent(event, target, value) { // A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements. // As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet​​. // https://bugs.webkit.org/show_bug.cgi?id=28123 var currentTarget = target.cloneNode(true); // click clear icon var newEvent = Object.create(event, { target: { value: currentTarget }, currentTarget: { value: currentTarget } }); // Fill data currentTarget.value = value; // Fill selection. Some type like `email` not support selection // https://github.com/ant-design/ant-design/issues/47833 if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') { currentTarget.selectionStart = target.selectionStart; currentTarget.selectionEnd = target.selectionEnd; } currentTarget.setSelectionRange = function () { target.setSelectionRange.apply(target, arguments); }; return newEvent; } function resolveOnChange(target, e, onChange, targetValue) { if (!onChange) { return; } var event = e; if (e.type === 'click') { // Clone a new target for event. // Avoid the following usage, the setQuery method gets the original value. // // const [query, setQuery] = React.useState(''); // { // setQuery((prevStatus) => e.target.value); // }} // /> event = cloneEvent(e, target, ''); onChange(event); return; } // Trigger by composition event, this means we need force change the input value // https://github.com/ant-design/ant-design/issues/45737 // https://github.com/ant-design/ant-design/issues/46598 if (target.type !== 'file' && targetValue !== undefined) { event = cloneEvent(e, target, targetValue); onChange(event); return; } onChange(event); } function triggerFocus(element, option) { if (!element) return; element.focus(option); // Selection content var _ref = option || {}, cursor = _ref.cursor; if (cursor) { var len = element.value.length; switch (cursor) { case 'start': element.setSelectionRange(0, 0); break; case 'end': element.setSelectionRange(len, len); break; default: element.setSelectionRange(0, len); } } } /***/ }), /***/ "../../../node_modules/rc-input/lib/utils/commonUtils.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-input/lib/utils/commonUtils.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.hasAddon = hasAddon; exports.hasPrefixSuffix = hasPrefixSuffix; exports.resolveOnChange = resolveOnChange; exports.triggerFocus = triggerFocus; function hasAddon(props) { return !!(props.addonBefore || props.addonAfter); } function hasPrefixSuffix(props) { return !!(props.prefix || props.suffix || props.allowClear); } // TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11. function cloneEvent(event, target, value) { // A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements. // As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet​​. // https://bugs.webkit.org/show_bug.cgi?id=28123 var currentTarget = target.cloneNode(true); // click clear icon var newEvent = Object.create(event, { target: { value: currentTarget }, currentTarget: { value: currentTarget } }); // Fill data currentTarget.value = value; // Fill selection. Some type like `email` not support selection // https://github.com/ant-design/ant-design/issues/47833 if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') { currentTarget.selectionStart = target.selectionStart; currentTarget.selectionEnd = target.selectionEnd; } currentTarget.setSelectionRange = function () { target.setSelectionRange.apply(target, arguments); }; return newEvent; } function resolveOnChange(target, e, onChange, targetValue) { if (!onChange) { return; } var event = e; if (e.type === 'click') { // Clone a new target for event. // Avoid the following usage, the setQuery method gets the original value. // // const [query, setQuery] = React.useState(''); // { // setQuery((prevStatus) => e.target.value); // }} // /> event = cloneEvent(e, target, ''); onChange(event); return; } // Trigger by composition event, this means we need force change the input value // https://github.com/ant-design/ant-design/issues/45737 // https://github.com/ant-design/ant-design/issues/46598 if (target.type !== 'file' && targetValue !== undefined) { event = cloneEvent(e, target, targetValue); onChange(event); return; } onChange(event); } function triggerFocus(element, option) { if (!element) return; element.focus(option); // Selection content var _ref = option || {}, cursor = _ref.cursor; if (cursor) { var len = element.value.length; switch (cursor) { case 'start': element.setSelectionRange(0, 0); break; case 'end': element.setSelectionRange(len, len); break; default: element.setSelectionRange(0, len); } } } /***/ }), /***/ "../../../node_modules/rc-mentions/es/DropdownMenu.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-mentions/es/DropdownMenu.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var rc_menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-menu */ "../../../node_modules/rc-menu/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js"); /** * We only use Menu to display the candidate. * The focus is controlled by textarea to make accessibility easy. */ function DropdownMenu(props) { var _React$useContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_MentionsContext__WEBPACK_IMPORTED_MODULE_2__["default"]), notFoundContent = _React$useContext.notFoundContent, activeIndex = _React$useContext.activeIndex, setActiveIndex = _React$useContext.setActiveIndex, selectOption = _React$useContext.selectOption, onFocus = _React$useContext.onFocus, onBlur = _React$useContext.onBlur, onScroll = _React$useContext.onScroll; var prefixCls = props.prefixCls, options = props.options; var activeOption = options[activeIndex] || {}; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__["default"], { prefixCls: "".concat(prefixCls, "-menu"), activeKey: activeOption.key, onSelect: function onSelect(_ref) { var key = _ref.key; var option = options.find(function (_ref2) { var optionKey = _ref2.key; return optionKey === key; }); selectOption(option); }, onFocus: onFocus, onBlur: onBlur, onScroll: onScroll }, options.map(function (option, index) { var key = option.key, disabled = option.disabled, className = option.className, style = option.style, label = option.label; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, { key: key, disabled: disabled, className: className, style: style, onMouseEnter: function onMouseEnter() { setActiveIndex(index); } }, label); }), !options.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, { disabled: true }, notFoundContent)); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DropdownMenu); /***/ }), /***/ "../../../node_modules/rc-mentions/es/KeywordTrigger.js": /*!**************************************************************!*\ !*** ../../../node_modules/rc-mentions/es/KeywordTrigger.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _DropdownMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DropdownMenu */ "../../../node_modules/rc-mentions/es/DropdownMenu.js"); var BUILT_IN_PLACEMENTS = { bottomRight: { points: ['tl', 'br'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, bottomLeft: { points: ['tr', 'bl'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, topRight: { points: ['bl', 'tr'], offset: [0, -4], overflow: { adjustX: 1, adjustY: 1 } }, topLeft: { points: ['br', 'tl'], offset: [0, -4], overflow: { adjustX: 1, adjustY: 1 } } }; var KeywordTrigger = function KeywordTrigger(props) { var prefixCls = props.prefixCls, options = props.options, children = props.children, visible = props.visible, transitionName = props.transitionName, getPopupContainer = props.getPopupContainer, dropdownClassName = props.dropdownClassName, direction = props.direction, placement = props.placement; var dropdownPrefix = "".concat(prefixCls, "-dropdown"); var dropdownElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_DropdownMenu__WEBPACK_IMPORTED_MODULE_2__["default"], { prefixCls: dropdownPrefix, options: options }); var dropdownPlacement = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () { var popupPlacement; if (direction === 'rtl') { popupPlacement = placement === 'top' ? 'topLeft' : 'bottomLeft'; } else { popupPlacement = placement === 'top' ? 'topRight' : 'bottomRight'; } return popupPlacement; }, [direction, placement]); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__["default"], { prefixCls: dropdownPrefix, popupVisible: visible, popup: dropdownElement, popupPlacement: dropdownPlacement, popupTransitionName: transitionName, builtinPlacements: BUILT_IN_PLACEMENTS, getPopupContainer: getPopupContainer, popupClassName: dropdownClassName }, children); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeywordTrigger); /***/ }), /***/ "../../../node_modules/rc-mentions/es/Mentions.js": /*!********************************************************!*\ !*** ../../../node_modules/rc-mentions/es/Mentions.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var rc_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-input */ "../../../node_modules/rc-input/es/index.js"); /* harmony import */ var rc_textarea__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-textarea */ "../../../node_modules/rc-textarea/es/index.js"); /* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js"); /* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js"); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useEffectState */ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js"); /* harmony import */ var _KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./KeywordTrigger */ "../../../node_modules/rc-mentions/es/KeywordTrigger.js"); /* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js"); /* harmony import */ var _Option__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Option */ "../../../node_modules/rc-mentions/es/Option.js"); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./util */ "../../../node_modules/rc-mentions/es/util.js"); var _excluded = ["prefixCls", "className", "style", "prefix", "split", "notFoundContent", "value", "defaultValue", "children", "options", "open", "allowClear", "silent", "validateSearch", "filterOption", "onChange", "onKeyDown", "onKeyUp", "onPressEnter", "onSearch", "onSelect", "onFocus", "onBlur", "transitionName", "placement", "direction", "getPopupContainer", "dropdownClassName", "rows", "visible", "onPopupScroll"], _excluded2 = ["suffix", "prefixCls", "defaultValue", "value", "allowClear", "onChange", "classNames", "className", "disabled", "onClear"]; var InternalMentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (props, ref) { var prefixCls = props.prefixCls, className = props.className, style = props.style, _props$prefix = props.prefix, prefix = _props$prefix === void 0 ? '@' : _props$prefix, _props$split = props.split, split = _props$split === void 0 ? ' ' : _props$split, _props$notFoundConten = props.notFoundContent, notFoundContent = _props$notFoundConten === void 0 ? 'Not Found' : _props$notFoundConten, value = props.value, defaultValue = props.defaultValue, children = props.children, options = props.options, open = props.open, allowClear = props.allowClear, silent = props.silent, _props$validateSearch = props.validateSearch, validateSearch = _props$validateSearch === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.validateSearch : _props$validateSearch, _props$filterOption = props.filterOption, filterOption = _props$filterOption === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.filterOption : _props$filterOption, onChange = props.onChange, onKeyDown = props.onKeyDown, onKeyUp = props.onKeyUp, onPressEnter = props.onPressEnter, onSearch = props.onSearch, onSelect = props.onSelect, onFocus = props.onFocus, onBlur = props.onBlur, transitionName = props.transitionName, placement = props.placement, direction = props.direction, getPopupContainer = props.getPopupContainer, dropdownClassName = props.dropdownClassName, _props$rows = props.rows, rows = _props$rows === void 0 ? 1 : _props$rows, visible = props.visible, onPopupScroll = props.onPopupScroll, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(props, _excluded); var mergedPrefix = (0,react__WEBPACK_IMPORTED_MODULE_11__.useMemo)(function () { return Array.isArray(prefix) ? prefix : [prefix]; }, [prefix]); // =============================== Refs =============================== var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null); var textareaRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null); var measureRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null); var getTextArea = function getTextArea() { var _textareaRef$current; return (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 || (_textareaRef$current = _textareaRef$current.resizableTextArea) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.textArea; }; react__WEBPACK_IMPORTED_MODULE_11___default().useImperativeHandle(ref, function () { var _textareaRef$current4; return { focus: function focus() { var _textareaRef$current2; return (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus(); }, blur: function blur() { var _textareaRef$current3; return (_textareaRef$current3 = textareaRef.current) === null || _textareaRef$current3 === void 0 ? void 0 : _textareaRef$current3.blur(); }, textarea: (_textareaRef$current4 = textareaRef.current) === null || _textareaRef$current4 === void 0 || (_textareaRef$current4 = _textareaRef$current4.resizableTextArea) === null || _textareaRef$current4 === void 0 ? void 0 : _textareaRef$current4.textArea, nativeElement: containerRef.current }; }); // ============================== State =============================== var _useState = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2), measuring = _useState2[0], setMeasuring = _useState2[1]; var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''), _useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2), measureText = _useState4[0], setMeasureText = _useState4[1]; var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''), _useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState5, 2), measurePrefix = _useState6[0], setMeasurePrefix = _useState6[1]; var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0), _useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState7, 2), measureLocation = _useState8[0], setMeasureLocation = _useState8[1]; var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0), _useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState9, 2), activeIndex = _useState10[0], setActiveIndex = _useState10[1]; var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false), _useState12 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState11, 2), isFocus = _useState12[0], setIsFocus = _useState12[1]; // ============================== Value =============================== var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', { defaultValue: defaultValue, value: value }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState, 2), mergedValue = _useMergedState2[0], setMergedValue = _useMergedState2[1]; // =============================== Open =============================== (0,react__WEBPACK_IMPORTED_MODULE_11__.useEffect)(function () { // Sync measure div top with textarea for rc-trigger usage if (measuring && measureRef.current) { measureRef.current.scrollTop = getTextArea().scrollTop; } }, [measuring]); var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () { if (open) { if (true) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(false, '`open` of Mentions is only used for debug usage. Do not use in you production.'); } for (var i = 0; i < mergedPrefix.length; i += 1) { var curPrefix = mergedPrefix[i]; var index = mergedValue.lastIndexOf(curPrefix); if (index >= 0) { return [true, '', curPrefix, index]; } } } return [measuring, measureText, measurePrefix, measureLocation]; }, [open, measuring, mergedPrefix, mergedValue, measureText, measurePrefix, measureLocation]), _React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useMemo, 4), mergedMeasuring = _React$useMemo2[0], mergedMeasureText = _React$useMemo2[1], mergedMeasurePrefix = _React$useMemo2[2], mergedMeasureLocation = _React$useMemo2[3]; // ============================== Option ============================== var getOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useCallback(function (targetMeasureText) { var list; if (options && options.length > 0) { list = options.map(function (item) { var _item$key; return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, item), {}, { key: (_item$key = item === null || item === void 0 ? void 0 : item.key) !== null && _item$key !== void 0 ? _item$key : item.value }); }); } else { list = (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__["default"])(children).map(function (_ref) { var optionProps = _ref.props, key = _ref.key; return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, optionProps), {}, { label: optionProps.children, key: key || optionProps.value }); }); } return list.filter(function (option) { /** Return all result if `filterOption` is false. */ if (filterOption === false) { return true; } return filterOption(targetMeasureText, option); }); }, [children, options, filterOption]); var mergedOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () { return getOptions(mergedMeasureText); }, [getOptions, mergedMeasureText]); // ============================= Measure ============================== // Mark that we will reset input selection to target position when user select option var onSelectionEffect = (0,_hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__["default"])(); var startMeasure = function startMeasure(nextMeasureText, nextMeasurePrefix, nextMeasureLocation) { setMeasuring(true); setMeasureText(nextMeasureText); setMeasurePrefix(nextMeasurePrefix); setMeasureLocation(nextMeasureLocation); setActiveIndex(0); }; var stopMeasure = function stopMeasure(callback) { setMeasuring(false); setMeasureLocation(0); setMeasureText(''); onSelectionEffect(callback); }; // ============================== Change ============================== var triggerChange = function triggerChange(nextValue) { setMergedValue(nextValue); onChange === null || onChange === void 0 || onChange(nextValue); }; var onInternalChange = function onInternalChange(_ref2) { var nextValue = _ref2.target.value; triggerChange(nextValue); }; var selectOption = function selectOption(option) { var _getTextArea; var _option$value = option.value, mentionValue = _option$value === void 0 ? '' : _option$value; var _replaceWithMeasure = (0,_util__WEBPACK_IMPORTED_MODULE_16__.replaceWithMeasure)(mergedValue, { measureLocation: mergedMeasureLocation, targetText: mentionValue, prefix: mergedMeasurePrefix, selectionStart: (_getTextArea = getTextArea()) === null || _getTextArea === void 0 ? void 0 : _getTextArea.selectionStart, split: split }), text = _replaceWithMeasure.text, selectionLocation = _replaceWithMeasure.selectionLocation; triggerChange(text); stopMeasure(function () { // We need restore the selection position (0,_util__WEBPACK_IMPORTED_MODULE_16__.setInputSelection)(getTextArea(), selectionLocation); }); onSelect === null || onSelect === void 0 || onSelect(option, mergedMeasurePrefix); }; // ============================= KeyEvent ============================= // Check if hit the measure keyword var onInternalKeyDown = function onInternalKeyDown(event) { var which = event.which; onKeyDown === null || onKeyDown === void 0 || onKeyDown(event); // Skip if not measuring if (!mergedMeasuring) { return; } if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN) { // Control arrow function var optionLen = mergedOptions.length; var offset = which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP ? -1 : 1; var newActiveIndex = (activeIndex + offset + optionLen) % optionLen; setActiveIndex(newActiveIndex); event.preventDefault(); } else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC) { stopMeasure(); } else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER) { // Measure hit event.preventDefault(); // loading skip if (silent) { return; } if (!mergedOptions.length) { stopMeasure(); return; } var _option = mergedOptions[activeIndex]; selectOption(_option); } }; /** * When to start measure: * 1. When user press `prefix` * 2. When measureText !== prevMeasureText * - If measure hit * - If measuring * * When to stop measure: * 1. Selection is out of range * 2. Contains `space` * 3. ESC or select one */ var onInternalKeyUp = function onInternalKeyUp(event) { var key = event.key, which = event.which; var target = event.target; var selectionStartText = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getBeforeSelectionText)(target); var _getLastMeasureIndex = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getLastMeasureIndex)(selectionStartText, mergedPrefix), measureIndex = _getLastMeasureIndex.location, nextMeasurePrefix = _getLastMeasureIndex.prefix; // If the client implements an onKeyUp handler, call it onKeyUp === null || onKeyUp === void 0 || onKeyUp(event); // Skip if match the white key list if ([rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER].indexOf(which) !== -1) { return; } if (measureIndex !== -1) { var nextMeasureText = selectionStartText.slice(measureIndex + nextMeasurePrefix.length); var validateMeasure = validateSearch(nextMeasureText, split); var matchOption = !!getOptions(nextMeasureText).length; if (validateMeasure) { // adding AltGraph also fort azert keyboard if (key === nextMeasurePrefix || key === 'Shift' || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ALT || key === 'AltGraph' || mergedMeasuring || nextMeasureText !== mergedMeasureText && matchOption) { startMeasure(nextMeasureText, nextMeasurePrefix, measureIndex); } } else if (mergedMeasuring) { // Stop if measureText is invalidate stopMeasure(); } /** * We will trigger `onSearch` to developer since they may use for async update. * If met `space` means user finished searching. */ if (onSearch && validateMeasure) { onSearch(nextMeasureText, nextMeasurePrefix); } } else if (mergedMeasuring) { stopMeasure(); } }; var onInternalPressEnter = function onInternalPressEnter(event) { if (!mergedMeasuring && onPressEnter) { onPressEnter(event); } }; // ============================ Focus Blur ============================ var focusRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(); var onInternalFocus = function onInternalFocus(event) { window.clearTimeout(focusRef.current); if (!isFocus && event && onFocus) { onFocus(event); } setIsFocus(true); }; var onInternalBlur = function onInternalBlur(event) { focusRef.current = window.setTimeout(function () { setIsFocus(false); stopMeasure(); onBlur === null || onBlur === void 0 || onBlur(event); }, 0); }; var onDropdownFocus = function onDropdownFocus() { onInternalFocus(); }; var onDropdownBlur = function onDropdownBlur() { onInternalBlur(); }; // ============================== Scroll =============================== var onInternalPopupScroll = function onInternalPopupScroll(event) { onPopupScroll === null || onPopupScroll === void 0 || onPopupScroll(event); }; // ============================== Render ============================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(prefixCls, className), style: style, ref: containerRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_textarea__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: textareaRef, value: mergedValue }, restProps, { rows: rows, onChange: onInternalChange, onKeyDown: onInternalKeyDown, onKeyUp: onInternalKeyUp, onPressEnter: onInternalPressEnter, onFocus: onInternalFocus, onBlur: onInternalBlur })), mergedMeasuring && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", { ref: measureRef, className: "".concat(prefixCls, "-measure") }, mergedValue.slice(0, mergedMeasureLocation), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_MentionsContext__WEBPACK_IMPORTED_MODULE_14__["default"].Provider, { value: { notFoundContent: notFoundContent, activeIndex: activeIndex, setActiveIndex: setActiveIndex, selectOption: selectOption, onFocus: onDropdownFocus, onBlur: onDropdownBlur, onScroll: onInternalPopupScroll } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], { prefixCls: prefixCls, transitionName: transitionName, placement: placement, direction: direction, options: mergedOptions, visible: true, getPopupContainer: getPopupContainer, dropdownClassName: dropdownClassName }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("span", null, mergedMeasurePrefix))), mergedValue.slice(mergedMeasureLocation + mergedMeasurePrefix.length))); }); var Mentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (_ref3, ref) { var suffix = _ref3.suffix, _ref3$prefixCls = _ref3.prefixCls, prefixCls = _ref3$prefixCls === void 0 ? 'rc-mentions' : _ref3$prefixCls, defaultValue = _ref3.defaultValue, customValue = _ref3.value, allowClear = _ref3.allowClear, onChange = _ref3.onChange, classes = _ref3.classNames, className = _ref3.className, disabled = _ref3.disabled, onClear = _ref3.onClear, rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref3, _excluded2); // =============================== Ref ================================ var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null); var mentionRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null); (0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () { var _holderRef$current, _mentionRef$current; return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mentionRef.current), {}, { nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || ((_mentionRef$current = mentionRef.current) === null || _mentionRef$current === void 0 ? void 0 : _mentionRef$current.nativeElement) }); }); // ============================== Value =============================== var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', { defaultValue: defaultValue, value: customValue }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState3, 2), mergedValue = _useMergedState4[0], setMergedValue = _useMergedState4[1]; // ============================== Change ============================== var triggerChange = function triggerChange(currentValue) { setMergedValue(currentValue); onChange === null || onChange === void 0 || onChange(currentValue); }; // ============================== Reset =============================== var handleReset = function handleReset() { triggerChange(''); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_input__WEBPACK_IMPORTED_MODULE_5__.BaseInput, { suffix: suffix, prefixCls: prefixCls, value: mergedValue, allowClear: allowClear, handleReset: handleReset, className: className, classNames: classes, disabled: disabled, ref: holderRef, onClear: onClear }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(InternalMentions, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ className: classes === null || classes === void 0 ? void 0 : classes.mentions, prefixCls: prefixCls, ref: mentionRef, onChange: triggerChange, disabled: disabled }, rest))); }); Mentions.Option = _Option__WEBPACK_IMPORTED_MODULE_15__["default"]; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mentions); /***/ }), /***/ "../../../node_modules/rc-mentions/es/MentionsContext.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-mentions/es/MentionsContext.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* tslint:disable: no-object-literal-type-assertion */ // We will never use default, here only to fix TypeScript warning var MentionsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MentionsContext); /***/ }), /***/ "../../../node_modules/rc-mentions/es/Option.js": /*!******************************************************!*\ !*** ../../../node_modules/rc-mentions/es/Option.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); var Option = function Option() { return null; }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Option); /***/ }), /***/ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js": /*!********************************************************************!*\ !*** ../../../node_modules/rc-mentions/es/hooks/useEffectState.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useEffectState) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /** * Trigger a callback on state change */ function useEffectState() { var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({ id: 0, callback: null }), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2), effectId = _useState2[0], setEffectId = _useState2[1]; var update = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (callback) { setEffectId(function (_ref) { var id = _ref.id; return { id: id + 1, callback: callback }; }); }, []); (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { var _effectId$callback; (_effectId$callback = effectId.callback) === null || _effectId$callback === void 0 || _effectId$callback.call(effectId); }, [effectId]); return update; } /***/ }), /***/ "../../../node_modules/rc-mentions/es/index.js": /*!*****************************************************!*\ !*** ../../../node_modules/rc-mentions/es/index.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _Mentions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Mentions */ "../../../node_modules/rc-mentions/es/Mentions.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Mentions__WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "../../../node_modules/rc-mentions/es/util.js": /*!****************************************************!*\ !*** ../../../node_modules/rc-mentions/es/util.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ filterOption: () => (/* binding */ filterOption), /* harmony export */ getBeforeSelectionText: () => (/* binding */ getBeforeSelectionText), /* harmony export */ getLastMeasureIndex: () => (/* binding */ getLastMeasureIndex), /* harmony export */ replaceWithMeasure: () => (/* binding */ replaceWithMeasure), /* harmony export */ setInputSelection: () => (/* binding */ setInputSelection), /* harmony export */ validateSearch: () => (/* binding */ validateSearch) /* harmony export */ }); /** * Cut input selection into 2 part and return text before selection start */ function getBeforeSelectionText(input) { var selectionStart = input.selectionStart; return input.value.slice(0, selectionStart); } /** * Find the last match prefix index */ function getLastMeasureIndex(text, prefix) { return prefix.reduce(function (lastMatch, prefixStr) { var lastIndex = text.lastIndexOf(prefixStr); if (lastIndex > lastMatch.location) { return { location: lastIndex, prefix: prefixStr }; } return lastMatch; }, { location: -1, prefix: '' }); } function lower(char) { return (char || '').toLowerCase(); } function reduceText(text, targetText, split) { var firstChar = text[0]; if (!firstChar || firstChar === split) { return text; } // Reuse rest text as it can var restText = text; var targetTextLen = targetText.length; for (var i = 0; i < targetTextLen; i += 1) { if (lower(restText[i]) !== lower(targetText[i])) { restText = restText.slice(i); break; } else if (i === targetTextLen - 1) { restText = restText.slice(targetTextLen); } } return restText; } /** * Paint targetText into current text: * text: little@litest * targetText: light * => little @light test */ function replaceWithMeasure(text, measureConfig) { var measureLocation = measureConfig.measureLocation, prefix = measureConfig.prefix, targetText = measureConfig.targetText, selectionStart = measureConfig.selectionStart, split = measureConfig.split; // Before text will append one space if have other text var beforeMeasureText = text.slice(0, measureLocation); if (beforeMeasureText[beforeMeasureText.length - split.length] === split) { beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length); } if (beforeMeasureText) { beforeMeasureText = "".concat(beforeMeasureText).concat(split); } // Cut duplicate string with current targetText var restText = reduceText(text.slice(selectionStart), targetText.slice(selectionStart - measureLocation - prefix.length), split); if (restText.slice(0, split.length) === split) { restText = restText.slice(split.length); } var connectedStartText = "".concat(beforeMeasureText).concat(prefix).concat(targetText).concat(split); return { text: "".concat(connectedStartText).concat(restText), selectionLocation: connectedStartText.length }; } function setInputSelection(input, location) { input.setSelectionRange(location, location); /** * Reset caret into view. * Since this function always called by user control, it's safe to focus element. */ input.blur(); input.focus(); } function validateSearch(text, split) { return !split || text.indexOf(split) === -1; } function filterOption(input, _ref) { var _ref$value = _ref.value, value = _ref$value === void 0 ? '' : _ref$value; var lowerCase = input.toLowerCase(); return value.toLowerCase().indexOf(lowerCase) !== -1; } /***/ }), /***/ "../../../node_modules/rc-menu/es/Divider.js": /*!***************************************************!*\ !*** ../../../node_modules/rc-menu/es/Divider.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Divider) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); function Divider(_ref) { var className = _ref.className, style = _ref.style; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_2__.MenuContext), prefixCls = _React$useContext.prefixCls; var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_3__.useMeasure)(); if (measure) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("li", { role: "separator", className: classnames__WEBPACK_IMPORTED_MODULE_1___default()("".concat(prefixCls, "-item-divider"), className), style: style }); } /***/ }), /***/ "../../../node_modules/rc-menu/es/Icon.js": /*!************************************************!*\ !*** ../../../node_modules/rc-menu/es/Icon.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Icon) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); function Icon(_ref) { var icon = _ref.icon, props = _ref.props, children = _ref.children; var iconNode; if (icon === null || icon === false) { return null; } if (typeof icon === 'function') { iconNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(icon, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props)); } else if (typeof icon !== "boolean") { // Compatible for origin definition iconNode = icon; } return iconNode || children || null; } /***/ }), /***/ "../../../node_modules/rc-menu/es/Menu.js": /*!************************************************!*\ !*** ../../../node_modules/rc-menu/es/Menu.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js"); /* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js"); /* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js"); /* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js"); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); /* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js"); /* harmony import */ var _hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hooks/useAccessibility */ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js"); /* harmony import */ var _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./hooks/useKeyRecords */ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js"); /* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js"); /* harmony import */ var _hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useUUID */ "../../../node_modules/rc-menu/es/hooks/useUUID.js"); /* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js"); /* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js"); /* harmony import */ var _utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/nodeUtil */ "../../../node_modules/rc-menu/es/utils/nodeUtil.js"); /* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js"); var _excluded = ["prefixCls", "rootClassName", "style", "className", "tabIndex", "items", "children", "direction", "id", "mode", "inlineCollapsed", "disabled", "disabledOverflow", "subMenuOpenDelay", "subMenuCloseDelay", "forceSubMenuRender", "defaultOpenKeys", "openKeys", "activeKey", "defaultActiveFirst", "selectable", "multiple", "defaultSelectedKeys", "selectedKeys", "onSelect", "onDeselect", "inlineIndent", "motion", "defaultMotions", "triggerSubMenuAction", "builtinPlacements", "itemIcon", "expandIcon", "overflowedIndicator", "overflowedIndicatorPopupClassName", "getPopupContainer", "onClick", "onOpenChange", "onKeyDown", "openAnimation", "openTransitionName", "_internalRenderMenuItem", "_internalRenderSubMenuItem", "_internalComponents"]; /** * Menu modify after refactor: * ## Add * - disabled * * ## Remove * - openTransitionName * - openAnimation * - onDestroy * - siderCollapsed: Seems antd do not use this prop (Need test in antd) * - collapsedWidth: Seems this logic should be handle by antd Layout.Sider */ // optimize for render var EMPTY_LIST = []; var Menu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) { var _childList$; var _ref = props, _ref$prefixCls = _ref.prefixCls, prefixCls = _ref$prefixCls === void 0 ? 'rc-menu' : _ref$prefixCls, rootClassName = _ref.rootClassName, style = _ref.style, className = _ref.className, _ref$tabIndex = _ref.tabIndex, tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex, items = _ref.items, children = _ref.children, direction = _ref.direction, id = _ref.id, _ref$mode = _ref.mode, mode = _ref$mode === void 0 ? 'vertical' : _ref$mode, inlineCollapsed = _ref.inlineCollapsed, disabled = _ref.disabled, disabledOverflow = _ref.disabledOverflow, _ref$subMenuOpenDelay = _ref.subMenuOpenDelay, subMenuOpenDelay = _ref$subMenuOpenDelay === void 0 ? 0.1 : _ref$subMenuOpenDelay, _ref$subMenuCloseDela = _ref.subMenuCloseDelay, subMenuCloseDelay = _ref$subMenuCloseDela === void 0 ? 0.1 : _ref$subMenuCloseDela, forceSubMenuRender = _ref.forceSubMenuRender, defaultOpenKeys = _ref.defaultOpenKeys, openKeys = _ref.openKeys, activeKey = _ref.activeKey, defaultActiveFirst = _ref.defaultActiveFirst, _ref$selectable = _ref.selectable, selectable = _ref$selectable === void 0 ? true : _ref$selectable, _ref$multiple = _ref.multiple, multiple = _ref$multiple === void 0 ? false : _ref$multiple, defaultSelectedKeys = _ref.defaultSelectedKeys, selectedKeys = _ref.selectedKeys, onSelect = _ref.onSelect, onDeselect = _ref.onDeselect, _ref$inlineIndent = _ref.inlineIndent, inlineIndent = _ref$inlineIndent === void 0 ? 24 : _ref$inlineIndent, motion = _ref.motion, defaultMotions = _ref.defaultMotions, _ref$triggerSubMenuAc = _ref.triggerSubMenuAction, triggerSubMenuAction = _ref$triggerSubMenuAc === void 0 ? 'hover' : _ref$triggerSubMenuAc, builtinPlacements = _ref.builtinPlacements, itemIcon = _ref.itemIcon, expandIcon = _ref.expandIcon, _ref$overflowedIndica = _ref.overflowedIndicator, overflowedIndicator = _ref$overflowedIndica === void 0 ? '...' : _ref$overflowedIndica, overflowedIndicatorPopupClassName = _ref.overflowedIndicatorPopupClassName, getPopupContainer = _ref.getPopupContainer, onClick = _ref.onClick, onOpenChange = _ref.onOpenChange, onKeyDown = _ref.onKeyDown, openAnimation = _ref.openAnimation, openTransitionName = _ref.openTransitionName, _internalRenderMenuItem = _ref._internalRenderMenuItem, _internalRenderSubMenuItem = _ref._internalRenderSubMenuItem, _internalComponents = _ref._internalComponents, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded); var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return [(0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, _internalComponents, prefixCls), (0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, {}, prefixCls)]; }, [children, items, _internalComponents]), _React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo, 2), childList = _React$useMemo2[0], measureChildList = _React$useMemo2[1]; var _React$useState = react__WEBPACK_IMPORTED_MODULE_11__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState, 2), mounted = _React$useState2[0], setMounted = _React$useState2[1]; var containerRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(); var uuid = (0,_hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__["default"])(id); var isRtl = direction === 'rtl'; // ========================= Warn ========================= if (true) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(!openAnimation && !openTransitionName, '`openAnimation` and `openTransitionName` is removed. Please use `motion` or `defaultMotion` instead.'); } // ========================= Open ========================= var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultOpenKeys, { value: openKeys, postState: function postState(keys) { return keys || EMPTY_LIST; } }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2), mergedOpenKeys = _useMergedState2[0], setMergedOpenKeys = _useMergedState2[1]; // React 18 will merge mouse event which means we open key will not sync // ref: https://github.com/ant-design/ant-design/issues/38818 var triggerOpenKeys = function triggerOpenKeys(keys) { var forceFlush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; function doUpdate() { setMergedOpenKeys(keys); onOpenChange === null || onOpenChange === void 0 || onOpenChange(keys); } if (forceFlush) { (0,react_dom__WEBPACK_IMPORTED_MODULE_12__.flushSync)(doUpdate); } else { doUpdate(); } }; // >>>>> Cache & Reset open keys when inlineCollapsed changed var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedOpenKeys), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState3, 2), inlineCacheOpenKeys = _React$useState4[0], setInlineCacheOpenKeys = _React$useState4[1]; var mountRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false); // ========================= Mode ========================= var _React$useMemo3 = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { if ((mode === 'inline' || mode === 'vertical') && inlineCollapsed) { return ['vertical', inlineCollapsed]; } return [mode, false]; }, [mode, inlineCollapsed]), _React$useMemo4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo3, 2), mergedMode = _React$useMemo4[0], mergedInlineCollapsed = _React$useMemo4[1]; var isInlineMode = mergedMode === 'inline'; var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedMode), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState5, 2), internalMode = _React$useState6[0], setInternalMode = _React$useState6[1]; var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedInlineCollapsed), _React$useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState7, 2), internalInlineCollapsed = _React$useState8[0], setInternalInlineCollapsed = _React$useState8[1]; react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { setInternalMode(mergedMode); setInternalInlineCollapsed(mergedInlineCollapsed); if (!mountRef.current) { return; } // Synchronously update MergedOpenKeys if (isInlineMode) { setMergedOpenKeys(inlineCacheOpenKeys); } else { // Trigger open event in case its in control triggerOpenKeys(EMPTY_LIST); } }, [mergedMode, mergedInlineCollapsed]); // ====================== Responsive ====================== var _React$useState9 = react__WEBPACK_IMPORTED_MODULE_11__.useState(0), _React$useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState9, 2), lastVisibleIndex = _React$useState10[0], setLastVisibleIndex = _React$useState10[1]; var allVisible = lastVisibleIndex >= childList.length - 1 || internalMode !== 'horizontal' || disabledOverflow; // Cache react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { if (isInlineMode) { setInlineCacheOpenKeys(mergedOpenKeys); } }, [mergedOpenKeys]); react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { mountRef.current = true; return function () { mountRef.current = false; }; }, []); // ========================= Path ========================= var _useKeyRecords = (0,_hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__["default"])(), registerPath = _useKeyRecords.registerPath, unregisterPath = _useKeyRecords.unregisterPath, refreshOverflowKeys = _useKeyRecords.refreshOverflowKeys, isSubPathKey = _useKeyRecords.isSubPathKey, getKeyPath = _useKeyRecords.getKeyPath, getKeys = _useKeyRecords.getKeys, getSubPathKeys = _useKeyRecords.getSubPathKeys; var registerPathContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return { registerPath: registerPath, unregisterPath: unregisterPath }; }, [registerPath, unregisterPath]); var pathUserContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return { isSubPathKey: isSubPathKey }; }, [isSubPathKey]); react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { refreshOverflowKeys(allVisible ? EMPTY_LIST : childList.slice(lastVisibleIndex + 1).map(function (child) { return child.key; })); }, [lastVisibleIndex, allVisible]); // ======================== Active ======================== var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(activeKey || defaultActiveFirst && ((_childList$ = childList[0]) === null || _childList$ === void 0 ? void 0 : _childList$.key), { value: activeKey }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState3, 2), mergedActiveKey = _useMergedState4[0], setMergedActiveKey = _useMergedState4[1]; var onActive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key) { setMergedActiveKey(key); }); var onInactive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function () { setMergedActiveKey(undefined); }); (0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () { return { list: containerRef.current, focus: function focus(options) { var _childList$find; var keys = getKeys(); var _refreshElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.refreshElements)(keys, uuid), elements = _refreshElements.elements, key2element = _refreshElements.key2element, element2key = _refreshElements.element2key; var focusableElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.getFocusableElements)(containerRef.current, elements); var shouldFocusKey = mergedActiveKey !== null && mergedActiveKey !== void 0 ? mergedActiveKey : focusableElements[0] ? element2key.get(focusableElements[0]) : (_childList$find = childList.find(function (node) { return !node.props.disabled; })) === null || _childList$find === void 0 ? void 0 : _childList$find.key; var elementToFocus = key2element.get(shouldFocusKey); if (shouldFocusKey && elementToFocus) { var _elementToFocus$focus; elementToFocus === null || elementToFocus === void 0 || (_elementToFocus$focus = elementToFocus.focus) === null || _elementToFocus$focus === void 0 || _elementToFocus$focus.call(elementToFocus, options); } } }; }); // ======================== Select ======================== // >>>>> Select keys var _useMergedState5 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultSelectedKeys || [], { value: selectedKeys, // Legacy convert key to array postState: function postState(keys) { if (Array.isArray(keys)) { return keys; } if (keys === null || keys === undefined) { return EMPTY_LIST; } return [keys]; } }), _useMergedState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState5, 2), mergedSelectKeys = _useMergedState6[0], setMergedSelectKeys = _useMergedState6[1]; // >>>>> Trigger select var triggerSelection = function triggerSelection(info) { if (selectable) { // Insert or Remove var targetKey = info.key; var exist = mergedSelectKeys.includes(targetKey); var newSelectKeys; if (multiple) { if (exist) { newSelectKeys = mergedSelectKeys.filter(function (key) { return key !== targetKey; }); } else { newSelectKeys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(mergedSelectKeys), [targetKey]); } } else { newSelectKeys = [targetKey]; } setMergedSelectKeys(newSelectKeys); // Trigger event var selectInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, info), {}, { selectedKeys: newSelectKeys }); if (exist) { onDeselect === null || onDeselect === void 0 || onDeselect(selectInfo); } else { onSelect === null || onSelect === void 0 || onSelect(selectInfo); } } // Whatever selectable, always close it if (!multiple && mergedOpenKeys.length && internalMode !== 'inline') { triggerOpenKeys(EMPTY_LIST); } }; // ========================= Open ========================= /** * Click for item. SubMenu do not have selection status */ var onInternalClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (info) { onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__.warnItemProp)(info)); triggerSelection(info); }); var onInternalOpenChange = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key, open) { var newOpenKeys = mergedOpenKeys.filter(function (k) { return k !== key; }); if (open) { newOpenKeys.push(key); } else if (internalMode !== 'inline') { // We need find all related popup to close var subPathKeys = getSubPathKeys(key); newOpenKeys = newOpenKeys.filter(function (k) { return !subPathKeys.has(k); }); } if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__["default"])(mergedOpenKeys, newOpenKeys, true)) { triggerOpenKeys(newOpenKeys, true); } }); // ==================== Accessibility ===================== var triggerAccessibilityOpen = function triggerAccessibilityOpen(key, open) { var nextOpen = open !== null && open !== void 0 ? open : !mergedOpenKeys.includes(key); onInternalOpenChange(key, nextOpen); }; var onInternalKeyDown = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.useAccessibility)(internalMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown); // ======================== Effect ======================== react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () { setMounted(true); }, []); // ======================= Context ======================== var privateContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () { return { _internalRenderMenuItem: _internalRenderMenuItem, _internalRenderSubMenuItem: _internalRenderSubMenuItem }; }, [_internalRenderMenuItem, _internalRenderSubMenuItem]); // ======================== Render ======================== // >>>>> Children var wrappedChildList = internalMode !== 'horizontal' || disabledOverflow ? childList : // Need wrap for overflow dropdown that do not response for open childList.map(function (child, index) { return ( /*#__PURE__*/ // Always wrap provider to avoid sub node re-mount react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], { key: child.key, overflowDisabled: index > lastVisibleIndex }, child) ); }); // >>>>> Container var container = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ id: id, ref: containerRef, prefixCls: "".concat(prefixCls, "-overflow"), component: "ul", itemComponent: _MenuItem__WEBPACK_IMPORTED_MODULE_21__["default"], className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, "".concat(prefixCls, "-root"), "".concat(prefixCls, "-").concat(internalMode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-inline-collapsed"), internalInlineCollapsed), "".concat(prefixCls, "-rtl"), isRtl), rootClassName), dir: direction, style: style, role: "menu", tabIndex: tabIndex, data: wrappedChildList, renderRawItem: function renderRawItem(node) { return node; }, renderRawRest: function renderRawRest(omitItems) { // We use origin list since wrapped list use context to prevent open var len = omitItems.length; var originOmitItems = len ? childList.slice(-len) : null; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_SubMenu__WEBPACK_IMPORTED_MODULE_22__["default"], { eventKey: _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__.OVERFLOW_KEY, title: overflowedIndicator, disabled: allVisible, internalPopupClose: len === 0, popupClassName: overflowedIndicatorPopupClassName }, originOmitItems); }, maxCount: internalMode !== 'horizontal' || disabledOverflow ? rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].INVALIDATE : rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].RESPONSIVE, ssr: "full", "data-menu-list": true, onVisibleChange: function onVisibleChange(newLastIndex) { setLastVisibleIndex(newLastIndex); }, onKeyDown: onInternalKeyDown }, restProps)); // >>>>> Render return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__["default"].Provider, { value: privateContext }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_IdContext__WEBPACK_IMPORTED_MODULE_13__.IdContext.Provider, { value: uuid }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], { prefixCls: prefixCls, rootClassName: rootClassName, mode: internalMode, openKeys: mergedOpenKeys, rtl: isRtl // Disabled , disabled: disabled // Motion , motion: mounted ? motion : null, defaultMotions: mounted ? defaultMotions : null // Active , activeKey: mergedActiveKey, onActive: onActive, onInactive: onInactive // Selection , selectedKeys: mergedSelectKeys // Level , inlineIndent: inlineIndent // Popup , subMenuOpenDelay: subMenuOpenDelay, subMenuCloseDelay: subMenuCloseDelay, forceSubMenuRender: forceSubMenuRender, builtinPlacements: builtinPlacements, triggerSubMenuAction: triggerSubMenuAction, getPopupContainer: getPopupContainer // Icon , itemIcon: itemIcon, expandIcon: expandIcon // Events , onItemClick: onInternalClick, onOpenChange: onInternalOpenChange }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathUserContext.Provider, { value: pathUserContext }, container), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", { style: { display: 'none' }, "aria-hidden": true }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathRegisterContext.Provider, { value: registerPathContext }, measureChildList))))); }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Menu); /***/ }), /***/ "../../../node_modules/rc-menu/es/MenuItem.js": /*!****************************************************!*\ !*** ../../../node_modules/rc-menu/es/MenuItem.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js"); /* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js"); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js"); /* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js"); /* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js"); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); /* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js"); /* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js"); /* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js"); /* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./Icon */ "../../../node_modules/rc-menu/es/Icon.js"); /* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js"); var _excluded = ["title", "attribute", "elementRef"], _excluded2 = ["style", "className", "eventKey", "warnKey", "disabled", "itemIcon", "children", "role", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "onFocus"], _excluded3 = ["active"]; // Since Menu event provide the `info.item` which point to the MenuItem node instance. // We have to use class component here. // This should be removed from doc & api in future. var LegacyMenuItem = /*#__PURE__*/function (_React$Component) { (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__["default"])(LegacyMenuItem, _React$Component); var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__["default"])(LegacyMenuItem); function LegacyMenuItem() { (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, LegacyMenuItem); return _super.apply(this, arguments); } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(LegacyMenuItem, [{ key: "render", value: function render() { var _this$props = this.props, title = _this$props.title, attribute = _this$props.attribute, elementRef = _this$props.elementRef, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_this$props, _excluded); // Here the props are eventually passed to the DOM element. // React does not recognize non-standard attributes. // Therefore, remove the props that is not used here. // ref: https://github.com/ant-design/ant-design/issues/41395 var passedProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['eventKey', 'popupClassName', 'popupOffset', 'onTitleClick']); (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(!attribute, '`attribute` of Menu.Item is deprecated. Please pass attribute directly.'); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_10__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, attribute, { title: typeof title === 'string' ? title : undefined }, passedProps, { ref: elementRef })); } }]); return LegacyMenuItem; }(react__WEBPACK_IMPORTED_MODULE_15__.Component); /** * Real Menu Item component */ var InternalMenuItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(function (props, ref) { var style = props.style, className = props.className, eventKey = props.eventKey, warnKey = props.warnKey, disabled = props.disabled, itemIcon = props.itemIcon, children = props.children, role = props.role, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onClick = props.onClick, onKeyDown = props.onKeyDown, onFocus = props.onFocus, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2); var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_16__.useMenuId)(eventKey); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_17__.MenuContext), prefixCls = _React$useContext.prefixCls, onItemClick = _React$useContext.onItemClick, contextDisabled = _React$useContext.disabled, overflowDisabled = _React$useContext.overflowDisabled, contextItemIcon = _React$useContext.itemIcon, selectedKeys = _React$useContext.selectedKeys, onActive = _React$useContext.onActive; var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__["default"]), _internalRenderMenuItem = _React$useContext2._internalRenderMenuItem; var itemCls = "".concat(prefixCls, "-item"); var legacyMenuItemRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef(); var elementRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef(); var mergedDisabled = contextDisabled || disabled; var mergedEleRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__.useComposeRef)(ref, elementRef); var connectedKeys = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey); // ================================ Warn ================================ if ( true && warnKey) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(false, 'MenuItem should not leave undefined `key`.'); } // ============================= Info ============================= var getEventInfo = function getEventInfo(e) { return { key: eventKey, // Note: For legacy code is reversed which not like other antd component keyPath: (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])(connectedKeys).reverse(), item: legacyMenuItemRef.current, domEvent: e }; }; // ============================= Icon ============================= var mergedItemIcon = itemIcon || contextItemIcon; // ============================ Active ============================ var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_20__["default"])(eventKey, mergedDisabled, onMouseEnter, onMouseLeave), active = _useActive.active, activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded3); // ============================ Select ============================ var selected = selectedKeys.includes(eventKey); // ======================== DirectionStyle ======================== var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__["default"])(connectedKeys.length); // ============================ Events ============================ var onInternalClick = function onInternalClick(e) { if (mergedDisabled) { return; } var info = getEventInfo(e); onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info)); onItemClick(info); }; var onInternalKeyDown = function onInternalKeyDown(e) { onKeyDown === null || onKeyDown === void 0 || onKeyDown(e); if (e.which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__["default"].ENTER) { var info = getEventInfo(e); // Legacy. Key will also trigger click event onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info)); onItemClick(info); } }; /** * Used for accessibility. Helper will focus element without key board. * We should manually trigger an active */ var onInternalFocus = function onInternalFocus(e) { onActive(eventKey); onFocus === null || onFocus === void 0 || onFocus(e); }; // ============================ Render ============================ var optionRoleProps = {}; if (props.role === 'option') { optionRoleProps['aria-selected'] = selected; } var renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(LegacyMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({ ref: legacyMenuItemRef, elementRef: mergedEleRef, role: role === null ? 'none' : role || 'menuitem', tabIndex: disabled ? null : -1, "data-menu-id": overflowDisabled && domDataId ? null : domDataId }, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['extra']), activeProps, optionRoleProps, { component: "li", "aria-disabled": disabled, style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, directionStyle), style), className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(itemCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(itemCls, "-active"), active), "".concat(itemCls, "-selected"), selected), "".concat(itemCls, "-disabled"), mergedDisabled), className), onClick: onInternalClick, onKeyDown: onInternalKeyDown, onFocus: onInternalFocus }), children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_22__["default"], { props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props), {}, { isSelected: selected }), icon: mergedItemIcon })); if (_internalRenderMenuItem) { renderNode = _internalRenderMenuItem(renderNode, props, { selected: selected }); } return renderNode; }); function MenuItem(props, ref) { var eventKey = props.eventKey; // ==================== Record KeyPath ==================== var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useMeasure)(); var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey); // eslint-disable-next-line consistent-return react__WEBPACK_IMPORTED_MODULE_15__.useEffect(function () { if (measure) { measure.registerPath(eventKey, connectedKeyPath); return function () { measure.unregisterPath(eventKey, connectedKeyPath); }; } }, [connectedKeyPath]); if (measure) { return null; } // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(InternalMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, props, { ref: ref })); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(MenuItem)); /***/ }), /***/ "../../../node_modules/rc-menu/es/MenuItemGroup.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-menu/es/MenuItemGroup.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); /* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js"); var _excluded = ["className", "title", "eventKey", "children"]; var InternalMenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) { var className = props.className, title = props.title, eventKey = props.eventKey, children = props.children, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_5__.MenuContext), prefixCls = _React$useContext.prefixCls; var groupPrefixCls = "".concat(prefixCls, "-item-group"); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("li", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: ref, role: "presentation" }, restProps, { onClick: function onClick(e) { return e.stopPropagation(); }, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(groupPrefixCls, className) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", { role: "presentation", className: "".concat(groupPrefixCls, "-title"), title: typeof title === 'string' ? title : undefined }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("ul", { role: "group", className: "".concat(groupPrefixCls, "-list") }, children)); }); var MenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) { var eventKey = props.eventKey, children = props.children; var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useFullPath)(eventKey); var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__.parseChildren)(children, connectedKeyPath); var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useMeasure)(); if (measure) { return childList; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(InternalMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: ref }, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__["default"])(props, ['warnKey'])), childList); }); if (true) { MenuItemGroup.displayName = 'MenuItemGroup'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MenuItemGroup); /***/ }), /***/ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js": /*!*********************************************************************!*\ !*** ../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ InlineSubMenuList) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js"); /* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js"); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js"); function InlineSubMenuList(_ref) { var id = _ref.id, open = _ref.open, keyPath = _ref.keyPath, children = _ref.children; var fixedMode = 'inline'; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__.MenuContext), prefixCls = _React$useContext.prefixCls, forceSubMenuRender = _React$useContext.forceSubMenuRender, motion = _React$useContext.motion, defaultMotions = _React$useContext.defaultMotions, mode = _React$useContext.mode; // Always use latest mode check var sameModeRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false); sameModeRef.current = mode === fixedMode; // We record `destroy` mark here since when mode change from `inline` to others. // The inline list should remove when motion end. var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(!sameModeRef.current), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), destroy = _React$useState2[0], setDestroy = _React$useState2[1]; var mergedOpen = sameModeRef.current ? open : false; // ================================= Effect ================================= // Reset destroy state when mode change back react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { if (sameModeRef.current) { setDestroy(false); } }, [mode]); // ================================= Render ================================= var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__.getMotion)(fixedMode, motion, defaultMotions)); // No need appear since nest inlineCollapse changed if (keyPath.length > 1) { mergedMotion.motionAppear = false; } // Hide inline list when mode changed and motion end var originOnVisibleChanged = mergedMotion.onVisibleChanged; mergedMotion.onVisibleChanged = function (newVisible) { if (!sameModeRef.current && !newVisible) { setDestroy(true); } return originOnVisibleChanged === null || originOnVisibleChanged === void 0 ? void 0 : originOnVisibleChanged(newVisible); }; if (destroy) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__["default"], { mode: fixedMode, locked: !sameModeRef.current }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_4__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ visible: mergedOpen }, mergedMotion, { forceRender: forceSubMenuRender, removeOnLeave: false, leavedClassName: "".concat(prefixCls, "-hidden") }), function (_ref2) { var motionClassName = _ref2.className, motionStyle = _ref2.style; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_7__["default"], { id: id, className: motionClassName, style: motionStyle }, children); })); } /***/ }), /***/ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PopupTrigger) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _placements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../placements */ "../../../node_modules/rc-menu/es/placements.js"); /* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js"); var popupPlacementMap = { horizontal: 'bottomLeft', vertical: 'rightTop', 'vertical-left': 'rightTop', 'vertical-right': 'leftTop' }; function PopupTrigger(_ref) { var prefixCls = _ref.prefixCls, visible = _ref.visible, children = _ref.children, popup = _ref.popup, popupStyle = _ref.popupStyle, popupClassName = _ref.popupClassName, popupOffset = _ref.popupOffset, disabled = _ref.disabled, mode = _ref.mode, onVisibleChange = _ref.onVisibleChange; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_7__.MenuContext), getPopupContainer = _React$useContext.getPopupContainer, rtl = _React$useContext.rtl, subMenuOpenDelay = _React$useContext.subMenuOpenDelay, subMenuCloseDelay = _React$useContext.subMenuCloseDelay, builtinPlacements = _React$useContext.builtinPlacements, triggerSubMenuAction = _React$useContext.triggerSubMenuAction, forceSubMenuRender = _React$useContext.forceSubMenuRender, rootClassName = _React$useContext.rootClassName, motion = _React$useContext.motion, defaultMotions = _React$useContext.defaultMotions; var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), innerVisible = _React$useState2[0], setInnerVisible = _React$useState2[1]; var placement = rtl ? (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placementsRtl), builtinPlacements) : (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placements), builtinPlacements); var popupPlacement = popupPlacementMap[mode]; var targetMotion = (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__.getMotion)(mode, motion, defaultMotions); var targetMotionRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(targetMotion); if (mode !== 'inline') { /** * PopupTrigger is only used for vertical and horizontal types. * When collapsed is unfolded, the inline animation will destroy the vertical animation. */ targetMotionRef.current = targetMotion; } var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, targetMotionRef.current), {}, { leavedClassName: "".concat(prefixCls, "-hidden"), removeOnLeave: false, motionAppear: true }); // Delay to change visible var visibleRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(); react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { visibleRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"])(function () { setInnerVisible(visible); }); return function () { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"].cancel(visibleRef.current); }; }, [visible]); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__["default"], { prefixCls: prefixCls, popupClassName: classnames__WEBPACK_IMPORTED_MODULE_5___default()("".concat(prefixCls, "-popup"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(prefixCls, "-rtl"), rtl), popupClassName, rootClassName), stretch: mode === 'horizontal' ? 'minWidth' : null, getPopupContainer: getPopupContainer, builtinPlacements: placement, popupPlacement: popupPlacement, popupVisible: innerVisible, popup: popup, popupStyle: popupStyle, popupAlign: popupOffset && { offset: popupOffset }, action: disabled ? [] : [triggerSubMenuAction], mouseEnterDelay: subMenuOpenDelay, mouseLeaveDelay: subMenuCloseDelay, onPopupVisibleChange: onVisibleChange, forceRender: forceSubMenuRender, popupMotion: mergedMotion, fresh: true }, children); } /***/ }), /***/ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); var _excluded = ["className", "children"]; var InternalSubMenuList = function InternalSubMenuList(_ref, ref) { var className = _ref.className, children = _ref.children, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, _excluded); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_4__.MenuContext), prefixCls = _React$useContext.prefixCls, mode = _React$useContext.mode, rtl = _React$useContext.rtl; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("ul", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(prefixCls, rtl && "".concat(prefixCls, "-rtl"), "".concat(prefixCls, "-sub"), "".concat(prefixCls, "-").concat(mode === 'inline' ? 'inline' : 'vertical'), className), role: "menu" }, restProps, { "data-menu-list": true, ref: ref }), children); }; var SubMenuList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(InternalSubMenuList); SubMenuList.displayName = 'SubMenuList'; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenuList); /***/ }), /***/ "../../../node_modules/rc-menu/es/SubMenu/index.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-menu/es/SubMenu/index.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js"); /* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js"); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); /* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js"); /* harmony import */ var _PopupTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./PopupTrigger */ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js"); /* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Icon */ "../../../node_modules/rc-menu/es/Icon.js"); /* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js"); /* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js"); /* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js"); /* harmony import */ var _InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./InlineSubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); /* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js"); /* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js"); var _excluded = ["style", "className", "title", "eventKey", "warnKey", "disabled", "internalPopupClose", "children", "itemIcon", "expandIcon", "popupClassName", "popupOffset", "popupStyle", "onClick", "onMouseEnter", "onMouseLeave", "onTitleClick", "onTitleMouseEnter", "onTitleMouseLeave"], _excluded2 = ["active"]; var InternalSubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) { var style = props.style, className = props.className, title = props.title, eventKey = props.eventKey, warnKey = props.warnKey, disabled = props.disabled, internalPopupClose = props.internalPopupClose, children = props.children, itemIcon = props.itemIcon, expandIcon = props.expandIcon, popupClassName = props.popupClassName, popupOffset = props.popupOffset, popupStyle = props.popupStyle, onClick = props.onClick, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onTitleClick = props.onTitleClick, onTitleMouseEnter = props.onTitleMouseEnter, onTitleMouseLeave = props.onTitleMouseLeave, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded); var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_20__.useMenuId)(eventKey); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__.MenuContext), prefixCls = _React$useContext.prefixCls, mode = _React$useContext.mode, openKeys = _React$useContext.openKeys, contextDisabled = _React$useContext.disabled, overflowDisabled = _React$useContext.overflowDisabled, activeKey = _React$useContext.activeKey, selectedKeys = _React$useContext.selectedKeys, contextItemIcon = _React$useContext.itemIcon, contextExpandIcon = _React$useContext.expandIcon, onItemClick = _React$useContext.onItemClick, onOpenChange = _React$useContext.onOpenChange, onActive = _React$useContext.onActive; var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__["default"]), _internalRenderSubMenuItem = _React$useContext2._internalRenderSubMenuItem; var _React$useContext3 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathUserContext), isSubPathKey = _React$useContext3.isSubPathKey; var connectedPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)(); var subMenuPrefixCls = "".concat(prefixCls, "-submenu"); var mergedDisabled = contextDisabled || disabled; var elementRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(); var popupRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(); // ================================ Warn ================================ if ( true && warnKey) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__["default"])(false, 'SubMenu should not leave undefined `key`.'); } // ================================ Icon ================================ var mergedItemIcon = itemIcon !== null && itemIcon !== void 0 ? itemIcon : contextItemIcon; var mergedExpandIcon = expandIcon !== null && expandIcon !== void 0 ? expandIcon : contextExpandIcon; // ================================ Open ================================ var originOpen = openKeys.includes(eventKey); var open = !overflowDisabled && originOpen; // =============================== Select =============================== var childrenSelected = isSubPathKey(selectedKeys, eventKey); // =============================== Active =============================== var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_15__["default"])(eventKey, mergedDisabled, onTitleMouseEnter, onTitleMouseLeave), active = _useActive.active, activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded2); // Fallback of active check to avoid hover on menu title or disabled item var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), childrenActive = _React$useState2[0], setChildrenActive = _React$useState2[1]; var triggerChildrenActive = function triggerChildrenActive(newActive) { if (!mergedDisabled) { setChildrenActive(newActive); } }; var onInternalMouseEnter = function onInternalMouseEnter(domEvent) { triggerChildrenActive(true); onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({ key: eventKey, domEvent: domEvent }); }; var onInternalMouseLeave = function onInternalMouseLeave(domEvent) { triggerChildrenActive(false); onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({ key: eventKey, domEvent: domEvent }); }; var mergedActive = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { if (active) { return active; } if (mode !== 'inline') { return childrenActive || isSubPathKey([activeKey], eventKey); } return false; }, [mode, active, activeKey, childrenActive, eventKey, isSubPathKey]); // ========================== DirectionStyle ========================== var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__["default"])(connectedPath.length); // =============================== Events =============================== // >>>> Title click var onInternalTitleClick = function onInternalTitleClick(e) { // Skip if disabled if (mergedDisabled) { return; } onTitleClick === null || onTitleClick === void 0 || onTitleClick({ key: eventKey, domEvent: e }); // Trigger open by click when mode is `inline` if (mode === 'inline') { onOpenChange(eventKey, !originOpen); } }; // >>>> Context for children click var onMergedItemClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__["default"])(function (info) { onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__.warnItemProp)(info)); onItemClick(info); }); // >>>>> Visible change var onPopupVisibleChange = function onPopupVisibleChange(newVisible) { if (mode !== 'inline') { onOpenChange(eventKey, newVisible); } }; /** * Used for accessibility. Helper will focus element without key board. * We should manually trigger an active */ var onInternalFocus = function onInternalFocus() { onActive(eventKey); }; // =============================== Render =============================== var popupId = domDataId && "".concat(domDataId, "-popup"); var expandIconNode = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_14__["default"], { icon: mode !== 'horizontal' ? mergedExpandIcon : undefined, props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, { isOpen: open, // [Legacy] Not sure why need this mark isSubMenu: true }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("i", { className: "".concat(subMenuPrefixCls, "-arrow") })); }, [mode, mergedExpandIcon, props, open, subMenuPrefixCls]); // >>>>> Title var titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ role: "menuitem", style: directionStyle, className: "".concat(subMenuPrefixCls, "-title"), tabIndex: mergedDisabled ? null : -1, ref: elementRef, title: typeof title === 'string' ? title : null, "data-menu-id": overflowDisabled && domDataId ? null : domDataId, "aria-expanded": open, "aria-haspopup": true, "aria-controls": popupId, "aria-disabled": mergedDisabled, onClick: onInternalTitleClick, onFocus: onInternalFocus }, activeProps), title, expandIconNode); // Cache mode if it change to `inline` which do not have popup motion var triggerModeRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(mode); if (mode !== 'inline' && connectedPath.length > 1) { triggerModeRef.current = 'vertical'; } else { triggerModeRef.current = mode; } if (!overflowDisabled) { var triggerMode = triggerModeRef.current; // Still wrap with Trigger here since we need avoid react re-mount dom node // Which makes motion failed titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_PopupTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], { mode: triggerMode, prefixCls: subMenuPrefixCls, visible: !internalPopupClose && open && mode !== 'inline', popupClassName: popupClassName, popupOffset: popupOffset, popupStyle: popupStyle, popup: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"] // Special handle of horizontal mode , { mode: triggerMode === 'horizontal' ? 'vertical' : triggerMode }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_9__["default"], { id: popupId, ref: popupRef }, children)), disabled: mergedDisabled, onVisibleChange: onPopupVisibleChange }, titleNode); } // >>>>> List node var listNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ ref: ref, role: "none" }, restProps, { component: "li", style: style, className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(subMenuPrefixCls, "".concat(subMenuPrefixCls, "-").concat(mode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(subMenuPrefixCls, "-open"), open), "".concat(subMenuPrefixCls, "-active"), mergedActive), "".concat(subMenuPrefixCls, "-selected"), childrenSelected), "".concat(subMenuPrefixCls, "-disabled"), mergedDisabled)), onMouseEnter: onInternalMouseEnter, onMouseLeave: onInternalMouseLeave }), titleNode, !overflowDisabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__["default"], { id: popupId, open: open, keyPath: connectedPath }, children)); if (_internalRenderSubMenuItem) { listNode = _internalRenderSubMenuItem(listNode, props, { selected: childrenSelected, active: mergedActive, open: open, disabled: mergedDisabled }); } // >>>>> Render return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"], { onItemClick: onMergedItemClick, mode: mode === 'horizontal' ? 'vertical' : mode, itemIcon: mergedItemIcon, expandIcon: mergedExpandIcon }, listNode); }); var SubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) { var eventKey = props.eventKey, children = props.children; var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)(eventKey); var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__.parseChildren)(children, connectedKeyPath); // ==================== Record KeyPath ==================== var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useMeasure)(); // eslint-disable-next-line consistent-return react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () { if (measure) { measure.registerPath(eventKey, connectedKeyPath); return function () { measure.unregisterPath(eventKey, connectedKeyPath); }; } }, [connectedKeyPath]); var renderNode; // ======================== Render ======================== if (measure) { renderNode = childList; } else { renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(InternalSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ ref: ref }, props), childList); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathTrackerContext.Provider, { value: connectedKeyPath }, renderNode); }); if (true) { SubMenu.displayName = 'SubMenu'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenu); /***/ }), /***/ "../../../node_modules/rc-menu/es/context/IdContext.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-menu/es/context/IdContext.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ IdContext: () => (/* binding */ IdContext), /* harmony export */ getMenuId: () => (/* binding */ getMenuId), /* harmony export */ useMenuId: () => (/* binding */ useMenuId) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var IdContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); function getMenuId(uuid, eventKey) { if (uuid === undefined) { return null; } return "".concat(uuid, "-").concat(eventKey); } /** * Get `data-menu-id` */ function useMenuId(eventKey) { var id = react__WEBPACK_IMPORTED_MODULE_0__.useContext(IdContext); return getMenuId(id, eventKey); } /***/ }), /***/ "../../../node_modules/rc-menu/es/context/MenuContext.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-menu/es/context/MenuContext.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MenuContext: () => (/* binding */ MenuContext), /* harmony export */ "default": () => (/* binding */ InheritableContextProvider) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/hooks/useMemo */ "../../../node_modules/rc-util/es/hooks/useMemo.js"); /* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js"); var _excluded = ["children", "locked"]; var MenuContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createContext(null); function mergeProps(origin, target) { var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, origin); Object.keys(target).forEach(function (key) { var value = target[key]; if (value !== undefined) { clone[key] = value; } }); return clone; } function InheritableContextProvider(_ref) { var children = _ref.children, locked = _ref.locked, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded); var context = react__WEBPACK_IMPORTED_MODULE_2__.useContext(MenuContext); var inheritableContext = (0,rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__["default"])(function () { return mergeProps(context, restProps); }, [context, restProps], function (prev, next) { return !locked && (prev[0] !== next[0] || !(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__["default"])(prev[1], next[1], true)); }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(MenuContext.Provider, { value: inheritableContext }, children); } /***/ }), /***/ "../../../node_modules/rc-menu/es/context/PathContext.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-menu/es/context/PathContext.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PathRegisterContext: () => (/* binding */ PathRegisterContext), /* harmony export */ PathTrackerContext: () => (/* binding */ PathTrackerContext), /* harmony export */ PathUserContext: () => (/* binding */ PathUserContext), /* harmony export */ useFullPath: () => (/* binding */ useFullPath), /* harmony export */ useMeasure: () => (/* binding */ useMeasure) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); var EmptyList = []; // ========================= Path Register ========================= var PathRegisterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null); function useMeasure() { return react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathRegisterContext); } // ========================= Path Tracker ========================== var PathTrackerContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(EmptyList); function useFullPath(eventKey) { var parentKeyPath = react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathTrackerContext); return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { return eventKey !== undefined ? [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(parentKeyPath), [eventKey]) : parentKeyPath; }, [parentKeyPath, eventKey]); } // =========================== Path User =========================== var PathUserContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null); /***/ }), /***/ "../../../node_modules/rc-menu/es/context/PrivateContext.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-menu/es/context/PrivateContext.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var PrivateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({}); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PrivateContext); /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useAccessibility.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getFocusableElements: () => (/* binding */ getFocusableElements), /* harmony export */ refreshElements: () => (/* binding */ refreshElements), /* harmony export */ useAccessibility: () => (/* binding */ useAccessibility) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/focus */ "../../../node_modules/rc-util/es/Dom/focus.js"); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js"); // destruct to reduce minify size var LEFT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].LEFT, RIGHT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].RIGHT, UP = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].UP, DOWN = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].DOWN, ENTER = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ENTER, ESC = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ESC, HOME = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].HOME, END = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].END; var ArrowKeys = [UP, DOWN, LEFT, RIGHT]; function getOffset(mode, isRootLevel, isRtl, which) { var _offsets; var prev = 'prev'; var next = 'next'; var children = 'children'; var parent = 'parent'; // Inline enter is special that we use unique operation if (mode === 'inline' && which === ENTER) { return { inlineTrigger: true }; } var inline = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next); var horizontal = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, LEFT, isRtl ? next : prev), RIGHT, isRtl ? prev : next), DOWN, children), ENTER, children); var vertical = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next), ENTER, children), ESC, parent), LEFT, isRtl ? children : parent), RIGHT, isRtl ? parent : children); var offsets = { inline: inline, horizontal: horizontal, vertical: vertical, inlineSub: inline, horizontalSub: vertical, verticalSub: vertical }; var type = (_offsets = offsets["".concat(mode).concat(isRootLevel ? '' : 'Sub')]) === null || _offsets === void 0 ? void 0 : _offsets[which]; switch (type) { case prev: return { offset: -1, sibling: true }; case next: return { offset: 1, sibling: true }; case parent: return { offset: -1, sibling: false }; case children: return { offset: 1, sibling: false }; default: return null; } } function findContainerUL(element) { var current = element; while (current) { if (current.getAttribute('data-menu-list')) { return current; } current = current.parentElement; } // Normally should not reach this line /* istanbul ignore next */ return null; } /** * Find focused element within element set provided */ function getFocusElement(activeElement, elements) { var current = activeElement || document.activeElement; while (current) { if (elements.has(current)) { return current; } current = current.parentElement; } return null; } /** * Get focusable elements from the element set under provided container */ function getFocusableElements(container, elements) { var list = (0,rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__.getFocusNodeList)(container, true); return list.filter(function (ele) { return elements.has(ele); }); } function getNextFocusElement(parentQueryContainer, elements, focusMenuElement) { var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; // Key on the menu item will not get validate parent container if (!parentQueryContainer) { return null; } // List current level menu item elements var sameLevelFocusableMenuElementList = getFocusableElements(parentQueryContainer, elements); // Find next focus index var count = sameLevelFocusableMenuElementList.length; var focusIndex = sameLevelFocusableMenuElementList.findIndex(function (ele) { return focusMenuElement === ele; }); if (offset < 0) { if (focusIndex === -1) { focusIndex = count - 1; } else { focusIndex -= 1; } } else if (offset > 0) { focusIndex += 1; } focusIndex = (focusIndex + count) % count; // Focus menu item return sameLevelFocusableMenuElementList[focusIndex]; } var refreshElements = function refreshElements(keys, id) { var elements = new Set(); var key2element = new Map(); var element2key = new Map(); keys.forEach(function (key) { var element = document.querySelector("[data-menu-id='".concat((0,_context_IdContext__WEBPACK_IMPORTED_MODULE_5__.getMenuId)(id, key), "']")); if (element) { elements.add(element); element2key.set(element, key); key2element.set(key, element); } }); return { elements: elements, key2element: key2element, element2key: element2key }; }; function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKeys, getKeyPath, triggerActiveKey, triggerAccessibilityOpen, originOnKeyDown) { var rafRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(); var activeRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(); activeRef.current = activeKey; var cleanRaf = function cleanRaf() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"].cancel(rafRef.current); }; react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () { return function () { cleanRaf(); }; }, []); return function (e) { var which = e.which; if ([].concat(ArrowKeys, [ENTER, ESC, HOME, END]).includes(which)) { var keys = getKeys(); var refreshedElements = refreshElements(keys, id); var _refreshedElements = refreshedElements, elements = _refreshedElements.elements, key2element = _refreshedElements.key2element, element2key = _refreshedElements.element2key; // First we should find current focused MenuItem/SubMenu element var activeElement = key2element.get(activeKey); var focusMenuElement = getFocusElement(activeElement, elements); var focusMenuKey = element2key.get(focusMenuElement); var offsetObj = getOffset(mode, getKeyPath(focusMenuKey, true).length === 1, isRtl, which); // Some mode do not have fully arrow operation like inline if (!offsetObj && which !== HOME && which !== END) { return; } // Arrow prevent default to avoid page scroll if (ArrowKeys.includes(which) || [HOME, END].includes(which)) { e.preventDefault(); } var tryFocus = function tryFocus(menuElement) { if (menuElement) { var focusTargetElement = menuElement; // Focus to link instead of menu item if possible var link = menuElement.querySelector('a'); if (link !== null && link !== void 0 && link.getAttribute('href')) { focusTargetElement = link; } var targetKey = element2key.get(menuElement); triggerActiveKey(targetKey); /** * Do not `useEffect` here since `tryFocus` may trigger async * which makes React sync update the `activeKey` * that force render before `useRef` set the next activeKey */ cleanRaf(); rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () { if (activeRef.current === targetKey) { focusTargetElement.focus(); } }); } }; if ([HOME, END].includes(which) || offsetObj.sibling || !focusMenuElement) { // ========================== Sibling ========================== // Find walkable focus menu element container var parentQueryContainer; if (!focusMenuElement || mode === 'inline') { parentQueryContainer = containerRef.current; } else { parentQueryContainer = findContainerUL(focusMenuElement); } // Get next focus element var targetElement; var focusableElements = getFocusableElements(parentQueryContainer, elements); if (which === HOME) { targetElement = focusableElements[0]; } else if (which === END) { targetElement = focusableElements[focusableElements.length - 1]; } else { targetElement = getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offsetObj.offset); } // Focus menu item tryFocus(targetElement); // ======================= InlineTrigger ======================= } else if (offsetObj.inlineTrigger) { // Inline trigger no need switch to sub menu item triggerAccessibilityOpen(focusMenuKey); // =========================== Level =========================== } else if (offsetObj.offset > 0) { triggerAccessibilityOpen(focusMenuKey, true); cleanRaf(); rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () { // Async should resync elements refreshedElements = refreshElements(keys, id); var controlId = focusMenuElement.getAttribute('aria-controls'); var subQueryContainer = document.getElementById(controlId); // Get sub focusable menu item var targetElement = getNextFocusElement(subQueryContainer, refreshedElements.elements); // Focus menu item tryFocus(targetElement); }, 5); } else if (offsetObj.offset < 0) { var keyPath = getKeyPath(focusMenuKey, true); var parentKey = keyPath[keyPath.length - 2]; var parentMenuElement = key2element.get(parentKey); // Focus menu item triggerAccessibilityOpen(parentKey, false); tryFocus(parentMenuElement); } } // Pass origin key down event originOnKeyDown === null || originOnKeyDown === void 0 || originOnKeyDown(e); }; } /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useActive.js": /*!***********************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useActive.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useActive) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) { var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext), activeKey = _React$useContext.activeKey, onActive = _React$useContext.onActive, onInactive = _React$useContext.onInactive; var ret = { active: activeKey === eventKey }; // Skip when disabled if (!disabled) { ret.onMouseEnter = function (domEvent) { onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({ key: eventKey, domEvent: domEvent }); onActive(eventKey); }; ret.onMouseLeave = function (domEvent) { onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({ key: eventKey, domEvent: domEvent }); onInactive(eventKey); }; } return ret; } /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js": /*!*******************************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useDirectionStyle) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js"); function useDirectionStyle(level) { var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext), mode = _React$useContext.mode, rtl = _React$useContext.rtl, inlineIndent = _React$useContext.inlineIndent; if (mode !== 'inline') { return null; } var len = level; return rtl ? { paddingRight: len * inlineIndent } : { paddingLeft: len * inlineIndent }; } /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useKeyRecords.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ OVERFLOW_KEY: () => (/* binding */ OVERFLOW_KEY), /* harmony export */ "default": () => (/* binding */ useKeyRecords) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var _utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/timeUtil */ "../../../node_modules/rc-menu/es/utils/timeUtil.js"); var PATH_SPLIT = '__RC_UTIL_PATH_SPLIT__'; var getPathStr = function getPathStr(keyPath) { return keyPath.join(PATH_SPLIT); }; var getPathKeys = function getPathKeys(keyPathStr) { return keyPathStr.split(PATH_SPLIT); }; var OVERFLOW_KEY = 'rc-menu-more'; function useKeyRecords() { var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__.useState({}), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2), internalForceUpdate = _React$useState2[1]; var key2pathRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map()); var path2keyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map()); var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2__.useState([]), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2), overflowKeys = _React$useState4[0], setOverflowKeys = _React$useState4[1]; var updateRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(0); var destroyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(false); var forceUpdate = function forceUpdate() { if (!destroyRef.current) { internalForceUpdate({}); } }; var registerPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) { // Warning for invalidate or duplicated `key` if (true) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(!key2pathRef.current.has(key), "Duplicated key '".concat(key, "' used in Menu by path [").concat(keyPath.join(' > '), "]")); } // Fill map var connectedPath = getPathStr(keyPath); path2keyRef.current.set(connectedPath, key); key2pathRef.current.set(key, connectedPath); updateRef.current += 1; var id = updateRef.current; (0,_utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__.nextSlice)(function () { if (id === updateRef.current) { forceUpdate(); } }); }, []); var unregisterPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) { var connectedPath = getPathStr(keyPath); path2keyRef.current.delete(connectedPath); key2pathRef.current.delete(key); }, []); var refreshOverflowKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (keys) { setOverflowKeys(keys); }, []); var getKeyPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (eventKey, includeOverflow) { var fullPath = key2pathRef.current.get(eventKey) || ''; var keys = getPathKeys(fullPath); if (includeOverflow && overflowKeys.includes(keys[0])) { keys.unshift(OVERFLOW_KEY); } return keys; }, [overflowKeys]); var isSubPathKey = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (pathKeys, eventKey) { return pathKeys.filter(function (item) { return item !== undefined; }).some(function (pathKey) { var pathKeyList = getKeyPath(pathKey, true); return pathKeyList.includes(eventKey); }); }, [getKeyPath]); var getKeys = function getKeys() { var keys = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(key2pathRef.current.keys()); if (overflowKeys.length) { keys.push(OVERFLOW_KEY); } return keys; }; /** * Find current key related child path keys */ var getSubPathKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key) { var connectedPath = "".concat(key2pathRef.current.get(key)).concat(PATH_SPLIT); var pathKeys = new Set(); (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(path2keyRef.current.keys()).forEach(function (pathKey) { if (pathKey.startsWith(connectedPath)) { pathKeys.add(path2keyRef.current.get(pathKey)); } }); return pathKeys; }, []); react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () { return function () { destroyRef.current = true; }; }, []); return { // Register registerPath: registerPath, unregisterPath: unregisterPath, refreshOverflowKeys: refreshOverflowKeys, // Util isSubPathKey: isSubPathKey, getKeyPath: getKeyPath, getKeys: getKeys, getSubPathKeys: getSubPathKeys }; } /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useMemoCallback.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useMemoCallback) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /** * Cache callback function that always return same ref instead. * This is used for context optimization. */ function useMemoCallback(func) { var funRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(func); funRef.current = func; var callback = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function () { var _funRef$current; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return (_funRef$current = funRef.current) === null || _funRef$current === void 0 ? void 0 : _funRef$current.call.apply(_funRef$current, [funRef].concat(args)); }, []); return func ? callback : undefined; } /***/ }), /***/ "../../../node_modules/rc-menu/es/hooks/useUUID.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-menu/es/hooks/useUUID.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useUUID) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js"); var uniquePrefix = Math.random().toFixed(5).toString().slice(2); var internalId = 0; function useUUID(id) { var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__["default"])(id, { value: id }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2), uuid = _useMergedState2[0], setUUID = _useMergedState2[1]; react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { internalId += 1; var newId = false ? 0 : "".concat(uniquePrefix, "-").concat(internalId); setUUID("rc-menu-uuid-".concat(newId)); }, []); return uuid; } /***/ }), /***/ "../../../node_modules/rc-menu/es/index.js": /*!*************************************************!*\ !*** ../../../node_modules/rc-menu/es/index.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Divider: () => (/* reexport safe */ _Divider__WEBPACK_IMPORTED_MODULE_5__["default"]), /* harmony export */ Item: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ ItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]), /* harmony export */ MenuItem: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ MenuItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]), /* harmony export */ SubMenu: () => (/* reexport safe */ _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ useFullPath: () => (/* reexport safe */ _context_PathContext__WEBPACK_IMPORTED_MODULE_4__.useFullPath) /* harmony export */ }); /* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu */ "../../../node_modules/rc-menu/es/Menu.js"); /* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js"); /* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js"); /* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js"); /* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js"); /* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Divider */ "../../../node_modules/rc-menu/es/Divider.js"); var ExportMenu = _Menu__WEBPACK_IMPORTED_MODULE_0__["default"]; ExportMenu.Item = _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]; ExportMenu.SubMenu = _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"]; ExportMenu.ItemGroup = _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]; ExportMenu.Divider = _Divider__WEBPACK_IMPORTED_MODULE_5__["default"]; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExportMenu); /***/ }), /***/ "../../../node_modules/rc-menu/es/placements.js": /*!******************************************************!*\ !*** ../../../node_modules/rc-menu/es/placements.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ placements: () => (/* binding */ placements), /* harmony export */ placementsRtl: () => (/* binding */ placementsRtl) /* harmony export */ }); var autoAdjustOverflow = { adjustX: 1, adjustY: 1 }; var placements = { topLeft: { points: ['bl', 'tl'], overflow: autoAdjustOverflow }, topRight: { points: ['br', 'tr'], overflow: autoAdjustOverflow }, bottomLeft: { points: ['tl', 'bl'], overflow: autoAdjustOverflow }, bottomRight: { points: ['tr', 'br'], overflow: autoAdjustOverflow }, leftTop: { points: ['tr', 'tl'], overflow: autoAdjustOverflow }, leftBottom: { points: ['br', 'bl'], overflow: autoAdjustOverflow }, rightTop: { points: ['tl', 'tr'], overflow: autoAdjustOverflow }, rightBottom: { points: ['bl', 'br'], overflow: autoAdjustOverflow } }; var placementsRtl = { topLeft: { points: ['bl', 'tl'], overflow: autoAdjustOverflow }, topRight: { points: ['br', 'tr'], overflow: autoAdjustOverflow }, bottomLeft: { points: ['tl', 'bl'], overflow: autoAdjustOverflow }, bottomRight: { points: ['tr', 'br'], overflow: autoAdjustOverflow }, rightTop: { points: ['tr', 'tl'], overflow: autoAdjustOverflow }, rightBottom: { points: ['br', 'bl'], overflow: autoAdjustOverflow }, leftTop: { points: ['tl', 'tr'], overflow: autoAdjustOverflow }, leftBottom: { points: ['bl', 'br'], overflow: autoAdjustOverflow } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (placements); /***/ }), /***/ "../../../node_modules/rc-menu/es/utils/commonUtil.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-menu/es/utils/commonUtil.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ parseChildren: () => (/* binding */ parseChildren) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); function parseChildren(children, keyPath) { return (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__["default"])(children).map(function (child, index) { if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(child)) { var _eventKey, _child$props; var key = child.key; var eventKey = (_eventKey = (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.eventKey) !== null && _eventKey !== void 0 ? _eventKey : key; var emptyKey = eventKey === null || eventKey === undefined; if (emptyKey) { eventKey = "tmp_key-".concat([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(keyPath), [index]).join('-')); } var cloneProps = { key: eventKey, eventKey: eventKey }; if ( true && emptyKey) { cloneProps.warnKey = true; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(child, cloneProps); } return child; }); } /***/ }), /***/ "../../../node_modules/rc-menu/es/utils/motionUtil.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-menu/es/utils/motionUtil.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getMotion: () => (/* binding */ getMotion) /* harmony export */ }); function getMotion(mode, motion, defaultMotions) { if (motion) { return motion; } if (defaultMotions) { return defaultMotions[mode] || defaultMotions.other; } return undefined; } /***/ }), /***/ "../../../node_modules/rc-menu/es/utils/nodeUtil.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-menu/es/utils/nodeUtil.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ parseItems: () => (/* binding */ parseItems) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Divider */ "../../../node_modules/rc-menu/es/Divider.js"); /* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js"); /* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js"); /* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js"); /* harmony import */ var _commonUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js"); var _excluded = ["label", "children", "key", "type", "extra"]; function convertItemsToNodes(list, components, prefixCls) { var MergedMenuItem = components.item, MergedMenuItemGroup = components.group, MergedSubMenu = components.submenu, MergedDivider = components.divider; return (list || []).map(function (opt, index) { if (opt && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(opt) === 'object') { var _ref = opt, label = _ref.label, children = _ref.children, key = _ref.key, type = _ref.type, extra = _ref.extra, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(_ref, _excluded); var mergedKey = key !== null && key !== void 0 ? key : "tmp-".concat(index); // MenuItemGroup & SubMenuItem if (children || type === 'group') { if (type === 'group') { // Group return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ key: mergedKey }, restProps, { title: label }), convertItemsToNodes(children, components, prefixCls)); } // Sub Menu return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ key: mergedKey }, restProps, { title: label }), convertItemsToNodes(children, components, prefixCls)); } // MenuItem & Divider if (type === 'divider') { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedDivider, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ key: mergedKey }, restProps)); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ key: mergedKey }, restProps, { extra: extra }), label, (!!extra || extra === 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("span", { className: "".concat(prefixCls, "-item-extra") }, extra)); } return null; }).filter(function (opt) { return opt; }); } function parseItems(children, items, keyPath, components, prefixCls) { var childNodes = children; var mergedComponents = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ divider: _Divider__WEBPACK_IMPORTED_MODULE_5__["default"], item: _MenuItem__WEBPACK_IMPORTED_MODULE_6__["default"], group: _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__["default"], submenu: _SubMenu__WEBPACK_IMPORTED_MODULE_8__["default"] }, components); if (items) { childNodes = convertItemsToNodes(items, mergedComponents, prefixCls); } return (0,_commonUtil__WEBPACK_IMPORTED_MODULE_9__.parseChildren)(childNodes, keyPath); } /***/ }), /***/ "../../../node_modules/rc-menu/es/utils/timeUtil.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-menu/es/utils/timeUtil.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ nextSlice: () => (/* binding */ nextSlice) /* harmony export */ }); function nextSlice(callback) { /* istanbul ignore next */ Promise.resolve().then(callback); } /***/ }), /***/ "../../../node_modules/rc-menu/es/utils/warnUtil.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-menu/es/utils/warnUtil.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ warnItemProp: () => (/* binding */ warnItemProp) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); var _excluded = ["item"]; /** * `onClick` event return `info.item` which point to react node directly. * We should warning this since it will not work on FC. */ function warnItemProp(_ref) { var item = _ref.item, restInfo = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded); Object.defineProperty(restInfo, 'item', { get: function get() { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, '`info.item` is deprecated since we will move to function component that not provides React Node instance in future.'); return item; } }); return restInfo; } /***/ }), /***/ "../../../node_modules/rc-motion/es/CSSMotion.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-motion/es/CSSMotion.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ genCSSMotion: () => (/* binding */ genCSSMotion) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/Dom/findDOMNode */ "../../../node_modules/rc-util/es/Dom/findDOMNode.js"); /* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js"); /* harmony import */ var _DomWrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./DomWrapper */ "../../../node_modules/rc-motion/es/DomWrapper.js"); /* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-motion/es/hooks/useStatus.js"); /* harmony import */ var _hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js"); /* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./interface */ "../../../node_modules/rc-motion/es/interface.js"); /* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js"); /* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */ /** * `transitionSupport` is used for none transition test case. * Default we use browser transition event support check. */ function genCSSMotion(config) { var transitionSupport = config; if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(config) === 'object') { transitionSupport = config.transitionSupport; } function isSupportTransition(props, contextMotion) { return !!(props.motionName && transitionSupport && contextMotion !== false); } var CSSMotion = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.forwardRef(function (props, ref) { var _props$visible = props.visible, visible = _props$visible === void 0 ? true : _props$visible, _props$removeOnLeave = props.removeOnLeave, removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave, forceRender = props.forceRender, children = props.children, motionName = props.motionName, leavedClassName = props.leavedClassName, eventProps = props.eventProps; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_context__WEBPACK_IMPORTED_MODULE_8__.Context), contextMotion = _React$useContext.motion; var supportMotion = isSupportTransition(props, contextMotion); // Ref to the react node, it may be a HTMLElement var nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)(); // Ref to the dom wrapper in case ref can not pass to HTMLElement var wrapperNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)(); function getDomElement() { try { // Here we're avoiding call for findDOMNode since it's deprecated // in strict mode. We're calling it only when node ref is not // an instance of DOM HTMLElement. Otherwise use // findDOMNode as a final resort return nodeRef.current instanceof HTMLElement ? nodeRef.current : (0,rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__["default"])(wrapperNodeRef.current); } catch (e) { // Only happen when `motionDeadline` trigger but element removed. return null; } } var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__["default"])(supportMotion, visible, getDomElement, props), _useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStatus, 4), status = _useStatus2[0], statusStep = _useStatus2[1], statusStyle = _useStatus2[2], mergedVisible = _useStatus2[3]; // Record whether content has rendered // Will return null for un-rendered even when `removeOnLeave={false}` var renderedRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef(mergedVisible); if (mergedVisible) { renderedRef.current = true; } // ====================== Refs ====================== var setNodeRef = react__WEBPACK_IMPORTED_MODULE_7__.useCallback(function (node) { nodeRef.current = node; (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.fillRef)(ref, node); }, [ref]); // ===================== Render ===================== var motionChildren; var mergedProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, eventProps), {}, { visible: visible }); if (!children) { // No children motionChildren = null; } else if (status === _interface__WEBPACK_IMPORTED_MODULE_12__.STATUS_NONE) { // Stable children if (mergedVisible) { motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), setNodeRef); } else if (!removeOnLeave && renderedRef.current && leavedClassName) { motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, { className: leavedClassName }), setNodeRef); } else if (forceRender || !removeOnLeave && !leavedClassName) { motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, { style: { display: 'none' } }), setNodeRef); } else { motionChildren = null; } } else { // In motion var statusSuffix; if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_PREPARE) { statusSuffix = 'prepare'; } else if ((0,_hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__.isActive)(statusStep)) { statusSuffix = 'active'; } else if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_START) { statusSuffix = 'start'; } var motionCls = (0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, "".concat(status, "-").concat(statusSuffix)); motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, status), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')), style: statusStyle }), setNodeRef); } // Auto inject ref if child node not have `ref` props if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.isValidElement(motionChildren) && (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.supportRef)(motionChildren)) { var originNodeRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.getNodeRef)(motionChildren); if (!originNodeRef) { motionChildren = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.cloneElement(motionChildren, { ref: setNodeRef }); } } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_DomWrapper__WEBPACK_IMPORTED_MODULE_9__["default"], { ref: wrapperNodeRef }, motionChildren); }); CSSMotion.displayName = 'CSSMotion'; return CSSMotion; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotion(_util_motion__WEBPACK_IMPORTED_MODULE_13__.supportTransition)); /***/ }), /***/ "../../../node_modules/rc-motion/es/CSSMotionList.js": /*!***********************************************************!*\ !*** ../../../node_modules/rc-motion/es/CSSMotionList.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ genCSSMotionList: () => (/* binding */ genCSSMotionList) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js"); /* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js"); /* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js"); /* harmony import */ var _util_diff__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./util/diff */ "../../../node_modules/rc-motion/es/util/diff.js"); /* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js"); var _excluded = ["component", "children", "onVisibleChanged", "onAllRemoved"], _excluded2 = ["status"]; /* eslint react/prop-types: 0 */ var MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd']; /** * Generate a CSSMotionList component with config * @param transitionSupport No need since CSSMotionList no longer depends on transition support * @param CSSMotion CSSMotion component */ function genCSSMotionList(transitionSupport) { var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _CSSMotion__WEBPACK_IMPORTED_MODULE_10__["default"]; var CSSMotionList = /*#__PURE__*/function (_React$Component) { (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__["default"])(CSSMotionList, _React$Component); var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__["default"])(CSSMotionList); function CSSMotionList() { var _this; (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, CSSMotionList); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "state", { keyEntities: [] }); // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info. (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "removeKey", function (removeKey) { _this.setState(function (prevState) { var nextKeyEntities = prevState.keyEntities.map(function (entity) { if (entity.key !== removeKey) return entity; return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, entity), {}, { status: _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED }); }); return { keyEntities: nextKeyEntities }; }, function () { var keyEntities = _this.state.keyEntities; var restKeysCount = keyEntities.filter(function (_ref) { var status = _ref.status; return status !== _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED; }).length; if (restKeysCount === 0 && _this.props.onAllRemoved) { _this.props.onAllRemoved(); } }); }); return _this; } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(CSSMotionList, [{ key: "render", value: function render() { var _this2 = this; var keyEntities = this.state.keyEntities; var _this$props = this.props, component = _this$props.component, children = _this$props.children, _onVisibleChanged = _this$props.onVisibleChanged, onAllRemoved = _this$props.onAllRemoved, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_this$props, _excluded); var Component = component || react__WEBPACK_IMPORTED_MODULE_9__.Fragment; var motionProps = {}; MOTION_PROP_NAMES.forEach(function (prop) { motionProps[prop] = restProps[prop]; delete restProps[prop]; }); delete restProps.keys; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(Component, restProps, keyEntities.map(function (_ref2, index) { var status = _ref2.status, eventProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded2); var visible = status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_ADD || status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_KEEP; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(CSSMotion, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionProps, { key: eventProps.key, visible: visible, eventProps: eventProps, onVisibleChanged: function onVisibleChanged(changedVisible) { _onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, { key: eventProps.key }); if (!changedVisible) { _this2.removeKey(eventProps.key); } } }), function (props, ref) { return children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, { index: index }), ref); }); })); } }], [{ key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(_ref3, _ref4) { var keys = _ref3.keys; var keyEntities = _ref4.keyEntities; var parsedKeyObjects = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.parseKeys)(keys); var mixedKeyEntities = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.diffKeys)(keyEntities, parsedKeyObjects); return { keyEntities: mixedKeyEntities.filter(function (entity) { var prevEntity = keyEntities.find(function (_ref5) { var key = _ref5.key; return entity.key === key; }); // Remove if already mark as removed if (prevEntity && prevEntity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED && entity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVE) { return false; } return true; }) }; } }]); return CSSMotionList; }(react__WEBPACK_IMPORTED_MODULE_9__.Component); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])(CSSMotionList, "defaultProps", { component: 'div' }); return CSSMotionList; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotionList(_util_motion__WEBPACK_IMPORTED_MODULE_12__.supportTransition)); /***/ }), /***/ "../../../node_modules/rc-motion/es/DomWrapper.js": /*!********************************************************!*\ !*** ../../../node_modules/rc-motion/es/DomWrapper.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js"); /* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); var DomWrapper = /*#__PURE__*/function (_React$Component) { (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__["default"])(DomWrapper, _React$Component); var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__["default"])(DomWrapper); function DomWrapper() { (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, DomWrapper); return _super.apply(this, arguments); } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(DomWrapper, [{ key: "render", value: function render() { return this.props.children; } }]); return DomWrapper; }(react__WEBPACK_IMPORTED_MODULE_4__.Component); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DomWrapper); /***/ }), /***/ "../../../node_modules/rc-motion/es/context.js": /*!*****************************************************!*\ !*** ../../../node_modules/rc-motion/es/context.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Context: () => (/* binding */ Context), /* harmony export */ "default": () => (/* binding */ MotionProvider) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); var _excluded = ["children"]; var Context = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({}); function MotionProvider(_ref) { var children = _ref.children, props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Context.Provider, { value: props }, children); } /***/ }), /***/ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js": /*!**********************************************************************!*\ !*** ../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/motion */ "../../../node_modules/rc-motion/es/util/motion.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (onInternalMotionEnd) { var cacheElementRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(); // Remove events function removeMotionEvents(element) { if (element) { element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd); element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd); } } // Patch events function patchMotionEvents(element) { if (cacheElementRef.current && cacheElementRef.current !== element) { removeMotionEvents(cacheElementRef.current); } if (element && element !== cacheElementRef.current) { element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd); element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd); // Save as cache in case dom removed trigger by `motionDeadline` cacheElementRef.current = element; } } // Clean up when removed react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () { return function () { removeMotionEvents(cacheElementRef.current); }; }, []); return [patchMotionEvents, removeMotionEvents]; }); /***/ }), /***/ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); // It's safe to use `useLayoutEffect` but the warning is annoying var useIsomorphicLayoutEffect = (0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__["default"])() ? react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_1__.useEffect; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsomorphicLayoutEffect); /***/ }), /***/ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-motion/es/hooks/useNextFrame.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () { var nextFrameRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null); function cancelNextFrame() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"].cancel(nextFrameRef.current); } function nextFrame(callback) { var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; cancelNextFrame(); var nextFrameId = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"])(function () { if (delay <= 1) { callback({ isCanceled: function isCanceled() { return nextFrameId !== nextFrameRef.current; } }); } else { nextFrame(callback, delay - 1); } }); nextFrameRef.current = nextFrameId; } react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { return function () { cancelNextFrame(); }; }, []); return [nextFrame, cancelNextFrame]; }); /***/ }), /***/ "../../../node_modules/rc-motion/es/hooks/useStatus.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-motion/es/hooks/useStatus.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useStatus) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js"); /* harmony import */ var rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/hooks/useSyncState */ "../../../node_modules/rc-util/es/hooks/useSyncState.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js"); /* harmony import */ var _useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useDomMotionEvents */ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js"); /* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js"); /* harmony import */ var _useStepQueue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js"); function useStatus(supportMotion, visible, getElement, _ref) { var _ref$motionEnter = _ref.motionEnter, motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter, _ref$motionAppear = _ref.motionAppear, motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear, _ref$motionLeave = _ref.motionLeave, motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave, motionDeadline = _ref.motionDeadline, motionLeaveImmediately = _ref.motionLeaveImmediately, onAppearPrepare = _ref.onAppearPrepare, onEnterPrepare = _ref.onEnterPrepare, onLeavePrepare = _ref.onLeavePrepare, onAppearStart = _ref.onAppearStart, onEnterStart = _ref.onEnterStart, onLeaveStart = _ref.onLeaveStart, onAppearActive = _ref.onAppearActive, onEnterActive = _ref.onEnterActive, onLeaveActive = _ref.onLeaveActive, onAppearEnd = _ref.onAppearEnd, onEnterEnd = _ref.onEnterEnd, onLeaveEnd = _ref.onLeaveEnd, onVisibleChanged = _ref.onVisibleChanged; // Used for outer render usage to avoid `visible: false & status: none` to render nothing var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2), asyncVisible = _useState2[0], setAsyncVisible = _useState2[1]; var _useSyncState = (0,rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__["default"])(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE), _useSyncState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useSyncState, 2), getStatus = _useSyncState2[0], setStatus = _useSyncState2[1]; var _useState3 = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(null), _useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2), style = _useState4[0], setStyle = _useState4[1]; var currentStatus = getStatus(); var mountedRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false); var deadlineRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null); // =========================== Dom Node =========================== function getDomElement() { return getElement(); } // ========================== Motion End ========================== var activeRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false); /** * Clean up status & style */ function updateMotionEndStatus() { setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE); setStyle(null, true); } var onInternalMotionEnd = (0,rc_util__WEBPACK_IMPORTED_MODULE_3__.useEvent)(function (event) { var status = getStatus(); // Do nothing since not in any transition status. // This may happen when `motionDeadline` trigger. if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) { return; } var element = getDomElement(); if (event && !event.deadline && event.target !== element) { // event exists // not initiated by deadline // transitionEnd not fired by inner elements return; } var currentActive = activeRef.current; var canEnd; if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && currentActive) { canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event); } else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && currentActive) { canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event); } else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && currentActive) { canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event); } // Only update status when `canEnd` and not destroyed if (currentActive && canEnd !== false) { updateMotionEndStatus(); } }); var _useDomMotionEvents = (0,_useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__["default"])(onInternalMotionEnd), _useDomMotionEvents2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useDomMotionEvents, 1), patchMotionEvents = _useDomMotionEvents2[0]; // ============================= Step ============================= var getEventHandlers = function getEventHandlers(targetStatus) { switch (targetStatus) { case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR: return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onAppearPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onAppearStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onAppearActive); case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER: return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onEnterPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onEnterStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onEnterActive); case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE: return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onLeavePrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onLeaveStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onLeaveActive); default: return {}; } }; var eventHandlers = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () { return getEventHandlers(currentStatus); }, [currentStatus]); var _useStepQueue = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__["default"])(currentStatus, !supportMotion, function (newStep) { // Only prepare step can be skip if (newStep === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE) { var onPrepare = eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE]; if (!onPrepare) { return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.SkipStep; } return onPrepare(getDomElement()); } // Rest step is sync update if (step in eventHandlers) { var _eventHandlers$step; setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null); } if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE && currentStatus !== _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) { // Patch events when motion needed patchMotionEvents(getDomElement()); if (motionDeadline > 0) { clearTimeout(deadlineRef.current); deadlineRef.current = setTimeout(function () { onInternalMotionEnd({ deadline: true }); }, motionDeadline); } } if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARED) { updateMotionEndStatus(); } return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.DoStep; }), _useStepQueue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStepQueue, 2), startStep = _useStepQueue2[0], step = _useStepQueue2[1]; var active = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__.isActive)(step); activeRef.current = active; // ============================ Status ============================ var visibleRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null); // Update with new status (0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__["default"])(function () { // When use Suspense, the `visible` will repeat trigger, // But not real change of the `visible`, we need to skip it. // https://github.com/ant-design/ant-design/issues/44379 if (mountedRef.current && visibleRef.current === visible) { return; } setAsyncVisible(visible); var isMounted = mountedRef.current; mountedRef.current = true; // if (!supportMotion) { // return; // } var nextStatus; // Appear if (!isMounted && visible && motionAppear) { nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR; } // Enter if (isMounted && visible && motionEnter) { nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER; } // Leave if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) { nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE; } var nextEventHandlers = getEventHandlers(nextStatus); // Update to next status if (nextStatus && (supportMotion || nextEventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE])) { setStatus(nextStatus); startStep(); } else { // Set back in case no motion but prev status has prepare step setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE); } visibleRef.current = visible; }, [visible]); // ============================ Effect ============================ // Reset when motion changed (0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () { if ( // Cancel appear currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && !motionAppear || // Cancel enter currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && !motionEnter || // Cancel leave currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && !motionLeave) { setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE); } }, [motionAppear, motionEnter, motionLeave]); (0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () { return function () { mountedRef.current = false; clearTimeout(deadlineRef.current); }; }, []); // Trigger `onVisibleChanged` var firstMountChangeRef = react__WEBPACK_IMPORTED_MODULE_6__.useRef(false); (0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () { // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged if (asyncVisible) { firstMountChangeRef.current = true; } if (asyncVisible !== undefined && currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) { // Skip first render is invisible since it's nothing changed if (firstMountChangeRef.current || asyncVisible) { onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible); } firstMountChangeRef.current = true; } }, [asyncVisible, currentStatus]); // ============================ Styles ============================ var mergedStyle = style; if (eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE] && step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START) { mergedStyle = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ transition: 'none' }, mergedStyle); } return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible]; } /***/ }), /***/ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-motion/es/hooks/useStepQueue.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ DoStep: () => (/* binding */ DoStep), /* harmony export */ SkipStep: () => (/* binding */ SkipStep), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ isActive: () => (/* binding */ isActive) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js"); /* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js"); /* harmony import */ var _useNextFrame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useNextFrame */ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js"); var FULL_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_START, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED]; var SIMPLE_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARED]; /** Skip current step */ var SkipStep = false; /** Current step should be update in */ var DoStep = true; function isActive(step) { return step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE || step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (status, prepareOnly, callback) { var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__["default"])(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2), step = _useState2[0], setStep = _useState2[1]; var _useNextFrame = (0,_useNextFrame__WEBPACK_IMPORTED_MODULE_5__["default"])(), _useNextFrame2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useNextFrame, 2), nextFrame = _useNextFrame2[0], cancelNextFrame = _useNextFrame2[1]; function startQueue() { setStep(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, true); } var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE; (0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["default"])(function () { if (step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE && step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED) { var index = STEP_QUEUE.indexOf(step); var nextStep = STEP_QUEUE[index + 1]; var result = callback(step); if (result === SkipStep) { // Skip when no needed setStep(nextStep, true); } else if (nextStep) { // Do as frame for step update nextFrame(function (info) { function doNext() { // Skip since current queue is ood if (info.isCanceled()) return; setStep(nextStep, true); } if (result === true) { doNext(); } else { // Only promise should be async Promise.resolve(result).then(doNext); } }); } } }, [status, step]); react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () { return function () { cancelNextFrame(); }; }, []); return [startQueue, step]; }); /***/ }), /***/ "../../../node_modules/rc-motion/es/index.js": /*!***************************************************!*\ !*** ../../../node_modules/rc-motion/es/index.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CSSMotionList: () => (/* reexport safe */ _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ Provider: () => (/* reexport safe */ _context__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js"); /* harmony import */ var _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSMotionList */ "../../../node_modules/rc-motion/es/CSSMotionList.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_CSSMotion__WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "../../../node_modules/rc-motion/es/interface.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-motion/es/interface.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ STATUS_APPEAR: () => (/* binding */ STATUS_APPEAR), /* harmony export */ STATUS_ENTER: () => (/* binding */ STATUS_ENTER), /* harmony export */ STATUS_LEAVE: () => (/* binding */ STATUS_LEAVE), /* harmony export */ STATUS_NONE: () => (/* binding */ STATUS_NONE), /* harmony export */ STEP_ACTIVATED: () => (/* binding */ STEP_ACTIVATED), /* harmony export */ STEP_ACTIVE: () => (/* binding */ STEP_ACTIVE), /* harmony export */ STEP_NONE: () => (/* binding */ STEP_NONE), /* harmony export */ STEP_PREPARE: () => (/* binding */ STEP_PREPARE), /* harmony export */ STEP_PREPARED: () => (/* binding */ STEP_PREPARED), /* harmony export */ STEP_START: () => (/* binding */ STEP_START) /* harmony export */ }); var STATUS_NONE = 'none'; var STATUS_APPEAR = 'appear'; var STATUS_ENTER = 'enter'; var STATUS_LEAVE = 'leave'; var STEP_NONE = 'none'; var STEP_PREPARE = 'prepare'; var STEP_START = 'start'; var STEP_ACTIVE = 'active'; var STEP_ACTIVATED = 'end'; /** * Used for disabled motion case. * Prepare stage will still work but start & active will be skipped. */ var STEP_PREPARED = 'prepared'; /***/ }), /***/ "../../../node_modules/rc-motion/es/util/diff.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-motion/es/util/diff.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ STATUS_ADD: () => (/* binding */ STATUS_ADD), /* harmony export */ STATUS_KEEP: () => (/* binding */ STATUS_KEEP), /* harmony export */ STATUS_REMOVE: () => (/* binding */ STATUS_REMOVE), /* harmony export */ STATUS_REMOVED: () => (/* binding */ STATUS_REMOVED), /* harmony export */ diffKeys: () => (/* binding */ diffKeys), /* harmony export */ parseKeys: () => (/* binding */ parseKeys), /* harmony export */ wrapKeyToObject: () => (/* binding */ wrapKeyToObject) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); var STATUS_ADD = 'add'; var STATUS_KEEP = 'keep'; var STATUS_REMOVE = 'remove'; var STATUS_REMOVED = 'removed'; function wrapKeyToObject(key) { var keyObj; if (key && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(key) === 'object' && 'key' in key) { keyObj = key; } else { keyObj = { key: key }; } return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, { key: String(keyObj.key) }); } function parseKeys() { var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return keys.map(wrapKeyToObject); } function diffKeys() { var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var list = []; var currentIndex = 0; var currentLen = currentKeys.length; var prevKeyObjects = parseKeys(prevKeys); var currentKeyObjects = parseKeys(currentKeys); // Check prev keys to insert or keep prevKeyObjects.forEach(function (keyObj) { var hit = false; for (var i = currentIndex; i < currentLen; i += 1) { var currentKeyObj = currentKeyObjects[i]; if (currentKeyObj.key === keyObj.key) { // New added keys should add before current key if (currentIndex < i) { list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, { status: STATUS_ADD }); })); currentIndex = i; } list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, currentKeyObj), {}, { status: STATUS_KEEP })); currentIndex += 1; hit = true; break; } } // If not hit, it means key is removed if (!hit) { list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, { status: STATUS_REMOVE })); } }); // Add rest to the list if (currentIndex < currentLen) { list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, { status: STATUS_ADD }); })); } /** * Merge same key when it remove and add again: * [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep] */ var keys = {}; list.forEach(function (_ref) { var key = _ref.key; keys[key] = (keys[key] || 0) + 1; }); var duplicatedKeys = Object.keys(keys).filter(function (key) { return keys[key] > 1; }); duplicatedKeys.forEach(function (matchKey) { // Remove `STATUS_REMOVE` node. list = list.filter(function (_ref2) { var key = _ref2.key, status = _ref2.status; return key !== matchKey || status !== STATUS_REMOVE; }); // Update `STATUS_ADD` to `STATUS_KEEP` list.forEach(function (node) { if (node.key === matchKey) { // eslint-disable-next-line no-param-reassign node.status = STATUS_KEEP; } }); }); return list; } /***/ }), /***/ "../../../node_modules/rc-motion/es/util/motion.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-motion/es/util/motion.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ animationEndName: () => (/* binding */ animationEndName), /* harmony export */ getTransitionName: () => (/* binding */ getTransitionName), /* harmony export */ getVendorPrefixedEventName: () => (/* binding */ getVendorPrefixedEventName), /* harmony export */ getVendorPrefixes: () => (/* binding */ getVendorPrefixes), /* harmony export */ supportTransition: () => (/* binding */ supportTransition), /* harmony export */ transitionEndName: () => (/* binding */ transitionEndName) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js"); // ================= Transition ================= // Event wrapper. Copy from react source code function makePrefixMap(styleProp, eventName) { var prefixes = {}; prefixes[styleProp.toLowerCase()] = eventName.toLowerCase(); prefixes["Webkit".concat(styleProp)] = "webkit".concat(eventName); prefixes["Moz".concat(styleProp)] = "moz".concat(eventName); prefixes["ms".concat(styleProp)] = "MS".concat(eventName); prefixes["O".concat(styleProp)] = "o".concat(eventName.toLowerCase()); return prefixes; } function getVendorPrefixes(domSupport, win) { var prefixes = { animationend: makePrefixMap('Animation', 'AnimationEnd'), transitionend: makePrefixMap('Transition', 'TransitionEnd') }; if (domSupport) { if (!('AnimationEvent' in win)) { delete prefixes.animationend.animation; } if (!('TransitionEvent' in win)) { delete prefixes.transitionend.transition; } } return prefixes; } var vendorPrefixes = getVendorPrefixes((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])(), typeof window !== 'undefined' ? window : {}); var style = {}; if ((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])()) { var _document$createEleme = document.createElement('div'); style = _document$createEleme.style; } var prefixedEventNames = {}; function getVendorPrefixedEventName(eventName) { if (prefixedEventNames[eventName]) { return prefixedEventNames[eventName]; } var prefixMap = vendorPrefixes[eventName]; if (prefixMap) { var stylePropList = Object.keys(prefixMap); var len = stylePropList.length; for (var i = 0; i < len; i += 1) { var styleProp = stylePropList[i]; if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) { prefixedEventNames[eventName] = prefixMap[styleProp]; return prefixedEventNames[eventName]; } } } return ''; } var internalAnimationEndName = getVendorPrefixedEventName('animationend'); var internalTransitionEndName = getVendorPrefixedEventName('transitionend'); var supportTransition = !!(internalAnimationEndName && internalTransitionEndName); var animationEndName = internalAnimationEndName || 'animationend'; var transitionEndName = internalTransitionEndName || 'transitionend'; function getTransitionName(transitionName, transitionType) { if (!transitionName) return null; if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(transitionName) === 'object') { var type = transitionType.replace(/-\w/g, function (match) { return match[1].toUpperCase(); }); return transitionName[type]; } return "".concat(transitionName, "-").concat(transitionType); } /***/ }), /***/ "../../../node_modules/rc-notification/es/Notice.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-notification/es/Notice.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js"); var Notify = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.forwardRef(function (props, ref) { var prefixCls = props.prefixCls, style = props.style, className = props.className, _props$duration = props.duration, duration = _props$duration === void 0 ? 4.5 : _props$duration, showProgress = props.showProgress, _props$pauseOnHover = props.pauseOnHover, pauseOnHover = _props$pauseOnHover === void 0 ? true : _props$pauseOnHover, eventKey = props.eventKey, content = props.content, closable = props.closable, _props$closeIcon = props.closeIcon, closeIcon = _props$closeIcon === void 0 ? 'x' : _props$closeIcon, divProps = props.props, onClick = props.onClick, onNoticeClose = props.onNoticeClose, times = props.times, forcedHovering = props.hovering; var _React$useState = react__WEBPACK_IMPORTED_MODULE_6__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), hovering = _React$useState2[0], setHovering = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2), percent = _React$useState4[0], setPercent = _React$useState4[1]; var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2), spentTime = _React$useState6[0], setSpentTime = _React$useState6[1]; var mergedHovering = forcedHovering || hovering; var mergedShowProgress = duration > 0 && showProgress; // ======================== Close ========================= var onInternalClose = function onInternalClose() { onNoticeClose(eventKey); }; var onCloseKeyDown = function onCloseKeyDown(e) { if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__["default"].ENTER) { onInternalClose(); } }; // ======================== Effect ======================== react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () { if (!mergedHovering && duration > 0) { var start = Date.now() - spentTime; var timeout = setTimeout(function () { onInternalClose(); }, duration * 1000 - spentTime); return function () { if (pauseOnHover) { clearTimeout(timeout); } setSpentTime(Date.now() - start); }; } // eslint-disable-next-line react-hooks/exhaustive-deps }, [duration, mergedHovering, times]); react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () { if (!mergedHovering && mergedShowProgress && (pauseOnHover || spentTime === 0)) { var start = performance.now(); var animationFrame; var calculate = function calculate() { cancelAnimationFrame(animationFrame); animationFrame = requestAnimationFrame(function (timestamp) { var runtime = timestamp + spentTime - start; var progress = Math.min(runtime / (duration * 1000), 1); setPercent(progress * 100); if (progress < 1) { calculate(); } }); }; calculate(); return function () { if (pauseOnHover) { cancelAnimationFrame(animationFrame); } }; } // eslint-disable-next-line react-hooks/exhaustive-deps }, [duration, spentTime, mergedHovering, mergedShowProgress, times]); // ======================== Closable ======================== var closableObj = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () { if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(closable) === 'object' && closable !== null) { return closable; } if (closable) { return { closeIcon: closeIcon }; } return {}; }, [closable, closeIcon]); var ariaProps = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__["default"])(closableObj, true); // ======================== Progress ======================== var validPercent = 100 - (!percent || percent < 0 ? 0 : percent > 100 ? 100 : percent); // ======================== Render ======================== var noticePrefixCls = "".concat(prefixCls, "-notice"); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, divProps, { ref: ref, className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(noticePrefixCls, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(noticePrefixCls, "-closable"), closable)), style: style, onMouseEnter: function onMouseEnter(e) { var _divProps$onMouseEnte; setHovering(true); divProps === null || divProps === void 0 || (_divProps$onMouseEnte = divProps.onMouseEnter) === null || _divProps$onMouseEnte === void 0 || _divProps$onMouseEnte.call(divProps, e); }, onMouseLeave: function onMouseLeave(e) { var _divProps$onMouseLeav; setHovering(false); divProps === null || divProps === void 0 || (_divProps$onMouseLeav = divProps.onMouseLeave) === null || _divProps$onMouseLeav === void 0 || _divProps$onMouseLeav.call(divProps, e); }, onClick: onClick }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: "".concat(noticePrefixCls, "-content") }, content), closable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("a", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ tabIndex: 0, className: "".concat(noticePrefixCls, "-close"), onKeyDown: onCloseKeyDown, "aria-label": "Close" }, ariaProps, { onClick: function onClick(e) { e.preventDefault(); e.stopPropagation(); onInternalClose(); } }), closableObj.closeIcon), mergedShowProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("progress", { className: "".concat(noticePrefixCls, "-progress"), max: "100", value: validPercent }, validPercent + '%')); }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notify); /***/ }), /***/ "../../../node_modules/rc-notification/es/NoticeList.js": /*!**************************************************************!*\ !*** ../../../node_modules/rc-notification/es/NoticeList.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js"); /* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js"); /* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js"); /* harmony import */ var _hooks_useStack__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStack */ "../../../node_modules/rc-notification/es/hooks/useStack.js"); var _excluded = ["className", "style", "classNames", "styles"]; var NoticeList = function NoticeList(props) { var configList = props.configList, placement = props.placement, prefixCls = props.prefixCls, className = props.className, style = props.style, motion = props.motion, onAllNoticeRemoved = props.onAllNoticeRemoved, onNoticeClose = props.onNoticeClose, stackConfig = props.stack; var _useContext = (0,react__WEBPACK_IMPORTED_MODULE_6__.useContext)(_NotificationProvider__WEBPACK_IMPORTED_MODULE_10__.NotificationContext), ctxCls = _useContext.classNames; var dictRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)({}); var _useState = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)(null), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState, 2), latestNotice = _useState2[0], setLatestNotice = _useState2[1]; var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)([]), _useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState3, 2), hoverKeys = _useState4[0], setHoverKeys = _useState4[1]; var keys = configList.map(function (config) { return { config: config, key: String(config.key) }; }); var _useStack = (0,_hooks_useStack__WEBPACK_IMPORTED_MODULE_11__["default"])(stackConfig), _useStack2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useStack, 2), stack = _useStack2[0], _useStack2$ = _useStack2[1], offset = _useStack2$.offset, threshold = _useStack2$.threshold, gap = _useStack2$.gap; var expanded = stack && (hoverKeys.length > 0 || keys.length <= threshold); var placementMotion = typeof motion === 'function' ? motion(placement) : motion; // Clean hover key (0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () { if (stack && hoverKeys.length > 1) { setHoverKeys(function (prev) { return prev.filter(function (key) { return keys.some(function (_ref) { var dataKey = _ref.key; return key === dataKey; }); }); }); } }, [hoverKeys, keys, stack]); // Force update latest notice (0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () { var _keys; if (stack && dictRef.current[(_keys = keys[keys.length - 1]) === null || _keys === void 0 ? void 0 : _keys.key]) { var _keys2; setLatestNotice(dictRef.current[(_keys2 = keys[keys.length - 1]) === null || _keys2 === void 0 ? void 0 : _keys2.key]); } }, [keys, stack]); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(rc_motion__WEBPACK_IMPORTED_MODULE_8__.CSSMotionList, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ key: placement, className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(prefixCls, "".concat(prefixCls, "-").concat(placement), ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.list, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])({}, "".concat(prefixCls, "-stack"), !!stack), "".concat(prefixCls, "-stack-expanded"), expanded)), style: style, keys: keys, motionAppear: true }, placementMotion, { onAllRemoved: function onAllRemoved() { onAllNoticeRemoved(placement); } }), function (_ref2, nodeRef) { var config = _ref2.config, motionClassName = _ref2.className, motionStyle = _ref2.style, motionIndex = _ref2.index; var _ref3 = config, key = _ref3.key, times = _ref3.times; var strKey = String(key); var _ref4 = config, configClassName = _ref4.className, configStyle = _ref4.style, configClassNames = _ref4.classNames, configStyles = _ref4.styles, restConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref4, _excluded); var dataIndex = keys.findIndex(function (item) { return item.key === strKey; }); // If dataIndex is -1, that means this notice has been removed in data, but still in dom // Should minus (motionIndex - 1) to get the correct index because keys.length is not the same as dom length var stackStyle = {}; if (stack) { var index = keys.length - 1 - (dataIndex > -1 ? dataIndex : motionIndex - 1); var transformX = placement === 'top' || placement === 'bottom' ? '-50%' : '0'; if (index > 0) { var _dictRef$current$strK, _dictRef$current$strK2, _dictRef$current$strK3; stackStyle.height = expanded ? (_dictRef$current$strK = dictRef.current[strKey]) === null || _dictRef$current$strK === void 0 ? void 0 : _dictRef$current$strK.offsetHeight : latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetHeight; // Transform var verticalOffset = 0; for (var i = 0; i < index; i++) { var _dictRef$current$keys; verticalOffset += ((_dictRef$current$keys = dictRef.current[keys[keys.length - 1 - i].key]) === null || _dictRef$current$keys === void 0 ? void 0 : _dictRef$current$keys.offsetHeight) + gap; } var transformY = (expanded ? verticalOffset : index * offset) * (placement.startsWith('top') ? 1 : -1); var scaleX = !expanded && latestNotice !== null && latestNotice !== void 0 && latestNotice.offsetWidth && (_dictRef$current$strK2 = dictRef.current[strKey]) !== null && _dictRef$current$strK2 !== void 0 && _dictRef$current$strK2.offsetWidth ? ((latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetWidth) - offset * 2 * (index < 3 ? index : 3)) / ((_dictRef$current$strK3 = dictRef.current[strKey]) === null || _dictRef$current$strK3 === void 0 ? void 0 : _dictRef$current$strK3.offsetWidth) : 1; stackStyle.transform = "translate3d(".concat(transformX, ", ").concat(transformY, "px, 0) scaleX(").concat(scaleX, ")"); } else { stackStyle.transform = "translate3d(".concat(transformX, ", 0, 0)"); } } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", { ref: nodeRef, className: classnames__WEBPACK_IMPORTED_MODULE_7___default()("".concat(prefixCls, "-notice-wrapper"), motionClassName, configClassNames === null || configClassNames === void 0 ? void 0 : configClassNames.wrapper), style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, motionStyle), stackStyle), configStyles === null || configStyles === void 0 ? void 0 : configStyles.wrapper), onMouseEnter: function onMouseEnter() { return setHoverKeys(function (prev) { return prev.includes(strKey) ? prev : [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(prev), [strKey]); }); }, onMouseLeave: function onMouseLeave() { return setHoverKeys(function (prev) { return prev.filter(function (k) { return k !== strKey; }); }); } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_Notice__WEBPACK_IMPORTED_MODULE_9__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restConfig, { ref: function ref(node) { if (dataIndex > -1) { dictRef.current[strKey] = node; } else { delete dictRef.current[strKey]; } }, prefixCls: prefixCls, classNames: configClassNames, styles: configStyles, className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(configClassName, ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.notice), style: configStyle, times: times, key: key, eventKey: key, onNoticeClose: onNoticeClose, hovering: stack && hoverKeys.length > 0 }))); }); }; if (true) { NoticeList.displayName = 'NoticeList'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoticeList); /***/ }), /***/ "../../../node_modules/rc-notification/es/NotificationProvider.js": /*!************************************************************************!*\ !*** ../../../node_modules/rc-notification/es/NotificationProvider.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ NotificationContext: () => (/* binding */ NotificationContext), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var NotificationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createContext({}); var NotificationProvider = function NotificationProvider(_ref) { var children = _ref.children, classNames = _ref.classNames; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NotificationContext.Provider, { value: { classNames: classNames } }, children); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationProvider); /***/ }), /***/ "../../../node_modules/rc-notification/es/Notifications.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-notification/es/Notifications.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js"); /* harmony import */ var _NoticeList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NoticeList */ "../../../node_modules/rc-notification/es/NoticeList.js"); // ant-notification ant-notification-topRight var Notifications = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function (props, ref) { var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-notification' : _props$prefixCls, container = props.container, motion = props.motion, maxCount = props.maxCount, className = props.className, style = props.style, onAllRemoved = props.onAllRemoved, stack = props.stack, renderNotifications = props.renderNotifications; var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState([]), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), configList = _React$useState2[0], setConfigList = _React$useState2[1]; // ======================== Close ========================= var onNoticeClose = function onNoticeClose(key) { var _config$onClose; // Trigger close event var config = configList.find(function (item) { return item.key === key; }); config === null || config === void 0 || (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config); setConfigList(function (list) { return list.filter(function (item) { return item.key !== key; }); }); }; // ========================= Refs ========================= react__WEBPACK_IMPORTED_MODULE_3__.useImperativeHandle(ref, function () { return { open: function open(config) { setConfigList(function (list) { var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(list); // Replace if exist var index = clone.findIndex(function (item) { return item.key === config.key; }); var innerConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, config); if (index >= 0) { var _list$index; innerConfig.times = (((_list$index = list[index]) === null || _list$index === void 0 ? void 0 : _list$index.times) || 0) + 1; clone[index] = innerConfig; } else { innerConfig.times = 0; clone.push(innerConfig); } if (maxCount > 0 && clone.length > maxCount) { clone = clone.slice(-maxCount); } return clone; }); }, close: function close(key) { onNoticeClose(key); }, destroy: function destroy() { setConfigList([]); } }; }); // ====================== Placements ====================== var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState({}), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState3, 2), placements = _React$useState4[0], setPlacements = _React$useState4[1]; react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { var nextPlacements = {}; configList.forEach(function (config) { var _config$placement = config.placement, placement = _config$placement === void 0 ? 'topRight' : _config$placement; if (placement) { nextPlacements[placement] = nextPlacements[placement] || []; nextPlacements[placement].push(config); } }); // Fill exist placements to avoid empty list causing remove without motion Object.keys(placements).forEach(function (placement) { nextPlacements[placement] = nextPlacements[placement] || []; }); setPlacements(nextPlacements); }, [configList]); // Clean up container if all notices fade out var onAllNoticeRemoved = function onAllNoticeRemoved(placement) { setPlacements(function (originPlacements) { var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, originPlacements); var list = clone[placement] || []; if (!list.length) { delete clone[placement]; } return clone; }); }; // Effect tell that placements is empty now var emptyRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false); react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { if (Object.keys(placements).length > 0) { emptyRef.current = true; } else if (emptyRef.current) { // Trigger only when from exist to empty onAllRemoved === null || onAllRemoved === void 0 || onAllRemoved(); emptyRef.current = false; } }, [placements]); // ======================== Render ======================== if (!container) { return null; } var placementList = Object.keys(placements); return /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.createPortal)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null, placementList.map(function (placement) { var placementConfigList = placements[placement]; var list = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_NoticeList__WEBPACK_IMPORTED_MODULE_5__["default"], { key: placement, configList: placementConfigList, placement: placement, prefixCls: prefixCls, className: className === null || className === void 0 ? void 0 : className(placement), style: style === null || style === void 0 ? void 0 : style(placement), motion: motion, onNoticeClose: onNoticeClose, onAllNoticeRemoved: onAllNoticeRemoved, stack: stack }); return renderNotifications ? renderNotifications(list, { prefixCls: prefixCls, key: placement }) : list; })), container); }); if (true) { Notifications.displayName = 'Notifications'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notifications); /***/ }), /***/ "../../../node_modules/rc-notification/es/hooks/useNotification.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-notification/es/hooks/useNotification.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useNotification) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _Notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Notifications */ "../../../node_modules/rc-notification/es/Notifications.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); var _excluded = ["getContainer", "motion", "prefixCls", "maxCount", "className", "style", "onAllRemoved", "stack", "renderNotifications"]; var defaultGetContainer = function defaultGetContainer() { return document.body; }; var uniqueKey = 0; function mergeConfig() { var clone = {}; for (var _len = arguments.length, objList = new Array(_len), _key = 0; _key < _len; _key++) { objList[_key] = arguments[_key]; } objList.forEach(function (obj) { if (obj) { Object.keys(obj).forEach(function (key) { var val = obj[key]; if (val !== undefined) { clone[key] = val; } }); } }); return clone; } function useNotification() { var rootConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _rootConfig$getContai = rootConfig.getContainer, getContainer = _rootConfig$getContai === void 0 ? defaultGetContainer : _rootConfig$getContai, motion = rootConfig.motion, prefixCls = rootConfig.prefixCls, maxCount = rootConfig.maxCount, className = rootConfig.className, style = rootConfig.style, onAllRemoved = rootConfig.onAllRemoved, stack = rootConfig.stack, renderNotifications = rootConfig.renderNotifications, shareConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(rootConfig, _excluded); var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2), container = _React$useState2[0], setContainer = _React$useState2[1]; var notificationsRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(); var contextHolder = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Notifications__WEBPACK_IMPORTED_MODULE_4__["default"], { container: container, ref: notificationsRef, prefixCls: prefixCls, motion: motion, maxCount: maxCount, className: className, style: style, onAllRemoved: onAllRemoved, stack: stack, renderNotifications: renderNotifications }); var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState([]), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2), taskQueue = _React$useState4[0], setTaskQueue = _React$useState4[1]; var open = (0,rc_util__WEBPACK_IMPORTED_MODULE_5__.useEvent)(function (config) { var mergedConfig = mergeConfig(shareConfig, config); if (mergedConfig.key === null || mergedConfig.key === undefined) { mergedConfig.key = "rc-notification-".concat(uniqueKey); uniqueKey += 1; } setTaskQueue(function (queue) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{ type: 'open', config: mergedConfig }]); }); }); // ========================= Refs ========================= var api = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return { open: open, close: function close(key) { setTaskQueue(function (queue) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{ type: 'close', key: key }]); }); }, destroy: function destroy() { setTaskQueue(function (queue) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{ type: 'destroy' }]); }); } }; }, []); // ======================= Container ====================== // React 18 should all in effect that we will check container in each render // Which means getContainer should be stable. react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { setContainer(getContainer()); }); // ======================== Effect ======================== react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { // Flush task when node ready if (notificationsRef.current && taskQueue.length) { taskQueue.forEach(function (task) { switch (task.type) { case 'open': notificationsRef.current.open(task.config); break; case 'close': notificationsRef.current.close(task.key); break; case 'destroy': notificationsRef.current.destroy(); break; } }); // https://github.com/ant-design/ant-design/issues/52590 // React `startTransition` will run once `useEffect` but many times `setState`, // So `setTaskQueue` with filtered array will cause infinite loop. // We cache the first match queue instead. var oriTaskQueue; var tgtTaskQueue; // React 17 will mix order of effect & setState in async // - open: setState[0] // - effect[0] // - open: setState[1] // - effect setState([]) * here will clean up [0, 1] in React 17 setTaskQueue(function (oriQueue) { if (oriTaskQueue !== oriQueue || !tgtTaskQueue) { oriTaskQueue = oriQueue; tgtTaskQueue = oriQueue.filter(function (task) { return !taskQueue.includes(task); }); } return tgtTaskQueue; }); } }, [taskQueue]); // ======================== Return ======================== return [api, contextHolder]; } /***/ }), /***/ "../../../node_modules/rc-notification/es/hooks/useStack.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-notification/es/hooks/useStack.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); var DEFAULT_OFFSET = 8; var DEFAULT_THRESHOLD = 3; var DEFAULT_GAP = 16; var useStack = function useStack(config) { var result = { offset: DEFAULT_OFFSET, threshold: DEFAULT_THRESHOLD, gap: DEFAULT_GAP }; if (config && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(config) === 'object') { var _config$offset, _config$threshold, _config$gap; result.offset = (_config$offset = config.offset) !== null && _config$offset !== void 0 ? _config$offset : DEFAULT_OFFSET; result.threshold = (_config$threshold = config.threshold) !== null && _config$threshold !== void 0 ? _config$threshold : DEFAULT_THRESHOLD; result.gap = (_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : DEFAULT_GAP; } return [!!config, result]; }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useStack); /***/ }), /***/ "../../../node_modules/rc-notification/es/index.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-notification/es/index.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Notice: () => (/* reexport safe */ _Notice__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ NotificationProvider: () => (/* reexport safe */ _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ useNotification: () => (/* reexport safe */ _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__["default"]) /* harmony export */ }); /* harmony import */ var _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks/useNotification */ "../../../node_modules/rc-notification/es/hooks/useNotification.js"); /* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js"); /* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js"); /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtaW5wdXQtbnVtYmVyX2VzX2luZGV4X2pzLW5vZGVfbW9kdWxlc19yYy1pbnB1dF9saWJfdXRpbHNfY29tbW9uVXRpbHNfLTk5NGJmMy52b2x1bnRlZXJhcGkuNGE4ZDgxODkzOWNkZTcyNzFiZmQuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTBEO0FBQ2M7QUFDaEI7QUFDYztBQUNvQjtBQUMxRjtBQUNBO0FBQ2tIO0FBQ3BGO0FBQ087QUFDb0M7QUFDeEI7QUFDTDtBQUNiO0FBQ1c7QUFDRjtBQUNhO0FBQ1E7QUFDckI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNFQUFjO0FBQzlCO0FBQ0E7QUFDQSx1Q0FBdUMsOENBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDhGQUF3QjtBQUN6QztBQUNBLGlCQUFpQiwwQ0FBWTtBQUM3Qix3QkFBd0IsNENBQWM7QUFDdEMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQSxzQkFBc0IsMENBQVk7QUFDbEMsdUJBQXVCLDBDQUFZO0FBQ25DLG9CQUFvQiwwQ0FBWTs7QUFFaEM7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBYztBQUN2QyxhQUFhLHNFQUFjO0FBQzNCLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLCtDQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsOEVBQWtCLFVBQVUsOEVBQWtCO0FBQ2xFLEdBQUc7O0FBRUg7QUFDQSxxQkFBcUIsK0NBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxzQkFBc0IsMENBQVk7QUFDbEMsd0JBQXdCLCtDQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDJDQUEyQyxtRUFBTzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwRUFBYztBQUN4QjtBQUNBO0FBQ0EsY0FBYyxtRUFBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDRDQUFjO0FBQ3ZDO0FBQ0EsdUVBQXVFLDZFQUFPO0FBQzlFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsMkNBQWE7QUFDaEM7QUFDQSxHQUFHO0FBQ0gsbUJBQW1CLDJDQUFhO0FBQ2hDO0FBQ0EsR0FBRztBQUNILG1CQUFtQiwyQ0FBYTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxxQkFBcUIsMkNBQWE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsbUJBQW1CLDZEQUFTO0FBQzVCLGtCQUFrQixvRkFBYztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNFQUFjLENBQUMsbUVBQU87O0FBRTVDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzRUFBYyxDQUFDLG1FQUFPO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLDREQUFROztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHNFQUFjO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0VBQWMsdUJBQXVCLG1FQUFlO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxzRUFBYztBQUNoRDtBQUNBO0FBQ0Esb0NBQW9DLG1FQUFlO0FBQ25EO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0VBQWM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSw2Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUUsdUZBQXFCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxFQUFFLHVGQUFxQjtBQUN2QixtQkFBbUIsc0VBQWM7QUFDakM7QUFDQSw2QkFBNkIsc0VBQWM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxFQUFFLHVGQUFxQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0Esc0JBQXNCLGlEQUFtQjtBQUN6QztBQUNBLGVBQWUsaURBQUksdUJBQXVCLHFGQUFlLENBQUMscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUM1SDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRywyQkFBMkIsaURBQW1CLENBQUMscURBQVc7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0IsaURBQW1CO0FBQ3RDO0FBQ0EsR0FBRyxlQUFlLGlEQUFtQixVQUFVLDhFQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxTQUFTLDJEQUFVO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNELCtCQUErQiw4Q0FBZ0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEZBQXdCO0FBQ25DLGtCQUFrQiwwQ0FBWTtBQUM5QiwwQkFBMEIsMENBQVk7QUFDdEMsc0JBQXNCLDBDQUFZO0FBQ2xDO0FBQ0E7QUFDQSxNQUFNLDRFQUFZO0FBQ2xCO0FBQ0E7QUFDQSxFQUFFLHVEQUF5QjtBQUMzQixXQUFXLGtFQUFXO0FBQ3RCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILHNCQUFzQixpREFBbUIsQ0FBQywrQ0FBUztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUcsZUFBZSxpREFBbUIsc0JBQXNCLDhFQUFRO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNELElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBLGlFQUFlLFdBQVcsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdqQmdDO0FBQ2M7QUFDeEU7QUFDK0I7QUFDSztBQUNlO0FBQ2xCOztBQUVqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUNBQVk7QUFDbkMsaUJBQWlCLHlDQUFZO0FBQzdCLGtCQUFrQix5Q0FBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNEQUFHO0FBQ2xCLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxpQkFBaUIsc0VBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQVUsdURBQXVELHFGQUFlLEdBQUc7QUFDdkcsc0JBQXNCLGlEQUFVLHlEQUF5RCxxRkFBZSxHQUFHOztBQUUzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsMERBQUc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CO0FBQ3pDO0FBQ0EsR0FBRyxlQUFlLGdEQUFtQixTQUFTLDhFQUFRLEdBQUc7QUFDekQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHLDBCQUEwQixnREFBbUI7QUFDaEQ7QUFDQTtBQUNBLEdBQUcsaUJBQWlCLGdEQUFtQixTQUFTLDhFQUFRLEdBQUc7QUFDM0Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHLDRCQUE0QixnREFBbUI7QUFDbEQ7QUFDQTtBQUNBLEdBQUc7QUFDSCxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZHK0I7QUFDVTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2YscUJBQXFCLDZDQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLFFBQVEsOERBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUQwQztBQUNUOztBQUVqQztBQUNBO0FBQ0E7QUFDQSxpRUFBZ0I7QUFDaEIsY0FBYyw2Q0FBTTtBQUNwQjtBQUNBLElBQUksc0RBQUc7QUFDUDtBQUNBLEVBQUUsZ0RBQVM7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esb0JBQW9CLDBEQUFHO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7Ozs7Ozs7QUNwQnVDO0FBQ3hDLGlFQUFlLG9EQUFXLEU7Ozs7Ozs7Ozs7Ozs7OztBQ0R1QztBQUMxRDtBQUNQLDJDQUEyQyxtRUFBTyxTQUFTLHNFQUFVO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxzRUFBVTtBQUNuQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1JxRTtBQUNYO0FBQ2M7QUFDaEI7QUFDMUI7QUFDc0I7QUFDWTtBQUNoRSw2QkFBNkIsdURBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsNkNBQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1FQUFlO0FBQ2hDLDZCQUE2QixtREFBWTtBQUN6QztBQUNBLGVBQWUsaURBQUk7QUFDbkIsR0FBRzs7QUFFSDtBQUNBLGlCQUFpQiw2Q0FBTTtBQUN2QixFQUFFLGdFQUF5QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZFQUFPO0FBQzVCLCtCQUErQiwwREFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxtQkFBbUIsaURBQUksZUFBZSxxRkFBZSxDQUFDLHFGQUFlLEdBQUc7QUFDeEUsT0FBTztBQUNQO0FBQ0E7QUFDQSwwQkFBMEIsaURBQUksd0JBQXdCLHFGQUFlLENBQUMscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUN4SSw0REFBNEQsMERBQW1CO0FBQy9FLGlCQUFpQixpREFBSTtBQUNyQjtBQUNBLEtBQUs7QUFDTCwyQkFBMkIsMERBQW1CLHdCQUF3Qiw4RUFBUTtBQUM5RTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLLDBCQUEwQiwwREFBbUI7QUFDbEQsaUJBQWlCLGlEQUFJO0FBQ3JCO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsTUFBTSw0REFBUTtBQUNkO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxpREFBSTtBQUNyQywrQkFBK0IsaURBQUksa0JBQWtCLHFGQUFlLEdBQUc7O0FBRXZFO0FBQ0E7QUFDQSwyQkFBMkIsMERBQW1CO0FBQzlDO0FBQ0E7QUFDQSxLQUFLLGVBQWUsMERBQW1CO0FBQ3ZDO0FBQ0EsS0FBSyw4QkFBOEIsMERBQW1CO0FBQ3REO0FBQ0EsS0FBSyxvREFBb0QsMERBQW1CO0FBQzVFO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0Esc0JBQXNCLHlEQUFrQjtBQUN4QyxlQUFlLGlEQUFJO0FBQ25CLFdBQVcsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHO0FBQ3pDO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxpRUFBZSxTQUFTLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakk2QztBQUNYO0FBQ2M7QUFDTTtBQUNSO0FBQ29CO0FBQzFGO0FBQzhCO0FBQytCO0FBQzFCO0FBQ3lEO0FBQ3hEO0FBQ0k7QUFDNEI7QUFDcEUseUJBQXlCLGlEQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhGQUF3QjtBQUNuQyxrQkFBa0IsK0NBQVE7QUFDMUIsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQSx1QkFBdUIsNkNBQU07QUFDN0IsbUJBQW1CLDZDQUFNO0FBQ3pCLGlCQUFpQiw2Q0FBTTtBQUN2QixrQkFBa0IsNkNBQU07QUFDeEI7QUFDQTtBQUNBLE1BQU0saUVBQVk7QUFDbEI7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QiwyRUFBYztBQUN0QztBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLCtDQUFRO0FBQzNCLGlCQUFpQixvRkFBYztBQUMvQjtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLDREQUFRO0FBQzVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUUsMERBQW1CO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFLGdEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9FQUFlO0FBQ3JCO0FBQ0E7QUFDQSxFQUFFLGdEQUFTO0FBQ1g7QUFDQTtBQUNBLDBKQUEwSix3RkFBa0I7QUFDNUs7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvRUFBZTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDJEQUFJO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwREFBbUIsVUFBVSw4RUFBUTtBQUM3RDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlEQUFJLFlBQVkscUZBQWUsR0FBRztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsMEJBQTBCLDBEQUFtQixDQUFDLHVEQUFjLHlDQUF5QywwREFBbUI7QUFDeEgsbUJBQW1CLGlEQUFJLDZDQUE2QyxxRkFBZSxHQUFHO0FBQ3RGLGVBQWUsb0ZBQWEsR0FBRztBQUMvQixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLDBEQUFtQixDQUFDLG1EQUFTLEVBQUUsOEVBQVEsR0FBRztBQUNoRTtBQUNBLGVBQWUsaURBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNELGlFQUFlLEtBQUssRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxT3NFO0FBQ3JCO0FBQ2I7QUFDeEQ7QUFDK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmLFNBQVMsMENBQWE7QUFDdEI7QUFDQTtBQUNBLDBCQUEwQiw2RUFBTztBQUNqQztBQUNBLG1CQUFtQixvRkFBYSxDQUFDLG9GQUFhLEdBQUc7QUFDakQ7QUFDQTtBQUNBLGFBQWEsOEZBQXdCO0FBQ3JDLFdBQVcsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHLFdBQVc7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQ29DO0FBQ1I7QUFDUDtBQUNyQixpRUFBZSw4Q0FBSyxFOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0hiO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7OztBQzNGYTs7QUFFYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixnQkFBZ0I7QUFDaEIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwR3lDO0FBQ1Y7QUFDaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBZ0IsQ0FBQyx3REFBZTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixnREFBbUIsQ0FBQywrQ0FBSTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnREFBbUIsQ0FBQyw2Q0FBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHLG1DQUFtQyxnREFBbUIsQ0FBQyw2Q0FBUTtBQUNsRTtBQUNBLEdBQUc7QUFDSDtBQUNBLGlFQUFlLFlBQVksRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcERpQjtBQUNiO0FBQ0M7QUFDVTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0RBQW1CLENBQUMscURBQVk7QUFDckU7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsOENBQU87QUFDakM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxzQkFBc0IsZ0RBQW1CLENBQUMsNkRBQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGlFQUFlLGNBQWMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekU2QjtBQUNXO0FBQ0M7QUFDb0I7QUFDMUY7QUFDQTtBQUNvQztBQUNDO0FBQ0Y7QUFDZTtBQUNXO0FBQ3BCO0FBQ0E7QUFDNEQ7QUFDakQ7QUFDTjtBQUNFO0FBQ2xCO0FBQzRKO0FBQzFMLG9DQUFvQyxrREFBVTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGtEQUFxQjtBQUM3RTtBQUNBLG9EQUFvRCxnREFBbUI7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4RkFBd0I7QUFDeEMscUJBQXFCLCtDQUFPO0FBQzVCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLHFCQUFxQiw4Q0FBTTtBQUMzQixvQkFBb0IsOENBQU07QUFDMUIsbUJBQW1CLDhDQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxpRUFBeUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGtCQUFrQixnREFBUTtBQUMxQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLG1CQUFtQixnREFBUTtBQUMzQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLG1CQUFtQixnREFBUTtBQUMzQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLG1CQUFtQixnREFBUTtBQUMzQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLG1CQUFtQixnREFBUTtBQUMzQixrQkFBa0Isb0ZBQWM7QUFDaEM7QUFDQTtBQUNBLG9CQUFvQixnREFBUTtBQUM1QixrQkFBa0Isb0ZBQWM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QiwyRUFBYztBQUN0QztBQUNBO0FBQ0EsS0FBSztBQUNMLHVCQUF1QixvRkFBYztBQUNyQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHVCQUF1QixxREFBYTtBQUNwQztBQUNBLFlBQVksSUFBcUM7QUFDakQsVUFBVSwrREFBTztBQUNqQjtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxzQkFBc0Isb0ZBQWM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIseURBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvRkFBYSxDQUFDLG9GQUFhLEdBQUcsV0FBVztBQUN4RDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTTtBQUNOLGFBQWEsdUVBQU87QUFDcEI7QUFDQTtBQUNBLGVBQWUsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHLGtCQUFrQjtBQUMvRDtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsc0JBQXNCLHFEQUFhO0FBQ25DO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsMEJBQTBCLGtFQUFjO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDBEQUFrQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHlEQUFpQjtBQUN2QixLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDBEQUFPLGlCQUFpQiwwREFBTztBQUNqRDtBQUNBO0FBQ0EsNkJBQTZCLDBEQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUJBQW1CLDBEQUFPO0FBQ2hDO0FBQ0EsTUFBTSxtQkFBbUIsMERBQU87QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qiw4REFBc0I7QUFDbkQsK0JBQStCLDJEQUFtQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLDBEQUFPLE1BQU0sMERBQU8sS0FBSywwREFBTyxPQUFPLDBEQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsMERBQU87QUFDN0U7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQiw4Q0FBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0JBQXNCLDJEQUFtQjtBQUN6QyxlQUFlLGlEQUFVO0FBQ3pCO0FBQ0E7QUFDQSxHQUFHLGVBQWUsMkRBQW1CLENBQUMsbURBQVEsRUFBRSw4RUFBUTtBQUN4RDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxvQ0FBb0MsMkRBQW1CO0FBQzFEO0FBQ0E7QUFDQSxHQUFHLDREQUE0RCwyREFBbUIsQ0FBQyx5REFBZTtBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGVBQWUsMkRBQW1CLENBQUMsd0RBQWM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsZUFBZSwyREFBbUI7QUFDckMsQ0FBQztBQUNELDRCQUE0QixrREFBVTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4RkFBd0I7QUFDbkM7QUFDQSxrQkFBa0IsOENBQU07QUFDeEIsbUJBQW1CLDhDQUFNO0FBQ3pCLEVBQUUsMkRBQW1CO0FBQ3JCO0FBQ0EsV0FBVyxvRkFBYSxDQUFDLG9GQUFhLEdBQUcseUJBQXlCO0FBQ2xFO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSx5QkFBeUIsMkVBQWM7QUFDdkM7QUFDQTtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDJEQUFtQixDQUFDLCtDQUFTO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxlQUFlLDJEQUFtQixtQkFBbUIsOEVBQVE7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Qsa0JBQWtCLGdEQUFNO0FBQ3hCLGlFQUFlLFFBQVEsRTs7Ozs7Ozs7Ozs7Ozs7OztBQ3JjdkI7QUFDK0I7QUFDL0I7QUFDQSxtQ0FBbUMsZ0RBQW1CO0FBQ3RELGlFQUFlLGVBQWUsRTs7Ozs7Ozs7Ozs7Ozs7QUNKOUI7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsTUFBTSxFOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0hpRDtBQUNiO0FBQ3pEO0FBQ0E7QUFDQTtBQUNlO0FBQ2Ysa0JBQWtCLCtDQUFRO0FBQzFCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQSxlQUFlLGtEQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxnREFBUztBQUNYO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7QUMzQmtDO0FBQ2xDLGlFQUFlLGlEQUFRLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEdkI7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQW1CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkcrQjtBQUNLO0FBQ2dCO0FBQ0Q7QUFDcEM7QUFDZjtBQUNBO0FBQ0EsMEJBQTBCLDZDQUFnQixDQUFDLDZEQUFXO0FBQ3REO0FBQ0EsZ0JBQWdCLGdFQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixnREFBbUI7QUFDekM7QUFDQSxlQUFlLGlEQUFVO0FBQ3pCO0FBQ0EsR0FBRztBQUNILEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJxRTtBQUN0QztBQUNoQjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsZ0RBQW1CLE9BQU8sb0ZBQWEsR0FBRztBQUN0RSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pCMEQ7QUFDYztBQUNIO0FBQ1M7QUFDUjtBQUNvQjtBQUMxRjtBQUNvQztBQUNEO0FBQzBCO0FBQ3BCO0FBQ0E7QUFDVjtBQUNhO0FBQ047QUFDVTtBQUNRO0FBQ3FCO0FBQ3ZCO0FBQzZDO0FBQy9CO0FBQ2Q7QUFDaEI7QUFDSjtBQUNGO0FBQ2M7QUFDRTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsOENBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEZBQXdCO0FBQ3hDLHVCQUF1QiwyQ0FBYTtBQUNwQyxjQUFjLDREQUFVLCtEQUErRCw0REFBVSxnQ0FBZ0M7QUFDakksS0FBSztBQUNMLHNCQUFzQixvRkFBYztBQUNwQztBQUNBO0FBQ0Esd0JBQXdCLDRDQUFjO0FBQ3RDLHVCQUF1QixvRkFBYztBQUNyQztBQUNBO0FBQ0EscUJBQXFCLDBDQUFZO0FBQ2pDLGFBQWEsMkRBQU87QUFDcEI7O0FBRUE7QUFDQSxNQUFNLElBQXFDO0FBQzNDLElBQUksK0RBQU87QUFDWDs7QUFFQTtBQUNBLHdCQUF3QiwyRUFBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHFEQUFTO0FBQ2YsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5Qiw0Q0FBYztBQUN2Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLGlCQUFpQiwwQ0FBWTs7QUFFN0I7QUFDQSx3QkFBd0IsMkNBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsc0JBQXNCLG9GQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBYztBQUN2Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBYztBQUN2Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLEVBQUUsNkNBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EseUJBQXlCLDRDQUFjO0FBQ3ZDLHdCQUF3QixvRkFBYztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLDZDQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFLDZDQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLHVCQUF1QixpRUFBYTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwyQ0FBYTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0IsMkNBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsNkNBQWU7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0EseUJBQXlCLDJFQUFjO0FBQ3ZDO0FBQ0EsS0FBSztBQUNMLHVCQUF1QixvRkFBYztBQUNyQztBQUNBO0FBQ0EsaUJBQWlCLG1FQUFlO0FBQ2hDO0FBQ0EsR0FBRztBQUNILG1CQUFtQixtRUFBZTtBQUNsQztBQUNBLEdBQUc7QUFDSCxFQUFFLDJEQUFtQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlFQUFlO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyw4RUFBb0I7QUFDcEQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLHlCQUF5QiwyRUFBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHVCQUF1QixvRkFBYztBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWLG9DQUFvQyx3RkFBa0I7QUFDdEQ7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxXQUFXO0FBQ2hFO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUVBQWU7QUFDdkMsc0RBQXNELDhEQUFZO0FBQ2xFO0FBQ0EsR0FBRztBQUNILDZCQUE2QixtRUFBZTtBQUM1QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxTQUFTLDhEQUFPO0FBQ2hCO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMEVBQWdCOztBQUUxQztBQUNBLEVBQUUsNkNBQWU7QUFDakI7QUFDQSxHQUFHOztBQUVIO0FBQ0EsdUJBQXVCLDJDQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saURBQW1CLENBQUMsNkRBQW1CO0FBQzdDO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsK0JBQStCLGlEQUFtQixDQUFDLG1EQUFRLEVBQUUsOEVBQVE7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0RBQVE7QUFDM0IsZUFBZSxpREFBVSxzR0FBc0cscUZBQWUsQ0FBQyxxRkFBZSxHQUFHO0FBQ2pLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlEQUFtQixDQUFDLGlEQUFPO0FBQ3JELGtCQUFrQiwrREFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsa0VBQWtFLG1EQUFRLGNBQWMsbURBQVE7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0Esc0JBQXNCLGlEQUFtQixDQUFDLGdFQUFjO0FBQ3hEO0FBQ0EsR0FBRyxlQUFlLGlEQUFtQixDQUFDLDBEQUFTO0FBQy9DO0FBQ0EsR0FBRyxlQUFlLGlEQUFtQixDQUFDLDZEQUFtQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGVBQWUsaURBQW1CLENBQUMsa0VBQWU7QUFDckQ7QUFDQSxHQUFHLDJCQUEyQixpREFBbUI7QUFDakQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUcsZUFBZSxpREFBbUIsQ0FBQyxzRUFBbUI7QUFDekQ7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNELGlFQUFlLElBQUksRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hlcUQ7QUFDSDtBQUNTO0FBQ3BCO0FBQ2dDO0FBQ2xCO0FBQ047QUFDTjtBQUNNO0FBQ2xFO0FBQ0E7QUFDQTtBQUNvQztBQUNEO0FBQ007QUFDTjtBQUNZO0FBQ047QUFDVjtBQUNpQjtBQUNJO0FBQ1k7QUFDVjtBQUNaO0FBQ2dCO0FBQ2hDO0FBQ3NCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSwrRUFBUztBQUNYLGVBQWUsa0ZBQVk7QUFDM0I7QUFDQSxJQUFJLHFGQUFlO0FBQ25CO0FBQ0E7QUFDQSxFQUFFLGtGQUFZO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhGQUF3Qjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNERBQUk7QUFDNUIsTUFBTSwrREFBTztBQUNiLDBCQUEwQixpREFBbUIsQ0FBQyxvREFBUSxPQUFPLDhFQUFRLEdBQUc7QUFDeEU7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDLENBQUMsNkNBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDhDQUFnQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4RkFBd0I7QUFDeEMsa0JBQWtCLDhEQUFTO0FBQzNCLDBCQUEwQiw4Q0FBZ0IsQ0FBQyw4REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw4Q0FBZ0IsQ0FBQyxnRUFBYztBQUMxRDtBQUNBO0FBQ0EsMEJBQTBCLDBDQUFZO0FBQ3RDLG1CQUFtQiwwQ0FBWTtBQUMvQjtBQUNBLHFCQUFxQiw4REFBYTtBQUNsQyxzQkFBc0Isa0VBQVc7O0FBRWpDO0FBQ0EsTUFBTSxLQUFxQztBQUMzQyxJQUFJLCtEQUFPO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0ZBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsNkRBQVM7QUFDNUI7QUFDQSxrQkFBa0IsOEZBQXdCOztBQUUxQztBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHFFQUFpQjs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELDhEQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFPO0FBQzNCOztBQUVBO0FBQ0Esd0RBQXdELDhEQUFZO0FBQ3BFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaURBQW1CLGlCQUFpQiw4RUFBUTtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFLDREQUFJO0FBQ1Q7QUFDQTtBQUNBLFdBQVcsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHO0FBQ3pDLGVBQWUsaURBQVUsVUFBVSxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUNyRjtBQUNBO0FBQ0E7QUFDQSxHQUFHLDBCQUEwQixpREFBbUIsQ0FBQyw4Q0FBSTtBQUNyRCxXQUFXLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxZQUFZO0FBQ3JEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsaUVBQVU7QUFDMUIseUJBQXlCLGtFQUFXOztBQUVwQztBQUNBLEVBQUUsNkNBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixpREFBbUIsbUJBQW1CLDhFQUFRLEdBQUc7QUFDdkU7QUFDQSxHQUFHO0FBQ0g7QUFDQSw4RUFBNEIsOENBQWdCLFVBQVUsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDck5JO0FBQ2dDO0FBQzFGO0FBQ29DO0FBQ0Q7QUFDSjtBQUNxQjtBQUNZO0FBQ2I7QUFDbkQseUNBQXlDLDZDQUFnQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4RkFBd0I7QUFDeEMsMEJBQTBCLDZDQUFnQixDQUFDLDZEQUFXO0FBQ3REO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CLE9BQU8sOEVBQVE7QUFDeEQ7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMLGVBQWUsaURBQVU7QUFDekIsR0FBRyxnQkFBZ0IsZ0RBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEdBQUcsdUJBQXVCLGdEQUFtQjtBQUM3QztBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxpQ0FBaUMsNkNBQWdCO0FBQ2pEO0FBQ0E7QUFDQSx5QkFBeUIsaUVBQVc7QUFDcEMsa0JBQWtCLGdFQUFhO0FBQy9CLGdCQUFnQixnRUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CLHdCQUF3Qiw4RUFBUTtBQUN6RTtBQUNBLEdBQUcsRUFBRSwyREFBSTtBQUNULENBQUM7QUFDRCxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpRUFBZSxhQUFhLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkQ4QjtBQUNXO0FBQ0M7QUFDdkM7QUFDRztBQUNjO0FBQzBCO0FBQ2xDO0FBQ3pCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBZ0IsQ0FBQyw2REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLHlDQUFZO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsMkNBQWM7QUFDdEMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EscUJBQXFCLG9GQUFhLEdBQUcsRUFBRSw0REFBUzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixnREFBbUIsQ0FBQyw0REFBbUI7QUFDN0Q7QUFDQTtBQUNBLEdBQUcsZUFBZSxnREFBbUIsQ0FBQyxpREFBUyxFQUFFLDhFQUFRO0FBQ3pEO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0JBQXdCLGdEQUFtQixDQUFDLG9EQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RXdFO0FBQ0g7QUFDQztBQUN2QztBQUNhO0FBQ1I7QUFDSDtBQUNvQjtBQUNLO0FBQ1Y7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBZ0IsQ0FBQyw2REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQ0FBYztBQUN0Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLHdCQUF3QixvRkFBYSxDQUFDLG9GQUFhLEdBQUcsRUFBRSxzREFBYSx3QkFBd0Isb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHLEVBQUUsbURBQVU7QUFDdkk7QUFDQSxxQkFBcUIsNERBQVM7QUFDOUIsd0JBQXdCLHlDQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyw4QkFBOEI7QUFDakY7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLG1CQUFtQix5Q0FBWTtBQUMvQixFQUFFLDRDQUFlO0FBQ2pCLHlCQUF5QiwwREFBRztBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLE1BQU0sc0RBQUc7QUFDVDtBQUNBLEdBQUc7QUFDSCxzQkFBc0IsZ0RBQW1CLENBQUMsNkRBQU87QUFDakQ7QUFDQSxvQkFBb0IsaURBQVUsaUNBQWlDLHFGQUFlLEdBQUc7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFGMEQ7QUFDZ0M7QUFDMUY7QUFDK0I7QUFDSztBQUNpQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEZBQXdCO0FBQ3hDLDBCQUEwQiw2Q0FBZ0IsQ0FBQyw2REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CLE9BQU8sOEVBQVE7QUFDeEQsZUFBZSxpREFBVTtBQUN6QjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsK0JBQStCLDZDQUFnQjtBQUMvQztBQUNBLGlFQUFlLFdBQVcsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QjhDO0FBQ2Q7QUFDVztBQUNDO0FBQ29CO0FBQzFGO0FBQ0E7QUFDK0I7QUFDSztBQUNEO0FBQ007QUFDRDtBQUNZO0FBQ3NCO0FBQ25CO0FBQ2I7QUFDZjtBQUNnQjtBQUNNO0FBQ1U7QUFDUDtBQUNrRDtBQUNyRDtBQUNNO0FBQ3ZELG1DQUFtQyw2Q0FBZ0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEZBQXdCO0FBQ3hDLGtCQUFrQiw4REFBUztBQUMzQiwwQkFBMEIsNkNBQWdCLENBQUMsOERBQVc7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDZDQUFnQixDQUFDLGdFQUFjO0FBQzFEO0FBQ0EsMkJBQTJCLDZDQUFnQixDQUFDLGtFQUFlO0FBQzNEO0FBQ0Esc0JBQXNCLGtFQUFXO0FBQ2pDO0FBQ0E7QUFDQSxtQkFBbUIseUNBQVk7QUFDL0IsaUJBQWlCLHlDQUFZOztBQUU3QjtBQUNBLE1BQU0sS0FBcUM7QUFDM0MsSUFBSSw4REFBTztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiw2REFBUztBQUM1QjtBQUNBLGtCQUFrQiw4RkFBd0I7O0FBRTFDO0FBQ0Esd0JBQXdCLDJDQUFjO0FBQ3RDLHVCQUF1QixvRkFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EscUJBQXFCLDBDQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLHVCQUF1QixxRUFBaUI7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLG1FQUFlO0FBQ3pDLHNEQUFzRCw4REFBWTtBQUNsRTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsMENBQWE7QUFDcEMsd0JBQXdCLGdEQUFtQixDQUFDLDhDQUFJO0FBQ2hEO0FBQ0EsYUFBYSxvRkFBYSxDQUFDLG9GQUFhLEdBQUcsWUFBWTtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxlQUFlLGdEQUFtQjtBQUN2QztBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0EsK0JBQStCLGdEQUFtQixRQUFRLDhFQUFRO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLHVCQUF1Qix5Q0FBWTtBQUNuQztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsZ0RBQW1CLENBQUMsc0RBQVk7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdEQUFtQixDQUFDLDZEQUFtQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGVBQWUsZ0RBQW1CLENBQUMsb0RBQVc7QUFDckQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsOEJBQThCLGdEQUFtQixDQUFDLG1EQUFRLE9BQU8sOEVBQVE7QUFDekU7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsZUFBZSxpREFBVSw2RUFBNkUscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUN4SztBQUNBO0FBQ0EsR0FBRyxnREFBZ0QsZ0RBQW1CLENBQUMsMkRBQWlCO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxzQkFBc0IsZ0RBQW1CLENBQUMsNkRBQW1CO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCwyQkFBMkIsNkNBQWdCO0FBQzNDO0FBQ0E7QUFDQSx5QkFBeUIsa0VBQVc7QUFDcEMsa0JBQWtCLGlFQUFhOztBQUUvQjtBQUNBLGdCQUFnQixpRUFBVTs7QUFFMUI7QUFDQSxFQUFFLDRDQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osOEJBQThCLGdEQUFtQixrQkFBa0IsOEVBQVE7QUFDM0U7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsZ0RBQW1CLENBQUMscUVBQWtCO0FBQzVEO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpRUFBZSxPQUFPLEU7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pTUztBQUN4Qiw2QkFBNkIsZ0RBQW1CO0FBQ2hEO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQLFdBQVcsNkNBQWdCO0FBQzNCO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZjBGO0FBQ3JCO0FBQ3JFO0FBQytCO0FBQ2dCO0FBQ047QUFDbEMsK0JBQStCLGdEQUFtQjtBQUN6RDtBQUNBLGNBQWMsb0ZBQWEsR0FBRztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQSxnQkFBZ0IsOEZBQXdCO0FBQ3hDLGdCQUFnQiw2Q0FBZ0I7QUFDaEMsMkJBQTJCLG9FQUFPO0FBQ2xDO0FBQ0EsR0FBRztBQUNILCtDQUErQyw4REFBTztBQUN0RCxHQUFHO0FBQ0gsc0JBQXNCLGdEQUFtQjtBQUN6QztBQUNBLEdBQUc7QUFDSCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5QjhFO0FBQy9DO0FBQy9COztBQUVBOztBQUVPLHVDQUF1QyxnREFBbUI7QUFDMUQ7QUFDUCxTQUFTLDZDQUFnQjtBQUN6Qjs7QUFFQTtBQUNPLHNDQUFzQyxnREFBbUI7QUFDekQ7QUFDUCxzQkFBc0IsNkNBQWdCO0FBQ3RDLFNBQVMsMENBQWE7QUFDdEIsOENBQThDLHdGQUFrQjtBQUNoRSxHQUFHO0FBQ0g7O0FBRUE7O0FBRU8sbUNBQW1DLGdEQUFtQixPOzs7Ozs7Ozs7Ozs7Ozs7O0FDdEI5QjtBQUMvQixrQ0FBa0MsZ0RBQW1CLEdBQUc7QUFDeEQsaUVBQWUsY0FBYyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0YyQztBQUNoQjtBQUNmO0FBQ1I7QUFDRjtBQUNrQjtBQUNqRDtBQUNBLFdBQVcsMERBQU87QUFDbEIsVUFBVSwwREFBTztBQUNqQixPQUFPLDBEQUFPO0FBQ2QsU0FBUywwREFBTztBQUNoQixVQUFVLDBEQUFPO0FBQ2pCLFFBQVEsMERBQU87QUFDZixTQUFTLDBEQUFPO0FBQ2hCLFFBQVEsMERBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUNqRCxtQkFBbUIscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRztBQUNyRixpQkFBaUIscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLEdBQUc7QUFDbkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsYUFBYSxzRUFBZ0I7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLDZEQUFTO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxlQUFlLHlDQUFZO0FBQzNCLGtCQUFrQix5Q0FBWTtBQUM5QjtBQUNBO0FBQ0EsSUFBSSxzREFBRztBQUNQO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDBEQUFHO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLHlCQUF5QiwwREFBRztBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN1ErQjtBQUNzQjtBQUN0QztBQUNmLDBCQUEwQiw2Q0FBZ0IsQ0FBQyw2REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0IrQjtBQUNzQjtBQUN0QztBQUNmLDBCQUEwQiw2Q0FBZ0IsQ0FBQyw2REFBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCOEU7QUFDUjtBQUN2QztBQUNhO0FBQ0g7QUFDSztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1E7QUFDZix3QkFBd0IsMkNBQWMsR0FBRztBQUN6Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQSxvQkFBb0IsNkNBQU07QUFDMUIsb0JBQW9CLDZDQUFNO0FBQzFCLHlCQUF5QiwyQ0FBYztBQUN2Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLGtCQUFrQiw2Q0FBTTtBQUN4QixtQkFBbUIsNkNBQU07QUFDekI7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EscUJBQXFCLGtEQUFXO0FBQ2hDO0FBQ0EsUUFBUSxJQUFxQztBQUM3QyxNQUFNLDhEQUFPO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwREFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsdUJBQXVCLGtEQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCw0QkFBNEIsa0RBQVc7QUFDdkM7QUFDQSxHQUFHO0FBQ0gsbUJBQW1CLGtEQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxxQkFBcUIsa0RBQVc7QUFDaEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLGVBQWUsd0ZBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGtEQUFXO0FBQ2xDO0FBQ0E7QUFDQSxJQUFJLHdGQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RytCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2YsZUFBZSx5Q0FBWTtBQUMzQjtBQUNBLGlCQUFpQiw4Q0FBaUI7QUFDbEM7QUFDQSx3RUFBd0UsYUFBYTtBQUNyRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQnNFO0FBQ3ZDO0FBQzhCO0FBQzdEO0FBQ0E7QUFDZTtBQUNmLHdCQUF3QiwyRUFBYztBQUN0QztBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLEVBQUUsNENBQWU7QUFDakI7QUFDQSxnQkFBZ0IsTUFBK0IsR0FBRyxDQUFNO0FBQ3hEO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEIwQjtBQUNRO0FBQ0Y7QUFDWTtBQUNRO0FBQ3BCO0FBRWxCO0FBQ2QsaUJBQWlCLDZDQUFJO0FBQ3JCLGtCQUFrQixpREFBUTtBQUMxQixxQkFBcUIsZ0RBQU87QUFDNUIsdUJBQXVCLHNEQUFhO0FBQ3BDLHFCQUFxQixnREFBTztBQUM1QixpRUFBZSxVQUFVLEU7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiekI7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLFVBQVUsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEVxRDtBQUM1QjtBQUNuQjtBQUN4QjtBQUNQLFNBQVMsdUVBQU87QUFDaEIsc0JBQXNCLGlEQUFvQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLHdGQUFrQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0EsMEJBQTBCLCtDQUFrQjtBQUM1QztBQUNBO0FBQ0EsR0FBRztBQUNILEM7Ozs7Ozs7Ozs7Ozs7O0FDeEJPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUnFFO0FBQ1g7QUFDZ0M7QUFDbEM7QUFDeEQ7QUFDK0I7QUFDRTtBQUNFO0FBQ1U7QUFDWjtBQUNZO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkVBQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhGQUF3QjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixnREFBbUIsc0JBQXNCLDhFQUFRO0FBQy9FO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0EsNEJBQTRCLGdEQUFtQixnQkFBZ0IsOEVBQVE7QUFDdkU7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QixnREFBbUIsZ0JBQWdCLDhFQUFRO0FBQ3ZFO0FBQ0EsU0FBUztBQUNUO0FBQ0EsMEJBQTBCLGdEQUFtQixpQkFBaUIsOEVBQVE7QUFDdEU7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1EQUFtRCxnREFBbUI7QUFDN0U7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQSx5QkFBeUIsb0ZBQWE7QUFDdEMsYUFBYSxnREFBTztBQUNwQixVQUFVLGlEQUFRO0FBQ2xCLFdBQVcsc0RBQWE7QUFDeEIsYUFBYSxnREFBTztBQUNwQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsU0FBUywwREFBYTtBQUN0QixDOzs7Ozs7Ozs7Ozs7OztBQzdFTztBQUNQO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7O0FDSDBGO0FBQzFGO0FBQ3lDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxlQUFlLDhGQUF3QjtBQUN2QztBQUNBO0FBQ0EsTUFBTSw4REFBTztBQUNiO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJ3RTtBQUNIO0FBQ0M7QUFDZDtBQUN4RDtBQUNvQztBQUNpQjtBQUNZO0FBQ2xDO0FBQ0E7QUFDSztBQUNFO0FBQ0k7QUFDTTtBQUNvQjtBQUNDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLE1BQU0sNkVBQU87QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDZDQUFnQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkNBQWdCLENBQUMsNkNBQU87QUFDcEQ7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQiw2Q0FBTTtBQUN4QjtBQUNBLHlCQUF5Qiw2Q0FBTTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsc0VBQVc7QUFDckYsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZEQUFTO0FBQzlCLG9CQUFvQixvRkFBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtFQUFrRSxNQUFNO0FBQ3hFLHNCQUFzQix5Q0FBWTtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsOENBQWlCO0FBQ3RDO0FBQ0EsTUFBTSx1REFBTztBQUNiLEtBQUs7O0FBRUw7QUFDQTtBQUNBLHNCQUFzQixvRkFBYSxDQUFDLG9GQUFhLEdBQUcsaUJBQWlCO0FBQ3JFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE1BQU0sb0JBQW9CLG9EQUFXO0FBQ3JDO0FBQ0E7QUFDQSxrQ0FBa0Msb0ZBQWEsR0FBRztBQUNsRCxRQUFRO0FBQ1Isa0NBQWtDLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxrQkFBa0I7QUFDbEY7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSLGtDQUFrQyxvRkFBYSxDQUFDLG9GQUFhLEdBQUcsa0JBQWtCO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EseUJBQXlCLHFEQUFZO0FBQ3JDO0FBQ0EsUUFBUSxTQUFTLDhEQUFRO0FBQ3pCO0FBQ0EsUUFBUSx3QkFBd0IsbURBQVU7QUFDMUM7QUFDQTtBQUNBLHNCQUFzQixnRUFBaUI7QUFDdkMsZ0NBQWdDLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxrQkFBa0I7QUFDaEYsbUJBQW1CLGlEQUFVLENBQUMsZ0VBQWlCLHNCQUFzQixxRkFBZSxDQUFDLHFGQUFlLEdBQUc7QUFDdkc7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxzQkFBc0IsaURBQW9CLG9CQUFvQiwwREFBVTtBQUN4RSwwQkFBMEIsMERBQVU7QUFDcEM7QUFDQSxzQ0FBc0MsK0NBQWtCO0FBQ3hEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSx3QkFBd0IsZ0RBQW1CLENBQUMsbURBQVU7QUFDdEQ7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLGFBQWEsNERBQWlCLENBQUMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4SVk7QUFDZ0M7QUFDckI7QUFDRztBQUNOO0FBQ29CO0FBQzFCO0FBQ007QUFDTTtBQUN4RTtBQUNBO0FBQ0E7QUFDK0I7QUFDVztBQUNnRTtBQUN4RDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLHNGQUFzRixtREFBZTtBQUNyRztBQUNBLElBQUksK0VBQVM7QUFDYixpQkFBaUIsa0ZBQVk7QUFDN0I7QUFDQTtBQUNBLE1BQU0scUZBQWU7QUFDckIsMEVBQTBFLGFBQWE7QUFDdkY7QUFDQTtBQUNBO0FBQ0EsTUFBTSxxRkFBZSxDQUFDLDRGQUFzQjtBQUM1QztBQUNBLE9BQU87QUFDUDtBQUNBLE1BQU0scUZBQWUsQ0FBQyw0RkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxhQUFhO0FBQzlELHNCQUFzQix1REFBYztBQUNwQyxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsdURBQWM7QUFDNUMsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUksa0ZBQVk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDhGQUF3QjtBQUM5QyxxQ0FBcUMsMkNBQWM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw0QkFBNEIsZ0RBQW1CO0FBQy9DO0FBQ0EseUJBQXlCLDhGQUF3QjtBQUNqRCxtQ0FBbUMsbURBQVUsZUFBZSxvREFBVztBQUN2RSw4QkFBOEIsZ0RBQW1CLFlBQVksOEVBQVEsR0FBRztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsNEJBQTRCLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxZQUFZO0FBQ3RFO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isc0RBQVM7QUFDeEMsK0JBQStCLHFEQUFRO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0Esb0RBQW9ELHVEQUFjLHNCQUFzQixzREFBYTtBQUNyRztBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUcsQ0FBQyw0Q0FBZTtBQUNuQixFQUFFLHFGQUFlO0FBQ2pCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxpRUFBZSxpQkFBaUIsNERBQWlCLENBQUMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySXNCO0FBQ047QUFDTjtBQUNNO0FBQ25DO0FBQy9CO0FBQ0EsRUFBRSwrRUFBUztBQUNYLGVBQWUsa0ZBQVk7QUFDM0I7QUFDQSxJQUFJLHFGQUFlO0FBQ25CO0FBQ0E7QUFDQSxFQUFFLGtGQUFZO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDLENBQUMsNENBQWU7QUFDakIsaUVBQWUsVUFBVSxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQmlFO0FBQzFGO0FBQytCO0FBQ3hCLDJCQUEyQixnREFBbUIsR0FBRztBQUN6QztBQUNmO0FBQ0EsWUFBWSw4RkFBd0I7QUFDcEMsc0JBQXNCLGdEQUFtQjtBQUN6QztBQUNBLEdBQUc7QUFDSCxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ1YrQjtBQUNBO0FBQ3NDO0FBQ3JFLGlFQUFnQjtBQUNoQix3QkFBd0IsNkNBQU07O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywyREFBaUI7QUFDbkQsa0NBQWtDLDBEQUFnQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwyREFBaUI7QUFDaEQsK0JBQStCLDBEQUFnQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLDRDQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ2dEO0FBQ0U7O0FBRW5EO0FBQ0EsZ0NBQWdDLG9FQUFTLEtBQUssa0RBQWUsR0FBRyw0Q0FBUztBQUN6RSxpRUFBZSx5QkFBeUIsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNMUDtBQUNGO0FBQy9CLGlFQUFnQjtBQUNoQixxQkFBcUIseUNBQVk7QUFDakM7QUFDQSxJQUFJLHNEQUFHO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMERBQUc7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0JvRTtBQUNHO0FBQ0Y7QUFDbkM7QUFDYztBQUNRO0FBQzFCO0FBQ1c7QUFDa0c7QUFDdEY7QUFDYztBQUNNO0FBQzNEO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IscUVBQVE7QUFDMUIsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQSxzQkFBc0IseUVBQVksQ0FBQyxtREFBVztBQUM5QyxxQkFBcUIsb0ZBQWM7QUFDbkM7QUFDQTtBQUNBLG1CQUFtQixxRUFBUTtBQUMzQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDZDQUFNO0FBQ3pCLG9CQUFvQiw2Q0FBTTs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsNkNBQU07O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtREFBVztBQUN6QjtBQUNBO0FBQ0EsNEJBQTRCLGlEQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixtREFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFhO0FBQ2hDO0FBQ0EsTUFBTSxvQkFBb0Isb0RBQVk7QUFDdEM7QUFDQSxNQUFNLG9CQUFvQixvREFBWTtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDRCQUE0QiwrREFBa0I7QUFDOUMsMkJBQTJCLG9GQUFjO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQWE7QUFDeEIsZUFBZSxxRkFBZSxDQUFDLHFGQUFlLENBQUMscUZBQWUsR0FBRyxFQUFFLG9EQUFZLG9CQUFvQixrREFBVSxrQkFBa0IsbURBQVc7QUFDMUksV0FBVyxvREFBWTtBQUN2QixlQUFlLHFGQUFlLENBQUMscUZBQWUsQ0FBQyxxRkFBZSxHQUFHLEVBQUUsb0RBQVksbUJBQW1CLGtEQUFVLGlCQUFpQixtREFBVztBQUN4SSxXQUFXLG9EQUFZO0FBQ3ZCLGVBQWUscUZBQWUsQ0FBQyxxRkFBZSxDQUFDLHFGQUFlLEdBQUcsRUFBRSxvREFBWSxtQkFBbUIsa0RBQVUsaUJBQWlCLG1EQUFXO0FBQ3hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBDQUFhO0FBQ25DO0FBQ0EsR0FBRztBQUNILHNCQUFzQiwwREFBWTtBQUNsQztBQUNBLHNCQUFzQixvREFBWTtBQUNsQyxzQ0FBc0Msb0RBQVk7QUFDbEQ7QUFDQSxpQkFBaUIsb0RBQVE7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbURBQVcsc0JBQXNCLG1EQUFXO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFhO0FBQ2hDO0FBQ0E7QUFDQSxhQUFhLGtEQUFNO0FBQ25CLEtBQUs7QUFDTCxxQkFBcUIsb0ZBQWM7QUFDbkM7QUFDQTtBQUNBLGVBQWUsd0RBQVE7QUFDdkI7O0FBRUE7QUFDQSxtQkFBbUIsNkNBQU07O0FBRXpCO0FBQ0EsRUFBRSxzRUFBeUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFhO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsb0RBQVk7QUFDL0I7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixvREFBWTtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsMERBQTBELG9EQUFZO0FBQ3RFO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxnQkFBZ0IsbURBQVc7QUFDM0I7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUUsZ0RBQVM7QUFDWDtBQUNBO0FBQ0Esc0JBQXNCLHFEQUFhO0FBQ25DO0FBQ0Esc0JBQXNCLG9EQUFZO0FBQ2xDO0FBQ0Esc0JBQXNCLG9EQUFZO0FBQ2xDLGdCQUFnQixtREFBVztBQUMzQjtBQUNBLEdBQUc7QUFDSCxFQUFFLGdEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsNEJBQTRCLHlDQUFZO0FBQ3hDLEVBQUUsZ0RBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxtREFBVztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxvQkFBb0Isb0RBQVksY0FBYyxrREFBVTtBQUN4RCxrQkFBa0Isb0ZBQWE7QUFDL0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JQc0U7QUFDckI7QUFDbEI7QUFDZ0Y7QUFDM0M7QUFDMUI7QUFDMUMsdUJBQXVCLG9EQUFZLEVBQUUsa0RBQVUsRUFBRSxtREFBVyxFQUFFLHNEQUFjO0FBQzVFLHlCQUF5QixvREFBWSxFQUFFLHFEQUFhOztBQUVwRDtBQUNPO0FBQ1A7QUFDTztBQUNBO0FBQ1Asa0JBQWtCLG1EQUFXLGFBQWEsc0RBQWM7QUFDeEQ7QUFDQSxpRUFBZ0I7QUFDaEIsa0JBQWtCLHFFQUFRLENBQUMsaURBQVM7QUFDcEMsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQSxzQkFBc0IseURBQVk7QUFDbEMscUJBQXFCLG9GQUFjO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0RBQVk7QUFDeEI7QUFDQTtBQUNBLEVBQUUsc0VBQXlCO0FBQzNCLGlCQUFpQixpREFBUyxhQUFhLHNEQUFjO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3RG1DO0FBQ1E7QUFDSTtBQUN2QjtBQUN6QixpRUFBZSxrREFBUyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0pqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPLCtCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDYjhEO0FBQ2I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0EsYUFBYSw2RUFBTztBQUNwQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHLGFBQWE7QUFDcEQ7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdCQUFnQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxVQUFVO0FBQzNEO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0Esa0JBQWtCLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxvQkFBb0I7QUFDcEU7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxhQUFhO0FBQzNEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9GQUFhLENBQUMsb0ZBQWEsR0FBRyxVQUFVO0FBQ3JEO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEd3RDtBQUNQO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0VBQVMsK0NBQStDO0FBQy9GO0FBQ0EsSUFBSSxvRUFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0EsTUFBTSw2RUFBTztBQUNiO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkUwRDtBQUNjO0FBQ2hCO0FBQ2M7QUFDbEM7QUFDSztBQUNWO0FBQ2M7QUFDN0MsMEJBQTBCLDZDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkNBQWM7QUFDdEMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQSx5QkFBeUIsMkNBQWM7QUFDdkMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQSx5QkFBeUIsMkNBQWM7QUFDdkMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsMERBQU87QUFDeEU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsNENBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxvQkFBb0IsMENBQWE7QUFDakMsUUFBUSw2RUFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsa0JBQWtCLGdFQUFTOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CLFFBQVEsOEVBQVEsR0FBRztBQUM1RDtBQUNBLGVBQWUsaURBQVUsNkJBQTZCLHFGQUFlLEdBQUc7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUcsZ0JBQWdCLGdEQUFtQjtBQUN0QztBQUNBLEdBQUcscUNBQXFDLGdEQUFtQixNQUFNLDhFQUFRO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLDhEQUE4RCxnREFBbUI7QUFDcEY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxpRUFBZSxNQUFNLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsSnFDO0FBQ29CO0FBQ1Q7QUFDcUI7QUFDbEI7QUFDRjtBQUN0RTtBQUN1RTtBQUN6QztBQUNZO0FBQ1o7QUFDK0I7QUFDckI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQVUsQ0FBQyx1RUFBbUI7QUFDbEQ7QUFDQSxnQkFBZ0IsNkNBQU0sR0FBRztBQUN6QixrQkFBa0IsK0NBQVE7QUFDMUIsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQSxtQkFBbUIsK0NBQVE7QUFDM0IsaUJBQWlCLG9GQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQiw0REFBUTtBQUMxQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLGdEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsRUFBRSxnREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsc0JBQXNCLDBEQUFtQixDQUFDLG9EQUFhLEVBQUUsOEVBQVE7QUFDakU7QUFDQSxlQUFlLGlEQUFJLGlJQUFpSSxxRkFBZSxDQUFDLHFGQUFlLEdBQUc7QUFDdEw7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4RkFBd0I7QUFDM0M7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsV0FBVztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBEQUFtQjtBQUMzQztBQUNBLGlCQUFpQixpREFBSTtBQUNyQixhQUFhLG9GQUFhLENBQUMsb0ZBQWEsQ0FBQyxvRkFBYSxHQUFHO0FBQ3pEO0FBQ0E7QUFDQSwwREFBMEQsd0ZBQWtCO0FBQzVFLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsS0FBSyxlQUFlLDBEQUFtQixDQUFDLCtDQUFNLEVBQUUsOEVBQVEsR0FBRztBQUMzRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaURBQUk7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBLGlFQUFlLFVBQVUsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwS0M7QUFDbkIsdUNBQXVDLDBEQUFtQixHQUFHO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwREFBbUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUVBQWUsb0JBQW9CLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1hrQztBQUNTO0FBQ1I7QUFDdkM7QUFDVTtBQUNIO0FBQ3RDO0FBQ0EsaUNBQWlDLDZDQUFnQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQ0FBYztBQUN0Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0EsRUFBRSxzREFBeUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdGQUFrQjs7QUFFeEM7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLDRCQUE0QixvRkFBYSxHQUFHO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLHlCQUF5QiwyQ0FBYyxHQUFHO0FBQzFDLHVCQUF1QixvRkFBYztBQUNyQztBQUNBO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvRkFBYSxHQUFHO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxpQkFBaUIseUNBQVk7QUFDN0IsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdURBQVksZUFBZSxnREFBbUIsQ0FBQywyQ0FBYztBQUNuRjtBQUNBLDRCQUE0QixnREFBbUIsQ0FBQyxtREFBVTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILENBQUM7QUFDRCxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpRUFBZSxhQUFhLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25Ka0Q7QUFDUjtBQUNvQjtBQUMxRjtBQUMrQjtBQUNjO0FBQ1Y7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLGFBQWE7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsOEZBQXdCO0FBQzFDLHdCQUF3QiwyQ0FBYztBQUN0Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLHlCQUF5Qix5Q0FBWTtBQUNyQyxtQ0FBbUMsZ0RBQW1CLENBQUMsc0RBQWE7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gseUJBQXlCLDJDQUFjO0FBQ3ZDLHVCQUF1QixvRkFBYztBQUNyQztBQUNBO0FBQ0EsYUFBYSxpREFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0ZBQWtCO0FBQ3pDO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSxZQUFZLDBDQUFhO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHdGQUFrQjtBQUM3QztBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLDJCQUEyQix3RkFBa0I7QUFDN0M7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsNENBQWU7QUFDakI7QUFDQSxHQUFHOztBQUVIO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7OztBQ3JKd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZFQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsUUFBUSxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEIrQjtBQUN4QjtBQUM0QiIsInNvdXJjZXMiOlsid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0LW51bWJlci9lcy9JbnB1dE51bWJlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC1udW1iZXIvZXMvU3RlcEhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQtbnVtYmVyL2VzL2hvb2tzL3VzZUN1cnNvci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC1udW1iZXIvZXMvaG9va3MvdXNlRnJhbWUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQtbnVtYmVyL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0LW51bWJlci9lcy91dGlscy9udW1iZXJVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0L2VzL0Jhc2VJbnB1dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9JbnB1dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9ob29rcy91c2VDb3VudC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy91dGlscy9jb21tb25VdGlscy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9saWIvdXRpbHMvY29tbW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvRHJvcGRvd25NZW51LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL0tleXdvcmRUcmlnZ2VyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL01lbnRpb25zLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL01lbnRpb25zQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9PcHRpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvaG9va3MvdXNlRWZmZWN0U3RhdGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL0RpdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9JY29uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvTWVudS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnVJdGVtLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvTWVudUl0ZW1Hcm91cC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL1N1Yk1lbnUvSW5saW5lU3ViTWVudUxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L1BvcHVwVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL1N1Yk1lbnUvU3ViTWVudUxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9JZENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9jb250ZXh0L01lbnVDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9QYXRoQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvUHJpdmF0ZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9ob29rcy91c2VBY2Nlc3NpYmlsaXR5LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlQWN0aXZlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlRGlyZWN0aW9uU3R5bGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9ob29rcy91c2VLZXlSZWNvcmRzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlTWVtb0NhbGxiYWNrLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlVVVJRC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvcGxhY2VtZW50cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL2NvbW1vblV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy9tb3Rpb25VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy90aW1lVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL3dhcm5VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9DU1NNb3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL0NTU01vdGlvbkxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL0RvbVdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZURvbU1vdGlvbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlTmV4dEZyYW1lLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VTdGF0dXMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZVN0ZXBRdWV1ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2ludGVyZmFjZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvdXRpbC9kaWZmLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy91dGlsL21vdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWNlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9Ob3RpY2VMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9Ob3RpZmljYXRpb25Qcm92aWRlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWZpY2F0aW9ucy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaG9va3MvdXNlTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9ob29rcy91c2VTdGFjay5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInByZWZpeENsc1wiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcInZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcInVwSGFuZGxlclwiLCBcImRvd25IYW5kbGVyXCIsIFwia2V5Ym9hcmRcIiwgXCJjaGFuZ2VPbldoZWVsXCIsIFwiY29udHJvbHNcIiwgXCJjbGFzc05hbWVzXCIsIFwic3RyaW5nTW9kZVwiLCBcInBhcnNlclwiLCBcImZvcm1hdHRlclwiLCBcInByZWNpc2lvblwiLCBcImRlY2ltYWxTZXBhcmF0b3JcIiwgXCJvbkNoYW5nZVwiLCBcIm9uSW5wdXRcIiwgXCJvblByZXNzRW50ZXJcIiwgXCJvblN0ZXBcIiwgXCJjaGFuZ2VPbkJsdXJcIiwgXCJkb21SZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJkaXNhYmxlZFwiLCBcInN0eWxlXCIsIFwicHJlZml4Q2xzXCIsIFwidmFsdWVcIiwgXCJwcmVmaXhcIiwgXCJzdWZmaXhcIiwgXCJhZGRvbkJlZm9yZVwiLCBcImFkZG9uQWZ0ZXJcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGFzc05hbWVzXCJdO1xuaW1wb3J0IGdldE1pbmlEZWNpbWFsLCB7IGdldE51bWJlclByZWNpc2lvbiwgbnVtMnN0ciwgdG9GaXhlZCwgdmFsaWRhdGVOdW1iZXIgfSBmcm9tICdAcmMtY29tcG9uZW50L21pbmktZGVjaW1hbCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJhc2VJbnB1dCB9IGZyb20gJ3JjLWlucHV0JztcbmltcG9ydCB7IHVzZUxheW91dFVwZGF0ZUVmZmVjdCB9IGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZUxheW91dEVmZmVjdFwiO1xuaW1wb3J0IHByb3h5T2JqZWN0IGZyb20gXCJyYy11dGlsL2VzL3Byb3h5T2JqZWN0XCI7XG5pbXBvcnQgeyBjb21wb3NlUmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlQ3Vyc29yIGZyb20gXCIuL2hvb2tzL3VzZUN1cnNvclwiO1xuaW1wb3J0IFN0ZXBIYW5kbGVyIGZyb20gXCIuL1N0ZXBIYW5kbGVyXCI7XG5pbXBvcnQgeyBnZXREZWN1cGxlU3RlcHMgfSBmcm9tIFwiLi91dGlscy9udW1iZXJVdGlsXCI7XG5pbXBvcnQgeyB0cmlnZ2VyRm9jdXMgfSBmcm9tIFwicmMtaW5wdXQvZXMvdXRpbHMvY29tbW9uVXRpbHNcIjtcbmltcG9ydCB1c2VGcmFtZSBmcm9tIFwiLi9ob29rcy91c2VGcmFtZVwiO1xuLyoqXG4gKiBXZSBzdXBwb3J0IGBzdHJpbmdNb2RlYCB3aGljaCBuZWVkIGhhbmRsZSBjb3JyZWN0IHR5cGUgd2hlbiB1c2VyIGNhbGwgaW4gb25DaGFuZ2VcbiAqIGZvcm1hdCBtYXggb3IgbWluIHZhbHVlXG4gKiAxLiBpZiBpc0ludmFsaWQgcmV0dXJuIG51bGxcbiAqIDIuIGlmIHByZWNpc2lvbiBpcyB1bmRlZmluZWQsIHJldHVybiBkZWNpbWFsXG4gKiAzLiBmb3JtYXQgd2l0aCBwcmVjaXNpb25cbiAqICAgIEkuIGlmIG1heCA+IDAsIHJvdW5kIGRvd24gd2l0aCBwcmVjaXNpb24uIEV4YW1wbGU6IG1heD0gMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IDNcbiAqICAgIElJLiBpZiBtYXggPCAwLCByb3VuZCB1cCB3aXRoIHByZWNpc2lvbi4gRXhhbXBsZTogbWF4PSAtMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IC00XG4gKiAgICBJSUkuIGlmIG1pbiA+IDAsIHJvdW5kIHVwIHdpdGggcHJlY2lzaW9uLiBFeGFtcGxlOiBtaW49IDMuNSwgcHJlY2lzaW9uPTAgIGFmdGVyRm9ybWF0OiA0XG4gKiAgICBJVi4gaWYgbWluIDwgMCwgcm91bmQgZG93biB3aXRoIHByZWNpc2lvbi4gRXhhbXBsZTogbWF4PSAtMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IC0zXG4gKi9cbnZhciBnZXREZWNpbWFsVmFsdWUgPSBmdW5jdGlvbiBnZXREZWNpbWFsVmFsdWUoc3RyaW5nTW9kZSwgZGVjaW1hbFZhbHVlKSB7XG4gIGlmIChzdHJpbmdNb2RlIHx8IGRlY2ltYWxWYWx1ZS5pc0VtcHR5KCkpIHtcbiAgICByZXR1cm4gZGVjaW1hbFZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIGRlY2ltYWxWYWx1ZS50b051bWJlcigpO1xufTtcbnZhciBnZXREZWNpbWFsSWZWYWxpZGF0ZSA9IGZ1bmN0aW9uIGdldERlY2ltYWxJZlZhbGlkYXRlKHZhbHVlKSB7XG4gIHZhciBkZWNpbWFsID0gZ2V0TWluaURlY2ltYWwodmFsdWUpO1xuICByZXR1cm4gZGVjaW1hbC5pc0ludmFsaWRhdGUoKSA/IG51bGwgOiBkZWNpbWFsO1xufTtcbnZhciBJbnRlcm5hbElucHV0TnVtYmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBtaW4gPSBwcm9wcy5taW4sXG4gICAgbWF4ID0gcHJvcHMubWF4LFxuICAgIF9wcm9wcyRzdGVwID0gcHJvcHMuc3RlcCxcbiAgICBzdGVwID0gX3Byb3BzJHN0ZXAgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkc3RlcCxcbiAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgdXBIYW5kbGVyID0gcHJvcHMudXBIYW5kbGVyLFxuICAgIGRvd25IYW5kbGVyID0gcHJvcHMuZG93bkhhbmRsZXIsXG4gICAga2V5Ym9hcmQgPSBwcm9wcy5rZXlib2FyZCxcbiAgICBfcHJvcHMkY2hhbmdlT25XaGVlbCA9IHByb3BzLmNoYW5nZU9uV2hlZWwsXG4gICAgY2hhbmdlT25XaGVlbCA9IF9wcm9wcyRjaGFuZ2VPbldoZWVsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRjaGFuZ2VPbldoZWVsLFxuICAgIF9wcm9wcyRjb250cm9scyA9IHByb3BzLmNvbnRyb2xzLFxuICAgIGNvbnRyb2xzID0gX3Byb3BzJGNvbnRyb2xzID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJGNvbnRyb2xzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIHN0cmluZ01vZGUgPSBwcm9wcy5zdHJpbmdNb2RlLFxuICAgIHBhcnNlciA9IHByb3BzLnBhcnNlcixcbiAgICBmb3JtYXR0ZXIgPSBwcm9wcy5mb3JtYXR0ZXIsXG4gICAgcHJlY2lzaW9uID0gcHJvcHMucHJlY2lzaW9uLFxuICAgIGRlY2ltYWxTZXBhcmF0b3IgPSBwcm9wcy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgb25JbnB1dCA9IHByb3BzLm9uSW5wdXQsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uU3RlcCA9IHByb3BzLm9uU3RlcCxcbiAgICBfcHJvcHMkY2hhbmdlT25CbHVyID0gcHJvcHMuY2hhbmdlT25CbHVyLFxuICAgIGNoYW5nZU9uQmx1ciA9IF9wcm9wcyRjaGFuZ2VPbkJsdXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkY2hhbmdlT25CbHVyLFxuICAgIGRvbVJlZiA9IHByb3BzLmRvbVJlZixcbiAgICBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgaW5wdXRDbGFzc05hbWUgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWlucHV0XCIpO1xuICB2YXIgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgZm9jdXMgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEZvY3VzID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHVzZXJUeXBpbmdSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgY29tcG9zaXRpb25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgc2hpZnRLZXlSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVhbCB2YWx1ZSBjb250cm9sXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldE1pbmlEZWNpbWFsKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZSk7XG4gICAgfSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIGRlY2ltYWxWYWx1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0RGVjaW1hbFZhbHVlID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgZnVuY3Rpb24gc2V0VW5jb250cm9sbGVkRGVjaW1hbFZhbHVlKG5ld0RlY2ltYWwpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0RGVjaW1hbFZhbHVlKG5ld0RlY2ltYWwpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gUGFyc2VyICYgRm9ybWF0dGVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIGBwcmVjaXNpb25gIGlzIHVzZWQgZm9yIGZvcm1hdHRlciAmIG9uQ2hhbmdlLlxuICAgKiBJdCB3aWxsIGF1dG8gZ2VuZXJhdGUgYnkgYHZhbHVlYCAmIGBzdGVwYC5cbiAgICogQnV0IGl0IHdpbGwgbm90IGJsb2NrIHVzZXIgdHlwaW5nLlxuICAgKlxuICAgKiBOb3RlOiBBdXRvIGdlbmVyYXRlIGBwcmVjaXNpb25gIGlzIHVzZWQgZm9yIGxlZ2FjeSBsb2dpYy5cbiAgICogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHNpbmNlIHdlIGFscmVhZHkgc3VwcG9ydCBoaWdoIHByZWNpc2lvbiB3aXRoIEJpZ0ludC5cbiAgICpcbiAgICogQHBhcmFtIG51bWJlciAgUHJvdmlkZSB3aGljaCBudW1iZXIgc2hvdWxkIGNhbGN1bGF0ZSBwcmVjaXNpb25cbiAgICogQHBhcmFtIHVzZXJUeXBpbmcgIENoYW5nZSBieSB1c2VyIHR5cGluZ1xuICAgKi9cbiAgdmFyIGdldFByZWNpc2lvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChudW1TdHIsIHVzZXJUeXBpbmcpIHtcbiAgICBpZiAodXNlclR5cGluZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHByZWNpc2lvbiA+PSAwKSB7XG4gICAgICByZXR1cm4gcHJlY2lzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoZ2V0TnVtYmVyUHJlY2lzaW9uKG51bVN0ciksIGdldE51bWJlclByZWNpc2lvbihzdGVwKSk7XG4gIH0sIFtwcmVjaXNpb24sIHN0ZXBdKTtcblxuICAvLyA+Pj4gUGFyc2VyXG4gIHZhciBtZXJnZWRQYXJzZXIgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobnVtKSB7XG4gICAgdmFyIG51bVN0ciA9IFN0cmluZyhudW0pO1xuICAgIGlmIChwYXJzZXIpIHtcbiAgICAgIHJldHVybiBwYXJzZXIobnVtU3RyKTtcbiAgICB9XG4gICAgdmFyIHBhcnNlZFN0ciA9IG51bVN0cjtcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgcGFyc2VkU3RyID0gcGFyc2VkU3RyLnJlcGxhY2UoZGVjaW1hbFNlcGFyYXRvciwgJy4nKTtcbiAgICB9XG5cbiAgICAvLyBbTGVnYWN5XSBXZSBzdGlsbCBzdXBwb3J0IGF1dG8gY29udmVydCBgJCAxMjMsNDU2YCB0byBgMTIzNDU2YFxuICAgIHJldHVybiBwYXJzZWRTdHIucmVwbGFjZSgvW15cXHcuLV0rL2csICcnKTtcbiAgfSwgW3BhcnNlciwgZGVjaW1hbFNlcGFyYXRvcl0pO1xuXG4gIC8vID4+PiBGb3JtYXR0ZXJcbiAgdmFyIGlucHV0VmFsdWVSZWYgPSBSZWFjdC51c2VSZWYoJycpO1xuICB2YXIgbWVyZ2VkRm9ybWF0dGVyID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG51bWJlciwgdXNlclR5cGluZykge1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIobnVtYmVyLCB7XG4gICAgICAgIHVzZXJUeXBpbmc6IHVzZXJUeXBpbmcsXG4gICAgICAgIGlucHV0OiBTdHJpbmcoaW5wdXRWYWx1ZVJlZi5jdXJyZW50KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBzdHIgPSB0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJyA/IG51bTJzdHIobnVtYmVyKSA6IG51bWJlcjtcblxuICAgIC8vIFVzZXIgdHlwaW5nIHdpbGwgbm90IGF1dG8gZm9ybWF0IHdpdGggcHJlY2lzaW9uIGRpcmVjdGx5XG4gICAgaWYgKCF1c2VyVHlwaW5nKSB7XG4gICAgICB2YXIgbWVyZ2VkUHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKHN0ciwgdXNlclR5cGluZyk7XG4gICAgICBpZiAodmFsaWRhdGVOdW1iZXIoc3RyKSAmJiAoZGVjaW1hbFNlcGFyYXRvciB8fCBtZXJnZWRQcmVjaXNpb24gPj0gMCkpIHtcbiAgICAgICAgLy8gU2VwYXJhdG9yXG4gICAgICAgIHZhciBzZXBhcmF0b3JTdHIgPSBkZWNpbWFsU2VwYXJhdG9yIHx8ICcuJztcbiAgICAgICAgc3RyID0gdG9GaXhlZChzdHIsIHNlcGFyYXRvclN0ciwgbWVyZ2VkUHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfSwgW2Zvcm1hdHRlciwgZ2V0UHJlY2lzaW9uLCBkZWNpbWFsU2VwYXJhdG9yXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gSW5wdXRWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogSW5wdXQgdGV4dCB2YWx1ZSBjb250cm9sXG4gICAqXG4gICAqIFVzZXIgY2FuIG5vdCB1cGRhdGUgaW5wdXQgY29udGVudCBkaXJlY3RseS4gSXQgdXBkYXRlcyB3aXRoIGZvbGxvdyBydWxlcyBieSBwcmlvcml0eTpcbiAgICogIDEuIGNvbnRyb2xsZWQgYHZhbHVlYCBjaGFuZ2VkXG4gICAqICAgICogW1NQRUNJQUxdIFR5cGluZyBsaWtlIGAxLmAgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBjb252ZXJ0IHRvIGAxYFxuICAgKiAgMi4gVXNlciB0eXBpbmcgd2l0aCBmb3JtYXQgKG5vdCBwcmVjaXNpb24pXG4gICAqICAzLiBCbHVyIG9yIEVudGVyIHRyaWdnZXIgcmV2YWxpZGF0ZVxuICAgKi9cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaW5pdFZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICBpZiAoZGVjaW1hbFZhbHVlLmlzSW52YWxpZGF0ZSgpICYmIFsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKF90eXBlb2YoaW5pdFZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihpbml0VmFsdWUpID8gJycgOiBpbml0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVyZ2VkRm9ybWF0dGVyKGRlY2ltYWxWYWx1ZS50b1N0cmluZygpLCBmYWxzZSk7XG4gICAgfSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIGlucHV0VmFsdWUgPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMV07XG4gIGlucHV0VmFsdWVSZWYuY3VycmVudCA9IGlucHV0VmFsdWU7XG5cbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzdHJpbmdcbiAgZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSwgdXNlclR5cGluZykge1xuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZShtZXJnZWRGb3JtYXR0ZXIoXG4gICAgLy8gSW52YWxpZGF0ZSBudW1iZXIgaXMgc29tZXRpbWUgcGFzc2VkIGJ5IGV4dGVybmFsIGNvbnRyb2wsIHdlIHNob3VsZCBsZXQgaXQgZ29cbiAgICAvLyBPdGhlcndpc2UgaXMgY29udHJvbGxlZCBieSBpbnRlcm5hbCBpbnRlcmFjdGl2ZSBsb2dpYyB3aGljaCBjaGVjayBieSB1c2VyVHlwaW5nXG4gICAgLy8gWW91IGNhbiByZWYgJ3Nob3cgbGltaXRlZCB2YWx1ZSB3aGVuIGlucHV0IGlzIG5vdCBmb2N1c2VkJyB0ZXN0IGZvciBtb3JlIGluZm8uXG4gICAgbmV3VmFsdWUuaXNJbnZhbGlkYXRlKCkgPyBuZXdWYWx1ZS50b1N0cmluZyhmYWxzZSkgOiBuZXdWYWx1ZS50b1N0cmluZyghdXNlclR5cGluZyksIHVzZXJUeXBpbmcpKTtcbiAgfVxuXG4gIC8vID4+PiBNYXggJiBNaW4gbGltaXRcbiAgdmFyIG1heERlY2ltYWwgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0RGVjaW1hbElmVmFsaWRhdGUobWF4KTtcbiAgfSwgW21heCwgcHJlY2lzaW9uXSk7XG4gIHZhciBtaW5EZWNpbWFsID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldERlY2ltYWxJZlZhbGlkYXRlKG1pbik7XG4gIH0sIFttaW4sIHByZWNpc2lvbl0pO1xuICB2YXIgdXBEaXNhYmxlZCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWF4RGVjaW1hbCB8fCAhZGVjaW1hbFZhbHVlIHx8IGRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbWF4RGVjaW1hbC5sZXNzRXF1YWxzKGRlY2ltYWxWYWx1ZSk7XG4gIH0sIFttYXhEZWNpbWFsLCBkZWNpbWFsVmFsdWVdKTtcbiAgdmFyIGRvd25EaXNhYmxlZCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWluRGVjaW1hbCB8fCAhZGVjaW1hbFZhbHVlIHx8IGRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVjaW1hbFZhbHVlLmxlc3NFcXVhbHMobWluRGVjaW1hbCk7XG4gIH0sIFttaW5EZWNpbWFsLCBkZWNpbWFsVmFsdWVdKTtcblxuICAvLyBDdXJzb3IgY29udHJvbGxlclxuICB2YXIgX3VzZUN1cnNvciA9IHVzZUN1cnNvcihpbnB1dFJlZi5jdXJyZW50LCBmb2N1cyksXG4gICAgX3VzZUN1cnNvcjIgPSBfc2xpY2VkVG9BcnJheShfdXNlQ3Vyc29yLCAyKSxcbiAgICByZWNvcmRDdXJzb3IgPSBfdXNlQ3Vyc29yMlswXSxcbiAgICByZXN0b3JlQ3Vyc29yID0gX3VzZUN1cnNvcjJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGF0YSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogRmluZCB0YXJnZXQgdmFsdWUgY2xvc2V0IHdpdGhpbiByYW5nZS5cbiAgICogZS5nLiBbMTEsIDI4XTpcbiAgICogICAgMyAgPT4gMTFcbiAgICogICAgMjMgPT4gMjNcbiAgICogICAgOTkgPT4gMjhcbiAgICovXG4gIHZhciBnZXRSYW5nZVZhbHVlID0gZnVuY3Rpb24gZ2V0UmFuZ2VWYWx1ZSh0YXJnZXQpIHtcbiAgICAvLyB0YXJnZXQgPiBtYXhcbiAgICBpZiAobWF4RGVjaW1hbCAmJiAhdGFyZ2V0Lmxlc3NFcXVhbHMobWF4RGVjaW1hbCkpIHtcbiAgICAgIHJldHVybiBtYXhEZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCA8IG1pblxuICAgIGlmIChtaW5EZWNpbWFsICYmICFtaW5EZWNpbWFsLmxlc3NFcXVhbHModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIG1pbkRlY2ltYWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayB2YWx1ZSBpcyBpbiBbbWluLCBtYXhdIHJhbmdlXG4gICAqL1xuICB2YXIgaXNJblJhbmdlID0gZnVuY3Rpb24gaXNJblJhbmdlKHRhcmdldCkge1xuICAgIHJldHVybiAhZ2V0UmFuZ2VWYWx1ZSh0YXJnZXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGBvbkNoYW5nZWAgaWYgdmFsdWUgdmFsaWRhdGVkIGFuZCBub3QgZXF1YWxzIG9mIG9yaWdpbi5cbiAgICogUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHJlLWFsaWduIGluIHJhbmdlLlxuICAgKi9cbiAgdmFyIHRyaWdnZXJWYWx1ZVVwZGF0ZSA9IGZ1bmN0aW9uIHRyaWdnZXJWYWx1ZVVwZGF0ZShuZXdWYWx1ZSwgdXNlclR5cGluZykge1xuICAgIHZhciB1cGRhdGVWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHZhciBpc1JhbmdlVmFsaWRhdGUgPSBpc0luUmFuZ2UodXBkYXRlVmFsdWUpIHx8IHVwZGF0ZVZhbHVlLmlzRW1wdHkoKTtcblxuICAgIC8vIFNraXAgYWxpZ24gdmFsdWUgd2hlbiB0cmlnZ2VyIHZhbHVlIGlzIGVtcHR5LlxuICAgIC8vIFdlIGp1c3QgdHJpZ2dlciBvbkNoYW5nZShudWxsKVxuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBibG9jayB1c2VyIHR5cGluZ1xuICAgIGlmICghdXBkYXRlVmFsdWUuaXNFbXB0eSgpICYmICF1c2VyVHlwaW5nKSB7XG4gICAgICAvLyBSZXZlcnQgdmFsdWUgaW4gcmFuZ2UgaWYgbmVlZGVkXG4gICAgICB1cGRhdGVWYWx1ZSA9IGdldFJhbmdlVmFsdWUodXBkYXRlVmFsdWUpIHx8IHVwZGF0ZVZhbHVlO1xuICAgICAgaXNSYW5nZVZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFyZWFkT25seSAmJiAhZGlzYWJsZWQgJiYgaXNSYW5nZVZhbGlkYXRlKSB7XG4gICAgICB2YXIgbnVtU3RyID0gdXBkYXRlVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHZhciBtZXJnZWRQcmVjaXNpb24gPSBnZXRQcmVjaXNpb24obnVtU3RyLCB1c2VyVHlwaW5nKTtcbiAgICAgIGlmIChtZXJnZWRQcmVjaXNpb24gPj0gMCkge1xuICAgICAgICB1cGRhdGVWYWx1ZSA9IGdldE1pbmlEZWNpbWFsKHRvRml4ZWQobnVtU3RyLCAnLicsIG1lcmdlZFByZWNpc2lvbikpO1xuXG4gICAgICAgIC8vIFdoZW4gdG8gZml4ZWQuIFRoZSB2YWx1ZSBtYXkgb3V0IG9mIG1pbiAmIG1heCByYW5nZS5cbiAgICAgICAgLy8gNCBpbiBbMCwgMy44XSA9PiAzLjggPT4gNCAodG9GaXhlZClcbiAgICAgICAgaWYgKCFpc0luUmFuZ2UodXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgdXBkYXRlVmFsdWUgPSBnZXRNaW5pRGVjaW1hbCh0b0ZpeGVkKG51bVN0ciwgJy4nLCBtZXJnZWRQcmVjaXNpb24sIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUcmlnZ2VyIGV2ZW50XG4gICAgICBpZiAoIXVwZGF0ZVZhbHVlLmVxdWFscyhkZWNpbWFsVmFsdWUpKSB7XG4gICAgICAgIHNldFVuY29udHJvbGxlZERlY2ltYWxWYWx1ZSh1cGRhdGVWYWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UodXBkYXRlVmFsdWUuaXNFbXB0eSgpID8gbnVsbCA6IGdldERlY2ltYWxWYWx1ZShzdHJpbmdNb2RlLCB1cGRhdGVWYWx1ZSkpO1xuXG4gICAgICAgIC8vIFJlZm9ybWF0IGlucHV0IGlmIHZhbHVlIGlzIG5vdCBjb250cm9sbGVkXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2V0SW5wdXRWYWx1ZSh1cGRhdGVWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxWYWx1ZTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBVc2VyIElucHV0ID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbk5leHRQcm9taXNlID0gdXNlRnJhbWUoKTtcblxuICAvLyA+Pj4gQ29sbGVjdCBpbnB1dCB2YWx1ZVxuICB2YXIgY29sbGVjdElucHV0VmFsdWUgPSBmdW5jdGlvbiBjb2xsZWN0SW5wdXRWYWx1ZShpbnB1dFN0cikge1xuICAgIHJlY29yZEN1cnNvcigpO1xuXG4gICAgLy8gVXBkYXRlIGlucHV0VmFsdWUgaW4gY2FzZSBpbnB1dCBjYW4gbm90IHBhcnNlIGFzIG51bWJlclxuICAgIC8vIFJlZnJlc2ggcmVmIHZhbHVlIGltbWVkaWF0ZWx5IHNpbmNlIGl0IG1heSB1c2VkIGJ5IGZvcm1hdHRlclxuICAgIGlucHV0VmFsdWVSZWYuY3VycmVudCA9IGlucHV0U3RyO1xuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZShpbnB1dFN0cik7XG5cbiAgICAvLyBQYXJzZSBudW1iZXJcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBmaW5hbFZhbHVlID0gbWVyZ2VkUGFyc2VyKGlucHV0U3RyKTtcbiAgICAgIHZhciBmaW5hbERlY2ltYWwgPSBnZXRNaW5pRGVjaW1hbChmaW5hbFZhbHVlKTtcbiAgICAgIGlmICghZmluYWxEZWNpbWFsLmlzTmFOKCkpIHtcbiAgICAgICAgdHJpZ2dlclZhbHVlVXBkYXRlKGZpbmFsRGVjaW1hbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbklucHV0IGxhdGVyIHRvIGxldCB1c2VyIGN1c3RvbWl6ZSB2YWx1ZSBpZiB0aGV5IHdhbnQgdG8gaGFuZGxlIHNvbWV0aGluZyBhZnRlciBvbkNoYW5nZVxuICAgIG9uSW5wdXQgPT09IG51bGwgfHwgb25JbnB1dCA9PT0gdm9pZCAwIHx8IG9uSW5wdXQoaW5wdXRTdHIpO1xuXG4gICAgLy8gb3B0aW1pemUgZm9yIGNoaW5lc2UgaW5wdXQgZXhwZXJpZW5jZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzgxOTZcbiAgICBvbk5leHRQcm9taXNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBuZXh0SW5wdXRTdHIgPSBpbnB1dFN0cjtcbiAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgIG5leHRJbnB1dFN0ciA9IGlucHV0U3RyLnJlcGxhY2UoL+OAgi9nLCAnLicpO1xuICAgICAgfVxuICAgICAgaWYgKG5leHRJbnB1dFN0ciAhPT0gaW5wdXRTdHIpIHtcbiAgICAgICAgY29sbGVjdElucHV0VmFsdWUobmV4dElucHV0U3RyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyA+Pj4gQ29tcG9zaXRpb25cbiAgdmFyIG9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydCgpIHtcbiAgICBjb21wb3NpdGlvblJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIG9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKCkge1xuICAgIGNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBjb2xsZWN0SW5wdXRWYWx1ZShpbnB1dFJlZi5jdXJyZW50LnZhbHVlKTtcbiAgfTtcblxuICAvLyA+Pj4gSW5wdXRcbiAgdmFyIG9uSW50ZXJuYWxJbnB1dCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxJbnB1dChlKSB7XG4gICAgY29sbGVjdElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0ZXAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxTdGVwID0gZnVuY3Rpb24gb25JbnRlcm5hbFN0ZXAodXApIHtcbiAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgLy8gSWdub3JlIHN0ZXAgc2luY2Ugb3V0IG9mIHJhbmdlXG4gICAgaWYgKHVwICYmIHVwRGlzYWJsZWQgfHwgIXVwICYmIGRvd25EaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHR5cGluZyBzdGF0dXMgc2luY2UgaXQgbWF5IGJlIGNhdXNlZCBieSB1cCAmIGRvd24ga2V5LlxuICAgIC8vIFdlIHNob3VsZCBzeW5jIHdpdGggaW5wdXQgdmFsdWUuXG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgdmFyIHN0ZXBEZWNpbWFsID0gZ2V0TWluaURlY2ltYWwoc2hpZnRLZXlSZWYuY3VycmVudCA/IGdldERlY3VwbGVTdGVwcyhzdGVwKSA6IHN0ZXApO1xuICAgIGlmICghdXApIHtcbiAgICAgIHN0ZXBEZWNpbWFsID0gc3RlcERlY2ltYWwubmVnYXRlKCk7XG4gICAgfVxuICAgIHZhciB0YXJnZXQgPSAoZGVjaW1hbFZhbHVlIHx8IGdldE1pbmlEZWNpbWFsKDApKS5hZGQoc3RlcERlY2ltYWwudG9TdHJpbmcoKSk7XG4gICAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHRyaWdnZXJWYWx1ZVVwZGF0ZSh0YXJnZXQsIGZhbHNlKTtcbiAgICBvblN0ZXAgPT09IG51bGwgfHwgb25TdGVwID09PSB2b2lkIDAgfHwgb25TdGVwKGdldERlY2ltYWxWYWx1ZShzdHJpbmdNb2RlLCB1cGRhdGVkVmFsdWUpLCB7XG4gICAgICBvZmZzZXQ6IHNoaWZ0S2V5UmVmLmN1cnJlbnQgPyBnZXREZWN1cGxlU3RlcHMoc3RlcCkgOiBzdGVwLFxuICAgICAgdHlwZTogdXAgPyAndXAnIDogJ2Rvd24nXG4gICAgfSk7XG4gICAgKF9pbnB1dFJlZiRjdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudC5mb2N1cygpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRmx1c2ggPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEZsdXNoIGN1cnJlbnQgaW5wdXQgY29udGVudCB0byB0cmlnZ2VyIHZhbHVlIGNoYW5nZSAmIHJlLWZvcm1hdHRlciBpbnB1dCBpZiBuZWVkZWQuXG4gICAqIFRoaXMgd2lsbCBhbHdheXMgZmx1c2ggaW5wdXQgdmFsdWUgZm9yIHVwZGF0ZS5cbiAgICogSWYgaXQncyBpbnZhbGlkYXRlLCB3aWxsIGZhbGxiYWNrIHRvIGxhc3QgdmFsaWRhdGUgdmFsdWUuXG4gICAqL1xuICB2YXIgZmx1c2hJbnB1dFZhbHVlID0gZnVuY3Rpb24gZmx1c2hJbnB1dFZhbHVlKHVzZXJUeXBpbmcpIHtcbiAgICB2YXIgcGFyc2VkVmFsdWUgPSBnZXRNaW5pRGVjaW1hbChtZXJnZWRQYXJzZXIoaW5wdXRWYWx1ZSkpO1xuICAgIHZhciBmb3JtYXRWYWx1ZTtcbiAgICBpZiAoIXBhcnNlZFZhbHVlLmlzTmFOKCkpIHtcbiAgICAgIC8vIE9ubHkgdmFsaWRhdGUgdmFsdWUgb3IgZW1wdHkgdmFsdWUgY2FuIGJlIHJlLWZpbGwgdG8gaW5wdXRWYWx1ZVxuICAgICAgLy8gUmVhc3NpZ24gdGhlIGZvcm1hdFZhbHVlIHdpdGhpbiByYW5nZWQgb2YgdHJpZ2dlciBjb250cm9sXG4gICAgICBmb3JtYXRWYWx1ZSA9IHRyaWdnZXJWYWx1ZVVwZGF0ZShwYXJzZWRWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdFZhbHVlID0gdHJpZ2dlclZhbHVlVXBkYXRlKGRlY2ltYWxWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSZXNldCBiYWNrIHdpdGggY29udHJvbGxlZCB2YWx1ZSBmaXJzdFxuICAgICAgc2V0SW5wdXRWYWx1ZShkZWNpbWFsVmFsdWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKCFmb3JtYXRWYWx1ZS5pc05hTigpKSB7XG4gICAgICAvLyBSZXNldCBpbnB1dCBiYWNrIHNpbmNlIG5vIHZhbGlkYXRlIHZhbHVlXG4gICAgICBzZXRJbnB1dFZhbHVlKGZvcm1hdFZhbHVlLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNvbHZlIHRoZSBpc3N1ZSBvZiB0aGUgZXZlbnQgdHJpZ2dlcmluZyBzZXF1ZW5jZSB3aGVuIGVudGVyaW5nIG51bWJlcnMgaW4gY2hpbmVzZSBpbnB1dCAoU2FmYXJpKVxuICB2YXIgb25CZWZvcmVJbnB1dCA9IGZ1bmN0aW9uIG9uQmVmb3JlSW5wdXQoKSB7XG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIHZhciBrZXkgPSBldmVudC5rZXksXG4gICAgICBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIHVzZXJUeXBpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgc2hpZnRLZXlSZWYuY3VycmVudCA9IHNoaWZ0S2V5O1xuICAgIGlmIChrZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmICghY29tcG9zaXRpb25SZWYuY3VycmVudCkge1xuICAgICAgICB1c2VyVHlwaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZsdXNoSW5wdXRWYWx1ZShmYWxzZSk7XG4gICAgICBvblByZXNzRW50ZXIgPT09IG51bGwgfHwgb25QcmVzc0VudGVyID09PSB2b2lkIDAgfHwgb25QcmVzc0VudGVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGtleWJvYXJkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvIHN0ZXBcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgJiYgWydVcCcsICdBcnJvd1VwJywgJ0Rvd24nLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgb25JbnRlcm5hbFN0ZXAoa2V5ID09PSAnVXAnIHx8IGtleSA9PT0gJ0Fycm93VXAnKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoKSB7XG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2hpZnRLZXlSZWYuY3VycmVudCA9IGZhbHNlO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjaGFuZ2VPbldoZWVsICYmIGZvY3VzKSB7XG4gICAgICB2YXIgb25XaGVlbCA9IGZ1bmN0aW9uIG9uV2hlZWwoZXZlbnQpIHtcbiAgICAgICAgLy8gbW92aW5nIG1vdXNlIHdoZWVsIHJpc2VzIHdoZWVsIGV2ZW50IHdpdGggZGVsdGFZIDwgMFxuICAgICAgICAvLyBzY3JvbGwgdmFsdWUgZ3Jvd3MgZnJvbSB0b3AgdG8gYm90dG9tLCBhcyBzY3JlZW4gWSBjb29yZGluYXRlXG4gICAgICAgIG9uSW50ZXJuYWxTdGVwKGV2ZW50LmRlbHRhWSA8IDApO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcbiAgICAgIHZhciBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgLy8gUmVhY3Qgb25XaGVlbCBpcyBwYXNzaXZlIGFuZCB3ZSBjYW4ndCBwcmV2ZW50RGVmYXVsdCgpIGluIGl0LlxuICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIHNob3VsZCBzdWJzY3JpYmUgd2l0aCBET00gbGlzdGVuZXJcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjM2NjMwMjUvcmVhY3Qtb253aGVlbC1oYW5kbGVyLWNhbnQtcHJldmVudGRlZmF1bHQtYmVjYXVzZS1pdHMtYS1wYXNzaXZlLWV2ZW50LWxpc3RlbmV2XG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwge1xuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gPj4+IEZvY3VzICYgQmx1clxuICB2YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICAgIGlmIChjaGFuZ2VPbkJsdXIpIHtcbiAgICAgIGZsdXNoSW5wdXRWYWx1ZShmYWxzZSk7XG4gICAgfVxuICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICB1c2VyVHlwaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBDb250cm9sbGVkID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElucHV0IGJ5IHByZWNpc2lvbiAmIGZvcm1hdHRlclxuICB1c2VMYXlvdXRVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZGVjaW1hbFZhbHVlLmlzSW52YWxpZGF0ZSgpKSB7XG4gICAgICBzZXRJbnB1dFZhbHVlKGRlY2ltYWxWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSwgW3ByZWNpc2lvbiwgZm9ybWF0dGVyXSk7XG5cbiAgLy8gSW5wdXQgYnkgdmFsdWVcbiAgdXNlTGF5b3V0VXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3VmFsdWUgPSBnZXRNaW5pRGVjaW1hbCh2YWx1ZSk7XG4gICAgc2V0RGVjaW1hbFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB2YXIgY3VycmVudFBhcnNlZFZhbHVlID0gZ2V0TWluaURlY2ltYWwobWVyZ2VkUGFyc2VyKGlucHV0VmFsdWUpKTtcblxuICAgIC8vIFdoZW4gdXNlciB0eXBpbmcgZnJvbSBgMS4yYCB0byBgMS5gLCB3ZSBzaG91bGQgbm90IGNvbnZlcnQgdG8gYDFgIGltbWVkaWF0ZWx5LlxuICAgIC8vIEJ1dCBsZXQgaXQgZ28gaWYgdXNlciBzZXQgYGZvcm1hdHRlcmBcbiAgICBpZiAoIW5ld1ZhbHVlLmVxdWFscyhjdXJyZW50UGFyc2VkVmFsdWUpIHx8ICF1c2VyVHlwaW5nUmVmLmN1cnJlbnQgfHwgZm9ybWF0dGVyKSB7XG4gICAgICAvLyBVcGRhdGUgdmFsdWUgYXMgZWZmZWN0XG4gICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlLCB1c2VyVHlwaW5nUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDdXJzb3IgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VMYXlvdXRVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIHJlc3RvcmVDdXJzb3IoKTtcbiAgICB9XG4gIH0sIFtpbnB1dFZhbHVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogZG9tUmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1mb2N1c2VkXCIpLCBmb2N1cyksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yZWFkb25seVwiKSwgcmVhZE9ubHkpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdC1hLW51bWJlclwiKSwgZGVjaW1hbFZhbHVlLmlzTmFOKCkpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW91dC1vZi1yYW5nZVwiKSwgIWRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSAmJiAhaXNJblJhbmdlKGRlY2ltYWxWYWx1ZSkpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICAgIHNldEZvY3VzKHRydWUpO1xuICAgIH0sXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgb25LZXlVcDogb25LZXlVcCxcbiAgICBvbkNvbXBvc2l0aW9uU3RhcnQ6IG9uQ29tcG9zaXRpb25TdGFydCxcbiAgICBvbkNvbXBvc2l0aW9uRW5kOiBvbkNvbXBvc2l0aW9uRW5kLFxuICAgIG9uQmVmb3JlSW5wdXQ6IG9uQmVmb3JlSW5wdXRcbiAgfSwgY29udHJvbHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3RlcEhhbmRsZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB1cE5vZGU6IHVwSGFuZGxlcixcbiAgICBkb3duTm9kZTogZG93bkhhbmRsZXIsXG4gICAgdXBEaXNhYmxlZDogdXBEaXNhYmxlZCxcbiAgICBkb3duRGlzYWJsZWQ6IGRvd25EaXNhYmxlZCxcbiAgICBvblN0ZXA6IG9uSW50ZXJuYWxTdGVwXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChpbnB1dENsYXNzTmFtZSwgXCItd3JhcFwiKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgcm9sZTogXCJzcGluYnV0dG9uXCIsXG4gICAgXCJhcmlhLXZhbHVlbWluXCI6IG1pbixcbiAgICBcImFyaWEtdmFsdWVtYXhcIjogbWF4LFxuICAgIFwiYXJpYS12YWx1ZW5vd1wiOiBkZWNpbWFsVmFsdWUuaXNJbnZhbGlkYXRlKCkgPyBudWxsIDogZGVjaW1hbFZhbHVlLnRvU3RyaW5nKCksXG4gICAgc3RlcDogc3RlcFxuICB9LCBpbnB1dFByb3BzLCB7XG4gICAgcmVmOiBjb21wb3NlUmVmKGlucHV0UmVmLCByZWYpLFxuICAgIGNsYXNzTmFtZTogaW5wdXRDbGFzc05hbWUsXG4gICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uSW50ZXJuYWxJbnB1dCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5XG4gIH0pKSkpO1xufSk7XG52YXIgSW5wdXROdW1iZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLWlucHV0LW51bWJlcicgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgcHJlZml4ID0gcHJvcHMucHJlZml4LFxuICAgIHN1ZmZpeCA9IHByb3BzLnN1ZmZpeCxcbiAgICBhZGRvbkJlZm9yZSA9IHByb3BzLmFkZG9uQmVmb3JlLFxuICAgIGFkZG9uQWZ0ZXIgPSBwcm9wcy5hZGRvbkFmdGVyLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBjbGFzc05hbWVzID0gcHJvcHMuY2xhc3NOYW1lcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgdmFyIGhvbGRlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGlucHV0TnVtYmVyRG9tUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgaW5wdXRGb2N1c1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMob3B0aW9uKSB7XG4gICAgaWYgKGlucHV0Rm9jdXNSZWYuY3VycmVudCkge1xuICAgICAgdHJpZ2dlckZvY3VzKGlucHV0Rm9jdXNSZWYuY3VycmVudCwgb3B0aW9uKTtcbiAgICB9XG4gIH07XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb3h5T2JqZWN0KGlucHV0Rm9jdXNSZWYuY3VycmVudCwge1xuICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgbmF0aXZlRWxlbWVudDogaG9sZGVyUmVmLmN1cnJlbnQubmF0aXZlRWxlbWVudCB8fCBpbnB1dE51bWJlckRvbVJlZi5jdXJyZW50XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgdHJpZ2dlckZvY3VzOiBmb2N1cyxcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgICBhZGRvbkFmdGVyOiBhZGRvbkFmdGVyLFxuICAgIGFkZG9uQmVmb3JlOiBhZGRvbkJlZm9yZSxcbiAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIGFmZml4V3JhcHBlcjogJ2RpdicsXG4gICAgICBncm91cFdyYXBwZXI6ICdkaXYnLFxuICAgICAgd3JhcHBlcjogJ2RpdicsXG4gICAgICBncm91cEFkZG9uOiAnZGl2J1xuICAgIH0sXG4gICAgcmVmOiBob2xkZXJSZWZcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxJbnB1dE51bWJlciwgX2V4dGVuZHMoe1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWY6IGlucHV0Rm9jdXNSZWYsXG4gICAgZG9tUmVmOiBpbnB1dE51bWJlckRvbVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5pbnB1dFxuICB9LCByZXN0KSkpO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBJbnB1dE51bWJlci5kaXNwbGF5TmFtZSA9ICdJbnB1dE51bWJlcic7XG59XG5leHBvcnQgZGVmYXVsdCBJbnB1dE51bWJlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bmtub3duLXByb3BlcnR5ICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VNb2JpbGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTW9iaWxlXCI7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuXG4vKipcbiAqIFdoZW4gY2xpY2sgYW5kIGhvbGQgb24gYSBidXR0b24gLSB0aGUgc3BlZWQgb2YgYXV0byBjaGFuZ2luZyB0aGUgdmFsdWUuXG4gKi9cbnZhciBTVEVQX0lOVEVSVkFMID0gMjAwO1xuXG4vKipcbiAqIFdoZW4gY2xpY2sgYW5kIGhvbGQgb24gYSBidXR0b24gLSB0aGUgZGVsYXkgYmVmb3JlIGF1dG8gY2hhbmdpbmcgdGhlIHZhbHVlLlxuICovXG52YXIgU1RFUF9ERUxBWSA9IDYwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0ZXBIYW5kbGVyKF9yZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IF9yZWYucHJlZml4Q2xzLFxuICAgIHVwTm9kZSA9IF9yZWYudXBOb2RlLFxuICAgIGRvd25Ob2RlID0gX3JlZi5kb3duTm9kZSxcbiAgICB1cERpc2FibGVkID0gX3JlZi51cERpc2FibGVkLFxuICAgIGRvd25EaXNhYmxlZCA9IF9yZWYuZG93bkRpc2FibGVkLFxuICAgIG9uU3RlcCA9IF9yZWYub25TdGVwO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU3RlcCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHN0ZXBUaW1lb3V0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBmcmFtZUlkcyA9IFJlYWN0LnVzZVJlZihbXSk7XG4gIHZhciBvblN0ZXBSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgb25TdGVwUmVmLmN1cnJlbnQgPSBvblN0ZXA7XG4gIHZhciBvblN0b3BTdGVwID0gZnVuY3Rpb24gb25TdG9wU3RlcCgpIHtcbiAgICBjbGVhclRpbWVvdXQoc3RlcFRpbWVvdXRSZWYuY3VycmVudCk7XG4gIH07XG5cbiAgLy8gV2Ugd2lsbCBpbnRlcnZhbCB1cGRhdGUgc3RlcCB3aGVuIGhvbGQgbW91c2UgZG93blxuICB2YXIgb25TdGVwTW91c2VEb3duID0gZnVuY3Rpb24gb25TdGVwTW91c2VEb3duKGUsIHVwKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIG9uU3RvcFN0ZXAoKTtcbiAgICBvblN0ZXBSZWYuY3VycmVudCh1cCk7XG5cbiAgICAvLyBMb29wIHN0ZXAgZm9yIGludGVydmFsXG4gICAgZnVuY3Rpb24gbG9vcFN0ZXAoKSB7XG4gICAgICBvblN0ZXBSZWYuY3VycmVudCh1cCk7XG4gICAgICBzdGVwVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChsb29wU3RlcCwgU1RFUF9JTlRFUlZBTCk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgdGltZSBwcmVzcyB3aWxsIHdhaXQgc29tZSB0aW1lIHRvIHRyaWdnZXIgbG9vcCBzdGVwIHVwZGF0ZVxuICAgIHN0ZXBUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGxvb3BTdGVwLCBTVEVQX0RFTEFZKTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb25TdG9wU3RlcCgpO1xuICAgICAgZnJhbWVJZHMuY3VycmVudC5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICByZXR1cm4gcmFmLmNhbmNlbChpZCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpc01vYmlsZSA9IHVzZU1vYmlsZSgpO1xuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgaGFuZGxlckNsYXNzTmFtZSA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGFuZGxlclwiKTtcbiAgdmFyIHVwQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhoYW5kbGVyQ2xhc3NOYW1lLCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi11cFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi11cC1kaXNhYmxlZFwiKSwgdXBEaXNhYmxlZCkpO1xuICB2YXIgZG93bkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoaGFuZGxlckNsYXNzTmFtZSwgXCJcIi5jb25jYXQoaGFuZGxlckNsYXNzTmFtZSwgXCItZG93blwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi1kb3duLWRpc2FibGVkXCIpLCBkb3duRGlzYWJsZWQpKTtcblxuICAvLyBmaXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQzMDg4XG4gIC8vIEluIFNhZmFyaSwgV2hlbiB3ZSBmaXJlIG9ubW91c2Vkb3duIGFuZCBvbm1vdXNldXAgZXZlbnRzIGluIHF1aWNrIHN1Y2Nlc3Npb24sIFxuICAvLyB0aGVyZSBtYXkgYmUgYSBwcm9ibGVtIHRoYXQgdGhlIG9ubW91c2V1cCBldmVudHMgYXJlIGV4ZWN1dGVkIGZpcnN0LCBcbiAgLy8gcmVzdWx0aW5nIGluIGEgZGlzb3JkZXJlZCBwcm9ncmFtIGV4ZWN1dGlvbi5cbiAgLy8gU28sIHdlIG5lZWQgdG8gdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgdGhhdCB0aGUgb25tb3VzZXVwIGV2ZW50IGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBvbm1vdXNlZG93biBldmVudC5cbiAgdmFyIHNhZmVPblN0b3BTdGVwID0gZnVuY3Rpb24gc2FmZU9uU3RvcFN0ZXAoKSB7XG4gICAgcmV0dXJuIGZyYW1lSWRzLmN1cnJlbnQucHVzaChyYWYob25TdG9wU3RlcCkpO1xuICB9O1xuICB2YXIgc2hhcmVkSGFuZGxlclByb3BzID0ge1xuICAgIHVuc2VsZWN0YWJsZTogJ29uJyxcbiAgICByb2xlOiAnYnV0dG9uJyxcbiAgICBvbk1vdXNlVXA6IHNhZmVPblN0b3BTdGVwLFxuICAgIG9uTW91c2VMZWF2ZTogc2FmZU9uU3RvcFN0ZXBcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGhhbmRsZXJDbGFzc05hbWUsIFwiLXdyYXBcIilcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBzaGFyZWRIYW5kbGVyUHJvcHMsIHtcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgb25TdGVwTW91c2VEb3duKGUsIHRydWUpO1xuICAgIH0sXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiSW5jcmVhc2UgVmFsdWVcIixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogdXBEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IHVwQ2xhc3NOYW1lXG4gIH0pLCB1cE5vZGUgfHwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICB1bnNlbGVjdGFibGU6IFwib25cIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGFuZGxlci11cC1pbm5lclwiKVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkSGFuZGxlclByb3BzLCB7XG4gICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgIG9uU3RlcE1vdXNlRG93bihlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBcImFyaWEtbGFiZWxcIjogXCJEZWNyZWFzZSBWYWx1ZVwiLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkb3duRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBkb3duQ2xhc3NOYW1lXG4gIH0pLCBkb3duTm9kZSB8fCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIHVuc2VsZWN0YWJsZTogXCJvblwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oYW5kbGVyLWRvd24taW5uZXJcIilcbiAgfSkpKTtcbn0iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG4vKipcbiAqIEtlZXAgaW5wdXQgY3Vyc29yIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGlmIHBvc3NpYmxlLlxuICogSXMgdGhpcyBuZWNlc3Nhcnkgc2luY2Ugd2UgaGF2ZSBgZm9ybWF0dGVyYCB3aGljaCBtYXkgbWFzcyB0aGUgY29udGVudD9cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ3Vyc29yKGlucHV0LCBmb2N1c2VkKSB7XG4gIHZhciBzZWxlY3Rpb25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIGZ1bmN0aW9uIHJlY29yZEN1cnNvcigpIHtcbiAgICAvLyBSZWNvcmQgcG9zaXRpb25cbiAgICB0cnkge1xuICAgICAgdmFyIHN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZCA9IGlucHV0LnNlbGVjdGlvbkVuZCxcbiAgICAgICAgdmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgIHZhciBiZWZvcmVUeHQgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpO1xuICAgICAgdmFyIGFmdGVyVHh0ID0gdmFsdWUuc3Vic3RyaW5nKGVuZCk7XG4gICAgICBzZWxlY3Rpb25SZWYuY3VycmVudCA9IHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBiZWZvcmVUeHQ6IGJlZm9yZVR4dCxcbiAgICAgICAgYWZ0ZXJUeHQ6IGFmdGVyVHh0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEZpeCBlcnJvciBpbiBDaHJvbWU6XG4gICAgICAvLyBGYWlsZWQgdG8gcmVhZCB0aGUgJ3NlbGVjdGlvblN0YXJ0JyBwcm9wZXJ0eSBmcm9tICdIVE1MSW5wdXRFbGVtZW50J1xuICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjExNzc0ODkvMzA0MDYwNVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIGxvZ2ljOlxuICAgKiAgMS4gYmFjayBzdHJpbmcgc2FtZVxuICAgKiAgMi4gc3RhcnQgc3RyaW5nIHNhbWVcbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDdXJzb3IoKSB7XG4gICAgaWYgKGlucHV0ICYmIHNlbGVjdGlvblJlZi5jdXJyZW50ICYmIGZvY3VzZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICB2YXIgX3NlbGVjdGlvblJlZiRjdXJyZW50ID0gc2VsZWN0aW9uUmVmLmN1cnJlbnQsXG4gICAgICAgICAgYmVmb3JlVHh0ID0gX3NlbGVjdGlvblJlZiRjdXJyZW50LmJlZm9yZVR4dCxcbiAgICAgICAgICBhZnRlclR4dCA9IF9zZWxlY3Rpb25SZWYkY3VycmVudC5hZnRlclR4dCxcbiAgICAgICAgICBzdGFydCA9IF9zZWxlY3Rpb25SZWYkY3VycmVudC5zdGFydDtcbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChiZWZvcmVUeHQpKSB7XG4gICAgICAgICAgc3RhcnRQb3MgPSBiZWZvcmVUeHQubGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKGFmdGVyVHh0KSkge1xuICAgICAgICAgIHN0YXJ0UG9zID0gdmFsdWUubGVuZ3RoIC0gc2VsZWN0aW9uUmVmLmN1cnJlbnQuYWZ0ZXJUeHQubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBiZWZvcmVMYXN0Q2hhciA9IGJlZm9yZVR4dFtzdGFydCAtIDFdO1xuICAgICAgICAgIHZhciBuZXdJbmRleCA9IHZhbHVlLmluZGV4T2YoYmVmb3JlTGFzdENoYXIsIHN0YXJ0IC0gMSk7XG4gICAgICAgICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgc3RhcnRQb3MgPSBuZXdJbmRleCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0UG9zLCBzdGFydFBvcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHdhcm5pbmcoZmFsc2UsIFwiU29tZXRoaW5nIHdhcm5pbmcgb2YgY3Vyc29yIHJlc3RvcmUuIFBsZWFzZSBmaXJlIGlzc3VlIGFib3V0IHRoaXM6IFwiLmNvbmNhdChlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtyZWNvcmRDdXJzb3IsIHJlc3RvcmVDdXJzb3JdO1xufSIsImltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcblxuLyoqXG4gKiBBbHdheXMgdHJpZ2dlciBsYXRlc3Qgb25jZSB3aGVuIGNhbGwgbXVsdGlwbGUgdGltZVxuICovXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xuICB2YXIgaWRSZWYgPSB1c2VSZWYoMCk7XG4gIHZhciBjbGVhblVwID0gZnVuY3Rpb24gY2xlYW5VcCgpIHtcbiAgICByYWYuY2FuY2VsKGlkUmVmLmN1cnJlbnQpO1xuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjbGVhblVwO1xuICB9LCBbXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjbGVhblVwKCk7XG4gICAgaWRSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9O1xufSk7IiwiaW1wb3J0IElucHV0TnVtYmVyIGZyb20gXCIuL0lucHV0TnVtYmVyXCI7XG5leHBvcnQgZGVmYXVsdCBJbnB1dE51bWJlcjsiLCJpbXBvcnQgeyB0cmltTnVtYmVyLCBudW0yc3RyIH0gZnJvbSAnQHJjLWNvbXBvbmVudC9taW5pLWRlY2ltYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY3VwbGVTdGVwcyhzdGVwKSB7XG4gIHZhciBzdGVwU3RyID0gdHlwZW9mIHN0ZXAgPT09ICdudW1iZXInID8gbnVtMnN0cihzdGVwKSA6IHRyaW1OdW1iZXIoc3RlcCkuZnVsbFN0cjtcbiAgdmFyIGhhc1BvaW50ID0gc3RlcFN0ci5pbmNsdWRlcygnLicpO1xuICBpZiAoIWhhc1BvaW50KSB7XG4gICAgcmV0dXJuIHN0ZXAgKyAnMCc7XG4gIH1cbiAgcmV0dXJuIHRyaW1OdW1iZXIoc3RlcFN0ci5yZXBsYWNlKC8oXFxkKVxcLihcXGQpL2csICckMSQyLicpKS5mdWxsU3RyO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhc0FkZG9uLCBoYXNQcmVmaXhTdWZmaXggfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsc1wiO1xudmFyIEJhc2VJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBfcHJvcHMsIF9wcm9wczIsIF9wcm9wczM7XG4gIHZhciBpbnB1dEVsID0gcHJvcHMuaW5wdXRFbGVtZW50LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeCA9IHByb3BzLnByZWZpeCxcbiAgICBzdWZmaXggPSBwcm9wcy5zdWZmaXgsXG4gICAgYWRkb25CZWZvcmUgPSBwcm9wcy5hZGRvbkJlZm9yZSxcbiAgICBhZGRvbkFmdGVyID0gcHJvcHMuYWRkb25BZnRlcixcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQsXG4gICAgdHJpZ2dlckZvY3VzID0gcHJvcHMudHJpZ2dlckZvY3VzLFxuICAgIGFsbG93Q2xlYXIgPSBwcm9wcy5hbGxvd0NsZWFyLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgaGFuZGxlUmVzZXQgPSBwcm9wcy5oYW5kbGVSZXNldCxcbiAgICBoaWRkZW4gPSBwcm9wcy5oaWRkZW4sXG4gICAgY2xhc3NlcyA9IHByb3BzLmNsYXNzZXMsXG4gICAgY2xhc3NOYW1lcyA9IHByb3BzLmNsYXNzTmFtZXMsXG4gICAgZGF0YUF0dHJzID0gcHJvcHMuZGF0YUF0dHJzLFxuICAgIHN0eWxlcyA9IHByb3BzLnN0eWxlcyxcbiAgICBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICBvbkNsZWFyID0gcHJvcHMub25DbGVhcjtcbiAgdmFyIGlucHV0RWxlbWVudCA9IGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSB2b2lkIDAgPyBjaGlsZHJlbiA6IGlucHV0RWw7XG4gIHZhciBBZmZpeFdyYXBwZXJDb21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLmFmZml4V3JhcHBlcikgfHwgJ3NwYW4nO1xuICB2YXIgR3JvdXBXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5ncm91cFdyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIFdyYXBwZXJDb21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLndyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIEdyb3VwQWRkb25Db21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLmdyb3VwQWRkb24pIHx8ICdzcGFuJztcbiAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG9uSW5wdXRDbGljayA9IGZ1bmN0aW9uIG9uSW5wdXRDbGljayhlKSB7XG4gICAgdmFyIF9jb250YWluZXJSZWYkY3VycmVudDtcbiAgICBpZiAoKF9jb250YWluZXJSZWYkY3VycmVudCA9IGNvbnRhaW5lclJlZi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfY29udGFpbmVyUmVmJGN1cnJlbnQgIT09IHZvaWQgMCAmJiBfY29udGFpbmVyUmVmJGN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICB0cmlnZ2VyRm9jdXMgPT09IG51bGwgfHwgdHJpZ2dlckZvY3VzID09PSB2b2lkIDAgfHwgdHJpZ2dlckZvY3VzKCk7XG4gICAgfVxuICB9O1xuICB2YXIgaGFzQWZmaXggPSBoYXNQcmVmaXhTdWZmaXgocHJvcHMpO1xuICB2YXIgZWxlbWVudCA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaW5wdXRFbGVtZW50LCB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNsYXNzTmFtZTogY2xzeCgoX3Byb3BzID0gaW5wdXRFbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wcy5jbGFzc05hbWUsICFoYXNBZmZpeCAmJiAoY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnZhcmlhbnQpKSB8fCBudWxsXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZWYgPT09PT09PT09PT09PT09PT09PT09PT09IC8vXG4gIHZhciBncm91cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmF0aXZlRWxlbWVudDogZ3JvdXBSZWYuY3VycmVudCB8fCBjb250YWluZXJSZWYuY3VycmVudFxuICAgIH07XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PSBQcmVmaXggJiBTdWZmaXggPT09PT09PT09PT09PT09PT09IC8vXG4gIGlmIChoYXNBZmZpeCkge1xuICAgIC8vID09PT09PT09PT09PT09PT09PSBDbGVhciBJY29uID09PT09PT09PT09PT09PT09PSAvL1xuICAgIHZhciBjbGVhckljb24gPSBudWxsO1xuICAgIGlmIChhbGxvd0NsZWFyKSB7XG4gICAgICB2YXIgbmVlZENsZWFyID0gIWRpc2FibGVkICYmICFyZWFkT25seSAmJiB2YWx1ZTtcbiAgICAgIHZhciBjbGVhckljb25DbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNsZWFyLWljb25cIik7XG4gICAgICB2YXIgaWNvbk5vZGUgPSBfdHlwZW9mKGFsbG93Q2xlYXIpID09PSAnb2JqZWN0JyAmJiBhbGxvd0NsZWFyICE9PSBudWxsICYmIGFsbG93Q2xlYXIgIT09IHZvaWQgMCAmJiBhbGxvd0NsZWFyLmNsZWFySWNvbiA/IGFsbG93Q2xlYXIuY2xlYXJJY29uIDogJ+Kclic7XG4gICAgICBjbGVhckljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGhhbmRsZVJlc2V0ID09PSBudWxsIHx8IGhhbmRsZVJlc2V0ID09PSB2b2lkIDAgfHwgaGFuZGxlUmVzZXQoZXZlbnQpO1xuICAgICAgICAgIG9uQ2xlYXIgPT09IG51bGwgfHwgb25DbGVhciA9PT0gdm9pZCAwIHx8IG9uQ2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgdHJpZ2dlciBvbkJsdXIgd2hlbiBjbGVhciBpbnB1dFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy8zMTIwMFxuICAgICAgICAsXG4gICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsZWFySWNvbkNscywgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoY2xlYXJJY29uQ2xzLCBcIi1oaWRkZW5cIiksICFuZWVkQ2xlYXIpLCBcIlwiLmNvbmNhdChjbGVhckljb25DbHMsIFwiLWhhcy1zdWZmaXhcIiksICEhc3VmZml4KSlcbiAgICAgIH0sIGljb25Ob2RlKTtcbiAgICB9XG4gICAgdmFyIGFmZml4V3JhcHBlclByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItYWZmaXgtd3JhcHBlclwiKTtcbiAgICB2YXIgYWZmaXhXcmFwcGVyQ2xzID0gY2xzeChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLWZvY3VzZWRcIiksIGZvY3VzZWQpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLXJlYWRvbmx5XCIpLCByZWFkT25seSksIFwiXCIuY29uY2F0KGFmZml4V3JhcHBlclByZWZpeENscywgXCItaW5wdXQtd2l0aC1jbGVhci1idG5cIiksIHN1ZmZpeCAmJiBhbGxvd0NsZWFyICYmIHZhbHVlKSwgY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLmFmZml4V3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmFmZml4V3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnZhcmlhbnQpO1xuICAgIHZhciBzdWZmaXhOb2RlID0gKHN1ZmZpeCB8fCBhbGxvd0NsZWFyKSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3VmZml4XCIpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuc3VmZml4KSxcbiAgICAgIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuc3VmZml4XG4gICAgfSwgY2xlYXJJY29uLCBzdWZmaXgpO1xuICAgIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBZmZpeFdyYXBwZXJDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogYWZmaXhXcmFwcGVyQ2xzLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5hZmZpeFdyYXBwZXIsXG4gICAgICBvbkNsaWNrOiBvbklucHV0Q2xpY2tcbiAgICB9LCBkYXRhQXR0cnMgPT09IG51bGwgfHwgZGF0YUF0dHJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhQXR0cnMuYWZmaXhXcmFwcGVyLCB7XG4gICAgICByZWY6IGNvbnRhaW5lclJlZlxuICAgIH0pLCBwcmVmaXggJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXByZWZpeFwiKSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnByZWZpeCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnByZWZpeFxuICAgIH0sIHByZWZpeCksIGVsZW1lbnQsIHN1ZmZpeE5vZGUpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09IEFkZG9uID09PT09PT09PT09PT09PT09PSAvL1xuICBpZiAoaGFzQWRkb24ocHJvcHMpKSB7XG4gICAgdmFyIHdyYXBwZXJDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWdyb3VwXCIpO1xuICAgIHZhciBhZGRvbkNscyA9IFwiXCIuY29uY2F0KHdyYXBwZXJDbHMsIFwiLWFkZG9uXCIpO1xuICAgIHZhciBncm91cFdyYXBwZXJDbHMgPSBcIlwiLmNvbmNhdCh3cmFwcGVyQ2xzLCBcIi13cmFwcGVyXCIpO1xuICAgIHZhciBtZXJnZWRXcmFwcGVyQ2xhc3NOYW1lID0gY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXdyYXBwZXJcIiksIHdyYXBwZXJDbHMsIGNsYXNzZXMgPT09IG51bGwgfHwgY2xhc3NlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3Nlcy53cmFwcGVyLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMud3JhcHBlcik7XG4gICAgdmFyIG1lcmdlZEdyb3VwQ2xhc3NOYW1lID0gY2xzeChncm91cFdyYXBwZXJDbHMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoZ3JvdXBXcmFwcGVyQ2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMuZ3JvdXAsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5ncm91cFdyYXBwZXIpO1xuXG4gICAgLy8gTmVlZCBhbm90aGVyIHdyYXBwZXIgZm9yIGNoYW5naW5nIGRpc3BsYXk6dGFibGUgdG8gZGlzcGxheTppbmxpbmUtYmxvY2tcbiAgICAvLyBhbmQgcHV0IHN0eWxlIHByb3AgaW4gd3JhcHBlclxuICAgIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cFdyYXBwZXJDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VkR3JvdXBDbGFzc05hbWUsXG4gICAgICByZWY6IGdyb3VwUmVmXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlckNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBtZXJnZWRXcmFwcGVyQ2xhc3NOYW1lXG4gICAgfSwgYWRkb25CZWZvcmUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBBZGRvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBhZGRvbkNsc1xuICAgIH0sIGFkZG9uQmVmb3JlKSwgZWxlbWVudCwgYWRkb25BZnRlciAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cEFkZG9uQ29tcG9uZW50LCB7XG4gICAgICBjbGFzc05hbWU6IGFkZG9uQ2xzXG4gICAgfSwgYWRkb25BZnRlcikpKTtcbiAgfVxuXG4gIC8vIGBjbGFzc05hbWVgIGFuZCBgc3R5bGVgIGFyZSBhbHdheXMgb24gdGhlIHJvb3QgZWxlbWVudFxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7XG4gICAgY2xhc3NOYW1lOiBjbHN4KChfcHJvcHMyID0gZWxlbWVudC5wcm9wcykgPT09IG51bGwgfHwgX3Byb3BzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Byb3BzMi5jbGFzc05hbWUsIGNsYXNzTmFtZSkgfHwgbnVsbCxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCAoX3Byb3BzMyA9IGVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9wcm9wczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wczMuc3R5bGUpLCBzdHlsZSksXG4gICAgaGlkZGVuOiBoaWRkZW5cbiAgfSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IEJhc2VJbnB1dDsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJvblByZXNzRW50ZXJcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicHJlZml4Q2xzXCIsIFwiZGlzYWJsZWRcIiwgXCJodG1sU2l6ZVwiLCBcImNsYXNzTmFtZVwiLCBcIm1heExlbmd0aFwiLCBcInN1ZmZpeFwiLCBcInNob3dDb3VudFwiLCBcImNvdW50XCIsIFwidHlwZVwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVzXCIsIFwic3R5bGVzXCIsIFwib25Db21wb3NpdGlvblN0YXJ0XCIsIFwib25Db21wb3NpdGlvbkVuZFwiXTtcbmltcG9ydCBjbHN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgb21pdCBmcm9tIFwicmMtdXRpbC9lcy9vbWl0XCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlRWZmZWN0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJhc2VJbnB1dCBmcm9tIFwiLi9CYXNlSW5wdXRcIjtcbmltcG9ydCB1c2VDb3VudCBmcm9tIFwiLi9ob29rcy91c2VDb3VudFwiO1xuaW1wb3J0IHsgcmVzb2x2ZU9uQ2hhbmdlLCB0cmlnZ2VyRm9jdXMgfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsc1wiO1xudmFyIElucHV0ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGF1dG9Db21wbGV0ZSA9IHByb3BzLmF1dG9Db21wbGV0ZSxcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICBvblByZXNzRW50ZXIgPSBwcm9wcy5vblByZXNzRW50ZXIsXG4gICAgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIG9uS2V5VXAgPSBwcm9wcy5vbktleVVwLFxuICAgIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLWlucHV0JyA6IF9wcm9wcyRwcmVmaXhDbHMsXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBodG1sU2l6ZSA9IHByb3BzLmh0bWxTaXplLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBtYXhMZW5ndGggPSBwcm9wcy5tYXhMZW5ndGgsXG4gICAgc3VmZml4ID0gcHJvcHMuc3VmZml4LFxuICAgIHNob3dDb3VudCA9IHByb3BzLnNob3dDb3VudCxcbiAgICBjb3VudCA9IHByb3BzLmNvdW50LFxuICAgIF9wcm9wcyR0eXBlID0gcHJvcHMudHlwZSxcbiAgICB0eXBlID0gX3Byb3BzJHR5cGUgPT09IHZvaWQgMCA/ICd0ZXh0JyA6IF9wcm9wcyR0eXBlLFxuICAgIGNsYXNzZXMgPSBwcm9wcy5jbGFzc2VzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIHN0eWxlcyA9IHByb3BzLnN0eWxlcyxcbiAgICBfb25Db21wb3NpdGlvblN0YXJ0ID0gcHJvcHMub25Db21wb3NpdGlvblN0YXJ0LFxuICAgIG9uQ29tcG9zaXRpb25FbmQgPSBwcm9wcy5vbkNvbXBvc2l0aW9uRW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgZm9jdXNlZCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Rm9jdXNlZCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjb21wb3NpdGlvblJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBrZXlMb2NrUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlucHV0UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgaG9sZGVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgZm9jdXMgPSBmdW5jdGlvbiBmb2N1cyhvcHRpb24pIHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgdHJpZ2dlckZvY3VzKGlucHV0UmVmLmN1cnJlbnQsIG9wdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKHByb3BzLmRlZmF1bHRWYWx1ZSwge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgdmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcbiAgdmFyIGZvcm1hdFZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09IFNlbGVjdCBSYW5nZSA9PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHNlbGVjdGlvbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0U2VsZWN0aW9uID0gX3VzZVN0YXRlNFsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IENvdW50ID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjb3VudENvbmZpZyA9IHVzZUNvdW50KGNvdW50LCBzaG93Q291bnQpO1xuICB2YXIgbWVyZ2VkTWF4ID0gY291bnRDb25maWcubWF4IHx8IG1heExlbmd0aDtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gY291bnRDb25maWcuc3RyYXRlZ3koZm9ybWF0VmFsdWUpO1xuICB2YXIgaXNPdXRPZlJhbmdlID0gISFtZXJnZWRNYXggJiYgdmFsdWVMZW5ndGggPiBtZXJnZWRNYXg7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gUmVmID09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfaG9sZGVyUmVmJGN1cnJlbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzOiBmb2N1cyxcbiAgICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDtcbiAgICAgICAgKF9pbnB1dFJlZiRjdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudC5ibHVyKCk7XG4gICAgICB9LFxuICAgICAgc2V0U2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQyO1xuICAgICAgICAoX2lucHV0UmVmJGN1cnJlbnQyID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQyID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQyLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7XG4gICAgICB9LFxuICAgICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDM7XG4gICAgICAgIChfaW5wdXRSZWYkY3VycmVudDMgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaW5wdXRSZWYkY3VycmVudDMgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudDMuc2VsZWN0KCk7XG4gICAgICB9LFxuICAgICAgaW5wdXQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICBuYXRpdmVFbGVtZW50OiAoKF9ob2xkZXJSZWYkY3VycmVudCA9IGhvbGRlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaG9sZGVyUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob2xkZXJSZWYkY3VycmVudC5uYXRpdmVFbGVtZW50KSB8fCBpbnB1dFJlZi5jdXJyZW50XG4gICAgfTtcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIHNldEZvY3VzZWQoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgIHJldHVybiBwcmV2ICYmIGRpc2FibGVkID8gZmFsc2UgOiBwcmV2O1xuICAgIH0pO1xuICB9LCBbZGlzYWJsZWRdKTtcbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKGUsIGN1cnJlbnRWYWx1ZSwgaW5mbykge1xuICAgIHZhciBjdXRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgJiYgY291bnRDb25maWcuZXhjZWVkRm9ybWF0dGVyICYmIGNvdW50Q29uZmlnLm1heCAmJiBjb3VudENvbmZpZy5zdHJhdGVneShjdXJyZW50VmFsdWUpID4gY291bnRDb25maWcubWF4KSB7XG4gICAgICBjdXRWYWx1ZSA9IGNvdW50Q29uZmlnLmV4Y2VlZEZvcm1hdHRlcihjdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbWF4OiBjb3VudENvbmZpZy5tYXhcbiAgICAgIH0pO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gY3V0VmFsdWUpIHtcbiAgICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50NCwgX2lucHV0UmVmJGN1cnJlbnQ1O1xuICAgICAgICBzZXRTZWxlY3Rpb24oWygoX2lucHV0UmVmJGN1cnJlbnQ0ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudDQuc2VsZWN0aW9uU3RhcnQpIHx8IDAsICgoX2lucHV0UmVmJGN1cnJlbnQ1ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudDUuc2VsZWN0aW9uRW5kKSB8fCAwXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbmZvLnNvdXJjZSA9PT0gJ2NvbXBvc2l0aW9uRW5kJykge1xuICAgICAgLy8gQXZvaWQgdHJpZ2dlcmluZyB0d2ljZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1ODdcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VmFsdWUoY3V0VmFsdWUpO1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNvbHZlT25DaGFuZ2UoaW5wdXRSZWYuY3VycmVudCwgZSwgb25DaGFuZ2UsIGN1dFZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50NjtcbiAgICAgIChfaW5wdXRSZWYkY3VycmVudDYgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaW5wdXRSZWYkY3VycmVudDYgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudDYuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkoX2lucHV0UmVmJGN1cnJlbnQ2LCBfdG9Db25zdW1hYmxlQXJyYXkoc2VsZWN0aW9uKSk7XG4gICAgfVxuICB9LCBbc2VsZWN0aW9uXSk7XG4gIHZhciBvbkludGVybmFsQ2hhbmdlID0gZnVuY3Rpb24gb25JbnRlcm5hbENoYW5nZShlKSB7XG4gICAgdHJpZ2dlckNoYW5nZShlLCBlLnRhcmdldC52YWx1ZSwge1xuICAgICAgc291cmNlOiAnY2hhbmdlJ1xuICAgIH0pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kKGUpIHtcbiAgICBjb21wb3NpdGlvblJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgdHJpZ2dlckNoYW5nZShlLCBlLmN1cnJlbnRUYXJnZXQudmFsdWUsIHtcbiAgICAgIHNvdXJjZTogJ2NvbXBvc2l0aW9uRW5kJ1xuICAgIH0pO1xuICAgIG9uQ29tcG9zaXRpb25FbmQgPT09IG51bGwgfHwgb25Db21wb3NpdGlvbkVuZCA9PT0gdm9pZCAwIHx8IG9uQ29tcG9zaXRpb25FbmQoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgaWYgKG9uUHJlc3NFbnRlciAmJiBlLmtleSA9PT0gJ0VudGVyJyAmJiAha2V5TG9ja1JlZi5jdXJyZW50KSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgb25QcmVzc0VudGVyKGUpO1xuICAgIH1cbiAgICBvbktleURvd24gPT09IG51bGwgfHwgb25LZXlEb3duID09PSB2b2lkIDAgfHwgb25LZXlEb3duKGUpO1xuICB9O1xuICB2YXIgaGFuZGxlS2V5VXAgPSBmdW5jdGlvbiBoYW5kbGVLZXlVcChlKSB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgb25LZXlVcCA9PT0gbnVsbCB8fCBvbktleVVwID09PSB2b2lkIDAgfHwgb25LZXlVcChlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUZvY3VzID0gZnVuY3Rpb24gaGFuZGxlRm9jdXMoZSkge1xuICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgfHwgb25Gb2N1cyhlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUJsdXIgPSBmdW5jdGlvbiBoYW5kbGVCbHVyKGUpIHtcbiAgICBpZiAoa2V5TG9ja1JlZi5jdXJyZW50KSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZVJlc2V0ID0gZnVuY3Rpb24gaGFuZGxlUmVzZXQoZSkge1xuICAgIHNldFZhbHVlKCcnKTtcbiAgICBmb2N1cygpO1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNvbHZlT25DaGFuZ2UoaW5wdXRSZWYuY3VycmVudCwgZSwgb25DaGFuZ2UpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IElucHV0ID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvdXRPZlJhbmdlQ2xzID0gaXNPdXRPZlJhbmdlICYmIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3V0LW9mLXJhbmdlXCIpO1xuICB2YXIgZ2V0SW5wdXRFbGVtZW50ID0gZnVuY3Rpb24gZ2V0SW5wdXRFbGVtZW50KCkge1xuICAgIC8vIEZpeCBodHRwczovL2ZiLm1lL3JlYWN0LXVua25vd24tcHJvcFxuICAgIHZhciBvdGhlclByb3BzID0gb21pdChwcm9wcywgWydwcmVmaXhDbHMnLCAnb25QcmVzc0VudGVyJywgJ2FkZG9uQmVmb3JlJywgJ2FkZG9uQWZ0ZXInLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbGxvd0NsZWFyJyxcbiAgICAvLyBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCxcbiAgICAvLyBzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90IGJvdGguXG4gICAgJ2RlZmF1bHRWYWx1ZScsICdzaG93Q291bnQnLCAnY291bnQnLCAnY2xhc3NlcycsICdodG1sU2l6ZScsICdzdHlsZXMnLCAnY2xhc3NOYW1lcycsICdvbkNsZWFyJ10pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlXG4gICAgfSwgb3RoZXJQcm9wcywge1xuICAgICAgb25DaGFuZ2U6IG9uSW50ZXJuYWxDaGFuZ2UsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KHByZWZpeENscywgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCksIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5pbnB1dCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmlucHV0LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHNpemU6IGh0bWxTaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgICAgICAgY29tcG9zaXRpb25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIF9vbkNvbXBvc2l0aW9uU3RhcnQgPT09IG51bGwgfHwgX29uQ29tcG9zaXRpb25TdGFydCA9PT0gdm9pZCAwIHx8IF9vbkNvbXBvc2l0aW9uU3RhcnQoZSk7XG4gICAgICB9LFxuICAgICAgb25Db21wb3NpdGlvbkVuZDogb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kXG4gICAgfSkpO1xuICB9O1xuICB2YXIgZ2V0U3VmZml4ID0gZnVuY3Rpb24gZ2V0U3VmZml4KCkge1xuICAgIC8vIE1heCBsZW5ndGggdmFsdWVcbiAgICB2YXIgaGFzTWF4TGVuZ3RoID0gTnVtYmVyKG1lcmdlZE1heCkgPiAwO1xuICAgIGlmIChzdWZmaXggfHwgY291bnRDb25maWcuc2hvdykge1xuICAgICAgdmFyIGRhdGFDb3VudCA9IGNvdW50Q29uZmlnLnNob3dGb3JtYXR0ZXIgPyBjb3VudENvbmZpZy5zaG93Rm9ybWF0dGVyKHtcbiAgICAgICAgdmFsdWU6IGZvcm1hdFZhbHVlLFxuICAgICAgICBjb3VudDogdmFsdWVMZW5ndGgsXG4gICAgICAgIG1heExlbmd0aDogbWVyZ2VkTWF4XG4gICAgICB9KSA6IFwiXCIuY29uY2F0KHZhbHVlTGVuZ3RoKS5jb25jYXQoaGFzTWF4TGVuZ3RoID8gXCIgLyBcIi5jb25jYXQobWVyZ2VkTWF4KSA6ICcnKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY291bnRDb25maWcuc2hvdyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zaG93LWNvdW50LXN1ZmZpeFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXNob3ctY291bnQtaGFzLXN1ZmZpeFwiKSwgISFzdWZmaXgpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuY291bnQpLFxuICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZCh7fSwgc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmNvdW50KVxuICAgICAgfSwgZGF0YUNvdW50KSwgc3VmZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc05hbWUsIG91dE9mUmFuZ2VDbHMpLFxuICAgIGhhbmRsZVJlc2V0OiBoYW5kbGVSZXNldCxcbiAgICB2YWx1ZTogZm9ybWF0VmFsdWUsXG4gICAgZm9jdXNlZDogZm9jdXNlZCxcbiAgICB0cmlnZ2VyRm9jdXM6IGZvY3VzLFxuICAgIHN1ZmZpeDogZ2V0U3VmZml4KCksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2xhc3NOYW1lczogY2xhc3NOYW1lcyxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICByZWY6IGhvbGRlclJlZlxuICB9KSwgZ2V0SW5wdXRFbGVtZW50KCkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJzaG93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBDdXQgYHZhbHVlYCBieSB0aGUgYGNvdW50Lm1heGAgcHJvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluQ291bnRSYW5nZSh2YWx1ZSwgY291bnRDb25maWcpIHtcbiAgaWYgKCFjb3VudENvbmZpZy5tYXgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgY291bnQgPSBjb3VudENvbmZpZy5zdHJhdGVneSh2YWx1ZSk7XG4gIHJldHVybiBjb3VudCA8PSBjb3VudENvbmZpZy5tYXg7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDb3VudChjb3VudCwgc2hvd0NvdW50KSB7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVyZ2VkQ29uZmlnID0ge307XG4gICAgaWYgKHNob3dDb3VudCkge1xuICAgICAgbWVyZ2VkQ29uZmlnLnNob3cgPSBfdHlwZW9mKHNob3dDb3VudCkgPT09ICdvYmplY3QnICYmIHNob3dDb3VudC5mb3JtYXR0ZXIgPyBzaG93Q291bnQuZm9ybWF0dGVyIDogISFzaG93Q291bnQ7XG4gICAgfVxuICAgIG1lcmdlZENvbmZpZyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkQ29uZmlnKSwgY291bnQpO1xuICAgIHZhciBfcmVmID0gbWVyZ2VkQ29uZmlnLFxuICAgICAgc2hvdyA9IF9yZWYuc2hvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgIHNob3c6ICEhc2hvdyxcbiAgICAgIHNob3dGb3JtYXR0ZXI6IHR5cGVvZiBzaG93ID09PSAnZnVuY3Rpb24nID8gc2hvdyA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmF0ZWd5OiByZXN0LnN0cmF0ZWd5IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbY291bnQsIHNob3dDb3VudF0pO1xufSIsImltcG9ydCBCYXNlSW5wdXQgZnJvbSBcIi4vQmFzZUlucHV0XCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4vSW5wdXRcIjtcbmV4cG9ydCB7IEJhc2VJbnB1dCB9O1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiZXhwb3J0IGZ1bmN0aW9uIGhhc0FkZG9uKHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5hZGRvbkJlZm9yZSB8fCBwcm9wcy5hZGRvbkFmdGVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmVmaXhTdWZmaXgocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLnByZWZpeCB8fCBwcm9wcy5zdWZmaXggfHwgcHJvcHMuYWxsb3dDbGVhcik7XG59XG5cbi8vIFRPRE86IEl0J3MgYmV0dGVyIHRvIHVzZSBgUHJveHlgIHJlcGxhY2UgdGhlIGBlbGVtZW50LnZhbHVlYC4gQnV0IHdlIHN0aWxsIG5lZWQgc3VwcG9ydCBJRTExLlxuZnVuY3Rpb24gY2xvbmVFdmVudChldmVudCwgdGFyZ2V0LCB2YWx1ZSkge1xuICAvLyBBIGJ1ZyByZXBvcnQgZmlsZWQgb24gV2ViS2l0J3MgQnVnemlsbGEgdHJhY2tlciwgZGF0aW5nIGJhY2sgdG8gMjAwOSwgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb2YgY2xvbmVOb2RlKCkgbm90IGNvcHlpbmcgZmlsZXMgb2YgPGlucHV0IHR5cGU9XCJmaWxlXCI+IGVsZW1lbnRzLlxuICAvLyBBcyBvZiB0aGUgbGFzdCB1cGRhdGUsIHRoaXMgYnVnIHdhcyBzdGlsbCBtYXJrZWQgYXMgXCJORVcsXCIgaW5kaWNhdGluZyB0aGF0IGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVzb2x2ZWQgeWV04oCL4oCLLlxuICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMjNcbiAgdmFyIGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY2xvbmVOb2RlKHRydWUpO1xuXG4gIC8vIGNsaWNrIGNsZWFyIGljb25cbiAgdmFyIG5ld0V2ZW50ID0gT2JqZWN0LmNyZWF0ZShldmVudCwge1xuICAgIHRhcmdldDoge1xuICAgICAgdmFsdWU6IGN1cnJlbnRUYXJnZXRcbiAgICB9LFxuICAgIGN1cnJlbnRUYXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfVxuICB9KTtcblxuICAvLyBGaWxsIGRhdGFcbiAgY3VycmVudFRhcmdldC52YWx1ZSA9IHZhbHVlO1xuXG4gIC8vIEZpbGwgc2VsZWN0aW9uLiBTb21lIHR5cGUgbGlrZSBgZW1haWxgIG5vdCBzdXBwb3J0IHNlbGVjdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NzgzM1xuICBpZiAodHlwZW9mIHRhcmdldC5zZWxlY3Rpb25TdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRhcmdldC5zZWxlY3Rpb25FbmQgPT09ICdudW1iZXInKSB7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9IHRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gIH1cbiAgY3VycmVudFRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gbmV3RXZlbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9uQ2hhbmdlKHRhcmdldCwgZSwgb25DaGFuZ2UsIHRhcmdldFZhbHVlKSB7XG4gIGlmICghb25DaGFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGV2ZW50ID0gZTtcbiAgaWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgIC8vIENsb25lIGEgbmV3IHRhcmdldCBmb3IgZXZlbnQuXG4gICAgLy8gQXZvaWQgdGhlIGZvbGxvd2luZyB1c2FnZSwgdGhlIHNldFF1ZXJ5IG1ldGhvZCBnZXRzIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIC8vIDxJbnB1dFxuICAgIC8vICAgYWxsb3dDbGVhclxuICAgIC8vICAgdmFsdWU9e3F1ZXJ5fVxuICAgIC8vICAgb25DaGFuZ2U9eyhlKT0+IHtcbiAgICAvLyAgICAgc2V0UXVlcnkoKHByZXZTdGF0dXMpID0+IGUudGFyZ2V0LnZhbHVlKTtcbiAgICAvLyAgIH19XG4gICAgLy8gLz5cblxuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsICcnKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHJpZ2dlciBieSBjb21wb3NpdGlvbiBldmVudCwgdGhpcyBtZWFucyB3ZSBuZWVkIGZvcmNlIGNoYW5nZSB0aGUgaW5wdXQgdmFsdWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDU3MzdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1OThcbiAgaWYgKHRhcmdldC50eXBlICE9PSAnZmlsZScgJiYgdGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsIHRhcmdldFZhbHVlKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9uQ2hhbmdlKGV2ZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRm9jdXMoZWxlbWVudCwgb3B0aW9uKSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBlbGVtZW50LmZvY3VzKG9wdGlvbik7XG5cbiAgLy8gU2VsZWN0aW9uIGNvbnRlbnRcbiAgdmFyIF9yZWYgPSBvcHRpb24gfHwge30sXG4gICAgY3Vyc29yID0gX3JlZi5jdXJzb3I7XG4gIGlmIChjdXJzb3IpIHtcbiAgICB2YXIgbGVuID0gZWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgc3dpdGNoIChjdXJzb3IpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKGxlbiwgbGVuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIGxlbik7XG4gICAgfVxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhc0FkZG9uID0gaGFzQWRkb247XG5leHBvcnRzLmhhc1ByZWZpeFN1ZmZpeCA9IGhhc1ByZWZpeFN1ZmZpeDtcbmV4cG9ydHMucmVzb2x2ZU9uQ2hhbmdlID0gcmVzb2x2ZU9uQ2hhbmdlO1xuZXhwb3J0cy50cmlnZ2VyRm9jdXMgPSB0cmlnZ2VyRm9jdXM7XG5mdW5jdGlvbiBoYXNBZGRvbihwcm9wcykge1xuICByZXR1cm4gISEocHJvcHMuYWRkb25CZWZvcmUgfHwgcHJvcHMuYWRkb25BZnRlcik7XG59XG5mdW5jdGlvbiBoYXNQcmVmaXhTdWZmaXgocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLnByZWZpeCB8fCBwcm9wcy5zdWZmaXggfHwgcHJvcHMuYWxsb3dDbGVhcik7XG59XG5cbi8vIFRPRE86IEl0J3MgYmV0dGVyIHRvIHVzZSBgUHJveHlgIHJlcGxhY2UgdGhlIGBlbGVtZW50LnZhbHVlYC4gQnV0IHdlIHN0aWxsIG5lZWQgc3VwcG9ydCBJRTExLlxuZnVuY3Rpb24gY2xvbmVFdmVudChldmVudCwgdGFyZ2V0LCB2YWx1ZSkge1xuICAvLyBBIGJ1ZyByZXBvcnQgZmlsZWQgb24gV2ViS2l0J3MgQnVnemlsbGEgdHJhY2tlciwgZGF0aW5nIGJhY2sgdG8gMjAwOSwgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb2YgY2xvbmVOb2RlKCkgbm90IGNvcHlpbmcgZmlsZXMgb2YgPGlucHV0IHR5cGU9XCJmaWxlXCI+IGVsZW1lbnRzLlxuICAvLyBBcyBvZiB0aGUgbGFzdCB1cGRhdGUsIHRoaXMgYnVnIHdhcyBzdGlsbCBtYXJrZWQgYXMgXCJORVcsXCIgaW5kaWNhdGluZyB0aGF0IGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVzb2x2ZWQgeWV04oCL4oCLLlxuICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMjNcbiAgdmFyIGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY2xvbmVOb2RlKHRydWUpO1xuXG4gIC8vIGNsaWNrIGNsZWFyIGljb25cbiAgdmFyIG5ld0V2ZW50ID0gT2JqZWN0LmNyZWF0ZShldmVudCwge1xuICAgIHRhcmdldDoge1xuICAgICAgdmFsdWU6IGN1cnJlbnRUYXJnZXRcbiAgICB9LFxuICAgIGN1cnJlbnRUYXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfVxuICB9KTtcblxuICAvLyBGaWxsIGRhdGFcbiAgY3VycmVudFRhcmdldC52YWx1ZSA9IHZhbHVlO1xuXG4gIC8vIEZpbGwgc2VsZWN0aW9uLiBTb21lIHR5cGUgbGlrZSBgZW1haWxgIG5vdCBzdXBwb3J0IHNlbGVjdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NzgzM1xuICBpZiAodHlwZW9mIHRhcmdldC5zZWxlY3Rpb25TdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRhcmdldC5zZWxlY3Rpb25FbmQgPT09ICdudW1iZXInKSB7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9IHRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gIH1cbiAgY3VycmVudFRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gbmV3RXZlbnQ7XG59XG5mdW5jdGlvbiByZXNvbHZlT25DaGFuZ2UodGFyZ2V0LCBlLCBvbkNoYW5nZSwgdGFyZ2V0VmFsdWUpIHtcbiAgaWYgKCFvbkNoYW5nZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZXZlbnQgPSBlO1xuICBpZiAoZS50eXBlID09PSAnY2xpY2snKSB7XG4gICAgLy8gQ2xvbmUgYSBuZXcgdGFyZ2V0IGZvciBldmVudC5cbiAgICAvLyBBdm9pZCB0aGUgZm9sbG93aW5nIHVzYWdlLCB0aGUgc2V0UXVlcnkgbWV0aG9kIGdldHMgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgLy8gPElucHV0XG4gICAgLy8gICBhbGxvd0NsZWFyXG4gICAgLy8gICB2YWx1ZT17cXVlcnl9XG4gICAgLy8gICBvbkNoYW5nZT17KGUpPT4ge1xuICAgIC8vICAgICBzZXRRdWVyeSgocHJldlN0YXR1cykgPT4gZS50YXJnZXQudmFsdWUpO1xuICAgIC8vICAgfX1cbiAgICAvLyAvPlxuXG4gICAgZXZlbnQgPSBjbG9uZUV2ZW50KGUsIHRhcmdldCwgJycpO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUcmlnZ2VyIGJ5IGNvbXBvc2l0aW9uIGV2ZW50LCB0aGlzIG1lYW5zIHdlIG5lZWQgZm9yY2UgY2hhbmdlIHRoZSBpbnB1dCB2YWx1ZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NTczN1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NjU5OFxuICBpZiAodGFyZ2V0LnR5cGUgIT09ICdmaWxlJyAmJiB0YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnQgPSBjbG9uZUV2ZW50KGUsIHRhcmdldCwgdGFyZ2V0VmFsdWUpO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cbiAgb25DaGFuZ2UoZXZlbnQpO1xufVxuZnVuY3Rpb24gdHJpZ2dlckZvY3VzKGVsZW1lbnQsIG9wdGlvbikge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgZWxlbWVudC5mb2N1cyhvcHRpb24pO1xuXG4gIC8vIFNlbGVjdGlvbiBjb250ZW50XG4gIHZhciBfcmVmID0gb3B0aW9uIHx8IHt9LFxuICAgIGN1cnNvciA9IF9yZWYuY3Vyc29yO1xuICBpZiAoY3Vyc29yKSB7XG4gICAgdmFyIGxlbiA9IGVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgIHN3aXRjaCAoY3Vyc29yKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBsZW4pO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCBNZW51LCB7IE1lbnVJdGVtIH0gZnJvbSAncmMtbWVudSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWVudGlvbnNDb250ZXh0IGZyb20gXCIuL01lbnRpb25zQ29udGV4dFwiO1xuLyoqXG4gKiBXZSBvbmx5IHVzZSBNZW51IHRvIGRpc3BsYXkgdGhlIGNhbmRpZGF0ZS5cbiAqIFRoZSBmb2N1cyBpcyBjb250cm9sbGVkIGJ5IHRleHRhcmVhIHRvIG1ha2UgYWNjZXNzaWJpbGl0eSBlYXN5LlxuICovXG5mdW5jdGlvbiBEcm9wZG93bk1lbnUocHJvcHMpIHtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW50aW9uc0NvbnRleHQpLFxuICAgIG5vdEZvdW5kQ29udGVudCA9IF9SZWFjdCR1c2VDb250ZXh0Lm5vdEZvdW5kQ29udGVudCxcbiAgICBhY3RpdmVJbmRleCA9IF9SZWFjdCR1c2VDb250ZXh0LmFjdGl2ZUluZGV4LFxuICAgIHNldEFjdGl2ZUluZGV4ID0gX1JlYWN0JHVzZUNvbnRleHQuc2V0QWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0T3B0aW9uID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0T3B0aW9uLFxuICAgIG9uRm9jdXMgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQmx1cixcbiAgICBvblNjcm9sbCA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uU2Nyb2xsO1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICB2YXIgYWN0aXZlT3B0aW9uID0gb3B0aW9uc1thY3RpdmVJbmRleF0gfHwge307XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51LCB7XG4gICAgcHJlZml4Q2xzOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW1lbnVcIiksXG4gICAgYWN0aXZlS2V5OiBhY3RpdmVPcHRpb24ua2V5LFxuICAgIG9uU2VsZWN0OiBmdW5jdGlvbiBvblNlbGVjdChfcmVmKSB7XG4gICAgICB2YXIga2V5ID0gX3JlZi5rZXk7XG4gICAgICB2YXIgb3B0aW9uID0gb3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgb3B0aW9uS2V5ID0gX3JlZjIua2V5O1xuICAgICAgICByZXR1cm4gb3B0aW9uS2V5ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHNlbGVjdE9wdGlvbihvcHRpb24pO1xuICAgIH0sXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvblNjcm9sbDogb25TY3JvbGxcbiAgfSwgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbiwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgIGRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lID0gb3B0aW9uLmNsYXNzTmFtZSxcbiAgICAgIHN0eWxlID0gb3B0aW9uLnN0eWxlLFxuICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWw7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVJdGVtLCB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIHNldEFjdGl2ZUluZGV4KGluZGV4KTtcbiAgICAgIH1cbiAgICB9LCBsYWJlbCk7XG4gIH0pLCAhb3B0aW9ucy5sZW5ndGggJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUl0ZW0sIHtcbiAgICBkaXNhYmxlZDogdHJ1ZVxuICB9LCBub3RGb3VuZENvbnRlbnQpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duTWVudTsiLCJpbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEcm9wZG93bk1lbnUgZnJvbSBcIi4vRHJvcGRvd25NZW51XCI7XG52YXIgQlVJTFRfSU5fUExBQ0VNRU5UUyA9IHtcbiAgYm90dG9tUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYnInXSxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndHInLCAnYmwnXSxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ3RyJ10sXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIG92ZXJmbG93OiB7XG4gICAgICBhZGp1c3RYOiAxLFxuICAgICAgYWRqdXN0WTogMVxuICAgIH1cbiAgfSxcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydicicsICd0bCddLFxuICAgIG9mZnNldDogWzAsIC00XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH1cbn07XG52YXIgS2V5d29yZFRyaWdnZXIgPSBmdW5jdGlvbiBLZXl3b3JkVHJpZ2dlcihwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgdmlzaWJsZSA9IHByb3BzLnZpc2libGUsXG4gICAgdHJhbnNpdGlvbk5hbWUgPSBwcm9wcy50cmFuc2l0aW9uTmFtZSxcbiAgICBnZXRQb3B1cENvbnRhaW5lciA9IHByb3BzLmdldFBvcHVwQ29udGFpbmVyLFxuICAgIGRyb3Bkb3duQ2xhc3NOYW1lID0gcHJvcHMuZHJvcGRvd25DbGFzc05hbWUsXG4gICAgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgIHBsYWNlbWVudCA9IHByb3BzLnBsYWNlbWVudDtcbiAgdmFyIGRyb3Bkb3duUHJlZml4ID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1kcm9wZG93blwiKTtcbiAgdmFyIGRyb3Bkb3duRWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duTWVudSwge1xuICAgIHByZWZpeENsczogZHJvcGRvd25QcmVmaXgsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9KTtcbiAgdmFyIGRyb3Bkb3duUGxhY2VtZW50ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcHVwUGxhY2VtZW50O1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICBwb3B1cFBsYWNlbWVudCA9IHBsYWNlbWVudCA9PT0gJ3RvcCcgPyAndG9wTGVmdCcgOiAnYm90dG9tTGVmdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcHVwUGxhY2VtZW50ID0gcGxhY2VtZW50ID09PSAndG9wJyA/ICd0b3BSaWdodCcgOiAnYm90dG9tUmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gcG9wdXBQbGFjZW1lbnQ7XG4gIH0sIFtkaXJlY3Rpb24sIHBsYWNlbWVudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogZHJvcGRvd25QcmVmaXgsXG4gICAgcG9wdXBWaXNpYmxlOiB2aXNpYmxlLFxuICAgIHBvcHVwOiBkcm9wZG93bkVsZW1lbnQsXG4gICAgcG9wdXBQbGFjZW1lbnQ6IGRyb3Bkb3duUGxhY2VtZW50LFxuICAgIHBvcHVwVHJhbnNpdGlvbk5hbWU6IHRyYW5zaXRpb25OYW1lLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzOiBCVUlMVF9JTl9QTEFDRU1FTlRTLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBwb3B1cENsYXNzTmFtZTogZHJvcGRvd25DbGFzc05hbWVcbiAgfSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCBkZWZhdWx0IEtleXdvcmRUcmlnZ2VyOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJwcmVmaXhDbHNcIiwgXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcInByZWZpeFwiLCBcInNwbGl0XCIsIFwibm90Rm91bmRDb250ZW50XCIsIFwidmFsdWVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJjaGlsZHJlblwiLCBcIm9wdGlvbnNcIiwgXCJvcGVuXCIsIFwiYWxsb3dDbGVhclwiLCBcInNpbGVudFwiLCBcInZhbGlkYXRlU2VhcmNoXCIsIFwiZmlsdGVyT3B0aW9uXCIsIFwib25DaGFuZ2VcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25QcmVzc0VudGVyXCIsIFwib25TZWFyY2hcIiwgXCJvblNlbGVjdFwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJ0cmFuc2l0aW9uTmFtZVwiLCBcInBsYWNlbWVudFwiLCBcImRpcmVjdGlvblwiLCBcImdldFBvcHVwQ29udGFpbmVyXCIsIFwiZHJvcGRvd25DbGFzc05hbWVcIiwgXCJyb3dzXCIsIFwidmlzaWJsZVwiLCBcIm9uUG9wdXBTY3JvbGxcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzdWZmaXhcIiwgXCJwcmVmaXhDbHNcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiLCBcImFsbG93Q2xlYXJcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcIm9uQ2xlYXJcIl07XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJhc2VJbnB1dCB9IGZyb20gJ3JjLWlucHV0JztcbmltcG9ydCBUZXh0QXJlYSBmcm9tICdyYy10ZXh0YXJlYSc7XG5pbXBvcnQgdG9BcnJheSBmcm9tIFwicmMtdXRpbC9lcy9DaGlsZHJlbi90b0FycmF5XCI7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRWZmZWN0U3RhdGUgZnJvbSBcIi4vaG9va3MvdXNlRWZmZWN0U3RhdGVcIjtcbmltcG9ydCBLZXl3b3JkVHJpZ2dlciBmcm9tIFwiLi9LZXl3b3JkVHJpZ2dlclwiO1xuaW1wb3J0IE1lbnRpb25zQ29udGV4dCBmcm9tIFwiLi9NZW50aW9uc0NvbnRleHRcIjtcbmltcG9ydCBPcHRpb24gZnJvbSBcIi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBmaWx0ZXJPcHRpb24gYXMgZGVmYXVsdEZpbHRlck9wdGlvbiwgdmFsaWRhdGVTZWFyY2ggYXMgZGVmYXVsdFZhbGlkYXRlU2VhcmNoLCBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0LCBnZXRMYXN0TWVhc3VyZUluZGV4LCByZXBsYWNlV2l0aE1lYXN1cmUsIHNldElucHV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdXRpbFwiO1xudmFyIEludGVybmFsTWVudGlvbnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIF9wcm9wcyRwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgcHJlZml4ID0gX3Byb3BzJHByZWZpeCA9PT0gdm9pZCAwID8gJ0AnIDogX3Byb3BzJHByZWZpeCxcbiAgICBfcHJvcHMkc3BsaXQgPSBwcm9wcy5zcGxpdCxcbiAgICBzcGxpdCA9IF9wcm9wcyRzcGxpdCA9PT0gdm9pZCAwID8gJyAnIDogX3Byb3BzJHNwbGl0LFxuICAgIF9wcm9wcyRub3RGb3VuZENvbnRlbiA9IHByb3BzLm5vdEZvdW5kQ29udGVudCxcbiAgICBub3RGb3VuZENvbnRlbnQgPSBfcHJvcHMkbm90Rm91bmRDb250ZW4gPT09IHZvaWQgMCA/ICdOb3QgRm91bmQnIDogX3Byb3BzJG5vdEZvdW5kQ29udGVuLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgb3BlbiA9IHByb3BzLm9wZW4sXG4gICAgYWxsb3dDbGVhciA9IHByb3BzLmFsbG93Q2xlYXIsXG4gICAgc2lsZW50ID0gcHJvcHMuc2lsZW50LFxuICAgIF9wcm9wcyR2YWxpZGF0ZVNlYXJjaCA9IHByb3BzLnZhbGlkYXRlU2VhcmNoLFxuICAgIHZhbGlkYXRlU2VhcmNoID0gX3Byb3BzJHZhbGlkYXRlU2VhcmNoID09PSB2b2lkIDAgPyBkZWZhdWx0VmFsaWRhdGVTZWFyY2ggOiBfcHJvcHMkdmFsaWRhdGVTZWFyY2gsXG4gICAgX3Byb3BzJGZpbHRlck9wdGlvbiA9IHByb3BzLmZpbHRlck9wdGlvbixcbiAgICBmaWx0ZXJPcHRpb24gPSBfcHJvcHMkZmlsdGVyT3B0aW9uID09PSB2b2lkIDAgPyBkZWZhdWx0RmlsdGVyT3B0aW9uIDogX3Byb3BzJGZpbHRlck9wdGlvbixcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbktleVVwID0gcHJvcHMub25LZXlVcCxcbiAgICBvblByZXNzRW50ZXIgPSBwcm9wcy5vblByZXNzRW50ZXIsXG4gICAgb25TZWFyY2ggPSBwcm9wcy5vblNlYXJjaCxcbiAgICBvblNlbGVjdCA9IHByb3BzLm9uU2VsZWN0LFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICB0cmFuc2l0aW9uTmFtZSA9IHByb3BzLnRyYW5zaXRpb25OYW1lLFxuICAgIHBsYWNlbWVudCA9IHByb3BzLnBsYWNlbWVudCxcbiAgICBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBwcm9wcy5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZSA9IHByb3BzLmRyb3Bkb3duQ2xhc3NOYW1lLFxuICAgIF9wcm9wcyRyb3dzID0gcHJvcHMucm93cyxcbiAgICByb3dzID0gX3Byb3BzJHJvd3MgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkcm93cyxcbiAgICB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBvblBvcHVwU2Nyb2xsID0gcHJvcHMub25Qb3B1cFNjcm9sbCxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBtZXJnZWRQcmVmaXggPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcmVmaXgpID8gcHJlZml4IDogW3ByZWZpeF07XG4gIH0sIFtwcmVmaXhdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgdGV4dGFyZWFSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBtZWFzdXJlUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbiBnZXRUZXh0QXJlYSgpIHtcbiAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQ7XG4gICAgcmV0dXJuIChfdGV4dGFyZWFSZWYkY3VycmVudCA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50ID09PSB2b2lkIDAgfHwgKF90ZXh0YXJlYVJlZiRjdXJyZW50ID0gX3RleHRhcmVhUmVmJGN1cnJlbnQucmVzaXphYmxlVGV4dEFyZWEpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGV4dGFyZWFSZWYkY3VycmVudC50ZXh0QXJlYTtcbiAgfTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQ0O1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgIHZhciBfdGV4dGFyZWFSZWYkY3VycmVudDI7XG4gICAgICAgIHJldHVybiAoX3RleHRhcmVhUmVmJGN1cnJlbnQyID0gdGV4dGFyZWFSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RleHRhcmVhUmVmJGN1cnJlbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGV4dGFyZWFSZWYkY3VycmVudDIuZm9jdXMoKTtcbiAgICAgIH0sXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQzO1xuICAgICAgICByZXR1cm4gKF90ZXh0YXJlYVJlZiRjdXJyZW50MyA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQzLmJsdXIoKTtcbiAgICAgIH0sXG4gICAgICB0ZXh0YXJlYTogKF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9PT0gdm9pZCAwIHx8IChfdGV4dGFyZWFSZWYkY3VycmVudDQgPSBfdGV4dGFyZWFSZWYkY3VycmVudDQucmVzaXphYmxlVGV4dEFyZWEpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQ0LnRleHRBcmVhLFxuICAgICAgbmF0aXZlRWxlbWVudDogY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhdGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIG1lYXN1cmluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TWVhc3VyaW5nID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZSgnJyksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIG1lYXN1cmVUZXh0ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRNZWFzdXJlVGV4dCA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoJycpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBtZWFzdXJlUHJlZml4ID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRNZWFzdXJlUHJlZml4ID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIF91c2VTdGF0ZTcgPSB1c2VTdGF0ZSgwKSxcbiAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgbWVhc3VyZUxvY2F0aW9uID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRNZWFzdXJlTG9jYXRpb24gPSBfdXNlU3RhdGU4WzFdO1xuICB2YXIgX3VzZVN0YXRlOSA9IHVzZVN0YXRlKDApLFxuICAgIF91c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlOSwgMiksXG4gICAgYWN0aXZlSW5kZXggPSBfdXNlU3RhdGUxMFswXSxcbiAgICBzZXRBY3RpdmVJbmRleCA9IF91c2VTdGF0ZTEwWzFdO1xuICB2YXIgX3VzZVN0YXRlMTEgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUxMSwgMiksXG4gICAgaXNGb2N1cyA9IF91c2VTdGF0ZTEyWzBdLFxuICAgIHNldElzRm9jdXMgPSBfdXNlU3RhdGUxMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoJycsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bmMgbWVhc3VyZSBkaXYgdG9wIHdpdGggdGV4dGFyZWEgZm9yIHJjLXRyaWdnZXIgdXNhZ2VcbiAgICBpZiAobWVhc3VyaW5nICYmIG1lYXN1cmVSZWYuY3VycmVudCkge1xuICAgICAgbWVhc3VyZVJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IGdldFRleHRBcmVhKCkuc2Nyb2xsVG9wO1xuICAgIH1cbiAgfSwgW21lYXN1cmluZ10pO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhmYWxzZSwgJ2BvcGVuYCBvZiBNZW50aW9ucyBpcyBvbmx5IHVzZWQgZm9yIGRlYnVnIHVzYWdlLiBEbyBub3QgdXNlIGluIHlvdSBwcm9kdWN0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVyZ2VkUHJlZml4Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGN1clByZWZpeCA9IG1lcmdlZFByZWZpeFtpXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBtZXJnZWRWYWx1ZS5sYXN0SW5kZXhPZihjdXJQcmVmaXgpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsICcnLCBjdXJQcmVmaXgsIGluZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbbWVhc3VyaW5nLCBtZWFzdXJlVGV4dCwgbWVhc3VyZVByZWZpeCwgbWVhc3VyZUxvY2F0aW9uXTtcbiAgICB9LCBbb3BlbiwgbWVhc3VyaW5nLCBtZXJnZWRQcmVmaXgsIG1lcmdlZFZhbHVlLCBtZWFzdXJlVGV4dCwgbWVhc3VyZVByZWZpeCwgbWVhc3VyZUxvY2F0aW9uXSksXG4gICAgX1JlYWN0JHVzZU1lbW8yID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8sIDQpLFxuICAgIG1lcmdlZE1lYXN1cmluZyA9IF9SZWFjdCR1c2VNZW1vMlswXSxcbiAgICBtZXJnZWRNZWFzdXJlVGV4dCA9IF9SZWFjdCR1c2VNZW1vMlsxXSxcbiAgICBtZXJnZWRNZWFzdXJlUHJlZml4ID0gX1JlYWN0JHVzZU1lbW8yWzJdLFxuICAgIG1lcmdlZE1lYXN1cmVMb2NhdGlvbiA9IF9SZWFjdCR1c2VNZW1vMlszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gT3B0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0T3B0aW9ucyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0YXJnZXRNZWFzdXJlVGV4dCkge1xuICAgIHZhciBsaXN0O1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGlzdCA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBfaXRlbSRrZXk7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGl0ZW0pLCB7fSwge1xuICAgICAgICAgIGtleTogKF9pdGVtJGtleSA9IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS5rZXkpICE9PSBudWxsICYmIF9pdGVtJGtleSAhPT0gdm9pZCAwID8gX2l0ZW0ka2V5IDogaXRlbS52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gdG9BcnJheShjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBvcHRpb25Qcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICAgICAga2V5ID0gX3JlZi5rZXk7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvblByb3BzKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAga2V5OiBrZXkgfHwgb3B0aW9uUHJvcHMudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIC8qKiBSZXR1cm4gYWxsIHJlc3VsdCBpZiBgZmlsdGVyT3B0aW9uYCBpcyBmYWxzZS4gKi9cbiAgICAgIGlmIChmaWx0ZXJPcHRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbHRlck9wdGlvbih0YXJnZXRNZWFzdXJlVGV4dCwgb3B0aW9uKTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBvcHRpb25zLCBmaWx0ZXJPcHRpb25dKTtcbiAgdmFyIG1lcmdlZE9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9ucyhtZXJnZWRNZWFzdXJlVGV4dCk7XG4gIH0sIFtnZXRPcHRpb25zLCBtZXJnZWRNZWFzdXJlVGV4dF0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1lYXN1cmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1hcmsgdGhhdCB3ZSB3aWxsIHJlc2V0IGlucHV0IHNlbGVjdGlvbiB0byB0YXJnZXQgcG9zaXRpb24gd2hlbiB1c2VyIHNlbGVjdCBvcHRpb25cbiAgdmFyIG9uU2VsZWN0aW9uRWZmZWN0ID0gdXNlRWZmZWN0U3RhdGUoKTtcbiAgdmFyIHN0YXJ0TWVhc3VyZSA9IGZ1bmN0aW9uIHN0YXJ0TWVhc3VyZShuZXh0TWVhc3VyZVRleHQsIG5leHRNZWFzdXJlUHJlZml4LCBuZXh0TWVhc3VyZUxvY2F0aW9uKSB7XG4gICAgc2V0TWVhc3VyaW5nKHRydWUpO1xuICAgIHNldE1lYXN1cmVUZXh0KG5leHRNZWFzdXJlVGV4dCk7XG4gICAgc2V0TWVhc3VyZVByZWZpeChuZXh0TWVhc3VyZVByZWZpeCk7XG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uKG5leHRNZWFzdXJlTG9jYXRpb24pO1xuICAgIHNldEFjdGl2ZUluZGV4KDApO1xuICB9O1xuICB2YXIgc3RvcE1lYXN1cmUgPSBmdW5jdGlvbiBzdG9wTWVhc3VyZShjYWxsYmFjaykge1xuICAgIHNldE1lYXN1cmluZyhmYWxzZSk7XG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uKDApO1xuICAgIHNldE1lYXN1cmVUZXh0KCcnKTtcbiAgICBvblNlbGVjdGlvbkVmZmVjdChjYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKG5leHRWYWx1ZSkge1xuICAgIHNldE1lcmdlZFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShuZXh0VmFsdWUpO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbENoYW5nZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDaGFuZ2UoX3JlZjIpIHtcbiAgICB2YXIgbmV4dFZhbHVlID0gX3JlZjIudGFyZ2V0LnZhbHVlO1xuICAgIHRyaWdnZXJDaGFuZ2UobmV4dFZhbHVlKTtcbiAgfTtcbiAgdmFyIHNlbGVjdE9wdGlvbiA9IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbihvcHRpb24pIHtcbiAgICB2YXIgX2dldFRleHRBcmVhO1xuICAgIHZhciBfb3B0aW9uJHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgbWVudGlvblZhbHVlID0gX29wdGlvbiR2YWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfb3B0aW9uJHZhbHVlO1xuICAgIHZhciBfcmVwbGFjZVdpdGhNZWFzdXJlID0gcmVwbGFjZVdpdGhNZWFzdXJlKG1lcmdlZFZhbHVlLCB7XG4gICAgICAgIG1lYXN1cmVMb2NhdGlvbjogbWVyZ2VkTWVhc3VyZUxvY2F0aW9uLFxuICAgICAgICB0YXJnZXRUZXh0OiBtZW50aW9uVmFsdWUsXG4gICAgICAgIHByZWZpeDogbWVyZ2VkTWVhc3VyZVByZWZpeCxcbiAgICAgICAgc2VsZWN0aW9uU3RhcnQ6IChfZ2V0VGV4dEFyZWEgPSBnZXRUZXh0QXJlYSgpKSA9PT0gbnVsbCB8fCBfZ2V0VGV4dEFyZWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nZXRUZXh0QXJlYS5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgc3BsaXQ6IHNwbGl0XG4gICAgICB9KSxcbiAgICAgIHRleHQgPSBfcmVwbGFjZVdpdGhNZWFzdXJlLnRleHQsXG4gICAgICBzZWxlY3Rpb25Mb2NhdGlvbiA9IF9yZXBsYWNlV2l0aE1lYXN1cmUuc2VsZWN0aW9uTG9jYXRpb247XG4gICAgdHJpZ2dlckNoYW5nZSh0ZXh0KTtcbiAgICBzdG9wTWVhc3VyZShmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXZSBuZWVkIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBwb3NpdGlvblxuICAgICAgc2V0SW5wdXRTZWxlY3Rpb24oZ2V0VGV4dEFyZWEoKSwgc2VsZWN0aW9uTG9jYXRpb24pO1xuICAgIH0pO1xuICAgIG9uU2VsZWN0ID09PSBudWxsIHx8IG9uU2VsZWN0ID09PSB2b2lkIDAgfHwgb25TZWxlY3Qob3B0aW9uLCBtZXJnZWRNZWFzdXJlUHJlZml4KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBLZXlFdmVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDaGVjayBpZiBoaXQgdGhlIG1lYXN1cmUga2V5d29yZFxuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSBmdW5jdGlvbiBvbkludGVybmFsS2V5RG93bihldmVudCkge1xuICAgIHZhciB3aGljaCA9IGV2ZW50LndoaWNoO1xuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZXZlbnQpO1xuXG4gICAgLy8gU2tpcCBpZiBub3QgbWVhc3VyaW5nXG4gICAgaWYgKCFtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdoaWNoID09PSBLZXlDb2RlLlVQIHx8IHdoaWNoID09PSBLZXlDb2RlLkRPV04pIHtcbiAgICAgIC8vIENvbnRyb2wgYXJyb3cgZnVuY3Rpb25cbiAgICAgIHZhciBvcHRpb25MZW4gPSBtZXJnZWRPcHRpb25zLmxlbmd0aDtcbiAgICAgIHZhciBvZmZzZXQgPSB3aGljaCA9PT0gS2V5Q29kZS5VUCA/IC0xIDogMTtcbiAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IChhY3RpdmVJbmRleCArIG9mZnNldCArIG9wdGlvbkxlbikgJSBvcHRpb25MZW47XG4gICAgICBzZXRBY3RpdmVJbmRleChuZXdBY3RpdmVJbmRleCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IEtleUNvZGUuRVNDKSB7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IEtleUNvZGUuRU5URVIpIHtcbiAgICAgIC8vIE1lYXN1cmUgaGl0XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gbG9hZGluZyBza2lwXG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbWVyZ2VkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF9vcHRpb24gPSBtZXJnZWRPcHRpb25zW2FjdGl2ZUluZGV4XTtcbiAgICAgIHNlbGVjdE9wdGlvbihfb3B0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZW4gdG8gc3RhcnQgbWVhc3VyZTpcbiAgICogMS4gV2hlbiB1c2VyIHByZXNzIGBwcmVmaXhgXG4gICAqIDIuIFdoZW4gbWVhc3VyZVRleHQgIT09IHByZXZNZWFzdXJlVGV4dFxuICAgKiAgLSBJZiBtZWFzdXJlIGhpdFxuICAgKiAgLSBJZiBtZWFzdXJpbmdcbiAgICpcbiAgICogV2hlbiB0byBzdG9wIG1lYXN1cmU6XG4gICAqIDEuIFNlbGVjdGlvbiBpcyBvdXQgb2YgcmFuZ2VcbiAgICogMi4gQ29udGFpbnMgYHNwYWNlYFxuICAgKiAzLiBFU0Mgb3Igc2VsZWN0IG9uZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxLZXlVcCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxLZXlVcChldmVudCkge1xuICAgIHZhciBrZXkgPSBldmVudC5rZXksXG4gICAgICB3aGljaCA9IGV2ZW50LndoaWNoO1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgdmFyIHNlbGVjdGlvblN0YXJ0VGV4dCA9IGdldEJlZm9yZVNlbGVjdGlvblRleHQodGFyZ2V0KTtcbiAgICB2YXIgX2dldExhc3RNZWFzdXJlSW5kZXggPSBnZXRMYXN0TWVhc3VyZUluZGV4KHNlbGVjdGlvblN0YXJ0VGV4dCwgbWVyZ2VkUHJlZml4KSxcbiAgICAgIG1lYXN1cmVJbmRleCA9IF9nZXRMYXN0TWVhc3VyZUluZGV4LmxvY2F0aW9uLFxuICAgICAgbmV4dE1lYXN1cmVQcmVmaXggPSBfZ2V0TGFzdE1lYXN1cmVJbmRleC5wcmVmaXg7XG5cbiAgICAvLyBJZiB0aGUgY2xpZW50IGltcGxlbWVudHMgYW4gb25LZXlVcCBoYW5kbGVyLCBjYWxsIGl0XG4gICAgb25LZXlVcCA9PT0gbnVsbCB8fCBvbktleVVwID09PSB2b2lkIDAgfHwgb25LZXlVcChldmVudCk7XG5cbiAgICAvLyBTa2lwIGlmIG1hdGNoIHRoZSB3aGl0ZSBrZXkgbGlzdFxuICAgIGlmIChbS2V5Q29kZS5FU0MsIEtleUNvZGUuVVAsIEtleUNvZGUuRE9XTiwgS2V5Q29kZS5FTlRFUl0uaW5kZXhPZih3aGljaCkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtZWFzdXJlSW5kZXggIT09IC0xKSB7XG4gICAgICB2YXIgbmV4dE1lYXN1cmVUZXh0ID0gc2VsZWN0aW9uU3RhcnRUZXh0LnNsaWNlKG1lYXN1cmVJbmRleCArIG5leHRNZWFzdXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICB2YXIgdmFsaWRhdGVNZWFzdXJlID0gdmFsaWRhdGVTZWFyY2gobmV4dE1lYXN1cmVUZXh0LCBzcGxpdCk7XG4gICAgICB2YXIgbWF0Y2hPcHRpb24gPSAhIWdldE9wdGlvbnMobmV4dE1lYXN1cmVUZXh0KS5sZW5ndGg7XG4gICAgICBpZiAodmFsaWRhdGVNZWFzdXJlKSB7XG4gICAgICAgIC8vIGFkZGluZyBBbHRHcmFwaCBhbHNvIGZvcnQgYXplcnQga2V5Ym9hcmRcbiAgICAgICAgaWYgKGtleSA9PT0gbmV4dE1lYXN1cmVQcmVmaXggfHwga2V5ID09PSAnU2hpZnQnIHx8IHdoaWNoID09PSBLZXlDb2RlLkFMVCB8fCBrZXkgPT09ICdBbHRHcmFwaCcgfHwgbWVyZ2VkTWVhc3VyaW5nIHx8IG5leHRNZWFzdXJlVGV4dCAhPT0gbWVyZ2VkTWVhc3VyZVRleHQgJiYgbWF0Y2hPcHRpb24pIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCwgbWVhc3VyZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgICAgLy8gU3RvcCBpZiBtZWFzdXJlVGV4dCBpcyBpbnZhbGlkYXRlXG4gICAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV2Ugd2lsbCB0cmlnZ2VyIGBvblNlYXJjaGAgdG8gZGV2ZWxvcGVyIHNpbmNlIHRoZXkgbWF5IHVzZSBmb3IgYXN5bmMgdXBkYXRlLlxuICAgICAgICogSWYgbWV0IGBzcGFjZWAgbWVhbnMgdXNlciBmaW5pc2hlZCBzZWFyY2hpbmcuXG4gICAgICAgKi9cbiAgICAgIGlmIChvblNlYXJjaCAmJiB2YWxpZGF0ZU1lYXN1cmUpIHtcbiAgICAgICAgb25TZWFyY2gobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgfVxuICB9O1xuICB2YXIgb25JbnRlcm5hbFByZXNzRW50ZXIgPSBmdW5jdGlvbiBvbkludGVybmFsUHJlc3NFbnRlcihldmVudCkge1xuICAgIGlmICghbWVyZ2VkTWVhc3VyaW5nICYmIG9uUHJlc3NFbnRlcikge1xuICAgICAgb25QcmVzc0VudGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBGb2N1cyBCbHVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKCk7XG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoZXZlbnQpIHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGZvY3VzUmVmLmN1cnJlbnQpO1xuICAgIGlmICghaXNGb2N1cyAmJiBldmVudCAmJiBvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgc2V0SXNGb2N1cyh0cnVlKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxCbHVyID0gZnVuY3Rpb24gb25JbnRlcm5hbEJsdXIoZXZlbnQpIHtcbiAgICBmb2N1c1JlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SXNGb2N1cyhmYWxzZSk7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihldmVudCk7XG4gICAgfSwgMCk7XG4gIH07XG4gIHZhciBvbkRyb3Bkb3duRm9jdXMgPSBmdW5jdGlvbiBvbkRyb3Bkb3duRm9jdXMoKSB7XG4gICAgb25JbnRlcm5hbEZvY3VzKCk7XG4gIH07XG4gIHZhciBvbkRyb3Bkb3duQmx1ciA9IGZ1bmN0aW9uIG9uRHJvcGRvd25CbHVyKCkge1xuICAgIG9uSW50ZXJuYWxCbHVyKCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNjcm9sbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsUG9wdXBTY3JvbGwgPSBmdW5jdGlvbiBvbkludGVybmFsUG9wdXBTY3JvbGwoZXZlbnQpIHtcbiAgICBvblBvcHVwU2Nyb2xsID09PSBudWxsIHx8IG9uUG9wdXBTY3JvbGwgPT09IHZvaWQgMCB8fCBvblBvcHVwU2Nyb2xsKGV2ZW50KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHByZWZpeENscywgY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgcmVmOiBjb250YWluZXJSZWZcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEFyZWEsIF9leHRlbmRzKHtcbiAgICByZWY6IHRleHRhcmVhUmVmLFxuICAgIHZhbHVlOiBtZXJnZWRWYWx1ZVxuICB9LCByZXN0UHJvcHMsIHtcbiAgICByb3dzOiByb3dzLFxuICAgIG9uQ2hhbmdlOiBvbkludGVybmFsQ2hhbmdlLFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd24sXG4gICAgb25LZXlVcDogb25JbnRlcm5hbEtleVVwLFxuICAgIG9uUHJlc3NFbnRlcjogb25JbnRlcm5hbFByZXNzRW50ZXIsXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzLFxuICAgIG9uQmx1cjogb25JbnRlcm5hbEJsdXJcbiAgfSkpLCBtZXJnZWRNZWFzdXJpbmcgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogbWVhc3VyZVJlZixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbWVhc3VyZVwiKVxuICB9LCBtZXJnZWRWYWx1ZS5zbGljZSgwLCBtZXJnZWRNZWFzdXJlTG9jYXRpb24pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW50aW9uc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgbm90Rm91bmRDb250ZW50OiBub3RGb3VuZENvbnRlbnQsXG4gICAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgICBzZXRBY3RpdmVJbmRleDogc2V0QWN0aXZlSW5kZXgsXG4gICAgICBzZWxlY3RPcHRpb246IHNlbGVjdE9wdGlvbixcbiAgICAgIG9uRm9jdXM6IG9uRHJvcGRvd25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25Ecm9wZG93bkJsdXIsXG4gICAgICBvblNjcm9sbDogb25JbnRlcm5hbFBvcHVwU2Nyb2xsXG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChLZXl3b3JkVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHRyYW5zaXRpb25OYW1lOiB0cmFuc2l0aW9uTmFtZSxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBvcHRpb25zOiBtZXJnZWRPcHRpb25zLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXI6IGdldFBvcHVwQ29udGFpbmVyLFxuICAgIGRyb3Bkb3duQ2xhc3NOYW1lOiBkcm9wZG93bkNsYXNzTmFtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgbWVyZ2VkTWVhc3VyZVByZWZpeCkpKSwgbWVyZ2VkVmFsdWUuc2xpY2UobWVyZ2VkTWVhc3VyZUxvY2F0aW9uICsgbWVyZ2VkTWVhc3VyZVByZWZpeC5sZW5ndGgpKSk7XG59KTtcbnZhciBNZW50aW9ucyA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMywgcmVmKSB7XG4gIHZhciBzdWZmaXggPSBfcmVmMy5zdWZmaXgsXG4gICAgX3JlZjMkcHJlZml4Q2xzID0gX3JlZjMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9yZWYzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW1lbnRpb25zJyA6IF9yZWYzJHByZWZpeENscyxcbiAgICBkZWZhdWx0VmFsdWUgPSBfcmVmMy5kZWZhdWx0VmFsdWUsXG4gICAgY3VzdG9tVmFsdWUgPSBfcmVmMy52YWx1ZSxcbiAgICBhbGxvd0NsZWFyID0gX3JlZjMuYWxsb3dDbGVhcixcbiAgICBvbkNoYW5nZSA9IF9yZWYzLm9uQ2hhbmdlLFxuICAgIGNsYXNzZXMgPSBfcmVmMy5jbGFzc05hbWVzLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYzLmNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYzLmRpc2FibGVkLFxuICAgIG9uQ2xlYXIgPSBfcmVmMy5vbkNsZWFyLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDIpO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaG9sZGVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgbWVudGlvblJlZiA9IHVzZVJlZihudWxsKTtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2hvbGRlclJlZiRjdXJyZW50LCBfbWVudGlvblJlZiRjdXJyZW50O1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lbnRpb25SZWYuY3VycmVudCksIHt9LCB7XG4gICAgICBuYXRpdmVFbGVtZW50OiAoKF9ob2xkZXJSZWYkY3VycmVudCA9IGhvbGRlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaG9sZGVyUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob2xkZXJSZWYkY3VycmVudC5uYXRpdmVFbGVtZW50KSB8fCAoKF9tZW50aW9uUmVmJGN1cnJlbnQgPSBtZW50aW9uUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9tZW50aW9uUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tZW50aW9uUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudClcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZTMgPSB1c2VNZXJnZWRTdGF0ZSgnJywge1xuICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICB2YWx1ZTogY3VzdG9tVmFsdWVcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlMywgMiksXG4gICAgbWVyZ2VkVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldE1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ2hhbmdlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdHJpZ2dlckNoYW5nZSA9IGZ1bmN0aW9uIHRyaWdnZXJDaGFuZ2UoY3VycmVudFZhbHVlKSB7XG4gICAgc2V0TWVyZ2VkVmFsdWUoY3VycmVudFZhbHVlKTtcbiAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKGN1cnJlbnRWYWx1ZSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlc2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGhhbmRsZVJlc2V0ID0gZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7XG4gICAgdHJpZ2dlckNoYW5nZSgnJyk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlSW5wdXQsIHtcbiAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB2YWx1ZTogbWVyZ2VkVmFsdWUsXG4gICAgYWxsb3dDbGVhcjogYWxsb3dDbGVhcixcbiAgICBoYW5kbGVSZXNldDogaGFuZGxlUmVzZXQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgY2xhc3NOYW1lczogY2xhc3NlcyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVmOiBob2xkZXJSZWYsXG4gICAgb25DbGVhcjogb25DbGVhclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnRpb25zLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMubWVudGlvbnMsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcmVmOiBtZW50aW9uUmVmLFxuICAgIG9uQ2hhbmdlOiB0cmlnZ2VyQ2hhbmdlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9LCByZXN0KSkpO1xufSk7XG5NZW50aW9ucy5PcHRpb24gPSBPcHRpb247XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uczsiLCIvKiB0c2xpbnQ6ZGlzYWJsZTogbm8tb2JqZWN0LWxpdGVyYWwtdHlwZS1hc3NlcnRpb24gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8vIFdlIHdpbGwgbmV2ZXIgdXNlIGRlZmF1bHQsIGhlcmUgb25seSB0byBmaXggVHlwZVNjcmlwdCB3YXJuaW5nXG52YXIgTWVudGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uc0NvbnRleHQ7IiwidmFyIE9wdGlvbiA9IGZ1bmN0aW9uIE9wdGlvbigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0IGRlZmF1bHQgT3B0aW9uOyIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIFRyaWdnZXIgYSBjYWxsYmFjayBvbiBzdGF0ZSBjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRWZmZWN0U3RhdGUoKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7XG4gICAgICBpZDogMCxcbiAgICAgIGNhbGxiYWNrOiBudWxsXG4gICAgfSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgZWZmZWN0SWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEVmZmVjdElkID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHVwZGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNldEVmZmVjdElkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmLmlkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkICsgMSxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICB9O1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lZmZlY3RJZCRjYWxsYmFjaztcbiAgICAoX2VmZmVjdElkJGNhbGxiYWNrID0gZWZmZWN0SWQuY2FsbGJhY2spID09PSBudWxsIHx8IF9lZmZlY3RJZCRjYWxsYmFjayA9PT0gdm9pZCAwIHx8IF9lZmZlY3RJZCRjYWxsYmFjay5jYWxsKGVmZmVjdElkKTtcbiAgfSwgW2VmZmVjdElkXSk7XG4gIHJldHVybiB1cGRhdGU7XG59IiwiaW1wb3J0IE1lbnRpb25zIGZyb20gXCIuL01lbnRpb25zXCI7XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uczsiLCIvKipcbiAqIEN1dCBpbnB1dCBzZWxlY3Rpb24gaW50byAyIHBhcnQgYW5kIHJldHVybiB0ZXh0IGJlZm9yZSBzZWxlY3Rpb24gc3RhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJlZm9yZVNlbGVjdGlvblRleHQoaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gIHJldHVybiBpbnB1dC52YWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCk7XG59XG4vKipcbiAqIEZpbmQgdGhlIGxhc3QgbWF0Y2ggcHJlZml4IGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0TWVhc3VyZUluZGV4KHRleHQsIHByZWZpeCkge1xuICByZXR1cm4gcHJlZml4LnJlZHVjZShmdW5jdGlvbiAobGFzdE1hdGNoLCBwcmVmaXhTdHIpIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZihwcmVmaXhTdHIpO1xuICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TWF0Y2gubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uOiBsYXN0SW5kZXgsXG4gICAgICAgIHByZWZpeDogcHJlZml4U3RyXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbGFzdE1hdGNoO1xuICB9LCB7XG4gICAgbG9jYXRpb246IC0xLFxuICAgIHByZWZpeDogJydcbiAgfSk7XG59XG5mdW5jdGlvbiBsb3dlcihjaGFyKSB7XG4gIHJldHVybiAoY2hhciB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHJlZHVjZVRleHQodGV4dCwgdGFyZ2V0VGV4dCwgc3BsaXQpIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHRleHRbMF07XG4gIGlmICghZmlyc3RDaGFyIHx8IGZpcnN0Q2hhciA9PT0gc3BsaXQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIC8vIFJldXNlIHJlc3QgdGV4dCBhcyBpdCBjYW5cbiAgdmFyIHJlc3RUZXh0ID0gdGV4dDtcbiAgdmFyIHRhcmdldFRleHRMZW4gPSB0YXJnZXRUZXh0Lmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRUZXh0TGVuOyBpICs9IDEpIHtcbiAgICBpZiAobG93ZXIocmVzdFRleHRbaV0pICE9PSBsb3dlcih0YXJnZXRUZXh0W2ldKSkge1xuICAgICAgcmVzdFRleHQgPSByZXN0VGV4dC5zbGljZShpKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gdGFyZ2V0VGV4dExlbiAtIDEpIHtcbiAgICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2UodGFyZ2V0VGV4dExlbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN0VGV4dDtcbn1cblxuLyoqXG4gKiBQYWludCB0YXJnZXRUZXh0IGludG8gY3VycmVudCB0ZXh0OlxuICogIHRleHQ6IGxpdHRsZUBsaXRlc3RcbiAqICB0YXJnZXRUZXh0OiBsaWdodFxuICogID0+IGxpdHRsZSBAbGlnaHQgdGVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVdpdGhNZWFzdXJlKHRleHQsIG1lYXN1cmVDb25maWcpIHtcbiAgdmFyIG1lYXN1cmVMb2NhdGlvbiA9IG1lYXN1cmVDb25maWcubWVhc3VyZUxvY2F0aW9uLFxuICAgIHByZWZpeCA9IG1lYXN1cmVDb25maWcucHJlZml4LFxuICAgIHRhcmdldFRleHQgPSBtZWFzdXJlQ29uZmlnLnRhcmdldFRleHQsXG4gICAgc2VsZWN0aW9uU3RhcnQgPSBtZWFzdXJlQ29uZmlnLnNlbGVjdGlvblN0YXJ0LFxuICAgIHNwbGl0ID0gbWVhc3VyZUNvbmZpZy5zcGxpdDtcblxuICAvLyBCZWZvcmUgdGV4dCB3aWxsIGFwcGVuZCBvbmUgc3BhY2UgaWYgaGF2ZSBvdGhlciB0ZXh0XG4gIHZhciBiZWZvcmVNZWFzdXJlVGV4dCA9IHRleHQuc2xpY2UoMCwgbWVhc3VyZUxvY2F0aW9uKTtcbiAgaWYgKGJlZm9yZU1lYXN1cmVUZXh0W2JlZm9yZU1lYXN1cmVUZXh0Lmxlbmd0aCAtIHNwbGl0Lmxlbmd0aF0gPT09IHNwbGl0KSB7XG4gICAgYmVmb3JlTWVhc3VyZVRleHQgPSBiZWZvcmVNZWFzdXJlVGV4dC5zbGljZSgwLCBiZWZvcmVNZWFzdXJlVGV4dC5sZW5ndGggLSBzcGxpdC5sZW5ndGgpO1xuICB9XG4gIGlmIChiZWZvcmVNZWFzdXJlVGV4dCkge1xuICAgIGJlZm9yZU1lYXN1cmVUZXh0ID0gXCJcIi5jb25jYXQoYmVmb3JlTWVhc3VyZVRleHQpLmNvbmNhdChzcGxpdCk7XG4gIH1cblxuICAvLyBDdXQgZHVwbGljYXRlIHN0cmluZyB3aXRoIGN1cnJlbnQgdGFyZ2V0VGV4dFxuICB2YXIgcmVzdFRleHQgPSByZWR1Y2VUZXh0KHRleHQuc2xpY2Uoc2VsZWN0aW9uU3RhcnQpLCB0YXJnZXRUZXh0LnNsaWNlKHNlbGVjdGlvblN0YXJ0IC0gbWVhc3VyZUxvY2F0aW9uIC0gcHJlZml4Lmxlbmd0aCksIHNwbGl0KTtcbiAgaWYgKHJlc3RUZXh0LnNsaWNlKDAsIHNwbGl0Lmxlbmd0aCkgPT09IHNwbGl0KSB7XG4gICAgcmVzdFRleHQgPSByZXN0VGV4dC5zbGljZShzcGxpdC5sZW5ndGgpO1xuICB9XG4gIHZhciBjb25uZWN0ZWRTdGFydFRleHQgPSBcIlwiLmNvbmNhdChiZWZvcmVNZWFzdXJlVGV4dCkuY29uY2F0KHByZWZpeCkuY29uY2F0KHRhcmdldFRleHQpLmNvbmNhdChzcGxpdCk7XG4gIHJldHVybiB7XG4gICAgdGV4dDogXCJcIi5jb25jYXQoY29ubmVjdGVkU3RhcnRUZXh0KS5jb25jYXQocmVzdFRleHQpLFxuICAgIHNlbGVjdGlvbkxvY2F0aW9uOiBjb25uZWN0ZWRTdGFydFRleHQubGVuZ3RoXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0SW5wdXRTZWxlY3Rpb24oaW5wdXQsIGxvY2F0aW9uKSB7XG4gIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGxvY2F0aW9uLCBsb2NhdGlvbik7XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNhcmV0IGludG8gdmlldy5cbiAgICogU2luY2UgdGhpcyBmdW5jdGlvbiBhbHdheXMgY2FsbGVkIGJ5IHVzZXIgY29udHJvbCwgaXQncyBzYWZlIHRvIGZvY3VzIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dC5ibHVyKCk7XG4gIGlucHV0LmZvY3VzKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZWFyY2godGV4dCwgc3BsaXQpIHtcbiAgcmV0dXJuICFzcGxpdCB8fCB0ZXh0LmluZGV4T2Yoc3BsaXQpID09PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJPcHRpb24oaW5wdXQsIF9yZWYpIHtcbiAgdmFyIF9yZWYkdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgIHZhbHVlID0gX3JlZiR2YWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHZhbHVlO1xuICB2YXIgbG93ZXJDYXNlID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2UpICE9PSAtMTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWVhc3VyZSB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpdmlkZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHM7XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICByb2xlOiBcInNlcGFyYXRvclwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW0tZGl2aWRlclwiKSwgY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSk7XG59IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEljb24oX3JlZikge1xuICB2YXIgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgaWNvbk5vZGU7XG4gIGlmIChpY29uID09PSBudWxsIHx8IGljb24gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiBpY29uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWNvbk5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChpY29uLCBfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcykpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpY29uICE9PSBcImJvb2xlYW5cIikge1xuICAgIC8vIENvbXBhdGlibGUgZm9yIG9yaWdpbiBkZWZpbml0aW9uXG4gICAgaWNvbk5vZGUgPSBpY29uO1xuICB9XG4gIHJldHVybiBpY29uTm9kZSB8fCBjaGlsZHJlbiB8fCBudWxsO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInByZWZpeENsc1wiLCBcInJvb3RDbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcInRhYkluZGV4XCIsIFwiaXRlbXNcIiwgXCJjaGlsZHJlblwiLCBcImRpcmVjdGlvblwiLCBcImlkXCIsIFwibW9kZVwiLCBcImlubGluZUNvbGxhcHNlZFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRPdmVyZmxvd1wiLCBcInN1Yk1lbnVPcGVuRGVsYXlcIiwgXCJzdWJNZW51Q2xvc2VEZWxheVwiLCBcImZvcmNlU3ViTWVudVJlbmRlclwiLCBcImRlZmF1bHRPcGVuS2V5c1wiLCBcIm9wZW5LZXlzXCIsIFwiYWN0aXZlS2V5XCIsIFwiZGVmYXVsdEFjdGl2ZUZpcnN0XCIsIFwic2VsZWN0YWJsZVwiLCBcIm11bHRpcGxlXCIsIFwiZGVmYXVsdFNlbGVjdGVkS2V5c1wiLCBcInNlbGVjdGVkS2V5c1wiLCBcIm9uU2VsZWN0XCIsIFwib25EZXNlbGVjdFwiLCBcImlubGluZUluZGVudFwiLCBcIm1vdGlvblwiLCBcImRlZmF1bHRNb3Rpb25zXCIsIFwidHJpZ2dlclN1Yk1lbnVBY3Rpb25cIiwgXCJidWlsdGluUGxhY2VtZW50c1wiLCBcIml0ZW1JY29uXCIsIFwiZXhwYW5kSWNvblwiLCBcIm92ZXJmbG93ZWRJbmRpY2F0b3JcIiwgXCJvdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWVcIiwgXCJnZXRQb3B1cENvbnRhaW5lclwiLCBcIm9uQ2xpY2tcIiwgXCJvbk9wZW5DaGFuZ2VcIiwgXCJvbktleURvd25cIiwgXCJvcGVuQW5pbWF0aW9uXCIsIFwib3BlblRyYW5zaXRpb25OYW1lXCIsIFwiX2ludGVybmFsUmVuZGVyTWVudUl0ZW1cIiwgXCJfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbVwiLCBcIl9pbnRlcm5hbENvbXBvbmVudHNcIl07XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBPdmVyZmxvdyBmcm9tICdyYy1vdmVyZmxvdyc7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJyYy11dGlsL2VzL2lzRXF1YWxcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgSWRDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCBNZW51Q29udGV4dFByb3ZpZGVyIGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IFBhdGhSZWdpc3RlckNvbnRleHQsIFBhdGhVc2VyQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCBQcml2YXRlQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L1ByaXZhdGVDb250ZXh0XCI7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVFbGVtZW50cywgcmVmcmVzaEVsZW1lbnRzLCB1c2VBY2Nlc3NpYmlsaXR5IH0gZnJvbSBcIi4vaG9va3MvdXNlQWNjZXNzaWJpbGl0eVwiO1xuaW1wb3J0IHVzZUtleVJlY29yZHMsIHsgT1ZFUkZMT1dfS0VZIH0gZnJvbSBcIi4vaG9va3MvdXNlS2V5UmVjb3Jkc1wiO1xuaW1wb3J0IHVzZU1lbW9DYWxsYmFjayBmcm9tIFwiLi9ob29rcy91c2VNZW1vQ2FsbGJhY2tcIjtcbmltcG9ydCB1c2VVVUlEIGZyb20gXCIuL2hvb2tzL3VzZVVVSURcIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuaW1wb3J0IFN1Yk1lbnUgZnJvbSBcIi4vU3ViTWVudVwiO1xuaW1wb3J0IHsgcGFyc2VJdGVtcyB9IGZyb20gXCIuL3V0aWxzL25vZGVVdGlsXCI7XG5pbXBvcnQgeyB3YXJuSXRlbVByb3AgfSBmcm9tIFwiLi91dGlscy93YXJuVXRpbFwiO1xuXG4vKipcbiAqIE1lbnUgbW9kaWZ5IGFmdGVyIHJlZmFjdG9yOlxuICogIyMgQWRkXG4gKiAtIGRpc2FibGVkXG4gKlxuICogIyMgUmVtb3ZlXG4gKiAtIG9wZW5UcmFuc2l0aW9uTmFtZVxuICogLSBvcGVuQW5pbWF0aW9uXG4gKiAtIG9uRGVzdHJveVxuICogLSBzaWRlckNvbGxhcHNlZDogU2VlbXMgYW50ZCBkbyBub3QgdXNlIHRoaXMgcHJvcCAoTmVlZCB0ZXN0IGluIGFudGQpXG4gKiAtIGNvbGxhcHNlZFdpZHRoOiBTZWVtcyB0aGlzIGxvZ2ljIHNob3VsZCBiZSBoYW5kbGUgYnkgYW50ZCBMYXlvdXQuU2lkZXJcbiAqL1xuXG4vLyBvcHRpbWl6ZSBmb3IgcmVuZGVyXG52YXIgRU1QVFlfTElTVCA9IFtdO1xudmFyIE1lbnUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgX2NoaWxkTGlzdCQ7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgX3JlZiRwcmVmaXhDbHMgPSBfcmVmLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcmVmJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW1lbnUnIDogX3JlZiRwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZSA9IF9yZWYucm9vdENsYXNzTmFtZSxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiR0YWJJbmRleCA9IF9yZWYudGFiSW5kZXgsXG4gICAgdGFiSW5kZXggPSBfcmVmJHRhYkluZGV4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR0YWJJbmRleCxcbiAgICBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbiA9IF9yZWYuZGlyZWN0aW9uLFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBfcmVmJG1vZGUgPSBfcmVmLm1vZGUsXG4gICAgbW9kZSA9IF9yZWYkbW9kZSA9PT0gdm9pZCAwID8gJ3ZlcnRpY2FsJyA6IF9yZWYkbW9kZSxcbiAgICBpbmxpbmVDb2xsYXBzZWQgPSBfcmVmLmlubGluZUNvbGxhcHNlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWRPdmVyZmxvdyA9IF9yZWYuZGlzYWJsZWRPdmVyZmxvdyxcbiAgICBfcmVmJHN1Yk1lbnVPcGVuRGVsYXkgPSBfcmVmLnN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudU9wZW5EZWxheSA9IF9yZWYkc3ViTWVudU9wZW5EZWxheSA9PT0gdm9pZCAwID8gMC4xIDogX3JlZiRzdWJNZW51T3BlbkRlbGF5LFxuICAgIF9yZWYkc3ViTWVudUNsb3NlRGVsYSA9IF9yZWYuc3ViTWVudUNsb3NlRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXkgPSBfcmVmJHN1Yk1lbnVDbG9zZURlbGEgPT09IHZvaWQgMCA/IDAuMSA6IF9yZWYkc3ViTWVudUNsb3NlRGVsYSxcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfcmVmLmZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBkZWZhdWx0T3BlbktleXMgPSBfcmVmLmRlZmF1bHRPcGVuS2V5cyxcbiAgICBvcGVuS2V5cyA9IF9yZWYub3BlbktleXMsXG4gICAgYWN0aXZlS2V5ID0gX3JlZi5hY3RpdmVLZXksXG4gICAgZGVmYXVsdEFjdGl2ZUZpcnN0ID0gX3JlZi5kZWZhdWx0QWN0aXZlRmlyc3QsXG4gICAgX3JlZiRzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgIHNlbGVjdGFibGUgPSBfcmVmJHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNlbGVjdGFibGUsXG4gICAgX3JlZiRtdWx0aXBsZSA9IF9yZWYubXVsdGlwbGUsXG4gICAgbXVsdGlwbGUgPSBfcmVmJG11bHRpcGxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkbXVsdGlwbGUsXG4gICAgZGVmYXVsdFNlbGVjdGVkS2V5cyA9IF9yZWYuZGVmYXVsdFNlbGVjdGVkS2V5cyxcbiAgICBzZWxlY3RlZEtleXMgPSBfcmVmLnNlbGVjdGVkS2V5cyxcbiAgICBvblNlbGVjdCA9IF9yZWYub25TZWxlY3QsXG4gICAgb25EZXNlbGVjdCA9IF9yZWYub25EZXNlbGVjdCxcbiAgICBfcmVmJGlubGluZUluZGVudCA9IF9yZWYuaW5saW5lSW5kZW50LFxuICAgIGlubGluZUluZGVudCA9IF9yZWYkaW5saW5lSW5kZW50ID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkaW5saW5lSW5kZW50LFxuICAgIG1vdGlvbiA9IF9yZWYubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX3JlZi5kZWZhdWx0TW90aW9ucyxcbiAgICBfcmVmJHRyaWdnZXJTdWJNZW51QWMgPSBfcmVmLnRyaWdnZXJTdWJNZW51QWN0aW9uLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uID0gX3JlZiR0cmlnZ2VyU3ViTWVudUFjID09PSB2b2lkIDAgPyAnaG92ZXInIDogX3JlZiR0cmlnZ2VyU3ViTWVudUFjLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzID0gX3JlZi5idWlsdGluUGxhY2VtZW50cyxcbiAgICBpdGVtSWNvbiA9IF9yZWYuaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbiA9IF9yZWYuZXhwYW5kSWNvbixcbiAgICBfcmVmJG92ZXJmbG93ZWRJbmRpY2EgPSBfcmVmLm92ZXJmbG93ZWRJbmRpY2F0b3IsXG4gICAgb3ZlcmZsb3dlZEluZGljYXRvciA9IF9yZWYkb3ZlcmZsb3dlZEluZGljYSA9PT0gdm9pZCAwID8gJy4uLicgOiBfcmVmJG92ZXJmbG93ZWRJbmRpY2EsXG4gICAgb3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lID0gX3JlZi5vdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBfcmVmLmdldFBvcHVwQ29udGFpbmVyLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25PcGVuQ2hhbmdlID0gX3JlZi5vbk9wZW5DaGFuZ2UsXG4gICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgb3BlbkFuaW1hdGlvbiA9IF9yZWYub3BlbkFuaW1hdGlvbixcbiAgICBvcGVuVHJhbnNpdGlvbk5hbWUgPSBfcmVmLm9wZW5UcmFuc2l0aW9uTmFtZSxcbiAgICBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSA9IF9yZWYuX2ludGVybmFsUmVuZGVyTWVudUl0ZW0sXG4gICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0gPSBfcmVmLl9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtLFxuICAgIF9pbnRlcm5hbENvbXBvbmVudHMgPSBfcmVmLl9pbnRlcm5hbENvbXBvbmVudHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlTWVtbyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFtwYXJzZUl0ZW1zKGNoaWxkcmVuLCBpdGVtcywgRU1QVFlfTElTVCwgX2ludGVybmFsQ29tcG9uZW50cywgcHJlZml4Q2xzKSwgcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIEVNUFRZX0xJU1QsIHt9LCBwcmVmaXhDbHMpXTtcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1zLCBfaW50ZXJuYWxDb21wb25lbnRzXSksXG4gICAgX1JlYWN0JHVzZU1lbW8yID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8sIDIpLFxuICAgIGNoaWxkTGlzdCA9IF9SZWFjdCR1c2VNZW1vMlswXSxcbiAgICBtZWFzdXJlQ2hpbGRMaXN0ID0gX1JlYWN0JHVzZU1lbW8yWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIG1vdW50ZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldE1vdW50ZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgY29udGFpbmVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciB1dWlkID0gdXNlVVVJRChpZCk7XG4gIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuaW5nKCFvcGVuQW5pbWF0aW9uICYmICFvcGVuVHJhbnNpdGlvbk5hbWUsICdgb3BlbkFuaW1hdGlvbmAgYW5kIGBvcGVuVHJhbnNpdGlvbk5hbWVgIGlzIHJlbW92ZWQuIFBsZWFzZSB1c2UgYG1vdGlvbmAgb3IgYGRlZmF1bHRNb3Rpb25gIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoZGVmYXVsdE9wZW5LZXlzLCB7XG4gICAgICB2YWx1ZTogb3BlbktleXMsXG4gICAgICBwb3N0U3RhdGU6IGZ1bmN0aW9uIHBvc3RTdGF0ZShrZXlzKSB7XG4gICAgICAgIHJldHVybiBrZXlzIHx8IEVNUFRZX0xJU1Q7XG4gICAgICB9XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkT3BlbktleXMgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1lcmdlZE9wZW5LZXlzID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcblxuICAvLyBSZWFjdCAxOCB3aWxsIG1lcmdlIG1vdXNlIGV2ZW50IHdoaWNoIG1lYW5zIHdlIG9wZW4ga2V5IHdpbGwgbm90IHN5bmNcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy8zODgxOFxuICB2YXIgdHJpZ2dlck9wZW5LZXlzID0gZnVuY3Rpb24gdHJpZ2dlck9wZW5LZXlzKGtleXMpIHtcbiAgICB2YXIgZm9yY2VGbHVzaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9VcGRhdGUoKSB7XG4gICAgICBzZXRNZXJnZWRPcGVuS2V5cyhrZXlzKTtcbiAgICAgIG9uT3BlbkNoYW5nZSA9PT0gbnVsbCB8fCBvbk9wZW5DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbk9wZW5DaGFuZ2Uoa2V5cyk7XG4gICAgfVxuICAgIGlmIChmb3JjZUZsdXNoKSB7XG4gICAgICBmbHVzaFN5bmMoZG9VcGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb1VwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyA+Pj4+PiBDYWNoZSAmIFJlc2V0IG9wZW4ga2V5cyB3aGVuIGlubGluZUNvbGxhcHNlZCBjaGFuZ2VkXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUobWVyZ2VkT3BlbktleXMpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBpbmxpbmVDYWNoZU9wZW5LZXlzID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRJbmxpbmVDYWNoZU9wZW5LZXlzID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIG1vdW50UmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE1vZGUgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZU1lbW8zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoKG1vZGUgPT09ICdpbmxpbmUnIHx8IG1vZGUgPT09ICd2ZXJ0aWNhbCcpICYmIGlubGluZUNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gWyd2ZXJ0aWNhbCcsIGlubGluZUNvbGxhcHNlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gW21vZGUsIGZhbHNlXTtcbiAgICB9LCBbbW9kZSwgaW5saW5lQ29sbGFwc2VkXSksXG4gICAgX1JlYWN0JHVzZU1lbW80ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8zLCAyKSxcbiAgICBtZXJnZWRNb2RlID0gX1JlYWN0JHVzZU1lbW80WzBdLFxuICAgIG1lcmdlZElubGluZUNvbGxhcHNlZCA9IF9SZWFjdCR1c2VNZW1vNFsxXTtcbiAgdmFyIGlzSW5saW5lTW9kZSA9IG1lcmdlZE1vZGUgPT09ICdpbmxpbmUnO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNSA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZE1vZGUpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGU1LCAyKSxcbiAgICBpbnRlcm5hbE1vZGUgPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEludGVybmFsTW9kZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMV07XG4gIHZhciBfUmVhY3QkdXNlU3RhdGU3ID0gUmVhY3QudXNlU3RhdGUobWVyZ2VkSW5saW5lQ29sbGFwc2VkKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNywgMiksXG4gICAgaW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQgPSBfUmVhY3QkdXNlU3RhdGU4WzBdLFxuICAgIHNldEludGVybmFsSW5saW5lQ29sbGFwc2VkID0gX1JlYWN0JHVzZVN0YXRlOFsxXTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbnRlcm5hbE1vZGUobWVyZ2VkTW9kZSk7XG4gICAgc2V0SW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQobWVyZ2VkSW5saW5lQ29sbGFwc2VkKTtcbiAgICBpZiAoIW1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3luY2hyb25vdXNseSB1cGRhdGUgTWVyZ2VkT3BlbktleXNcbiAgICBpZiAoaXNJbmxpbmVNb2RlKSB7XG4gICAgICBzZXRNZXJnZWRPcGVuS2V5cyhpbmxpbmVDYWNoZU9wZW5LZXlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJpZ2dlciBvcGVuIGV2ZW50IGluIGNhc2UgaXRzIGluIGNvbnRyb2xcbiAgICAgIHRyaWdnZXJPcGVuS2V5cyhFTVBUWV9MSVNUKTtcbiAgICB9XG4gIH0sIFttZXJnZWRNb2RlLCBtZXJnZWRJbmxpbmVDb2xsYXBzZWRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFJlc3BvbnNpdmUgPT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZVN0YXRlOSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlOSwgMiksXG4gICAgbGFzdFZpc2libGVJbmRleCA9IF9SZWFjdCR1c2VTdGF0ZTEwWzBdLFxuICAgIHNldExhc3RWaXNpYmxlSW5kZXggPSBfUmVhY3QkdXNlU3RhdGUxMFsxXTtcbiAgdmFyIGFsbFZpc2libGUgPSBsYXN0VmlzaWJsZUluZGV4ID49IGNoaWxkTGlzdC5sZW5ndGggLSAxIHx8IGludGVybmFsTW9kZSAhPT0gJ2hvcml6b250YWwnIHx8IGRpc2FibGVkT3ZlcmZsb3c7XG5cbiAgLy8gQ2FjaGVcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbmxpbmVNb2RlKSB7XG4gICAgICBzZXRJbmxpbmVDYWNoZU9wZW5LZXlzKG1lcmdlZE9wZW5LZXlzKTtcbiAgICB9XG4gIH0sIFttZXJnZWRPcGVuS2V5c10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlS2V5UmVjb3JkcyA9IHVzZUtleVJlY29yZHMoKSxcbiAgICByZWdpc3RlclBhdGggPSBfdXNlS2V5UmVjb3Jkcy5yZWdpc3RlclBhdGgsXG4gICAgdW5yZWdpc3RlclBhdGggPSBfdXNlS2V5UmVjb3Jkcy51bnJlZ2lzdGVyUGF0aCxcbiAgICByZWZyZXNoT3ZlcmZsb3dLZXlzID0gX3VzZUtleVJlY29yZHMucmVmcmVzaE92ZXJmbG93S2V5cyxcbiAgICBpc1N1YlBhdGhLZXkgPSBfdXNlS2V5UmVjb3Jkcy5pc1N1YlBhdGhLZXksXG4gICAgZ2V0S2V5UGF0aCA9IF91c2VLZXlSZWNvcmRzLmdldEtleVBhdGgsXG4gICAgZ2V0S2V5cyA9IF91c2VLZXlSZWNvcmRzLmdldEtleXMsXG4gICAgZ2V0U3ViUGF0aEtleXMgPSBfdXNlS2V5UmVjb3Jkcy5nZXRTdWJQYXRoS2V5cztcbiAgdmFyIHJlZ2lzdGVyUGF0aENvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnaXN0ZXJQYXRoOiByZWdpc3RlclBhdGgsXG4gICAgICB1bnJlZ2lzdGVyUGF0aDogdW5yZWdpc3RlclBhdGhcbiAgICB9O1xuICB9LCBbcmVnaXN0ZXJQYXRoLCB1bnJlZ2lzdGVyUGF0aF0pO1xuICB2YXIgcGF0aFVzZXJDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU3ViUGF0aEtleTogaXNTdWJQYXRoS2V5XG4gICAgfTtcbiAgfSwgW2lzU3ViUGF0aEtleV0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnJlc2hPdmVyZmxvd0tleXMoYWxsVmlzaWJsZSA/IEVNUFRZX0xJU1QgOiBjaGlsZExpc3Quc2xpY2UobGFzdFZpc2libGVJbmRleCArIDEpLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC5rZXk7XG4gICAgfSkpO1xuICB9LCBbbGFzdFZpc2libGVJbmRleCwgYWxsVmlzaWJsZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBBY3RpdmUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoYWN0aXZlS2V5IHx8IGRlZmF1bHRBY3RpdmVGaXJzdCAmJiAoKF9jaGlsZExpc3QkID0gY2hpbGRMaXN0WzBdKSA9PT0gbnVsbCB8fCBfY2hpbGRMaXN0JCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoaWxkTGlzdCQua2V5KSwge1xuICAgICAgdmFsdWU6IGFjdGl2ZUtleVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUzLCAyKSxcbiAgICBtZXJnZWRBY3RpdmVLZXkgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldE1lcmdlZEFjdGl2ZUtleSA9IF91c2VNZXJnZWRTdGF0ZTRbMV07XG4gIHZhciBvbkFjdGl2ZSA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoa2V5KSB7XG4gICAgc2V0TWVyZ2VkQWN0aXZlS2V5KGtleSk7XG4gIH0pO1xuICB2YXIgb25JbmFjdGl2ZSA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0TWVyZ2VkQWN0aXZlS2V5KHVuZGVmaW5lZCk7XG4gIH0pO1xuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0OiBjb250YWluZXJSZWYuY3VycmVudCxcbiAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhvcHRpb25zKSB7XG4gICAgICAgIHZhciBfY2hpbGRMaXN0JGZpbmQ7XG4gICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cygpO1xuICAgICAgICB2YXIgX3JlZnJlc2hFbGVtZW50cyA9IHJlZnJlc2hFbGVtZW50cyhrZXlzLCB1dWlkKSxcbiAgICAgICAgICBlbGVtZW50cyA9IF9yZWZyZXNoRWxlbWVudHMuZWxlbWVudHMsXG4gICAgICAgICAga2V5MmVsZW1lbnQgPSBfcmVmcmVzaEVsZW1lbnRzLmtleTJlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnQya2V5ID0gX3JlZnJlc2hFbGVtZW50cy5lbGVtZW50MmtleTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoY29udGFpbmVyUmVmLmN1cnJlbnQsIGVsZW1lbnRzKTtcbiAgICAgICAgdmFyIHNob3VsZEZvY3VzS2V5ID0gbWVyZ2VkQWN0aXZlS2V5ICE9PSBudWxsICYmIG1lcmdlZEFjdGl2ZUtleSAhPT0gdm9pZCAwID8gbWVyZ2VkQWN0aXZlS2V5IDogZm9jdXNhYmxlRWxlbWVudHNbMF0gPyBlbGVtZW50MmtleS5nZXQoZm9jdXNhYmxlRWxlbWVudHNbMF0pIDogKF9jaGlsZExpc3QkZmluZCA9IGNoaWxkTGlzdC5maW5kKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuICFub2RlLnByb3BzLmRpc2FibGVkO1xuICAgICAgICB9KSkgPT09IG51bGwgfHwgX2NoaWxkTGlzdCRmaW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2hpbGRMaXN0JGZpbmQua2V5O1xuICAgICAgICB2YXIgZWxlbWVudFRvRm9jdXMgPSBrZXkyZWxlbWVudC5nZXQoc2hvdWxkRm9jdXNLZXkpO1xuICAgICAgICBpZiAoc2hvdWxkRm9jdXNLZXkgJiYgZWxlbWVudFRvRm9jdXMpIHtcbiAgICAgICAgICB2YXIgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzO1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID09PSBudWxsIHx8IGVsZW1lbnRUb0ZvY3VzID09PSB2b2lkIDAgfHwgKF9lbGVtZW50VG9Gb2N1cyRmb2N1cyA9IGVsZW1lbnRUb0ZvY3VzLmZvY3VzKSA9PT0gbnVsbCB8fCBfZWxlbWVudFRvRm9jdXMkZm9jdXMgPT09IHZvaWQgMCB8fCBfZWxlbWVudFRvRm9jdXMkZm9jdXMuY2FsbChlbGVtZW50VG9Gb2N1cywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU2VsZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4+PiBTZWxlY3Qga2V5c1xuICB2YXIgX3VzZU1lcmdlZFN0YXRlNSA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRTZWxlY3RlZEtleXMgfHwgW10sIHtcbiAgICAgIHZhbHVlOiBzZWxlY3RlZEtleXMsXG4gICAgICAvLyBMZWdhY3kgY29udmVydCBrZXkgdG8gYXJyYXlcbiAgICAgIHBvc3RTdGF0ZTogZnVuY3Rpb24gcG9zdFN0YXRlKGtleXMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5cyA9PT0gbnVsbCB8fCBrZXlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gRU1QVFlfTElTVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2tleXNdO1xuICAgICAgfVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGU1LCAyKSxcbiAgICBtZXJnZWRTZWxlY3RLZXlzID0gX3VzZU1lcmdlZFN0YXRlNlswXSxcbiAgICBzZXRNZXJnZWRTZWxlY3RLZXlzID0gX3VzZU1lcmdlZFN0YXRlNlsxXTtcblxuICAvLyA+Pj4+PiBUcmlnZ2VyIHNlbGVjdFxuICB2YXIgdHJpZ2dlclNlbGVjdGlvbiA9IGZ1bmN0aW9uIHRyaWdnZXJTZWxlY3Rpb24oaW5mbykge1xuICAgIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgICAvLyBJbnNlcnQgb3IgUmVtb3ZlXG4gICAgICB2YXIgdGFyZ2V0S2V5ID0gaW5mby5rZXk7XG4gICAgICB2YXIgZXhpc3QgPSBtZXJnZWRTZWxlY3RLZXlzLmluY2x1ZGVzKHRhcmdldEtleSk7XG4gICAgICB2YXIgbmV3U2VsZWN0S2V5cztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBpZiAoZXhpc3QpIHtcbiAgICAgICAgICBuZXdTZWxlY3RLZXlzID0gbWVyZ2VkU2VsZWN0S2V5cy5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gdGFyZ2V0S2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1NlbGVjdEtleXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KG1lcmdlZFNlbGVjdEtleXMpLCBbdGFyZ2V0S2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NlbGVjdEtleXMgPSBbdGFyZ2V0S2V5XTtcbiAgICAgIH1cbiAgICAgIHNldE1lcmdlZFNlbGVjdEtleXMobmV3U2VsZWN0S2V5cyk7XG5cbiAgICAgIC8vIFRyaWdnZXIgZXZlbnRcbiAgICAgIHZhciBzZWxlY3RJbmZvID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpbmZvKSwge30sIHtcbiAgICAgICAgc2VsZWN0ZWRLZXlzOiBuZXdTZWxlY3RLZXlzXG4gICAgICB9KTtcbiAgICAgIGlmIChleGlzdCkge1xuICAgICAgICBvbkRlc2VsZWN0ID09PSBudWxsIHx8IG9uRGVzZWxlY3QgPT09IHZvaWQgMCB8fCBvbkRlc2VsZWN0KHNlbGVjdEluZm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TZWxlY3QgPT09IG51bGwgfHwgb25TZWxlY3QgPT09IHZvaWQgMCB8fCBvblNlbGVjdChzZWxlY3RJbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGF0ZXZlciBzZWxlY3RhYmxlLCBhbHdheXMgY2xvc2UgaXRcbiAgICBpZiAoIW11bHRpcGxlICYmIG1lcmdlZE9wZW5LZXlzLmxlbmd0aCAmJiBpbnRlcm5hbE1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgICB0cmlnZ2VyT3BlbktleXMoRU1QVFlfTElTVCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gT3BlbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBDbGljayBmb3IgaXRlbS4gU3ViTWVudSBkbyBub3QgaGF2ZSBzZWxlY3Rpb24gc3RhdHVzXG4gICAqL1xuICB2YXIgb25JbnRlcm5hbENsaWNrID0gdXNlTWVtb0NhbGxiYWNrKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgIHRyaWdnZXJTZWxlY3Rpb24oaW5mbyk7XG4gIH0pO1xuICB2YXIgb25JbnRlcm5hbE9wZW5DaGFuZ2UgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGtleSwgb3Blbikge1xuICAgIHZhciBuZXdPcGVuS2V5cyA9IG1lcmdlZE9wZW5LZXlzLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgcmV0dXJuIGsgIT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAob3Blbikge1xuICAgICAgbmV3T3BlbktleXMucHVzaChrZXkpO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJuYWxNb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgLy8gV2UgbmVlZCBmaW5kIGFsbCByZWxhdGVkIHBvcHVwIHRvIGNsb3NlXG4gICAgICB2YXIgc3ViUGF0aEtleXMgPSBnZXRTdWJQYXRoS2V5cyhrZXkpO1xuICAgICAgbmV3T3BlbktleXMgPSBuZXdPcGVuS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuICFzdWJQYXRoS2V5cy5oYXMoayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpc0VxdWFsKG1lcmdlZE9wZW5LZXlzLCBuZXdPcGVuS2V5cywgdHJ1ZSkpIHtcbiAgICAgIHRyaWdnZXJPcGVuS2V5cyhuZXdPcGVuS2V5cywgdHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBBY2Nlc3NpYmlsaXR5ID09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuID0gZnVuY3Rpb24gdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuKGtleSwgb3Blbikge1xuICAgIHZhciBuZXh0T3BlbiA9IG9wZW4gIT09IG51bGwgJiYgb3BlbiAhPT0gdm9pZCAwID8gb3BlbiA6ICFtZXJnZWRPcGVuS2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgIG9uSW50ZXJuYWxPcGVuQ2hhbmdlKGtleSwgbmV4dE9wZW4pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSB1c2VBY2Nlc3NpYmlsaXR5KGludGVybmFsTW9kZSwgbWVyZ2VkQWN0aXZlS2V5LCBpc1J0bCwgdXVpZCwgY29udGFpbmVyUmVmLCBnZXRLZXlzLCBnZXRLZXlQYXRoLCBzZXRNZXJnZWRBY3RpdmVLZXksIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbiwgb25LZXlEb3duKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBDb250ZXh0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcHJpdmF0ZUNvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX2ludGVybmFsUmVuZGVyTWVudUl0ZW06IF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtLFxuICAgICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW06IF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtXG4gICAgfTtcbiAgfSwgW19pbnRlcm5hbFJlbmRlck1lbnVJdGVtLCBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gPj4+Pj4gQ2hpbGRyZW5cbiAgdmFyIHdyYXBwZWRDaGlsZExpc3QgPSBpbnRlcm5hbE1vZGUgIT09ICdob3Jpem9udGFsJyB8fCBkaXNhYmxlZE92ZXJmbG93ID8gY2hpbGRMaXN0IDpcbiAgLy8gTmVlZCB3cmFwIGZvciBvdmVyZmxvdyBkcm9wZG93biB0aGF0IGRvIG5vdCByZXNwb25zZSBmb3Igb3BlblxuICBjaGlsZExpc3QubWFwKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gQWx3YXlzIHdyYXAgcHJvdmlkZXIgdG8gYXZvaWQgc3ViIG5vZGUgcmUtbW91bnRcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlciwge1xuICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgb3ZlcmZsb3dEaXNhYmxlZDogaW5kZXggPiBsYXN0VmlzaWJsZUluZGV4XG4gICAgICB9LCBjaGlsZClcbiAgICApO1xuICB9KTtcblxuICAvLyA+Pj4+PiBDb250YWluZXJcbiAgdmFyIGNvbnRhaW5lciA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJmbG93LCBfZXh0ZW5kcyh7XG4gICAgaWQ6IGlkLFxuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIHByZWZpeENsczogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1vdmVyZmxvd1wiKSxcbiAgICBjb21wb25lbnQ6IFwidWxcIixcbiAgICBpdGVtQ29tcG9uZW50OiBNZW51SXRlbSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJvb3RcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChpbnRlcm5hbE1vZGUpLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW5saW5lLWNvbGxhcHNlZFwiKSwgaW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgaXNSdGwpLCByb290Q2xhc3NOYW1lKSxcbiAgICBkaXI6IGRpcmVjdGlvbixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgcm9sZTogXCJtZW51XCIsXG4gICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgIGRhdGE6IHdyYXBwZWRDaGlsZExpc3QsXG4gICAgcmVuZGVyUmF3SXRlbTogZnVuY3Rpb24gcmVuZGVyUmF3SXRlbShub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIHJlbmRlclJhd1Jlc3Q6IGZ1bmN0aW9uIHJlbmRlclJhd1Jlc3Qob21pdEl0ZW1zKSB7XG4gICAgICAvLyBXZSB1c2Ugb3JpZ2luIGxpc3Qgc2luY2Ugd3JhcHBlZCBsaXN0IHVzZSBjb250ZXh0IHRvIHByZXZlbnQgb3BlblxuICAgICAgdmFyIGxlbiA9IG9taXRJdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgb3JpZ2luT21pdEl0ZW1zID0gbGVuID8gY2hpbGRMaXN0LnNsaWNlKC1sZW4pIDogbnVsbDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51LCB7XG4gICAgICAgIGV2ZW50S2V5OiBPVkVSRkxPV19LRVksXG4gICAgICAgIHRpdGxlOiBvdmVyZmxvd2VkSW5kaWNhdG9yLFxuICAgICAgICBkaXNhYmxlZDogYWxsVmlzaWJsZSxcbiAgICAgICAgaW50ZXJuYWxQb3B1cENsb3NlOiBsZW4gPT09IDAsXG4gICAgICAgIHBvcHVwQ2xhc3NOYW1lOiBvdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWVcbiAgICAgIH0sIG9yaWdpbk9taXRJdGVtcyk7XG4gICAgfSxcbiAgICBtYXhDb3VudDogaW50ZXJuYWxNb2RlICE9PSAnaG9yaXpvbnRhbCcgfHwgZGlzYWJsZWRPdmVyZmxvdyA/IE92ZXJmbG93LklOVkFMSURBVEUgOiBPdmVyZmxvdy5SRVNQT05TSVZFLFxuICAgIHNzcjogXCJmdWxsXCIsXG4gICAgXCJkYXRhLW1lbnUtbGlzdFwiOiB0cnVlLFxuICAgIG9uVmlzaWJsZUNoYW5nZTogZnVuY3Rpb24gb25WaXNpYmxlQ2hhbmdlKG5ld0xhc3RJbmRleCkge1xuICAgICAgc2V0TGFzdFZpc2libGVJbmRleChuZXdMYXN0SW5kZXgpO1xuICAgIH0sXG4gICAgb25LZXlEb3duOiBvbkludGVybmFsS2V5RG93blxuICB9LCByZXN0UHJvcHMpKTtcblxuICAvLyA+Pj4+PiBSZW5kZXJcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByaXZhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHByaXZhdGVDb250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElkQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB1dWlkXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICByb290Q2xhc3NOYW1lOiByb290Q2xhc3NOYW1lLFxuICAgIG1vZGU6IGludGVybmFsTW9kZSxcbiAgICBvcGVuS2V5czogbWVyZ2VkT3BlbktleXMsXG4gICAgcnRsOiBpc1J0bFxuICAgIC8vIERpc2FibGVkXG4gICAgLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIC8vIE1vdGlvblxuICAgICxcbiAgICBtb3Rpb246IG1vdW50ZWQgPyBtb3Rpb24gOiBudWxsLFxuICAgIGRlZmF1bHRNb3Rpb25zOiBtb3VudGVkID8gZGVmYXVsdE1vdGlvbnMgOiBudWxsXG4gICAgLy8gQWN0aXZlXG4gICAgLFxuICAgIGFjdGl2ZUtleTogbWVyZ2VkQWN0aXZlS2V5LFxuICAgIG9uQWN0aXZlOiBvbkFjdGl2ZSxcbiAgICBvbkluYWN0aXZlOiBvbkluYWN0aXZlXG4gICAgLy8gU2VsZWN0aW9uXG4gICAgLFxuICAgIHNlbGVjdGVkS2V5czogbWVyZ2VkU2VsZWN0S2V5c1xuICAgIC8vIExldmVsXG4gICAgLFxuICAgIGlubGluZUluZGVudDogaW5saW5lSW5kZW50XG4gICAgLy8gUG9wdXBcbiAgICAsXG4gICAgc3ViTWVudU9wZW5EZWxheTogc3ViTWVudU9wZW5EZWxheSxcbiAgICBzdWJNZW51Q2xvc2VEZWxheTogc3ViTWVudUNsb3NlRGVsYXksXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgYnVpbHRpblBsYWNlbWVudHM6IGJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uOiB0cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXJcbiAgICAvLyBJY29uXG4gICAgLFxuICAgIGl0ZW1JY29uOiBpdGVtSWNvbixcbiAgICBleHBhbmRJY29uOiBleHBhbmRJY29uXG4gICAgLy8gRXZlbnRzXG4gICAgLFxuICAgIG9uSXRlbUNsaWNrOiBvbkludGVybmFsQ2xpY2ssXG4gICAgb25PcGVuQ2hhbmdlOiBvbkludGVybmFsT3BlbkNoYW5nZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYXRoVXNlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGF0aFVzZXJDb250ZXh0XG4gIH0sIGNvbnRhaW5lciksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZToge1xuICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgfSxcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFJlZ2lzdGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiByZWdpc3RlclBhdGhDb250ZXh0XG4gIH0sIG1lYXN1cmVDaGlsZExpc3QpKSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzXCI7XG5pbXBvcnQgX2NyZWF0ZVN1cGVyIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlclwiO1xudmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwiYXR0cmlidXRlXCIsIFwiZWxlbWVudFJlZlwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZXZlbnRLZXlcIiwgXCJ3YXJuS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJpdGVtSWNvblwiLCBcImNoaWxkcmVuXCIsIFwicm9sZVwiLCBcIm9uTW91c2VFbnRlclwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJvbkZvY3VzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiYWN0aXZlXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgT3ZlcmZsb3cgZnJvbSAncmMtb3ZlcmZsb3cnO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZVJlZiB9IGZyb20gXCJyYy11dGlsL2VzL3JlZlwiO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVudUlkIH0gZnJvbSBcIi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRnVsbFBhdGgsIHVzZU1lYXN1cmUgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgUHJpdmF0ZUNvbnRleHQgZnJvbSBcIi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xuaW1wb3J0IHVzZUFjdGl2ZSBmcm9tIFwiLi9ob29rcy91c2VBY3RpdmVcIjtcbmltcG9ydCB1c2VEaXJlY3Rpb25TdHlsZSBmcm9tIFwiLi9ob29rcy91c2VEaXJlY3Rpb25TdHlsZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vSWNvblwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4vdXRpbHMvd2FyblV0aWxcIjtcbi8vIFNpbmNlIE1lbnUgZXZlbnQgcHJvdmlkZSB0aGUgYGluZm8uaXRlbWAgd2hpY2ggcG9pbnQgdG8gdGhlIE1lbnVJdGVtIG5vZGUgaW5zdGFuY2UuXG4vLyBXZSBoYXZlIHRvIHVzZSBjbGFzcyBjb21wb25lbnQgaGVyZS5cbi8vIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBkb2MgJiBhcGkgaW4gZnV0dXJlLlxudmFyIExlZ2FjeU1lbnVJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMZWdhY3lNZW51SXRlbSwgX1JlYWN0JENvbXBvbmVudCk7XG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTGVnYWN5TWVudUl0ZW0pO1xuICBmdW5jdGlvbiBMZWdhY3lNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGVnYWN5TWVudUl0ZW0pO1xuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoTGVnYWN5TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICBhdHRyaWJ1dGUgPSBfdGhpcyRwcm9wcy5hdHRyaWJ1dGUsXG4gICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wcy5lbGVtZW50UmVmLFxuICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIC8vIEhlcmUgdGhlIHByb3BzIGFyZSBldmVudHVhbGx5IHBhc3NlZCB0byB0aGUgRE9NIGVsZW1lbnQuXG4gICAgICAvLyBSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZXMuXG4gICAgICAvLyBUaGVyZWZvcmUsIHJlbW92ZSB0aGUgcHJvcHMgdGhhdCBpcyBub3QgdXNlZCBoZXJlLlxuICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80MTM5NVxuICAgICAgdmFyIHBhc3NlZFByb3BzID0gb21pdChyZXN0UHJvcHMsIFsnZXZlbnRLZXknLCAncG9wdXBDbGFzc05hbWUnLCAncG9wdXBPZmZzZXQnLCAnb25UaXRsZUNsaWNrJ10pO1xuICAgICAgd2FybmluZyghYXR0cmlidXRlLCAnYGF0dHJpYnV0ZWAgb2YgTWVudS5JdGVtIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBwYXNzIGF0dHJpYnV0ZSBkaXJlY3RseS4nKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdy5JdGVtLCBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlLCB7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiB1bmRlZmluZWRcbiAgICAgIH0sIHBhc3NlZFByb3BzLCB7XG4gICAgICAgIHJlZjogZWxlbWVudFJlZlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTGVnYWN5TWVudUl0ZW07XG59KFJlYWN0LkNvbXBvbmVudCk7XG4vKipcbiAqIFJlYWwgTWVudSBJdGVtIGNvbXBvbmVudFxuICovXG52YXIgSW50ZXJuYWxNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIHdhcm5LZXkgPSBwcm9wcy53YXJuS2V5LFxuICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgaXRlbUljb24gPSBwcm9wcy5pdGVtSWNvbixcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHJvbGUgPSBwcm9wcy5yb2xlLFxuICAgIG9uTW91c2VFbnRlciA9IHByb3BzLm9uTW91c2VFbnRlcixcbiAgICBvbk1vdXNlTGVhdmUgPSBwcm9wcy5vbk1vdXNlTGVhdmUsXG4gICAgb25DbGljayA9IHByb3BzLm9uQ2xpY2ssXG4gICAgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIHZhciBkb21EYXRhSWQgPSB1c2VNZW51SWQoZXZlbnRLZXkpO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgb25JdGVtQ2xpY2sgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkl0ZW1DbGljayxcbiAgICBjb250ZXh0RGlzYWJsZWQgPSBfUmVhY3QkdXNlQ29udGV4dC5kaXNhYmxlZCxcbiAgICBvdmVyZmxvd0Rpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQub3ZlcmZsb3dEaXNhYmxlZCxcbiAgICBjb250ZXh0SXRlbUljb24gPSBfUmVhY3QkdXNlQ29udGV4dC5pdGVtSWNvbixcbiAgICBzZWxlY3RlZEtleXMgPSBfUmVhY3QkdXNlQ29udGV4dC5zZWxlY3RlZEtleXMsXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0MiA9IFJlYWN0LnVzZUNvbnRleHQoUHJpdmF0ZUNvbnRleHQpLFxuICAgIF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtID0gX1JlYWN0JHVzZUNvbnRleHQyLl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtO1xuICB2YXIgaXRlbUNscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaXRlbVwiKTtcbiAgdmFyIGxlZ2FjeU1lbnVJdGVtUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBlbGVtZW50UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBtZXJnZWREaXNhYmxlZCA9IGNvbnRleHREaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgdmFyIG1lcmdlZEVsZVJlZiA9IHVzZUNvbXBvc2VSZWYocmVmLCBlbGVtZW50UmVmKTtcbiAgdmFyIGNvbm5lY3RlZEtleXMgPSB1c2VGdWxsUGF0aChldmVudEtleSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuS2V5KSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ01lbnVJdGVtIHNob3VsZCBub3QgbGVhdmUgdW5kZWZpbmVkIGBrZXlgLicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0RXZlbnRJbmZvID0gZnVuY3Rpb24gZ2V0RXZlbnRJbmZvKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIC8vIE5vdGU6IEZvciBsZWdhY3kgY29kZSBpcyByZXZlcnNlZCB3aGljaCBub3QgbGlrZSBvdGhlciBhbnRkIGNvbXBvbmVudFxuICAgICAga2V5UGF0aDogX3RvQ29uc3VtYWJsZUFycmF5KGNvbm5lY3RlZEtleXMpLnJldmVyc2UoKSxcbiAgICAgIGl0ZW06IGxlZ2FjeU1lbnVJdGVtUmVmLmN1cnJlbnQsXG4gICAgICBkb21FdmVudDogZVxuICAgIH07XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSWNvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkSXRlbUljb24gPSBpdGVtSWNvbiB8fCBjb250ZXh0SXRlbUljb247XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBY3RpdmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUFjdGl2ZSA9IHVzZUFjdGl2ZShldmVudEtleSwgbWVyZ2VkRGlzYWJsZWQsIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlKSxcbiAgICBhY3RpdmUgPSBfdXNlQWN0aXZlLmFjdGl2ZSxcbiAgICBhY3RpdmVQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdXNlQWN0aXZlLCBfZXhjbHVkZWQzKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkS2V5cy5pbmNsdWRlcyhldmVudEtleSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IERpcmVjdGlvblN0eWxlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZGlyZWN0aW9uU3R5bGUgPSB1c2VEaXJlY3Rpb25TdHlsZShjb25uZWN0ZWRLZXlzLmxlbmd0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFdmVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25JbnRlcm5hbENsaWNrID0gZnVuY3Rpb24gb25JbnRlcm5hbENsaWNrKGUpIHtcbiAgICBpZiAobWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGluZm8gPSBnZXRFdmVudEluZm8oZSk7XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgIG9uSXRlbUNsaWNrKGluZm8pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSBmdW5jdGlvbiBvbkludGVybmFsS2V5RG93bihlKSB7XG4gICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9uS2V5RG93bihlKTtcbiAgICBpZiAoZS53aGljaCA9PT0gS2V5Q29kZS5FTlRFUikge1xuICAgICAgdmFyIGluZm8gPSBnZXRFdmVudEluZm8oZSk7XG5cbiAgICAgIC8vIExlZ2FjeS4gS2V5IHdpbGwgYWxzbyB0cmlnZ2VyIGNsaWNrIGV2ZW50XG4gICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKHdhcm5JdGVtUHJvcChpbmZvKSk7XG4gICAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGFjY2Vzc2liaWxpdHkuIEhlbHBlciB3aWxsIGZvY3VzIGVsZW1lbnQgd2l0aG91dCBrZXkgYm9hcmQuXG4gICAqIFdlIHNob3VsZCBtYW51YWxseSB0cmlnZ2VyIGFuIGFjdGl2ZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxGb2N1cyA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxGb2N1cyhlKSB7XG4gICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwIHx8IG9uRm9jdXMoZSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb3B0aW9uUm9sZVByb3BzID0ge307XG4gIGlmIChwcm9wcy5yb2xlID09PSAnb3B0aW9uJykge1xuICAgIG9wdGlvblJvbGVQcm9wc1snYXJpYS1zZWxlY3RlZCddID0gc2VsZWN0ZWQ7XG4gIH1cbiAgdmFyIHJlbmRlck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMZWdhY3lNZW51SXRlbSwgX2V4dGVuZHMoe1xuICAgIHJlZjogbGVnYWN5TWVudUl0ZW1SZWYsXG4gICAgZWxlbWVudFJlZjogbWVyZ2VkRWxlUmVmLFxuICAgIHJvbGU6IHJvbGUgPT09IG51bGwgPyAnbm9uZScgOiByb2xlIHx8ICdtZW51aXRlbScsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gbnVsbCA6IC0xLFxuICAgIFwiZGF0YS1tZW51LWlkXCI6IG92ZXJmbG93RGlzYWJsZWQgJiYgZG9tRGF0YUlkID8gbnVsbCA6IGRvbURhdGFJZFxuICB9LCBvbWl0KHJlc3RQcm9wcywgWydleHRyYSddKSwgYWN0aXZlUHJvcHMsIG9wdGlvblJvbGVQcm9wcywge1xuICAgIGNvbXBvbmVudDogXCJsaVwiLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkaXJlY3Rpb25TdHlsZSksIHN0eWxlKSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoaXRlbUNscywgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLWFjdGl2ZVwiKSwgYWN0aXZlKSwgXCJcIi5jb25jYXQoaXRlbUNscywgXCItc2VsZWN0ZWRcIiksIHNlbGVjdGVkKSwgXCJcIi5jb25jYXQoaXRlbUNscywgXCItZGlzYWJsZWRcIiksIG1lcmdlZERpc2FibGVkKSwgY2xhc3NOYW1lKSxcbiAgICBvbkNsaWNrOiBvbkludGVybmFsQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbkludGVybmFsS2V5RG93bixcbiAgICBvbkZvY3VzOiBvbkludGVybmFsRm9jdXNcbiAgfSksIGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgcHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgaXNTZWxlY3RlZDogc2VsZWN0ZWRcbiAgICB9KSxcbiAgICBpY29uOiBtZXJnZWRJdGVtSWNvblxuICB9KSk7XG4gIGlmIChfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSkge1xuICAgIHJlbmRlck5vZGUgPSBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbShyZW5kZXJOb2RlLCBwcm9wcywge1xuICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlbmRlck5vZGU7XG59KTtcbmZ1bmN0aW9uIE1lbnVJdGVtKHByb3BzLCByZWYpIHtcbiAgdmFyIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUmVjb3JkIEtleVBhdGggPT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lYXN1cmUgPSB1c2VNZWFzdXJlKCk7XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChtZWFzdXJlKSB7XG4gICAgICBtZWFzdXJlLnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBtZWFzdXJlLnVucmVnaXN0ZXJQYXRoKGV2ZW50S2V5LCBjb25uZWN0ZWRLZXlQYXRoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY29ubmVjdGVkS2V5UGF0aF0pO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEludGVybmFsTWVudUl0ZW0sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJlZjogcmVmXG4gIH0pKTtcbn1cbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKE1lbnVJdGVtKTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwidGl0bGVcIiwgXCJldmVudEtleVwiLCBcImNoaWxkcmVuXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgb21pdCBmcm9tIFwicmMtdXRpbC9lcy9vbWl0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IHsgcGFyc2VDaGlsZHJlbiB9IGZyb20gXCIuL3V0aWxzL2NvbW1vblV0aWxcIjtcbnZhciBJbnRlcm5hbE1lbnVJdGVtR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgZ3JvdXBQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW0tZ3JvdXBcIik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoZ3JvdXBQcmVmaXhDbHMsIGNsYXNzTmFtZSlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoZ3JvdXBQcmVmaXhDbHMsIFwiLXRpdGxlXCIpLFxuICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiB1bmRlZmluZWRcbiAgfSwgdGl0bGUpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHtcbiAgICByb2xlOiBcImdyb3VwXCIsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChncm91cFByZWZpeENscywgXCItbGlzdFwiKVxuICB9LCBjaGlsZHJlbikpO1xufSk7XG52YXIgTWVudUl0ZW1Hcm91cCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuICB2YXIgY2hpbGRMaXN0ID0gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwgY29ubmVjdGVkS2V5UGF0aCk7XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBjaGlsZExpc3Q7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEludGVybmFsTWVudUl0ZW1Hcm91cCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIG9taXQocHJvcHMsIFsnd2FybktleSddKSksIGNoaWxkTGlzdCk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE1lbnVJdGVtR3JvdXAuZGlzcGxheU5hbWUgPSAnTWVudUl0ZW1Hcm91cCc7XG59XG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbUdyb3VwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENTU01vdGlvbiBmcm9tICdyYy1tb3Rpb24nO1xuaW1wb3J0IHsgZ2V0TW90aW9uIH0gZnJvbSBcIi4uL3V0aWxzL21vdGlvblV0aWxcIjtcbmltcG9ydCBNZW51Q29udGV4dFByb3ZpZGVyLCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCBTdWJNZW51TGlzdCBmcm9tIFwiLi9TdWJNZW51TGlzdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSW5saW5lU3ViTWVudUxpc3QoX3JlZikge1xuICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgIG9wZW4gPSBfcmVmLm9wZW4sXG4gICAga2V5UGF0aCA9IF9yZWYua2V5UGF0aCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBmaXhlZE1vZGUgPSAnaW5saW5lJztcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIGZvcmNlU3ViTWVudVJlbmRlciA9IF9SZWFjdCR1c2VDb250ZXh0LmZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBtb3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC5tb3Rpb24sXG4gICAgZGVmYXVsdE1vdGlvbnMgPSBfUmVhY3QkdXNlQ29udGV4dC5kZWZhdWx0TW90aW9ucyxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZTtcblxuICAvLyBBbHdheXMgdXNlIGxhdGVzdCBtb2RlIGNoZWNrXG4gIHZhciBzYW1lTW9kZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIHNhbWVNb2RlUmVmLmN1cnJlbnQgPSBtb2RlID09PSBmaXhlZE1vZGU7XG5cbiAgLy8gV2UgcmVjb3JkIGBkZXN0cm95YCBtYXJrIGhlcmUgc2luY2Ugd2hlbiBtb2RlIGNoYW5nZSBmcm9tIGBpbmxpbmVgIHRvIG90aGVycy5cbiAgLy8gVGhlIGlubGluZSBsaXN0IHNob3VsZCByZW1vdmUgd2hlbiBtb3Rpb24gZW5kLlxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoIXNhbWVNb2RlUmVmLmN1cnJlbnQpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGRlc3Ryb3kgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldERlc3Ryb3kgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgbWVyZ2VkT3BlbiA9IHNhbWVNb2RlUmVmLmN1cnJlbnQgPyBvcGVuIDogZmFsc2U7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVzZXQgZGVzdHJveSBzdGF0ZSB3aGVuIG1vZGUgY2hhbmdlIGJhY2tcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2FtZU1vZGVSZWYuY3VycmVudCkge1xuICAgICAgc2V0RGVzdHJveShmYWxzZSk7XG4gICAgfVxuICB9LCBbbW9kZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRNb3Rpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBnZXRNb3Rpb24oZml4ZWRNb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKSk7XG5cbiAgLy8gTm8gbmVlZCBhcHBlYXIgc2luY2UgbmVzdCBpbmxpbmVDb2xsYXBzZSBjaGFuZ2VkXG4gIGlmIChrZXlQYXRoLmxlbmd0aCA+IDEpIHtcbiAgICBtZXJnZWRNb3Rpb24ubW90aW9uQXBwZWFyID0gZmFsc2U7XG4gIH1cblxuICAvLyBIaWRlIGlubGluZSBsaXN0IHdoZW4gbW9kZSBjaGFuZ2VkIGFuZCBtb3Rpb24gZW5kXG4gIHZhciBvcmlnaW5PblZpc2libGVDaGFuZ2VkID0gbWVyZ2VkTW90aW9uLm9uVmlzaWJsZUNoYW5nZWQ7XG4gIG1lcmdlZE1vdGlvbi5vblZpc2libGVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1Zpc2libGUpIHtcbiAgICBpZiAoIXNhbWVNb2RlUmVmLmN1cnJlbnQgJiYgIW5ld1Zpc2libGUpIHtcbiAgICAgIHNldERlc3Ryb3kodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnaW5PblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IG9yaWdpbk9uVmlzaWJsZUNoYW5nZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbk9uVmlzaWJsZUNoYW5nZWQobmV3VmlzaWJsZSk7XG4gIH07XG4gIGlmIChkZXN0cm95KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBtb2RlOiBmaXhlZE1vZGUsXG4gICAgbG9ja2VkOiAhc2FtZU1vZGVSZWYuY3VycmVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDU1NNb3Rpb24sIF9leHRlbmRzKHtcbiAgICB2aXNpYmxlOiBtZXJnZWRPcGVuXG4gIH0sIG1lcmdlZE1vdGlvbiwge1xuICAgIGZvcmNlUmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcmVtb3ZlT25MZWF2ZTogZmFsc2UsXG4gICAgbGVhdmVkQ2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWhpZGRlblwiKVxuICB9KSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIG1vdGlvbkNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIG1vdGlvblN0eWxlID0gX3JlZjIuc3R5bGU7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN1Yk1lbnVMaXN0LCB7XG4gICAgICBpZDogaWQsXG4gICAgICBjbGFzc05hbWU6IG1vdGlvbkNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBtb3Rpb25TdHlsZVxuICAgIH0sIGNoaWxkcmVuKTtcbiAgfSkpO1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgcGxhY2VtZW50cywgcGxhY2VtZW50c1J0bCB9IGZyb20gXCIuLi9wbGFjZW1lbnRzXCI7XG5pbXBvcnQgeyBnZXRNb3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvbW90aW9uVXRpbFwiO1xudmFyIHBvcHVwUGxhY2VtZW50TWFwID0ge1xuICBob3Jpem9udGFsOiAnYm90dG9tTGVmdCcsXG4gIHZlcnRpY2FsOiAncmlnaHRUb3AnLFxuICAndmVydGljYWwtbGVmdCc6ICdyaWdodFRvcCcsXG4gICd2ZXJ0aWNhbC1yaWdodCc6ICdsZWZ0VG9wJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBvcHVwVHJpZ2dlcihfcmVmKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBfcmVmLnByZWZpeENscyxcbiAgICB2aXNpYmxlID0gX3JlZi52aXNpYmxlLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwb3B1cCA9IF9yZWYucG9wdXAsXG4gICAgcG9wdXBTdHlsZSA9IF9yZWYucG9wdXBTdHlsZSxcbiAgICBwb3B1cENsYXNzTmFtZSA9IF9yZWYucG9wdXBDbGFzc05hbWUsXG4gICAgcG9wdXBPZmZzZXQgPSBfcmVmLnBvcHVwT2Zmc2V0LFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBtb2RlID0gX3JlZi5tb2RlLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYub25WaXNpYmxlQ2hhbmdlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBnZXRQb3B1cENvbnRhaW5lciA9IF9SZWFjdCR1c2VDb250ZXh0LmdldFBvcHVwQ29udGFpbmVyLFxuICAgIHJ0bCA9IF9SZWFjdCR1c2VDb250ZXh0LnJ0bCxcbiAgICBzdWJNZW51T3BlbkRlbGF5ID0gX1JlYWN0JHVzZUNvbnRleHQuc3ViTWVudU9wZW5EZWxheSxcbiAgICBzdWJNZW51Q2xvc2VEZWxheSA9IF9SZWFjdCR1c2VDb250ZXh0LnN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzID0gX1JlYWN0JHVzZUNvbnRleHQuYnVpbHRpblBsYWNlbWVudHMsXG4gICAgdHJpZ2dlclN1Yk1lbnVBY3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC50cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcm9vdENsYXNzTmFtZSA9IF9SZWFjdCR1c2VDb250ZXh0LnJvb3RDbGFzc05hbWUsXG4gICAgbW90aW9uID0gX1JlYWN0JHVzZUNvbnRleHQubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX1JlYWN0JHVzZUNvbnRleHQuZGVmYXVsdE1vdGlvbnM7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaW5uZXJWaXNpYmxlID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRJbm5lclZpc2libGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgcGxhY2VtZW50ID0gcnRsID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwbGFjZW1lbnRzUnRsKSwgYnVpbHRpblBsYWNlbWVudHMpIDogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwbGFjZW1lbnRzKSwgYnVpbHRpblBsYWNlbWVudHMpO1xuICB2YXIgcG9wdXBQbGFjZW1lbnQgPSBwb3B1cFBsYWNlbWVudE1hcFttb2RlXTtcbiAgdmFyIHRhcmdldE1vdGlvbiA9IGdldE1vdGlvbihtb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKTtcbiAgdmFyIHRhcmdldE1vdGlvblJlZiA9IFJlYWN0LnVzZVJlZih0YXJnZXRNb3Rpb24pO1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAvKipcbiAgICAgKiBQb3B1cFRyaWdnZXIgaXMgb25seSB1c2VkIGZvciB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB0eXBlcy5cbiAgICAgKiBXaGVuIGNvbGxhcHNlZCBpcyB1bmZvbGRlZCwgdGhlIGlubGluZSBhbmltYXRpb24gd2lsbCBkZXN0cm95IHRoZSB2ZXJ0aWNhbCBhbmltYXRpb24uXG4gICAgICovXG4gICAgdGFyZ2V0TW90aW9uUmVmLmN1cnJlbnQgPSB0YXJnZXRNb3Rpb247XG4gIH1cbiAgdmFyIG1lcmdlZE1vdGlvbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0TW90aW9uUmVmLmN1cnJlbnQpLCB7fSwge1xuICAgIGxlYXZlZENsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oaWRkZW5cIiksXG4gICAgcmVtb3ZlT25MZWF2ZTogZmFsc2UsXG4gICAgbW90aW9uQXBwZWFyOiB0cnVlXG4gIH0pO1xuXG4gIC8vIERlbGF5IHRvIGNoYW5nZSB2aXNpYmxlXG4gIHZhciB2aXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmlzaWJsZVJlZi5jdXJyZW50ID0gcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldElubmVyVmlzaWJsZSh2aXNpYmxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmFmLmNhbmNlbCh2aXNpYmxlUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmlnZ2VyLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcG9wdXBDbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1wb3B1cFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgcnRsKSwgcG9wdXBDbGFzc05hbWUsIHJvb3RDbGFzc05hbWUpLFxuICAgIHN0cmV0Y2g6IG1vZGUgPT09ICdob3Jpem9udGFsJyA/ICdtaW5XaWR0aCcgOiBudWxsLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBidWlsdGluUGxhY2VtZW50czogcGxhY2VtZW50LFxuICAgIHBvcHVwUGxhY2VtZW50OiBwb3B1cFBsYWNlbWVudCxcbiAgICBwb3B1cFZpc2libGU6IGlubmVyVmlzaWJsZSxcbiAgICBwb3B1cDogcG9wdXAsXG4gICAgcG9wdXBTdHlsZTogcG9wdXBTdHlsZSxcbiAgICBwb3B1cEFsaWduOiBwb3B1cE9mZnNldCAmJiB7XG4gICAgICBvZmZzZXQ6IHBvcHVwT2Zmc2V0XG4gICAgfSxcbiAgICBhY3Rpb246IGRpc2FibGVkID8gW10gOiBbdHJpZ2dlclN1Yk1lbnVBY3Rpb25dLFxuICAgIG1vdXNlRW50ZXJEZWxheTogc3ViTWVudU9wZW5EZWxheSxcbiAgICBtb3VzZUxlYXZlRGVsYXk6IHN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIG9uUG9wdXBWaXNpYmxlQ2hhbmdlOiBvblZpc2libGVDaGFuZ2UsXG4gICAgZm9yY2VSZW5kZXI6IGZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBwb3B1cE1vdGlvbjogbWVyZ2VkTW90aW9uLFxuICAgIGZyZXNoOiB0cnVlXG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbnZhciBJbnRlcm5hbFN1Yk1lbnVMaXN0ID0gZnVuY3Rpb24gSW50ZXJuYWxTdWJNZW51TGlzdChfcmVmLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG1vZGUgPSBfUmVhY3QkdXNlQ29udGV4dC5tb2RlLFxuICAgIHJ0bCA9IF9SZWFjdCR1c2VDb250ZXh0LnJ0bDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwcmVmaXhDbHMsIHJ0bCAmJiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdWJcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChtb2RlID09PSAnaW5saW5lJyA/ICdpbmxpbmUnIDogJ3ZlcnRpY2FsJyksIGNsYXNzTmFtZSksXG4gICAgcm9sZTogXCJtZW51XCJcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgXCJkYXRhLW1lbnUtbGlzdFwiOiB0cnVlLFxuICAgIHJlZjogcmVmXG4gIH0pLCBjaGlsZHJlbik7XG59O1xudmFyIFN1Yk1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoSW50ZXJuYWxTdWJNZW51TGlzdCk7XG5TdWJNZW51TGlzdC5kaXNwbGF5TmFtZSA9ICdTdWJNZW51TGlzdCc7XG5leHBvcnQgZGVmYXVsdCBTdWJNZW51TGlzdDsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwidGl0bGVcIiwgXCJldmVudEtleVwiLCBcIndhcm5LZXlcIiwgXCJkaXNhYmxlZFwiLCBcImludGVybmFsUG9wdXBDbG9zZVwiLCBcImNoaWxkcmVuXCIsIFwiaXRlbUljb25cIiwgXCJleHBhbmRJY29uXCIsIFwicG9wdXBDbGFzc05hbWVcIiwgXCJwb3B1cE9mZnNldFwiLCBcInBvcHVwU3R5bGVcIiwgXCJvbkNsaWNrXCIsIFwib25Nb3VzZUVudGVyXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25UaXRsZUNsaWNrXCIsIFwib25UaXRsZU1vdXNlRW50ZXJcIiwgXCJvblRpdGxlTW91c2VMZWF2ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFjdGl2ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IE92ZXJmbG93IGZyb20gJ3JjLW92ZXJmbG93JztcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBTdWJNZW51TGlzdCBmcm9tIFwiLi9TdWJNZW51TGlzdFwiO1xuaW1wb3J0IHsgcGFyc2VDaGlsZHJlbiB9IGZyb20gXCIuLi91dGlscy9jb21tb25VdGlsXCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciwgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgdXNlTWVtb0NhbGxiYWNrIGZyb20gXCIuLi9ob29rcy91c2VNZW1vQ2FsbGJhY2tcIjtcbmltcG9ydCBQb3B1cFRyaWdnZXIgZnJvbSBcIi4vUG9wdXBUcmlnZ2VyXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHVzZUFjdGl2ZSBmcm9tIFwiLi4vaG9va3MvdXNlQWN0aXZlXCI7XG5pbXBvcnQgeyB3YXJuSXRlbVByb3AgfSBmcm9tIFwiLi4vdXRpbHMvd2FyblV0aWxcIjtcbmltcG9ydCB1c2VEaXJlY3Rpb25TdHlsZSBmcm9tIFwiLi4vaG9va3MvdXNlRGlyZWN0aW9uU3R5bGVcIjtcbmltcG9ydCBJbmxpbmVTdWJNZW51TGlzdCBmcm9tIFwiLi9JbmxpbmVTdWJNZW51TGlzdFwiO1xuaW1wb3J0IHsgUGF0aFRyYWNrZXJDb250ZXh0LCBQYXRoVXNlckNvbnRleHQsIHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4uL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCB7IHVzZU1lbnVJZCB9IGZyb20gXCIuLi9jb250ZXh0L0lkQ29udGV4dFwiO1xuaW1wb3J0IFByaXZhdGVDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L1ByaXZhdGVDb250ZXh0XCI7XG52YXIgSW50ZXJuYWxTdWJNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICB3YXJuS2V5ID0gcHJvcHMud2FybktleSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGludGVybmFsUG9wdXBDbG9zZSA9IHByb3BzLmludGVybmFsUG9wdXBDbG9zZSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGl0ZW1JY29uID0gcHJvcHMuaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbiA9IHByb3BzLmV4cGFuZEljb24sXG4gICAgcG9wdXBDbGFzc05hbWUgPSBwcm9wcy5wb3B1cENsYXNzTmFtZSxcbiAgICBwb3B1cE9mZnNldCA9IHByb3BzLnBvcHVwT2Zmc2V0LFxuICAgIHBvcHVwU3R5bGUgPSBwcm9wcy5wb3B1cFN0eWxlLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uTW91c2VFbnRlciA9IHByb3BzLm9uTW91c2VFbnRlcixcbiAgICBvbk1vdXNlTGVhdmUgPSBwcm9wcy5vbk1vdXNlTGVhdmUsXG4gICAgb25UaXRsZUNsaWNrID0gcHJvcHMub25UaXRsZUNsaWNrLFxuICAgIG9uVGl0bGVNb3VzZUVudGVyID0gcHJvcHMub25UaXRsZU1vdXNlRW50ZXIsXG4gICAgb25UaXRsZU1vdXNlTGVhdmUgPSBwcm9wcy5vblRpdGxlTW91c2VMZWF2ZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBkb21EYXRhSWQgPSB1c2VNZW51SWQoZXZlbnRLZXkpO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGUsXG4gICAgb3BlbktleXMgPSBfUmVhY3QkdXNlQ29udGV4dC5vcGVuS2V5cyxcbiAgICBjb250ZXh0RGlzYWJsZWQgPSBfUmVhY3QkdXNlQ29udGV4dC5kaXNhYmxlZCxcbiAgICBvdmVyZmxvd0Rpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQub3ZlcmZsb3dEaXNhYmxlZCxcbiAgICBhY3RpdmVLZXkgPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVLZXksXG4gICAgc2VsZWN0ZWRLZXlzID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0ZWRLZXlzLFxuICAgIGNvbnRleHRJdGVtSWNvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lml0ZW1JY29uLFxuICAgIGNvbnRleHRFeHBhbmRJY29uID0gX1JlYWN0JHVzZUNvbnRleHQuZXhwYW5kSWNvbixcbiAgICBvbkl0ZW1DbGljayA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uSXRlbUNsaWNrLFxuICAgIG9uT3BlbkNoYW5nZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uT3BlbkNoYW5nZSxcbiAgICBvbkFjdGl2ZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQWN0aXZlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQyID0gUmVhY3QudXNlQ29udGV4dChQcml2YXRlQ29udGV4dCksXG4gICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0gPSBfUmVhY3QkdXNlQ29udGV4dDIuX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW07XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dDMgPSBSZWFjdC51c2VDb250ZXh0KFBhdGhVc2VyQ29udGV4dCksXG4gICAgaXNTdWJQYXRoS2V5ID0gX1JlYWN0JHVzZUNvbnRleHQzLmlzU3ViUGF0aEtleTtcbiAgdmFyIGNvbm5lY3RlZFBhdGggPSB1c2VGdWxsUGF0aCgpO1xuICB2YXIgc3ViTWVudVByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3VibWVudVwiKTtcbiAgdmFyIG1lcmdlZERpc2FibGVkID0gY29udGV4dERpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgcG9wdXBSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5LZXkpIHtcbiAgICB3YXJuaW5nKGZhbHNlLCAnU3ViTWVudSBzaG91bGQgbm90IGxlYXZlIHVuZGVmaW5lZCBga2V5YC4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEljb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZEl0ZW1JY29uID0gaXRlbUljb24gIT09IG51bGwgJiYgaXRlbUljb24gIT09IHZvaWQgMCA/IGl0ZW1JY29uIDogY29udGV4dEl0ZW1JY29uO1xuICB2YXIgbWVyZ2VkRXhwYW5kSWNvbiA9IGV4cGFuZEljb24gIT09IG51bGwgJiYgZXhwYW5kSWNvbiAhPT0gdm9pZCAwID8gZXhwYW5kSWNvbiA6IGNvbnRleHRFeHBhbmRJY29uO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9yaWdpbk9wZW4gPSBvcGVuS2V5cy5pbmNsdWRlcyhldmVudEtleSk7XG4gIHZhciBvcGVuID0gIW92ZXJmbG93RGlzYWJsZWQgJiYgb3JpZ2luT3BlbjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjaGlsZHJlblNlbGVjdGVkID0gaXNTdWJQYXRoS2V5KHNlbGVjdGVkS2V5cywgZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VBY3RpdmUgPSB1c2VBY3RpdmUoZXZlbnRLZXksIG1lcmdlZERpc2FibGVkLCBvblRpdGxlTW91c2VFbnRlciwgb25UaXRsZU1vdXNlTGVhdmUpLFxuICAgIGFjdGl2ZSA9IF91c2VBY3RpdmUuYWN0aXZlLFxuICAgIGFjdGl2ZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF91c2VBY3RpdmUsIF9leGNsdWRlZDIpO1xuXG4gIC8vIEZhbGxiYWNrIG9mIGFjdGl2ZSBjaGVjayB0byBhdm9pZCBob3ZlciBvbiBtZW51IHRpdGxlIG9yIGRpc2FibGVkIGl0ZW1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBjaGlsZHJlbkFjdGl2ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q2hpbGRyZW5BY3RpdmUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgdHJpZ2dlckNoaWxkcmVuQWN0aXZlID0gZnVuY3Rpb24gdHJpZ2dlckNoaWxkcmVuQWN0aXZlKG5ld0FjdGl2ZSkge1xuICAgIGlmICghbWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHNldENoaWxkcmVuQWN0aXZlKG5ld0FjdGl2ZSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25JbnRlcm5hbE1vdXNlRW50ZXIgPSBmdW5jdGlvbiBvbkludGVybmFsTW91c2VFbnRlcihkb21FdmVudCkge1xuICAgIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZSh0cnVlKTtcbiAgICBvbk1vdXNlRW50ZXIgPT09IG51bGwgfHwgb25Nb3VzZUVudGVyID09PSB2b2lkIDAgfHwgb25Nb3VzZUVudGVyKHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxNb3VzZUxlYXZlID0gZnVuY3Rpb24gb25JbnRlcm5hbE1vdXNlTGVhdmUoZG9tRXZlbnQpIHtcbiAgICB0cmlnZ2VyQ2hpbGRyZW5BY3RpdmUoZmFsc2UpO1xuICAgIG9uTW91c2VMZWF2ZSA9PT0gbnVsbCB8fCBvbk1vdXNlTGVhdmUgPT09IHZvaWQgMCB8fCBvbk1vdXNlTGVhdmUoe1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgIH0pO1xuICB9O1xuICB2YXIgbWVyZ2VkQWN0aXZlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gICAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5BY3RpdmUgfHwgaXNTdWJQYXRoS2V5KFthY3RpdmVLZXldLCBldmVudEtleSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW21vZGUsIGFjdGl2ZSwgYWN0aXZlS2V5LCBjaGlsZHJlbkFjdGl2ZSwgZXZlbnRLZXksIGlzU3ViUGF0aEtleV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IERpcmVjdGlvblN0eWxlID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBkaXJlY3Rpb25TdHlsZSA9IHVzZURpcmVjdGlvblN0eWxlKGNvbm5lY3RlZFBhdGgubGVuZ3RoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID4+Pj4gVGl0bGUgY2xpY2tcbiAgdmFyIG9uSW50ZXJuYWxUaXRsZUNsaWNrID0gZnVuY3Rpb24gb25JbnRlcm5hbFRpdGxlQ2xpY2soZSkge1xuICAgIC8vIFNraXAgaWYgZGlzYWJsZWRcbiAgICBpZiAobWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb25UaXRsZUNsaWNrID09PSBudWxsIHx8IG9uVGl0bGVDbGljayA9PT0gdm9pZCAwIHx8IG9uVGl0bGVDbGljayh7XG4gICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgZG9tRXZlbnQ6IGVcbiAgICB9KTtcblxuICAgIC8vIFRyaWdnZXIgb3BlbiBieSBjbGljayB3aGVuIG1vZGUgaXMgYGlubGluZWBcbiAgICBpZiAobW9kZSA9PT0gJ2lubGluZScpIHtcbiAgICAgIG9uT3BlbkNoYW5nZShldmVudEtleSwgIW9yaWdpbk9wZW4pO1xuICAgIH1cbiAgfTtcblxuICAvLyA+Pj4+IENvbnRleHQgZm9yIGNoaWxkcmVuIGNsaWNrXG4gIHZhciBvbk1lcmdlZEl0ZW1DbGljayA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoaW5mbykge1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgfSk7XG5cbiAgLy8gPj4+Pj4gVmlzaWJsZSBjaGFuZ2VcbiAgdmFyIG9uUG9wdXBWaXNpYmxlQ2hhbmdlID0gZnVuY3Rpb24gb25Qb3B1cFZpc2libGVDaGFuZ2UobmV3VmlzaWJsZSkge1xuICAgIGlmIChtb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgb25PcGVuQ2hhbmdlKGV2ZW50S2V5LCBuZXdWaXNpYmxlKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGFjY2Vzc2liaWxpdHkuIEhlbHBlciB3aWxsIGZvY3VzIGVsZW1lbnQgd2l0aG91dCBrZXkgYm9hcmQuXG4gICAqIFdlIHNob3VsZCBtYW51YWxseSB0cmlnZ2VyIGFuIGFjdGl2ZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxGb2N1cyA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxGb2N1cygpIHtcbiAgICBvbkFjdGl2ZShldmVudEtleSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcG9wdXBJZCA9IGRvbURhdGFJZCAmJiBcIlwiLmNvbmNhdChkb21EYXRhSWQsIFwiLXBvcHVwXCIpO1xuICB2YXIgZXhwYW5kSWNvbk5vZGUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgICAgaWNvbjogbW9kZSAhPT0gJ2hvcml6b250YWwnID8gbWVyZ2VkRXhwYW5kSWNvbiA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgaXNPcGVuOiBvcGVuLFxuICAgICAgICAvLyBbTGVnYWN5XSBOb3Qgc3VyZSB3aHkgbmVlZCB0aGlzIG1hcmtcbiAgICAgICAgaXNTdWJNZW51OiB0cnVlXG4gICAgICB9KVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWFycm93XCIpXG4gICAgfSkpO1xuICB9LCBbbW9kZSwgbWVyZ2VkRXhwYW5kSWNvbiwgcHJvcHMsIG9wZW4sIHN1Yk1lbnVQcmVmaXhDbHNdKTtcblxuICAvLyA+Pj4+PiBUaXRsZVxuICB2YXIgdGl0bGVOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudWl0ZW1cIixcbiAgICBzdHlsZTogZGlyZWN0aW9uU3R5bGUsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi10aXRsZVwiKSxcbiAgICB0YWJJbmRleDogbWVyZ2VkRGlzYWJsZWQgPyBudWxsIDogLTEsXG4gICAgcmVmOiBlbGVtZW50UmVmLFxuICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiBudWxsLFxuICAgIFwiZGF0YS1tZW51LWlkXCI6IG92ZXJmbG93RGlzYWJsZWQgJiYgZG9tRGF0YUlkID8gbnVsbCA6IGRvbURhdGFJZCxcbiAgICBcImFyaWEtZXhwYW5kZWRcIjogb3BlbixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogdHJ1ZSxcbiAgICBcImFyaWEtY29udHJvbHNcIjogcG9wdXBJZCxcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogbWVyZ2VkRGlzYWJsZWQsXG4gICAgb25DbGljazogb25JbnRlcm5hbFRpdGxlQ2xpY2ssXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzXG4gIH0sIGFjdGl2ZVByb3BzKSwgdGl0bGUsIGV4cGFuZEljb25Ob2RlKTtcblxuICAvLyBDYWNoZSBtb2RlIGlmIGl0IGNoYW5nZSB0byBgaW5saW5lYCB3aGljaCBkbyBub3QgaGF2ZSBwb3B1cCBtb3Rpb25cbiAgdmFyIHRyaWdnZXJNb2RlUmVmID0gUmVhY3QudXNlUmVmKG1vZGUpO1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScgJiYgY29ubmVjdGVkUGF0aC5sZW5ndGggPiAxKSB7XG4gICAgdHJpZ2dlck1vZGVSZWYuY3VycmVudCA9ICd2ZXJ0aWNhbCc7XG4gIH0gZWxzZSB7XG4gICAgdHJpZ2dlck1vZGVSZWYuY3VycmVudCA9IG1vZGU7XG4gIH1cbiAgaWYgKCFvdmVyZmxvd0Rpc2FibGVkKSB7XG4gICAgdmFyIHRyaWdnZXJNb2RlID0gdHJpZ2dlck1vZGVSZWYuY3VycmVudDtcblxuICAgIC8vIFN0aWxsIHdyYXAgd2l0aCBUcmlnZ2VyIGhlcmUgc2luY2Ugd2UgbmVlZCBhdm9pZCByZWFjdCByZS1tb3VudCBkb20gbm9kZVxuICAgIC8vIFdoaWNoIG1ha2VzIG1vdGlvbiBmYWlsZWRcbiAgICB0aXRsZU5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cFRyaWdnZXIsIHtcbiAgICAgIG1vZGU6IHRyaWdnZXJNb2RlLFxuICAgICAgcHJlZml4Q2xzOiBzdWJNZW51UHJlZml4Q2xzLFxuICAgICAgdmlzaWJsZTogIWludGVybmFsUG9wdXBDbG9zZSAmJiBvcGVuICYmIG1vZGUgIT09ICdpbmxpbmUnLFxuICAgICAgcG9wdXBDbGFzc05hbWU6IHBvcHVwQ2xhc3NOYW1lLFxuICAgICAgcG9wdXBPZmZzZXQ6IHBvcHVwT2Zmc2V0LFxuICAgICAgcG9wdXBTdHlsZTogcG9wdXBTdHlsZSxcbiAgICAgIHBvcHVwOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsZSBvZiBob3Jpem9udGFsIG1vZGVcbiAgICAgICwge1xuICAgICAgICBtb2RlOiB0cmlnZ2VyTW9kZSA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6IHRyaWdnZXJNb2RlXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51TGlzdCwge1xuICAgICAgICBpZDogcG9wdXBJZCxcbiAgICAgICAgcmVmOiBwb3B1cFJlZlxuICAgICAgfSwgY2hpbGRyZW4pKSxcbiAgICAgIGRpc2FibGVkOiBtZXJnZWREaXNhYmxlZCxcbiAgICAgIG9uVmlzaWJsZUNoYW5nZTogb25Qb3B1cFZpc2libGVDaGFuZ2VcbiAgICB9LCB0aXRsZU5vZGUpO1xuICB9XG5cbiAgLy8gPj4+Pj4gTGlzdCBub2RlXG4gIHZhciBsaXN0Tm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJmbG93Lkl0ZW0sIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcIm5vbmVcIlxuICB9LCByZXN0UHJvcHMsIHtcbiAgICBjb21wb25lbnQ6IFwibGlcIixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHN1Yk1lbnVQcmVmaXhDbHMsIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQobW9kZSksIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1vcGVuXCIpLCBvcGVuKSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItYWN0aXZlXCIpLCBtZXJnZWRBY3RpdmUpLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1zZWxlY3RlZFwiKSwgY2hpbGRyZW5TZWxlY3RlZCksIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBtZXJnZWREaXNhYmxlZCkpLFxuICAgIG9uTW91c2VFbnRlcjogb25JbnRlcm5hbE1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlOiBvbkludGVybmFsTW91c2VMZWF2ZVxuICB9KSwgdGl0bGVOb2RlLCAhb3ZlcmZsb3dEaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmxpbmVTdWJNZW51TGlzdCwge1xuICAgIGlkOiBwb3B1cElkLFxuICAgIG9wZW46IG9wZW4sXG4gICAga2V5UGF0aDogY29ubmVjdGVkUGF0aFxuICB9LCBjaGlsZHJlbikpO1xuICBpZiAoX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0pIHtcbiAgICBsaXN0Tm9kZSA9IF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtKGxpc3ROb2RlLCBwcm9wcywge1xuICAgICAgc2VsZWN0ZWQ6IGNoaWxkcmVuU2VsZWN0ZWQsXG4gICAgICBhY3RpdmU6IG1lcmdlZEFjdGl2ZSxcbiAgICAgIG9wZW46IG9wZW4sXG4gICAgICBkaXNhYmxlZDogbWVyZ2VkRGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vID4+Pj4+IFJlbmRlclxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlciwge1xuICAgIG9uSXRlbUNsaWNrOiBvbk1lcmdlZEl0ZW1DbGljayxcbiAgICBtb2RlOiBtb2RlID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogbW9kZSxcbiAgICBpdGVtSWNvbjogbWVyZ2VkSXRlbUljb24sXG4gICAgZXhwYW5kSWNvbjogbWVyZ2VkRXhwYW5kSWNvblxuICB9LCBsaXN0Tm9kZSk7XG59KTtcbnZhciBTdWJNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGNvbm5lY3RlZEtleVBhdGggPSB1c2VGdWxsUGF0aChldmVudEtleSk7XG4gIHZhciBjaGlsZExpc3QgPSBwYXJzZUNoaWxkcmVuKGNoaWxkcmVuLCBjb25uZWN0ZWRLZXlQYXRoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBSZWNvcmQgS2V5UGF0aCA9PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWVhc3VyZSkge1xuICAgICAgbWVhc3VyZS5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWVhc3VyZS51bnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nvbm5lY3RlZEtleVBhdGhdKTtcbiAgdmFyIHJlbmRlck5vZGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZW5kZXJOb2RlID0gY2hpbGRMaXN0O1xuICB9IGVsc2Uge1xuICAgIHJlbmRlck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbFN1Yk1lbnUsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpLCBjaGlsZExpc3QpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYXRoVHJhY2tlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29ubmVjdGVkS2V5UGF0aFxuICB9LCByZW5kZXJOb2RlKTtcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgU3ViTWVudS5kaXNwbGF5TmFtZSA9ICdTdWJNZW51Jztcbn1cbmV4cG9ydCBkZWZhdWx0IFN1Yk1lbnU7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBJZENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SWQodXVpZCwgZXZlbnRLZXkpIHtcbiAgaWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBcIlwiLmNvbmNhdCh1dWlkLCBcIi1cIikuY29uY2F0KGV2ZW50S2V5KTtcbn1cblxuLyoqXG4gKiBHZXQgYGRhdGEtbWVudS1pZGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVJZChldmVudEtleSkge1xuICB2YXIgaWQgPSBSZWFjdC51c2VDb250ZXh0KElkQ29udGV4dCk7XG4gIHJldHVybiBnZXRNZW51SWQoaWQsIGV2ZW50S2V5KTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImxvY2tlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lbW9cIjtcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJyYy11dGlsL2VzL2lzRXF1YWxcIjtcbmV4cG9ydCB2YXIgTWVudUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmZ1bmN0aW9uIG1lcmdlUHJvcHMob3JpZ2luLCB0YXJnZXQpIHtcbiAgdmFyIGNsb25lID0gX29iamVjdFNwcmVhZCh7fSwgb3JpZ2luKTtcbiAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xvbmVba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEluaGVyaXRhYmxlQ29udGV4dFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBsb2NrZWQgPSBfcmVmLmxvY2tlZCxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KTtcbiAgdmFyIGluaGVyaXRhYmxlQ29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXJnZVByb3BzKGNvbnRleHQsIHJlc3RQcm9wcyk7XG4gIH0sIFtjb250ZXh0LCByZXN0UHJvcHNdLCBmdW5jdGlvbiAocHJldiwgbmV4dCkge1xuICAgIHJldHVybiAhbG9ja2VkICYmIChwcmV2WzBdICE9PSBuZXh0WzBdIHx8ICFpc0VxdWFsKHByZXZbMV0sIG5leHRbMV0sIHRydWUpKTtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpbmhlcml0YWJsZUNvbnRleHRcbiAgfSwgY2hpbGRyZW4pO1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRW1wdHlMaXN0ID0gW107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCBSZWdpc3RlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB2YXIgUGF0aFJlZ2lzdGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lYXN1cmUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFBhdGhSZWdpc3RlckNvbnRleHQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggVHJhY2tlciA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHZhciBQYXRoVHJhY2tlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChFbXB0eUxpc3QpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZ1bGxQYXRoKGV2ZW50S2V5KSB7XG4gIHZhciBwYXJlbnRLZXlQYXRoID0gUmVhY3QudXNlQ29udGV4dChQYXRoVHJhY2tlckNvbnRleHQpO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV2ZW50S2V5ICE9PSB1bmRlZmluZWQgPyBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHBhcmVudEtleVBhdGgpLCBbZXZlbnRLZXldKSA6IHBhcmVudEtleVBhdGg7XG4gIH0sIFtwYXJlbnRLZXlQYXRoLCBldmVudEtleV0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCBVc2VyID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdmFyIFBhdGhVc2VyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBQcml2YXRlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmV4cG9ydCBkZWZhdWx0IFByaXZhdGVDb250ZXh0OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgeyBnZXRGb2N1c05vZGVMaXN0IH0gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2ZvY3VzXCI7XG5pbXBvcnQgS2V5Q29kZSBmcm9tIFwicmMtdXRpbC9lcy9LZXlDb2RlXCI7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0TWVudUlkIH0gZnJvbSBcIi4uL2NvbnRleHQvSWRDb250ZXh0XCI7XG4vLyBkZXN0cnVjdCB0byByZWR1Y2UgbWluaWZ5IHNpemVcbnZhciBMRUZUID0gS2V5Q29kZS5MRUZULFxuICBSSUdIVCA9IEtleUNvZGUuUklHSFQsXG4gIFVQID0gS2V5Q29kZS5VUCxcbiAgRE9XTiA9IEtleUNvZGUuRE9XTixcbiAgRU5URVIgPSBLZXlDb2RlLkVOVEVSLFxuICBFU0MgPSBLZXlDb2RlLkVTQyxcbiAgSE9NRSA9IEtleUNvZGUuSE9NRSxcbiAgRU5EID0gS2V5Q29kZS5FTkQ7XG52YXIgQXJyb3dLZXlzID0gW1VQLCBET1dOLCBMRUZULCBSSUdIVF07XG5mdW5jdGlvbiBnZXRPZmZzZXQobW9kZSwgaXNSb290TGV2ZWwsIGlzUnRsLCB3aGljaCkge1xuICB2YXIgX29mZnNldHM7XG4gIHZhciBwcmV2ID0gJ3ByZXYnO1xuICB2YXIgbmV4dCA9ICduZXh0JztcbiAgdmFyIGNoaWxkcmVuID0gJ2NoaWxkcmVuJztcbiAgdmFyIHBhcmVudCA9ICdwYXJlbnQnO1xuXG4gIC8vIElubGluZSBlbnRlciBpcyBzcGVjaWFsIHRoYXQgd2UgdXNlIHVuaXF1ZSBvcGVyYXRpb25cbiAgaWYgKG1vZGUgPT09ICdpbmxpbmUnICYmIHdoaWNoID09PSBFTlRFUikge1xuICAgIHJldHVybiB7XG4gICAgICBpbmxpbmVUcmlnZ2VyOiB0cnVlXG4gICAgfTtcbiAgfVxuICB2YXIgaW5saW5lID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgVVAsIHByZXYpLCBET1dOLCBuZXh0KTtcbiAgdmFyIGhvcml6b250YWwgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIExFRlQsIGlzUnRsID8gbmV4dCA6IHByZXYpLCBSSUdIVCwgaXNSdGwgPyBwcmV2IDogbmV4dCksIERPV04sIGNoaWxkcmVuKSwgRU5URVIsIGNoaWxkcmVuKTtcbiAgdmFyIHZlcnRpY2FsID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFVQLCBwcmV2KSwgRE9XTiwgbmV4dCksIEVOVEVSLCBjaGlsZHJlbiksIEVTQywgcGFyZW50KSwgTEVGVCwgaXNSdGwgPyBjaGlsZHJlbiA6IHBhcmVudCksIFJJR0hULCBpc1J0bCA/IHBhcmVudCA6IGNoaWxkcmVuKTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgaW5saW5lOiBpbmxpbmUsXG4gICAgaG9yaXpvbnRhbDogaG9yaXpvbnRhbCxcbiAgICB2ZXJ0aWNhbDogdmVydGljYWwsXG4gICAgaW5saW5lU3ViOiBpbmxpbmUsXG4gICAgaG9yaXpvbnRhbFN1YjogdmVydGljYWwsXG4gICAgdmVydGljYWxTdWI6IHZlcnRpY2FsXG4gIH07XG4gIHZhciB0eXBlID0gKF9vZmZzZXRzID0gb2Zmc2V0c1tcIlwiLmNvbmNhdChtb2RlKS5jb25jYXQoaXNSb290TGV2ZWwgPyAnJyA6ICdTdWInKV0pID09PSBudWxsIHx8IF9vZmZzZXRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb2Zmc2V0c1t3aGljaF07XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgcHJldjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogLTEsXG4gICAgICAgIHNpYmxpbmc6IHRydWVcbiAgICAgIH07XG4gICAgY2FzZSBuZXh0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICBzaWJsaW5nOiB0cnVlXG4gICAgICB9O1xuICAgIGNhc2UgcGFyZW50OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiAtMSxcbiAgICAgICAgc2libGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgY2FzZSBjaGlsZHJlbjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgc2libGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kQ29udGFpbmVyVUwoZWxlbWVudCkge1xuICB2YXIgY3VycmVudCA9IGVsZW1lbnQ7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGN1cnJlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW1lbnUtbGlzdCcpKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIE5vcm1hbGx5IHNob3VsZCBub3QgcmVhY2ggdGhpcyBsaW5lXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEZpbmQgZm9jdXNlZCBlbGVtZW50IHdpdGhpbiBlbGVtZW50IHNldCBwcm92aWRlZFxuICovXG5mdW5jdGlvbiBnZXRGb2N1c0VsZW1lbnQoYWN0aXZlRWxlbWVudCwgZWxlbWVudHMpIHtcbiAgdmFyIGN1cnJlbnQgPSBhY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGVsZW1lbnRzLmhhcyhjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2V0IGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIHRoZSBlbGVtZW50IHNldCB1bmRlciBwcm92aWRlZCBjb250YWluZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lciwgZWxlbWVudHMpIHtcbiAgdmFyIGxpc3QgPSBnZXRGb2N1c05vZGVMaXN0KGNvbnRhaW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmhhcyhlbGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c0VsZW1lbnQocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzLCBmb2N1c01lbnVFbGVtZW50KSB7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDE7XG4gIC8vIEtleSBvbiB0aGUgbWVudSBpdGVtIHdpbGwgbm90IGdldCB2YWxpZGF0ZSBwYXJlbnQgY29udGFpbmVyXG4gIGlmICghcGFyZW50UXVlcnlDb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIExpc3QgY3VycmVudCBsZXZlbCBtZW51IGl0ZW0gZWxlbWVudHNcbiAgdmFyIHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdCA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cyk7XG5cbiAgLy8gRmluZCBuZXh0IGZvY3VzIGluZGV4XG4gIHZhciBjb3VudCA9IHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdC5sZW5ndGg7XG4gIHZhciBmb2N1c0luZGV4ID0gc2FtZUxldmVsRm9jdXNhYmxlTWVudUVsZW1lbnRMaXN0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlKSB7XG4gICAgcmV0dXJuIGZvY3VzTWVudUVsZW1lbnQgPT09IGVsZTtcbiAgfSk7XG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgaWYgKGZvY3VzSW5kZXggPT09IC0xKSB7XG4gICAgICBmb2N1c0luZGV4ID0gY291bnQgLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c0luZGV4IC09IDE7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHtcbiAgICBmb2N1c0luZGV4ICs9IDE7XG4gIH1cbiAgZm9jdXNJbmRleCA9IChmb2N1c0luZGV4ICsgY291bnQpICUgY291bnQ7XG5cbiAgLy8gRm9jdXMgbWVudSBpdGVtXG4gIHJldHVybiBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3RbZm9jdXNJbmRleF07XG59XG5leHBvcnQgdmFyIHJlZnJlc2hFbGVtZW50cyA9IGZ1bmN0aW9uIHJlZnJlc2hFbGVtZW50cyhrZXlzLCBpZCkge1xuICB2YXIgZWxlbWVudHMgPSBuZXcgU2V0KCk7XG4gIHZhciBrZXkyZWxlbWVudCA9IG5ldyBNYXAoKTtcbiAgdmFyIGVsZW1lbnQya2V5ID0gbmV3IE1hcCgpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLW1lbnUtaWQ9J1wiLmNvbmNhdChnZXRNZW51SWQoaWQsIGtleSksIFwiJ11cIikpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5hZGQoZWxlbWVudCk7XG4gICAgICBlbGVtZW50MmtleS5zZXQoZWxlbWVudCwga2V5KTtcbiAgICAgIGtleTJlbGVtZW50LnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIGtleTJlbGVtZW50OiBrZXkyZWxlbWVudCxcbiAgICBlbGVtZW50MmtleTogZWxlbWVudDJrZXlcbiAgfTtcbn07XG5leHBvcnQgZnVuY3Rpb24gdXNlQWNjZXNzaWJpbGl0eShtb2RlLCBhY3RpdmVLZXksIGlzUnRsLCBpZCwgY29udGFpbmVyUmVmLCBnZXRLZXlzLCBnZXRLZXlQYXRoLCB0cmlnZ2VyQWN0aXZlS2V5LCB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4sIG9yaWdpbk9uS2V5RG93bikge1xuICB2YXIgcmFmUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBhY3RpdmVSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmVLZXk7XG4gIHZhciBjbGVhblJhZiA9IGZ1bmN0aW9uIGNsZWFuUmFmKCkge1xuICAgIHJhZi5jYW5jZWwocmFmUmVmLmN1cnJlbnQpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGVhblJhZigpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHdoaWNoID0gZS53aGljaDtcbiAgICBpZiAoW10uY29uY2F0KEFycm93S2V5cywgW0VOVEVSLCBFU0MsIEhPTUUsIEVORF0pLmluY2x1ZGVzKHdoaWNoKSkge1xuICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKCk7XG4gICAgICB2YXIgcmVmcmVzaGVkRWxlbWVudHMgPSByZWZyZXNoRWxlbWVudHMoa2V5cywgaWQpO1xuICAgICAgdmFyIF9yZWZyZXNoZWRFbGVtZW50cyA9IHJlZnJlc2hlZEVsZW1lbnRzLFxuICAgICAgICBlbGVtZW50cyA9IF9yZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50cyxcbiAgICAgICAga2V5MmVsZW1lbnQgPSBfcmVmcmVzaGVkRWxlbWVudHMua2V5MmVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnQya2V5ID0gX3JlZnJlc2hlZEVsZW1lbnRzLmVsZW1lbnQya2V5O1xuXG4gICAgICAvLyBGaXJzdCB3ZSBzaG91bGQgZmluZCBjdXJyZW50IGZvY3VzZWQgTWVudUl0ZW0vU3ViTWVudSBlbGVtZW50XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGtleTJlbGVtZW50LmdldChhY3RpdmVLZXkpO1xuICAgICAgdmFyIGZvY3VzTWVudUVsZW1lbnQgPSBnZXRGb2N1c0VsZW1lbnQoYWN0aXZlRWxlbWVudCwgZWxlbWVudHMpO1xuICAgICAgdmFyIGZvY3VzTWVudUtleSA9IGVsZW1lbnQya2V5LmdldChmb2N1c01lbnVFbGVtZW50KTtcbiAgICAgIHZhciBvZmZzZXRPYmogPSBnZXRPZmZzZXQobW9kZSwgZ2V0S2V5UGF0aChmb2N1c01lbnVLZXksIHRydWUpLmxlbmd0aCA9PT0gMSwgaXNSdGwsIHdoaWNoKTtcblxuICAgICAgLy8gU29tZSBtb2RlIGRvIG5vdCBoYXZlIGZ1bGx5IGFycm93IG9wZXJhdGlvbiBsaWtlIGlubGluZVxuICAgICAgaWYgKCFvZmZzZXRPYmogJiYgd2hpY2ggIT09IEhPTUUgJiYgd2hpY2ggIT09IEVORCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFycm93IHByZXZlbnQgZGVmYXVsdCB0byBhdm9pZCBwYWdlIHNjcm9sbFxuICAgICAgaWYgKEFycm93S2V5cy5pbmNsdWRlcyh3aGljaCkgfHwgW0hPTUUsIEVORF0uaW5jbHVkZXMod2hpY2gpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHZhciB0cnlGb2N1cyA9IGZ1bmN0aW9uIHRyeUZvY3VzKG1lbnVFbGVtZW50KSB7XG4gICAgICAgIGlmIChtZW51RWxlbWVudCkge1xuICAgICAgICAgIHZhciBmb2N1c1RhcmdldEVsZW1lbnQgPSBtZW51RWxlbWVudDtcblxuICAgICAgICAgIC8vIEZvY3VzIHRvIGxpbmsgaW5zdGVhZCBvZiBtZW51IGl0ZW0gaWYgcG9zc2libGVcbiAgICAgICAgICB2YXIgbGluayA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgICBpZiAobGluayAhPT0gbnVsbCAmJiBsaW5rICE9PSB2b2lkIDAgJiYgbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkge1xuICAgICAgICAgICAgZm9jdXNUYXJnZXRFbGVtZW50ID0gbGluaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhcmdldEtleSA9IGVsZW1lbnQya2V5LmdldChtZW51RWxlbWVudCk7XG4gICAgICAgICAgdHJpZ2dlckFjdGl2ZUtleSh0YXJnZXRLZXkpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRG8gbm90IGB1c2VFZmZlY3RgIGhlcmUgc2luY2UgYHRyeUZvY3VzYCBtYXkgdHJpZ2dlciBhc3luY1xuICAgICAgICAgICAqIHdoaWNoIG1ha2VzIFJlYWN0IHN5bmMgdXBkYXRlIHRoZSBgYWN0aXZlS2V5YFxuICAgICAgICAgICAqIHRoYXQgZm9yY2UgcmVuZGVyIGJlZm9yZSBgdXNlUmVmYCBzZXQgdGhlIG5leHQgYWN0aXZlS2V5XG4gICAgICAgICAgICovXG4gICAgICAgICAgY2xlYW5SYWYoKTtcbiAgICAgICAgICByYWZSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUmVmLmN1cnJlbnQgPT09IHRhcmdldEtleSkge1xuICAgICAgICAgICAgICBmb2N1c1RhcmdldEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChbSE9NRSwgRU5EXS5pbmNsdWRlcyh3aGljaCkgfHwgb2Zmc2V0T2JqLnNpYmxpbmcgfHwgIWZvY3VzTWVudUVsZW1lbnQpIHtcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gU2libGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBGaW5kIHdhbGthYmxlIGZvY3VzIG1lbnUgZWxlbWVudCBjb250YWluZXJcbiAgICAgICAgdmFyIHBhcmVudFF1ZXJ5Q29udGFpbmVyO1xuICAgICAgICBpZiAoIWZvY3VzTWVudUVsZW1lbnQgfHwgbW9kZSA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICBwYXJlbnRRdWVyeUNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudFF1ZXJ5Q29udGFpbmVyID0gZmluZENvbnRhaW5lclVMKGZvY3VzTWVudUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IG5leHQgZm9jdXMgZWxlbWVudFxuICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudDtcbiAgICAgICAgdmFyIGZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzKTtcbiAgICAgICAgaWYgKHdoaWNoID09PSBIT01FKSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBFTkQpIHtcbiAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGdldE5leHRGb2N1c0VsZW1lbnQocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzLCBmb2N1c01lbnVFbGVtZW50LCBvZmZzZXRPYmoub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgdHJ5Rm9jdXModGFyZ2V0RWxlbWVudCk7XG5cbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gSW5saW5lVHJpZ2dlciA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmouaW5saW5lVHJpZ2dlcikge1xuICAgICAgICAvLyBJbmxpbmUgdHJpZ2dlciBubyBuZWVkIHN3aXRjaCB0byBzdWIgbWVudSBpdGVtXG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbihmb2N1c01lbnVLZXkpO1xuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGV2ZWwgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICB9IGVsc2UgaWYgKG9mZnNldE9iai5vZmZzZXQgPiAwKSB7XG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbihmb2N1c01lbnVLZXksIHRydWUpO1xuICAgICAgICBjbGVhblJhZigpO1xuICAgICAgICByYWZSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQXN5bmMgc2hvdWxkIHJlc3luYyBlbGVtZW50c1xuICAgICAgICAgIHJlZnJlc2hlZEVsZW1lbnRzID0gcmVmcmVzaEVsZW1lbnRzKGtleXMsIGlkKTtcbiAgICAgICAgICB2YXIgY29udHJvbElkID0gZm9jdXNNZW51RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKTtcbiAgICAgICAgICB2YXIgc3ViUXVlcnlDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXG4gICAgICAgICAgLy8gR2V0IHN1YiBmb2N1c2FibGUgbWVudSBpdGVtXG4gICAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBnZXROZXh0Rm9jdXNFbGVtZW50KHN1YlF1ZXJ5Q29udGFpbmVyLCByZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50cyk7XG5cbiAgICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgICB0cnlGb2N1cyh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgfSwgNSk7XG4gICAgICB9IGVsc2UgaWYgKG9mZnNldE9iai5vZmZzZXQgPCAwKSB7XG4gICAgICAgIHZhciBrZXlQYXRoID0gZ2V0S2V5UGF0aChmb2N1c01lbnVLZXksIHRydWUpO1xuICAgICAgICB2YXIgcGFyZW50S2V5ID0ga2V5UGF0aFtrZXlQYXRoLmxlbmd0aCAtIDJdO1xuICAgICAgICB2YXIgcGFyZW50TWVudUVsZW1lbnQgPSBrZXkyZWxlbWVudC5nZXQocGFyZW50S2V5KTtcblxuICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuKHBhcmVudEtleSwgZmFsc2UpO1xuICAgICAgICB0cnlGb2N1cyhwYXJlbnRNZW51RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFzcyBvcmlnaW4ga2V5IGRvd24gZXZlbnRcbiAgICBvcmlnaW5PbktleURvd24gPT09IG51bGwgfHwgb3JpZ2luT25LZXlEb3duID09PSB2b2lkIDAgfHwgb3JpZ2luT25LZXlEb3duKGUpO1xuICB9O1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFjdGl2ZShldmVudEtleSwgZGlzYWJsZWQsIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlKSB7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIGFjdGl2ZUtleSA9IF9SZWFjdCR1c2VDb250ZXh0LmFjdGl2ZUtleSxcbiAgICBvbkFjdGl2ZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQWN0aXZlLFxuICAgIG9uSW5hY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkluYWN0aXZlO1xuICB2YXIgcmV0ID0ge1xuICAgIGFjdGl2ZTogYWN0aXZlS2V5ID09PSBldmVudEtleVxuICB9O1xuXG4gIC8vIFNraXAgd2hlbiBkaXNhYmxlZFxuICBpZiAoIWRpc2FibGVkKSB7XG4gICAgcmV0Lm9uTW91c2VFbnRlciA9IGZ1bmN0aW9uIChkb21FdmVudCkge1xuICAgICAgb25Nb3VzZUVudGVyID09PSBudWxsIHx8IG9uTW91c2VFbnRlciA9PT0gdm9pZCAwIHx8IG9uTW91c2VFbnRlcih7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgICAgfSk7XG4gICAgICBvbkFjdGl2ZShldmVudEtleSk7XG4gICAgfTtcbiAgICByZXQub25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKGRvbUV2ZW50KSB7XG4gICAgICBvbk1vdXNlTGVhdmUgPT09IG51bGwgfHwgb25Nb3VzZUxlYXZlID09PSB2b2lkIDAgfHwgb25Nb3VzZUxlYXZlKHtcbiAgICAgICAga2V5OiBldmVudEtleSxcbiAgICAgICAgZG9tRXZlbnQ6IGRvbUV2ZW50XG4gICAgICB9KTtcbiAgICAgIG9uSW5hY3RpdmUoZXZlbnRLZXkpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VEaXJlY3Rpb25TdHlsZShsZXZlbCkge1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZSxcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGwsXG4gICAgaW5saW5lSW5kZW50ID0gX1JlYWN0JHVzZUNvbnRleHQuaW5saW5lSW5kZW50O1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVuID0gbGV2ZWw7XG4gIHJldHVybiBydGwgPyB7XG4gICAgcGFkZGluZ1JpZ2h0OiBsZW4gKiBpbmxpbmVJbmRlbnRcbiAgfSA6IHtcbiAgICBwYWRkaW5nTGVmdDogbGVuICogaW5saW5lSW5kZW50XG4gIH07XG59IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCB7IG5leHRTbGljZSB9IGZyb20gXCIuLi91dGlscy90aW1lVXRpbFwiO1xudmFyIFBBVEhfU1BMSVQgPSAnX19SQ19VVElMX1BBVEhfU1BMSVRfXyc7XG52YXIgZ2V0UGF0aFN0ciA9IGZ1bmN0aW9uIGdldFBhdGhTdHIoa2V5UGF0aCkge1xuICByZXR1cm4ga2V5UGF0aC5qb2luKFBBVEhfU1BMSVQpO1xufTtcbnZhciBnZXRQYXRoS2V5cyA9IGZ1bmN0aW9uIGdldFBhdGhLZXlzKGtleVBhdGhTdHIpIHtcbiAgcmV0dXJuIGtleVBhdGhTdHIuc3BsaXQoUEFUSF9TUExJVCk7XG59O1xuZXhwb3J0IHZhciBPVkVSRkxPV19LRVkgPSAncmMtbWVudS1tb3JlJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUtleVJlY29yZHMoKSB7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaW50ZXJuYWxGb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBrZXkycGF0aFJlZiA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICB2YXIgcGF0aDJrZXlSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZShbXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIG92ZXJmbG93S2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0T3ZlcmZsb3dLZXlzID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIHVwZGF0ZVJlZiA9IHVzZVJlZigwKTtcbiAgdmFyIGRlc3Ryb3lSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICBpZiAoIWRlc3Ryb3lSZWYuY3VycmVudCkge1xuICAgICAgaW50ZXJuYWxGb3JjZVVwZGF0ZSh7fSk7XG4gICAgfVxuICB9O1xuICB2YXIgcmVnaXN0ZXJQYXRoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleSwga2V5UGF0aCkge1xuICAgIC8vIFdhcm5pbmcgZm9yIGludmFsaWRhdGUgb3IgZHVwbGljYXRlZCBga2V5YFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuaW5nKCFrZXkycGF0aFJlZi5jdXJyZW50LmhhcyhrZXkpLCBcIkR1cGxpY2F0ZWQga2V5ICdcIi5jb25jYXQoa2V5LCBcIicgdXNlZCBpbiBNZW51IGJ5IHBhdGggW1wiKS5jb25jYXQoa2V5UGF0aC5qb2luKCcgPiAnKSwgXCJdXCIpKTtcbiAgICB9XG5cbiAgICAvLyBGaWxsIG1hcFxuICAgIHZhciBjb25uZWN0ZWRQYXRoID0gZ2V0UGF0aFN0cihrZXlQYXRoKTtcbiAgICBwYXRoMmtleVJlZi5jdXJyZW50LnNldChjb25uZWN0ZWRQYXRoLCBrZXkpO1xuICAgIGtleTJwYXRoUmVmLmN1cnJlbnQuc2V0KGtleSwgY29ubmVjdGVkUGF0aCk7XG4gICAgdXBkYXRlUmVmLmN1cnJlbnQgKz0gMTtcbiAgICB2YXIgaWQgPSB1cGRhdGVSZWYuY3VycmVudDtcbiAgICBuZXh0U2xpY2UoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlkID09PSB1cGRhdGVSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciB1bnJlZ2lzdGVyUGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXksIGtleVBhdGgpIHtcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IGdldFBhdGhTdHIoa2V5UGF0aCk7XG4gICAgcGF0aDJrZXlSZWYuY3VycmVudC5kZWxldGUoY29ubmVjdGVkUGF0aCk7XG4gICAga2V5MnBhdGhSZWYuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmcmVzaE92ZXJmbG93S2V5cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgc2V0T3ZlcmZsb3dLZXlzKGtleXMpO1xuICB9LCBbXSk7XG4gIHZhciBnZXRLZXlQYXRoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50S2V5LCBpbmNsdWRlT3ZlcmZsb3cpIHtcbiAgICB2YXIgZnVsbFBhdGggPSBrZXkycGF0aFJlZi5jdXJyZW50LmdldChldmVudEtleSkgfHwgJyc7XG4gICAgdmFyIGtleXMgPSBnZXRQYXRoS2V5cyhmdWxsUGF0aCk7XG4gICAgaWYgKGluY2x1ZGVPdmVyZmxvdyAmJiBvdmVyZmxvd0tleXMuaW5jbHVkZXMoa2V5c1swXSkpIHtcbiAgICAgIGtleXMudW5zaGlmdChPVkVSRkxPV19LRVkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfSwgW292ZXJmbG93S2V5c10pO1xuICB2YXIgaXNTdWJQYXRoS2V5ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHBhdGhLZXlzLCBldmVudEtleSkge1xuICAgIHJldHVybiBwYXRoS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtICE9PSB1bmRlZmluZWQ7XG4gICAgfSkuc29tZShmdW5jdGlvbiAocGF0aEtleSkge1xuICAgICAgdmFyIHBhdGhLZXlMaXN0ID0gZ2V0S2V5UGF0aChwYXRoS2V5LCB0cnVlKTtcbiAgICAgIHJldHVybiBwYXRoS2V5TGlzdC5pbmNsdWRlcyhldmVudEtleSk7XG4gICAgfSk7XG4gIH0sIFtnZXRLZXlQYXRoXSk7XG4gIHZhciBnZXRLZXlzID0gZnVuY3Rpb24gZ2V0S2V5cygpIHtcbiAgICB2YXIga2V5cyA9IF90b0NvbnN1bWFibGVBcnJheShrZXkycGF0aFJlZi5jdXJyZW50LmtleXMoKSk7XG4gICAgaWYgKG92ZXJmbG93S2V5cy5sZW5ndGgpIHtcbiAgICAgIGtleXMucHVzaChPVkVSRkxPV19LRVkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvKipcbiAgICogRmluZCBjdXJyZW50IGtleSByZWxhdGVkIGNoaWxkIHBhdGgga2V5c1xuICAgKi9cbiAgdmFyIGdldFN1YlBhdGhLZXlzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjb25uZWN0ZWRQYXRoID0gXCJcIi5jb25jYXQoa2V5MnBhdGhSZWYuY3VycmVudC5nZXQoa2V5KSkuY29uY2F0KFBBVEhfU1BMSVQpO1xuICAgIHZhciBwYXRoS2V5cyA9IG5ldyBTZXQoKTtcbiAgICBfdG9Db25zdW1hYmxlQXJyYXkocGF0aDJrZXlSZWYuY3VycmVudC5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24gKHBhdGhLZXkpIHtcbiAgICAgIGlmIChwYXRoS2V5LnN0YXJ0c1dpdGgoY29ubmVjdGVkUGF0aCkpIHtcbiAgICAgICAgcGF0aEtleXMuYWRkKHBhdGgya2V5UmVmLmN1cnJlbnQuZ2V0KHBhdGhLZXkpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGF0aEtleXM7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzdHJveVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiB7XG4gICAgLy8gUmVnaXN0ZXJcbiAgICByZWdpc3RlclBhdGg6IHJlZ2lzdGVyUGF0aCxcbiAgICB1bnJlZ2lzdGVyUGF0aDogdW5yZWdpc3RlclBhdGgsXG4gICAgcmVmcmVzaE92ZXJmbG93S2V5czogcmVmcmVzaE92ZXJmbG93S2V5cyxcbiAgICAvLyBVdGlsXG4gICAgaXNTdWJQYXRoS2V5OiBpc1N1YlBhdGhLZXksXG4gICAgZ2V0S2V5UGF0aDogZ2V0S2V5UGF0aCxcbiAgICBnZXRLZXlzOiBnZXRLZXlzLFxuICAgIGdldFN1YlBhdGhLZXlzOiBnZXRTdWJQYXRoS2V5c1xuICB9O1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDYWNoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm4gc2FtZSByZWYgaW5zdGVhZC5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgY29udGV4dCBvcHRpbWl6YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1lbW9DYWxsYmFjayhmdW5jKSB7XG4gIHZhciBmdW5SZWYgPSBSZWFjdC51c2VSZWYoZnVuYyk7XG4gIGZ1blJlZi5jdXJyZW50ID0gZnVuYztcbiAgdmFyIGNhbGxiYWNrID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZnVuUmVmJGN1cnJlbnQ7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gKF9mdW5SZWYkY3VycmVudCA9IGZ1blJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfZnVuUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mdW5SZWYkY3VycmVudC5jYWxsLmFwcGx5KF9mdW5SZWYkY3VycmVudCwgW2Z1blJlZl0uY29uY2F0KGFyZ3MpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gZnVuYyA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG52YXIgdW5pcXVlUHJlZml4ID0gTWF0aC5yYW5kb20oKS50b0ZpeGVkKDUpLnRvU3RyaW5nKCkuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VVVUlEKGlkKSB7XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShpZCwge1xuICAgICAgdmFsdWU6IGlkXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgdXVpZCA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0VVVJRCA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJuYWxJZCArPSAxO1xuICAgIHZhciBuZXdJZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgPyAndGVzdCcgOiBcIlwiLmNvbmNhdCh1bmlxdWVQcmVmaXgsIFwiLVwiKS5jb25jYXQoaW50ZXJuYWxJZCk7XG4gICAgc2V0VVVJRChcInJjLW1lbnUtdXVpZC1cIi5jb25jYXQobmV3SWQpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gdXVpZDtcbn0iLCJpbXBvcnQgTWVudSBmcm9tIFwiLi9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuL1N1Yk1lbnVcIjtcbmltcG9ydCBNZW51SXRlbUdyb3VwIGZyb20gXCIuL01lbnVJdGVtR3JvdXBcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IERpdmlkZXIgZnJvbSBcIi4vRGl2aWRlclwiO1xuZXhwb3J0IHsgU3ViTWVudSwgTWVudUl0ZW0gYXMgSXRlbSwgTWVudUl0ZW0sIE1lbnVJdGVtR3JvdXAsIE1lbnVJdGVtR3JvdXAgYXMgSXRlbUdyb3VwLCBEaXZpZGVyLCAvKiogQHByaXZhdGUgT25seSB1c2VkIGZvciBhbnRkIGludGVybmFsLiBEbyBub3QgdXNlIGluIHlvdXIgcHJvZHVjdGlvbi4gKi9cbnVzZUZ1bGxQYXRoIH07XG52YXIgRXhwb3J0TWVudSA9IE1lbnU7XG5FeHBvcnRNZW51Lkl0ZW0gPSBNZW51SXRlbTtcbkV4cG9ydE1lbnUuU3ViTWVudSA9IFN1Yk1lbnU7XG5FeHBvcnRNZW51Lkl0ZW1Hcm91cCA9IE1lbnVJdGVtR3JvdXA7XG5FeHBvcnRNZW51LkRpdmlkZXIgPSBEaXZpZGVyO1xuZXhwb3J0IGRlZmF1bHQgRXhwb3J0TWVudTsiLCJ2YXIgYXV0b0FkanVzdE92ZXJmbG93ID0ge1xuICBhZGp1c3RYOiAxLFxuICBhZGp1c3RZOiAxXG59O1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0ge1xuICB0b3BMZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ3RsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICB0b3BSaWdodDoge1xuICAgIHBvaW50czogWydicicsICd0ciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgYm90dG9tTGVmdDoge1xuICAgIHBvaW50czogWyd0bCcsICdibCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgYm90dG9tUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsndHInLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRUb3A6IHtcbiAgICBwb2ludHM6IFsndHInLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYnInLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHJpZ2h0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodEJvdHRvbToge1xuICAgIHBvaW50czogWydibCcsICdiciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfVxufTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50c1J0bCA9IHtcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgdG9wUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodFRvcDoge1xuICAgIHBvaW50czogWyd0cicsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYnInLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRUb3A6IHtcbiAgICBwb2ludHM6IFsndGwnLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYmwnLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBwbGFjZW1lbnRzOyIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgdG9BcnJheSBmcm9tIFwicmMtdXRpbC9lcy9DaGlsZHJlbi90b0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwga2V5UGF0aCkge1xuICByZXR1cm4gdG9BcnJheShjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHZhciBfZXZlbnRLZXksIF9jaGlsZCRwcm9wcztcbiAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICB2YXIgZXZlbnRLZXkgPSAoX2V2ZW50S2V5ID0gKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKSA9PT0gbnVsbCB8fCBfY2hpbGQkcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGlsZCRwcm9wcy5ldmVudEtleSkgIT09IG51bGwgJiYgX2V2ZW50S2V5ICE9PSB2b2lkIDAgPyBfZXZlbnRLZXkgOiBrZXk7XG4gICAgICB2YXIgZW1wdHlLZXkgPSBldmVudEtleSA9PT0gbnVsbCB8fCBldmVudEtleSA9PT0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtcHR5S2V5KSB7XG4gICAgICAgIGV2ZW50S2V5ID0gXCJ0bXBfa2V5LVwiLmNvbmNhdChbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGtleVBhdGgpLCBbaW5kZXhdKS5qb2luKCctJykpO1xuICAgICAgfVxuICAgICAgdmFyIGNsb25lUHJvcHMgPSB7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGV2ZW50S2V5OiBldmVudEtleVxuICAgICAgfTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGVtcHR5S2V5KSB7XG4gICAgICAgIGNsb25lUHJvcHMud2FybktleSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgY2xvbmVQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfSk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGdldE1vdGlvbihtb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKSB7XG4gIGlmIChtb3Rpb24pIHtcbiAgICByZXR1cm4gbW90aW9uO1xuICB9XG4gIGlmIChkZWZhdWx0TW90aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0TW90aW9uc1ttb2RlXSB8fCBkZWZhdWx0TW90aW9ucy5vdGhlcjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJjaGlsZHJlblwiLCBcImtleVwiLCBcInR5cGVcIiwgXCJleHRyYVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEaXZpZGVyIGZyb20gXCIuLi9EaXZpZGVyXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4uL01lbnVJdGVtXCI7XG5pbXBvcnQgTWVudUl0ZW1Hcm91cCBmcm9tIFwiLi4vTWVudUl0ZW1Hcm91cFwiO1xuaW1wb3J0IFN1Yk1lbnUgZnJvbSBcIi4uL1N1Yk1lbnVcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi9jb21tb25VdGlsXCI7XG5mdW5jdGlvbiBjb252ZXJ0SXRlbXNUb05vZGVzKGxpc3QsIGNvbXBvbmVudHMsIHByZWZpeENscykge1xuICB2YXIgTWVyZ2VkTWVudUl0ZW0gPSBjb21wb25lbnRzLml0ZW0sXG4gICAgTWVyZ2VkTWVudUl0ZW1Hcm91cCA9IGNvbXBvbmVudHMuZ3JvdXAsXG4gICAgTWVyZ2VkU3ViTWVudSA9IGNvbXBvbmVudHMuc3VibWVudSxcbiAgICBNZXJnZWREaXZpZGVyID0gY29tcG9uZW50cy5kaXZpZGVyO1xuICByZXR1cm4gKGxpc3QgfHwgW10pLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgIGlmIChvcHQgJiYgX3R5cGVvZihvcHQpID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIF9yZWYgPSBvcHQsXG4gICAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgICAgZXh0cmEgPSBfcmVmLmV4dHJhLFxuICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBtZXJnZWRLZXkgPSBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBcInRtcC1cIi5jb25jYXQoaW5kZXgpO1xuXG4gICAgICAvLyBNZW51SXRlbUdyb3VwICYgU3ViTWVudUl0ZW1cbiAgICAgIGlmIChjaGlsZHJlbiB8fCB0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgLy8gR3JvdXBcbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkTWVudUl0ZW1Hcm91cCwgX2V4dGVuZHMoe1xuICAgICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgICB9LCByZXN0UHJvcHMsIHtcbiAgICAgICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgICAgIH0pLCBjb252ZXJ0SXRlbXNUb05vZGVzKGNoaWxkcmVuLCBjb21wb25lbnRzLCBwcmVmaXhDbHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1YiBNZW51XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXJnZWRTdWJNZW51LCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgfSwgcmVzdFByb3BzLCB7XG4gICAgICAgICAgdGl0bGU6IGxhYmVsXG4gICAgICAgIH0pLCBjb252ZXJ0SXRlbXNUb05vZGVzKGNoaWxkcmVuLCBjb21wb25lbnRzLCBwcmVmaXhDbHMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWVudUl0ZW0gJiBEaXZpZGVyXG4gICAgICBpZiAodHlwZSA9PT0gJ2RpdmlkZXInKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXJnZWREaXZpZGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgfSwgcmVzdFByb3BzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkTWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICBleHRyYTogZXh0cmFcbiAgICAgIH0pLCBsYWJlbCwgKCEhZXh0cmEgfHwgZXh0cmEgPT09IDApICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWV4dHJhXCIpXG4gICAgICB9LCBleHRyYSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uIChvcHQpIHtcbiAgICByZXR1cm4gb3B0O1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1zKGNoaWxkcmVuLCBpdGVtcywga2V5UGF0aCwgY29tcG9uZW50cywgcHJlZml4Q2xzKSB7XG4gIHZhciBjaGlsZE5vZGVzID0gY2hpbGRyZW47XG4gIHZhciBtZXJnZWRDb21wb25lbnRzID0gX29iamVjdFNwcmVhZCh7XG4gICAgZGl2aWRlcjogRGl2aWRlcixcbiAgICBpdGVtOiBNZW51SXRlbSxcbiAgICBncm91cDogTWVudUl0ZW1Hcm91cCxcbiAgICBzdWJtZW51OiBTdWJNZW51XG4gIH0sIGNvbXBvbmVudHMpO1xuICBpZiAoaXRlbXMpIHtcbiAgICBjaGlsZE5vZGVzID0gY29udmVydEl0ZW1zVG9Ob2RlcyhpdGVtcywgbWVyZ2VkQ29tcG9uZW50cywgcHJlZml4Q2xzKTtcbiAgfVxuICByZXR1cm4gcGFyc2VDaGlsZHJlbihjaGlsZE5vZGVzLCBrZXlQYXRoKTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gbmV4dFNsaWNlKGNhbGxiYWNrKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiaXRlbVwiXTtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcblxuLyoqXG4gKiBgb25DbGlja2AgZXZlbnQgcmV0dXJuIGBpbmZvLml0ZW1gIHdoaWNoIHBvaW50IHRvIHJlYWN0IG5vZGUgZGlyZWN0bHkuXG4gKiBXZSBzaG91bGQgd2FybmluZyB0aGlzIHNpbmNlIGl0IHdpbGwgbm90IHdvcmsgb24gRkMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuSXRlbVByb3AoX3JlZikge1xuICB2YXIgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICByZXN0SW5mbyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdEluZm8sICdpdGVtJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgd2FybmluZyhmYWxzZSwgJ2BpbmZvLml0ZW1gIGlzIGRlcHJlY2F0ZWQgc2luY2Ugd2Ugd2lsbCBtb3ZlIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IG5vdCBwcm92aWRlcyBSZWFjdCBOb2RlIGluc3RhbmNlIGluIGZ1dHVyZS4nKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN0SW5mbztcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZGVmYXVsdC1wcm9wcy1tYXRjaC1wcm9wLXR5cGVzLCByZWFjdC9uby1tdWx0aS1jb21wLCByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBmaW5kRE9NTm9kZSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vZmluZERPTU5vZGVcIjtcbmltcG9ydCB7IGZpbGxSZWYsIGdldE5vZGVSZWYsIHN1cHBvcnRSZWYgfSBmcm9tIFwicmMtdXRpbC9lcy9yZWZcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgRG9tV3JhcHBlciBmcm9tIFwiLi9Eb21XcmFwcGVyXCI7XG5pbXBvcnQgdXNlU3RhdHVzIGZyb20gXCIuL2hvb2tzL3VzZVN0YXR1c1wiO1xuaW1wb3J0IHsgaXNBY3RpdmUgfSBmcm9tIFwiLi9ob29rcy91c2VTdGVwUXVldWVcIjtcbmltcG9ydCB7IFNUQVRVU19OT05FLCBTVEVQX1BSRVBBUkUsIFNURVBfU1RBUlQgfSBmcm9tIFwiLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGdldFRyYW5zaXRpb25OYW1lLCBzdXBwb3J0VHJhbnNpdGlvbiB9IGZyb20gXCIuL3V0aWwvbW90aW9uXCI7XG4vKipcbiAqIGB0cmFuc2l0aW9uU3VwcG9ydGAgaXMgdXNlZCBmb3Igbm9uZSB0cmFuc2l0aW9uIHRlc3QgY2FzZS5cbiAqIERlZmF1bHQgd2UgdXNlIGJyb3dzZXIgdHJhbnNpdGlvbiBldmVudCBzdXBwb3J0IGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuQ1NTTW90aW9uKGNvbmZpZykge1xuICB2YXIgdHJhbnNpdGlvblN1cHBvcnQgPSBjb25maWc7XG4gIGlmIChfdHlwZW9mKGNvbmZpZykgPT09ICdvYmplY3QnKSB7XG4gICAgdHJhbnNpdGlvblN1cHBvcnQgPSBjb25maWcudHJhbnNpdGlvblN1cHBvcnQ7XG4gIH1cbiAgZnVuY3Rpb24gaXNTdXBwb3J0VHJhbnNpdGlvbihwcm9wcywgY29udGV4dE1vdGlvbikge1xuICAgIHJldHVybiAhIShwcm9wcy5tb3Rpb25OYW1lICYmIHRyYW5zaXRpb25TdXBwb3J0ICYmIGNvbnRleHRNb3Rpb24gIT09IGZhbHNlKTtcbiAgfVxuICB2YXIgQ1NTTW90aW9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX3Byb3BzJHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgICAgdmlzaWJsZSA9IF9wcm9wcyR2aXNpYmxlID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHZpc2libGUsXG4gICAgICBfcHJvcHMkcmVtb3ZlT25MZWF2ZSA9IHByb3BzLnJlbW92ZU9uTGVhdmUsXG4gICAgICByZW1vdmVPbkxlYXZlID0gX3Byb3BzJHJlbW92ZU9uTGVhdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkcmVtb3ZlT25MZWF2ZSxcbiAgICAgIGZvcmNlUmVuZGVyID0gcHJvcHMuZm9yY2VSZW5kZXIsXG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgbW90aW9uTmFtZSA9IHByb3BzLm1vdGlvbk5hbWUsXG4gICAgICBsZWF2ZWRDbGFzc05hbWUgPSBwcm9wcy5sZWF2ZWRDbGFzc05hbWUsXG4gICAgICBldmVudFByb3BzID0gcHJvcHMuZXZlbnRQcm9wcztcbiAgICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHQpLFxuICAgICAgY29udGV4dE1vdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vdGlvbjtcbiAgICB2YXIgc3VwcG9ydE1vdGlvbiA9IGlzU3VwcG9ydFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHRNb3Rpb24pO1xuXG4gICAgLy8gUmVmIHRvIHRoZSByZWFjdCBub2RlLCBpdCBtYXkgYmUgYSBIVE1MRWxlbWVudFxuICAgIHZhciBub2RlUmVmID0gdXNlUmVmKCk7XG4gICAgLy8gUmVmIHRvIHRoZSBkb20gd3JhcHBlciBpbiBjYXNlIHJlZiBjYW4gbm90IHBhc3MgdG8gSFRNTEVsZW1lbnRcbiAgICB2YXIgd3JhcHBlck5vZGVSZWYgPSB1c2VSZWYoKTtcbiAgICBmdW5jdGlvbiBnZXREb21FbGVtZW50KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSGVyZSB3ZSdyZSBhdm9pZGluZyBjYWxsIGZvciBmaW5kRE9NTm9kZSBzaW5jZSBpdCdzIGRlcHJlY2F0ZWRcbiAgICAgICAgLy8gaW4gc3RyaWN0IG1vZGUuIFdlJ3JlIGNhbGxpbmcgaXQgb25seSB3aGVuIG5vZGUgcmVmIGlzIG5vdFxuICAgICAgICAvLyBhbiBpbnN0YW5jZSBvZiBET00gSFRNTEVsZW1lbnQuIE90aGVyd2lzZSB1c2VcbiAgICAgICAgLy8gZmluZERPTU5vZGUgYXMgYSBmaW5hbCByZXNvcnRcbiAgICAgICAgcmV0dXJuIG5vZGVSZWYuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbm9kZVJlZi5jdXJyZW50IDogZmluZERPTU5vZGUod3JhcHBlck5vZGVSZWYuY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE9ubHkgaGFwcGVuIHdoZW4gYG1vdGlvbkRlYWRsaW5lYCB0cmlnZ2VyIGJ1dCBlbGVtZW50IHJlbW92ZWQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgX3VzZVN0YXR1cyA9IHVzZVN0YXR1cyhzdXBwb3J0TW90aW9uLCB2aXNpYmxlLCBnZXREb21FbGVtZW50LCBwcm9wcyksXG4gICAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDQpLFxuICAgICAgc3RhdHVzID0gX3VzZVN0YXR1czJbMF0sXG4gICAgICBzdGF0dXNTdGVwID0gX3VzZVN0YXR1czJbMV0sXG4gICAgICBzdGF0dXNTdHlsZSA9IF91c2VTdGF0dXMyWzJdLFxuICAgICAgbWVyZ2VkVmlzaWJsZSA9IF91c2VTdGF0dXMyWzNdO1xuXG4gICAgLy8gUmVjb3JkIHdoZXRoZXIgY29udGVudCBoYXMgcmVuZGVyZWRcbiAgICAvLyBXaWxsIHJldHVybiBudWxsIGZvciB1bi1yZW5kZXJlZCBldmVuIHdoZW4gYHJlbW92ZU9uTGVhdmU9e2ZhbHNlfWBcbiAgICB2YXIgcmVuZGVyZWRSZWYgPSBSZWFjdC51c2VSZWYobWVyZ2VkVmlzaWJsZSk7XG4gICAgaWYgKG1lcmdlZFZpc2libGUpIHtcbiAgICAgIHJlbmRlcmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT0gUmVmcyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFyIHNldE5vZGVSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobm9kZSkge1xuICAgICAgbm9kZVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIGZpbGxSZWYocmVmLCBub2RlKTtcbiAgICB9LCBbcmVmXSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBtb3Rpb25DaGlsZHJlbjtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV2ZW50UHJvcHMpLCB7fSwge1xuICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgIH0pO1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIC8vIE5vIGNoaWxkcmVuXG4gICAgICBtb3Rpb25DaGlsZHJlbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IFNUQVRVU19OT05FKSB7XG4gICAgICAvLyBTdGFibGUgY2hpbGRyZW5cbiAgICAgIGlmIChtZXJnZWRWaXNpYmxlKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkUHJvcHMpLCBzZXROb2RlUmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoIXJlbW92ZU9uTGVhdmUgJiYgcmVuZGVyZWRSZWYuY3VycmVudCAmJiBsZWF2ZWRDbGFzc05hbWUpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwge30sIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGxlYXZlZENsYXNzTmFtZVxuICAgICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2UgaWYgKGZvcmNlUmVuZGVyIHx8ICFyZW1vdmVPbkxlYXZlICYmICFsZWF2ZWRDbGFzc05hbWUpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwge30sIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3Rpb25DaGlsZHJlbiA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIG1vdGlvblxuICAgICAgdmFyIHN0YXR1c1N1ZmZpeDtcbiAgICAgIGlmIChzdGF0dXNTdGVwID09PSBTVEVQX1BSRVBBUkUpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ3ByZXBhcmUnO1xuICAgICAgfSBlbHNlIGlmIChpc0FjdGl2ZShzdGF0dXNTdGVwKSkge1xuICAgICAgICBzdGF0dXNTdWZmaXggPSAnYWN0aXZlJztcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzU3RlcCA9PT0gU1RFUF9TVEFSVCkge1xuICAgICAgICBzdGF0dXNTdWZmaXggPSAnc3RhcnQnO1xuICAgICAgfVxuICAgICAgdmFyIG1vdGlvbkNscyA9IGdldFRyYW5zaXRpb25OYW1lKG1vdGlvbk5hbWUsIFwiXCIuY29uY2F0KHN0YXR1cywgXCItXCIpLmNvbmNhdChzdGF0dXNTdWZmaXgpKTtcbiAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhnZXRUcmFuc2l0aW9uTmFtZShtb3Rpb25OYW1lLCBzdGF0dXMpLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBtb3Rpb25DbHMsIG1vdGlvbkNscyAmJiBzdGF0dXNTdWZmaXgpLCBtb3Rpb25OYW1lLCB0eXBlb2YgbW90aW9uTmFtZSA9PT0gJ3N0cmluZycpKSxcbiAgICAgICAgc3R5bGU6IHN0YXR1c1N0eWxlXG4gICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgfVxuXG4gICAgLy8gQXV0byBpbmplY3QgcmVmIGlmIGNoaWxkIG5vZGUgbm90IGhhdmUgYHJlZmAgcHJvcHNcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChtb3Rpb25DaGlsZHJlbikgJiYgc3VwcG9ydFJlZihtb3Rpb25DaGlsZHJlbikpIHtcbiAgICAgIHZhciBvcmlnaW5Ob2RlUmVmID0gZ2V0Tm9kZVJlZihtb3Rpb25DaGlsZHJlbik7XG4gICAgICBpZiAoIW9yaWdpbk5vZGVSZWYpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KG1vdGlvbkNoaWxkcmVuLCB7XG4gICAgICAgICAgcmVmOiBzZXROb2RlUmVmXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9tV3JhcHBlciwge1xuICAgICAgcmVmOiB3cmFwcGVyTm9kZVJlZlxuICAgIH0sIG1vdGlvbkNoaWxkcmVuKTtcbiAgfSk7XG4gIENTU01vdGlvbi5kaXNwbGF5TmFtZSA9ICdDU1NNb3Rpb24nO1xuICByZXR1cm4gQ1NTTW90aW9uO1xufVxuZXhwb3J0IGRlZmF1bHQgZ2VuQ1NTTW90aW9uKHN1cHBvcnRUcmFuc2l0aW9uKTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJvblZpc2libGVDaGFuZ2VkXCIsIFwib25BbGxSZW1vdmVkXCJdLFxuICBfZXhjbHVkZWQyID0gW1wic3RhdHVzXCJdO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBPcmlnaW5DU1NNb3Rpb24gZnJvbSBcIi4vQ1NTTW90aW9uXCI7XG5pbXBvcnQgeyBkaWZmS2V5cywgcGFyc2VLZXlzLCBTVEFUVVNfQURELCBTVEFUVVNfS0VFUCwgU1RBVFVTX1JFTU9WRSwgU1RBVFVTX1JFTU9WRUQgfSBmcm9tIFwiLi91dGlsL2RpZmZcIjtcbmltcG9ydCB7IHN1cHBvcnRUcmFuc2l0aW9uIH0gZnJvbSBcIi4vdXRpbC9tb3Rpb25cIjtcbnZhciBNT1RJT05fUFJPUF9OQU1FUyA9IFsnZXZlbnRQcm9wcycsICd2aXNpYmxlJywgJ2NoaWxkcmVuJywgJ21vdGlvbk5hbWUnLCAnbW90aW9uQXBwZWFyJywgJ21vdGlvbkVudGVyJywgJ21vdGlvbkxlYXZlJywgJ21vdGlvbkxlYXZlSW1tZWRpYXRlbHknLCAnbW90aW9uRGVhZGxpbmUnLCAncmVtb3ZlT25MZWF2ZScsICdsZWF2ZWRDbGFzc05hbWUnLCAnb25BcHBlYXJQcmVwYXJlJywgJ29uQXBwZWFyU3RhcnQnLCAnb25BcHBlYXJBY3RpdmUnLCAnb25BcHBlYXJFbmQnLCAnb25FbnRlclN0YXJ0JywgJ29uRW50ZXJBY3RpdmUnLCAnb25FbnRlckVuZCcsICdvbkxlYXZlU3RhcnQnLCAnb25MZWF2ZUFjdGl2ZScsICdvbkxlYXZlRW5kJ107XG4vKipcbiAqIEdlbmVyYXRlIGEgQ1NTTW90aW9uTGlzdCBjb21wb25lbnQgd2l0aCBjb25maWdcbiAqIEBwYXJhbSB0cmFuc2l0aW9uU3VwcG9ydCBObyBuZWVkIHNpbmNlIENTU01vdGlvbkxpc3Qgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHJhbnNpdGlvbiBzdXBwb3J0XG4gKiBAcGFyYW0gQ1NTTW90aW9uIENTU01vdGlvbiBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkNTU01vdGlvbkxpc3QodHJhbnNpdGlvblN1cHBvcnQpIHtcbiAgdmFyIENTU01vdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogT3JpZ2luQ1NTTW90aW9uO1xuICB2YXIgQ1NTTW90aW9uTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICAgIF9pbmhlcml0cyhDU1NNb3Rpb25MaXN0LCBfUmVhY3QkQ29tcG9uZW50KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENTU01vdGlvbkxpc3QpO1xuICAgIGZ1bmN0aW9uIENTU01vdGlvbkxpc3QoKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ1NTTW90aW9uTGlzdCk7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICAgIGtleUVudGl0aWVzOiBbXVxuICAgICAgfSk7XG4gICAgICAvLyBab21iaWVKOiBSZXR1cm4gdGhlIGNvdW50IG9mIHJlc3Qga2V5cy4gSXQncyBzYWZlIHRvIHJlZmFjdG9yIGlmIG5lZWQgbW9yZSBpbmZvLlxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUtleVwiLCBmdW5jdGlvbiAocmVtb3ZlS2V5KSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICB2YXIgbmV4dEtleUVudGl0aWVzID0gcHJldlN0YXRlLmtleUVudGl0aWVzLm1hcChmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5LmtleSAhPT0gcmVtb3ZlS2V5KSByZXR1cm4gZW50aXR5O1xuICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZW50aXR5KSwge30sIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBTVEFUVVNfUkVNT1ZFRFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleUVudGl0aWVzOiBuZXh0S2V5RW50aXRpZXNcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGtleUVudGl0aWVzID0gX3RoaXMuc3RhdGUua2V5RW50aXRpZXM7XG4gICAgICAgICAgdmFyIHJlc3RLZXlzQ291bnQgPSBrZXlFbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgIHZhciBzdGF0dXMgPSBfcmVmLnN0YXR1cztcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXMgIT09IFNUQVRVU19SRU1PVkVEO1xuICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmVzdEtleXNDb3VudCA9PT0gMCAmJiBfdGhpcy5wcm9wcy5vbkFsbFJlbW92ZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQWxsUmVtb3ZlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKENTU01vdGlvbkxpc3QsIFt7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIGtleUVudGl0aWVzID0gdGhpcy5zdGF0ZS5rZXlFbnRpdGllcztcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBfb25WaXNpYmxlQ2hhbmdlZCA9IF90aGlzJHByb3BzLm9uVmlzaWJsZUNoYW5nZWQsXG4gICAgICAgICAgb25BbGxSZW1vdmVkID0gX3RoaXMkcHJvcHMub25BbGxSZW1vdmVkLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCBSZWFjdC5GcmFnbWVudDtcbiAgICAgICAgdmFyIG1vdGlvblByb3BzID0ge307XG4gICAgICAgIE1PVElPTl9QUk9QX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBtb3Rpb25Qcm9wc1twcm9wXSA9IHJlc3RQcm9wc1twcm9wXTtcbiAgICAgICAgICBkZWxldGUgcmVzdFByb3BzW3Byb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHJlc3RQcm9wcy5rZXlzO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCByZXN0UHJvcHMsIGtleUVudGl0aWVzLm1hcChmdW5jdGlvbiAoX3JlZjIsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIHN0YXR1cyA9IF9yZWYyLnN0YXR1cyxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuICAgICAgICAgIHZhciB2aXNpYmxlID0gc3RhdHVzID09PSBTVEFUVVNfQUREIHx8IHN0YXR1cyA9PT0gU1RBVFVTX0tFRVA7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbiwgX2V4dGVuZHMoe30sIG1vdGlvblByb3BzLCB7XG4gICAgICAgICAgICBrZXk6IGV2ZW50UHJvcHMua2V5LFxuICAgICAgICAgICAgdmlzaWJsZTogdmlzaWJsZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHM6IGV2ZW50UHJvcHMsXG4gICAgICAgICAgICBvblZpc2libGVDaGFuZ2VkOiBmdW5jdGlvbiBvblZpc2libGVDaGFuZ2VkKGNoYW5nZWRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIF9vblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IF9vblZpc2libGVDaGFuZ2VkID09PSB2b2lkIDAgfHwgX29uVmlzaWJsZUNoYW5nZWQoY2hhbmdlZFZpc2libGUsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50UHJvcHMua2V5XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoIWNoYW5nZWRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnJlbW92ZUtleShldmVudFByb3BzLmtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9KSwgcmVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmMywgX3JlZjQpIHtcbiAgICAgICAgdmFyIGtleXMgPSBfcmVmMy5rZXlzO1xuICAgICAgICB2YXIga2V5RW50aXRpZXMgPSBfcmVmNC5rZXlFbnRpdGllcztcbiAgICAgICAgdmFyIHBhcnNlZEtleU9iamVjdHMgPSBwYXJzZUtleXMoa2V5cyk7XG4gICAgICAgIHZhciBtaXhlZEtleUVudGl0aWVzID0gZGlmZktleXMoa2V5RW50aXRpZXMsIHBhcnNlZEtleU9iamVjdHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleUVudGl0aWVzOiBtaXhlZEtleUVudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgICAgICAgICB2YXIgcHJldkVudGl0eSA9IGtleUVudGl0aWVzLmZpbmQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBfcmVmNS5rZXk7XG4gICAgICAgICAgICAgIHJldHVybiBlbnRpdHkua2V5ID09PSBrZXk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGlmIGFscmVhZHkgbWFyayBhcyByZW1vdmVkXG4gICAgICAgICAgICBpZiAocHJldkVudGl0eSAmJiBwcmV2RW50aXR5LnN0YXR1cyA9PT0gU1RBVFVTX1JFTU9WRUQgJiYgZW50aXR5LnN0YXR1cyA9PT0gU1RBVFVTX1JFTU9WRSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1dKTtcbiAgICByZXR1cm4gQ1NTTW90aW9uTGlzdDtcbiAgfShSZWFjdC5Db21wb25lbnQpO1xuICBfZGVmaW5lUHJvcGVydHkoQ1NTTW90aW9uTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAgIGNvbXBvbmVudDogJ2RpdidcbiAgfSk7XG4gIHJldHVybiBDU1NNb3Rpb25MaXN0O1xufVxuZXhwb3J0IGRlZmF1bHQgZ2VuQ1NTTW90aW9uTGlzdChzdXBwb3J0VHJhbnNpdGlvbik7IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBEb21XcmFwcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhEb21XcmFwcGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihEb21XcmFwcGVyKTtcbiAgZnVuY3Rpb24gRG9tV3JhcHBlcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRG9tV3JhcHBlcik7XG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhEb21XcmFwcGVyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEb21XcmFwcGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuZXhwb3J0IGRlZmF1bHQgRG9tV3JhcHBlcjsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW90aW9uUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHByb3BzXG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhbmltYXRpb25FbmROYW1lLCB0cmFuc2l0aW9uRW5kTmFtZSB9IGZyb20gXCIuLi91dGlsL21vdGlvblwiO1xuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChvbkludGVybmFsTW90aW9uRW5kKSB7XG4gIHZhciBjYWNoZUVsZW1lbnRSZWYgPSB1c2VSZWYoKTtcblxuICAvLyBSZW1vdmUgZXZlbnRzXG4gIGZ1bmN0aW9uIHJlbW92ZU1vdGlvbkV2ZW50cyhlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kTmFtZSwgb25JbnRlcm5hbE1vdGlvbkVuZCk7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uRW5kTmFtZSwgb25JbnRlcm5hbE1vdGlvbkVuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGF0Y2ggZXZlbnRzXG4gIGZ1bmN0aW9uIHBhdGNoTW90aW9uRXZlbnRzKGVsZW1lbnQpIHtcbiAgICBpZiAoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgJiYgY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgIHJlbW92ZU1vdGlvbkV2ZW50cyhjYWNoZUVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQgIT09IGNhY2hlRWxlbWVudFJlZi5jdXJyZW50KSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuXG4gICAgICAvLyBTYXZlIGFzIGNhY2hlIGluIGNhc2UgZG9tIHJlbW92ZWQgdHJpZ2dlciBieSBgbW90aW9uRGVhZGxpbmVgXG4gICAgICBjYWNoZUVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xlYW4gdXAgd2hlbiByZW1vdmVkXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZU1vdGlvbkV2ZW50cyhjYWNoZUVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gW3BhdGNoTW90aW9uRXZlbnRzLCByZW1vdmVNb3Rpb25FdmVudHNdO1xufSk7IiwiaW1wb3J0IGNhblVzZURvbSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY2FuVXNlRG9tXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLy8gSXQncyBzYWZlIHRvIHVzZSBgdXNlTGF5b3V0RWZmZWN0YCBidXQgdGhlIHdhcm5pbmcgaXMgYW5ub3lpbmdcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRG9tKCkgPyB1c2VMYXlvdXRFZmZlY3QgOiB1c2VFZmZlY3Q7XG5leHBvcnQgZGVmYXVsdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0OyIsImltcG9ydCByYWYgZnJvbSBcInJjLXV0aWwvZXMvcmFmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xuICB2YXIgbmV4dEZyYW1lUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBmdW5jdGlvbiBjYW5jZWxOZXh0RnJhbWUoKSB7XG4gICAgcmFmLmNhbmNlbChuZXh0RnJhbWVSZWYuY3VycmVudCk7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dEZyYW1lKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRlbGF5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIHZhciBuZXh0RnJhbWVJZCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZGVsYXkgPD0gMSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgaXNDYW5jZWxlZDogZnVuY3Rpb24gaXNDYW5jZWxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0RnJhbWVJZCAhPT0gbmV4dEZyYW1lUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRGcmFtZShjYWxsYmFjaywgZGVsYXkgLSAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBuZXh0RnJhbWVSZWYuY3VycmVudCA9IG5leHRGcmFtZUlkO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtuZXh0RnJhbWUsIGNhbmNlbE5leHRGcmFtZV07XG59KTsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgdXNlRXZlbnQgfSBmcm9tICdyYy11dGlsJztcbmltcG9ydCB1c2VTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTdGF0ZVwiO1xuaW1wb3J0IHVzZVN5bmNTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTeW5jU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU1RBVFVTX0FQUEVBUiwgU1RBVFVTX0VOVEVSLCBTVEFUVVNfTEVBVkUsIFNUQVRVU19OT05FLCBTVEVQX0FDVElWRSwgU1RFUF9QUkVQQVJFLCBTVEVQX1BSRVBBUkVELCBTVEVQX1NUQVJUIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IHVzZURvbU1vdGlvbkV2ZW50cyBmcm9tIFwiLi91c2VEb21Nb3Rpb25FdmVudHNcIjtcbmltcG9ydCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IGZyb20gXCIuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCB1c2VTdGVwUXVldWUsIHsgRG9TdGVwLCBpc0FjdGl2ZSwgU2tpcFN0ZXAgfSBmcm9tIFwiLi91c2VTdGVwUXVldWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVN0YXR1cyhzdXBwb3J0TW90aW9uLCB2aXNpYmxlLCBnZXRFbGVtZW50LCBfcmVmKSB7XG4gIHZhciBfcmVmJG1vdGlvbkVudGVyID0gX3JlZi5tb3Rpb25FbnRlcixcbiAgICBtb3Rpb25FbnRlciA9IF9yZWYkbW90aW9uRW50ZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkVudGVyLFxuICAgIF9yZWYkbW90aW9uQXBwZWFyID0gX3JlZi5tb3Rpb25BcHBlYXIsXG4gICAgbW90aW9uQXBwZWFyID0gX3JlZiRtb3Rpb25BcHBlYXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkFwcGVhcixcbiAgICBfcmVmJG1vdGlvbkxlYXZlID0gX3JlZi5tb3Rpb25MZWF2ZSxcbiAgICBtb3Rpb25MZWF2ZSA9IF9yZWYkbW90aW9uTGVhdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkxlYXZlLFxuICAgIG1vdGlvbkRlYWRsaW5lID0gX3JlZi5tb3Rpb25EZWFkbGluZSxcbiAgICBtb3Rpb25MZWF2ZUltbWVkaWF0ZWx5ID0gX3JlZi5tb3Rpb25MZWF2ZUltbWVkaWF0ZWx5LFxuICAgIG9uQXBwZWFyUHJlcGFyZSA9IF9yZWYub25BcHBlYXJQcmVwYXJlLFxuICAgIG9uRW50ZXJQcmVwYXJlID0gX3JlZi5vbkVudGVyUHJlcGFyZSxcbiAgICBvbkxlYXZlUHJlcGFyZSA9IF9yZWYub25MZWF2ZVByZXBhcmUsXG4gICAgb25BcHBlYXJTdGFydCA9IF9yZWYub25BcHBlYXJTdGFydCxcbiAgICBvbkVudGVyU3RhcnQgPSBfcmVmLm9uRW50ZXJTdGFydCxcbiAgICBvbkxlYXZlU3RhcnQgPSBfcmVmLm9uTGVhdmVTdGFydCxcbiAgICBvbkFwcGVhckFjdGl2ZSA9IF9yZWYub25BcHBlYXJBY3RpdmUsXG4gICAgb25FbnRlckFjdGl2ZSA9IF9yZWYub25FbnRlckFjdGl2ZSxcbiAgICBvbkxlYXZlQWN0aXZlID0gX3JlZi5vbkxlYXZlQWN0aXZlLFxuICAgIG9uQXBwZWFyRW5kID0gX3JlZi5vbkFwcGVhckVuZCxcbiAgICBvbkVudGVyRW5kID0gX3JlZi5vbkVudGVyRW5kLFxuICAgIG9uTGVhdmVFbmQgPSBfcmVmLm9uTGVhdmVFbmQsXG4gICAgb25WaXNpYmxlQ2hhbmdlZCA9IF9yZWYub25WaXNpYmxlQ2hhbmdlZDtcbiAgLy8gVXNlZCBmb3Igb3V0ZXIgcmVuZGVyIHVzYWdlIHRvIGF2b2lkIGB2aXNpYmxlOiBmYWxzZSAmIHN0YXR1czogbm9uZWAgdG8gcmVuZGVyIG5vdGhpbmdcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgYXN5bmNWaXNpYmxlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRBc3luY1Zpc2libGUgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN5bmNTdGF0ZSA9IHVzZVN5bmNTdGF0ZShTVEFUVVNfTk9ORSksXG4gICAgX3VzZVN5bmNTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3luY1N0YXRlLCAyKSxcbiAgICBnZXRTdGF0dXMgPSBfdXNlU3luY1N0YXRlMlswXSxcbiAgICBzZXRTdGF0dXMgPSBfdXNlU3luY1N0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgc3R5bGUgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFN0eWxlID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGN1cnJlbnRTdGF0dXMgPSBnZXRTdGF0dXMoKTtcbiAgdmFyIG1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgZGVhZGxpbmVSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IERvbSBOb2RlID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBnZXREb21FbGVtZW50KCkge1xuICAgIHJldHVybiBnZXRFbGVtZW50KCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBNb3Rpb24gRW5kID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBhY3RpdmVSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBzdGF0dXMgJiBzdHlsZVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlTW90aW9uRW5kU3RhdHVzKCkge1xuICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgc2V0U3R5bGUobnVsbCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIG9uSW50ZXJuYWxNb3Rpb25FbmQgPSB1c2VFdmVudChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgc3RhdHVzID0gZ2V0U3RhdHVzKCk7XG4gICAgLy8gRG8gbm90aGluZyBzaW5jZSBub3QgaW4gYW55IHRyYW5zaXRpb24gc3RhdHVzLlxuICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGBtb3Rpb25EZWFkbGluZWAgdHJpZ2dlci5cbiAgICBpZiAoc3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGdldERvbUVsZW1lbnQoKTtcbiAgICBpZiAoZXZlbnQgJiYgIWV2ZW50LmRlYWRsaW5lICYmIGV2ZW50LnRhcmdldCAhPT0gZWxlbWVudCkge1xuICAgICAgLy8gZXZlbnQgZXhpc3RzXG4gICAgICAvLyBub3QgaW5pdGlhdGVkIGJ5IGRlYWRsaW5lXG4gICAgICAvLyB0cmFuc2l0aW9uRW5kIG5vdCBmaXJlZCBieSBpbm5lciBlbGVtZW50c1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3VycmVudEFjdGl2ZSA9IGFjdGl2ZVJlZi5jdXJyZW50O1xuICAgIHZhciBjYW5FbmQ7XG4gICAgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0FQUEVBUiAmJiBjdXJyZW50QWN0aXZlKSB7XG4gICAgICBjYW5FbmQgPSBvbkFwcGVhckVuZCA9PT0gbnVsbCB8fCBvbkFwcGVhckVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BcHBlYXJFbmQoZWxlbWVudCwgZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTVEFUVVNfRU5URVIgJiYgY3VycmVudEFjdGl2ZSkge1xuICAgICAgY2FuRW5kID0gb25FbnRlckVuZCA9PT0gbnVsbCB8fCBvbkVudGVyRW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVudGVyRW5kKGVsZW1lbnQsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0xFQVZFICYmIGN1cnJlbnRBY3RpdmUpIHtcbiAgICAgIGNhbkVuZCA9IG9uTGVhdmVFbmQgPT09IG51bGwgfHwgb25MZWF2ZUVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25MZWF2ZUVuZChlbGVtZW50LCBldmVudCk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1cGRhdGUgc3RhdHVzIHdoZW4gYGNhbkVuZGAgYW5kIG5vdCBkZXN0cm95ZWRcbiAgICBpZiAoY3VycmVudEFjdGl2ZSAmJiBjYW5FbmQgIT09IGZhbHNlKSB7XG4gICAgICB1cGRhdGVNb3Rpb25FbmRTdGF0dXMoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgX3VzZURvbU1vdGlvbkV2ZW50cyA9IHVzZURvbU1vdGlvbkV2ZW50cyhvbkludGVybmFsTW90aW9uRW5kKSxcbiAgICBfdXNlRG9tTW90aW9uRXZlbnRzMiA9IF9zbGljZWRUb0FycmF5KF91c2VEb21Nb3Rpb25FdmVudHMsIDEpLFxuICAgIHBhdGNoTW90aW9uRXZlbnRzID0gX3VzZURvbU1vdGlvbkV2ZW50czJbMF07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RlcCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlcnModGFyZ2V0U3RhdHVzKSB7XG4gICAgc3dpdGNoICh0YXJnZXRTdGF0dXMpIHtcbiAgICAgIGNhc2UgU1RBVFVTX0FQUEVBUjpcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBTVEVQX1BSRVBBUkUsIG9uQXBwZWFyUHJlcGFyZSksIFNURVBfU1RBUlQsIG9uQXBwZWFyU3RhcnQpLCBTVEVQX0FDVElWRSwgb25BcHBlYXJBY3RpdmUpO1xuICAgICAgY2FzZSBTVEFUVVNfRU5URVI6XG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgU1RFUF9QUkVQQVJFLCBvbkVudGVyUHJlcGFyZSksIFNURVBfU1RBUlQsIG9uRW50ZXJTdGFydCksIFNURVBfQUNUSVZFLCBvbkVudGVyQWN0aXZlKTtcbiAgICAgIGNhc2UgU1RBVFVTX0xFQVZFOlxuICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFNURVBfUFJFUEFSRSwgb25MZWF2ZVByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkxlYXZlU3RhcnQpLCBTVEVQX0FDVElWRSwgb25MZWF2ZUFjdGl2ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xuICB2YXIgZXZlbnRIYW5kbGVycyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRFdmVudEhhbmRsZXJzKGN1cnJlbnRTdGF0dXMpO1xuICB9LCBbY3VycmVudFN0YXR1c10pO1xuICB2YXIgX3VzZVN0ZXBRdWV1ZSA9IHVzZVN0ZXBRdWV1ZShjdXJyZW50U3RhdHVzLCAhc3VwcG9ydE1vdGlvbiwgZnVuY3Rpb24gKG5ld1N0ZXApIHtcbiAgICAgIC8vIE9ubHkgcHJlcGFyZSBzdGVwIGNhbiBiZSBza2lwXG4gICAgICBpZiAobmV3U3RlcCA9PT0gU1RFUF9QUkVQQVJFKSB7XG4gICAgICAgIHZhciBvblByZXBhcmUgPSBldmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV07XG4gICAgICAgIGlmICghb25QcmVwYXJlKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvblByZXBhcmUoZ2V0RG9tRWxlbWVudCgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdCBzdGVwIGlzIHN5bmMgdXBkYXRlXG4gICAgICBpZiAoc3RlcCBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgICAgIHZhciBfZXZlbnRIYW5kbGVycyRzdGVwO1xuICAgICAgICBzZXRTdHlsZSgoKF9ldmVudEhhbmRsZXJzJHN0ZXAgPSBldmVudEhhbmRsZXJzW3N0ZXBdKSA9PT0gbnVsbCB8fCBfZXZlbnRIYW5kbGVycyRzdGVwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZXZlbnRIYW5kbGVycyRzdGVwLmNhbGwoZXZlbnRIYW5kbGVycywgZ2V0RG9tRWxlbWVudCgpLCBudWxsKSkgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RlcCA9PT0gU1RFUF9BQ1RJVkUgJiYgY3VycmVudFN0YXR1cyAhPT0gU1RBVFVTX05PTkUpIHtcbiAgICAgICAgLy8gUGF0Y2ggZXZlbnRzIHdoZW4gbW90aW9uIG5lZWRlZFxuICAgICAgICBwYXRjaE1vdGlvbkV2ZW50cyhnZXREb21FbGVtZW50KCkpO1xuICAgICAgICBpZiAobW90aW9uRGVhZGxpbmUgPiAwKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYWRsaW5lUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIGRlYWRsaW5lUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uSW50ZXJuYWxNb3Rpb25FbmQoe1xuICAgICAgICAgICAgICBkZWFkbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgbW90aW9uRGVhZGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RlcCA9PT0gU1RFUF9QUkVQQVJFRCkge1xuICAgICAgICB1cGRhdGVNb3Rpb25FbmRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBEb1N0ZXA7XG4gICAgfSksXG4gICAgX3VzZVN0ZXBRdWV1ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RlcFF1ZXVlLCAyKSxcbiAgICBzdGFydFN0ZXAgPSBfdXNlU3RlcFF1ZXVlMlswXSxcbiAgICBzdGVwID0gX3VzZVN0ZXBRdWV1ZTJbMV07XG4gIHZhciBhY3RpdmUgPSBpc0FjdGl2ZShzdGVwKTtcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdGF0dXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdmlzaWJsZVJlZiA9IHVzZVJlZihudWxsKTtcblxuICAvLyBVcGRhdGUgd2l0aCBuZXcgc3RhdHVzXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFdoZW4gdXNlIFN1c3BlbnNlLCB0aGUgYHZpc2libGVgIHdpbGwgcmVwZWF0IHRyaWdnZXIsXG4gICAgLy8gQnV0IG5vdCByZWFsIGNoYW5nZSBvZiB0aGUgYHZpc2libGVgLCB3ZSBuZWVkIHRvIHNraXAgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDQzNzlcbiAgICBpZiAobW91bnRlZFJlZi5jdXJyZW50ICYmIHZpc2libGVSZWYuY3VycmVudCA9PT0gdmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRBc3luY1Zpc2libGUodmlzaWJsZSk7XG4gICAgdmFyIGlzTW91bnRlZCA9IG1vdW50ZWRSZWYuY3VycmVudDtcbiAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgLy8gaWYgKCFzdXBwb3J0TW90aW9uKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgdmFyIG5leHRTdGF0dXM7XG5cbiAgICAvLyBBcHBlYXJcbiAgICBpZiAoIWlzTW91bnRlZCAmJiB2aXNpYmxlICYmIG1vdGlvbkFwcGVhcikge1xuICAgICAgbmV4dFN0YXR1cyA9IFNUQVRVU19BUFBFQVI7XG4gICAgfVxuXG4gICAgLy8gRW50ZXJcbiAgICBpZiAoaXNNb3VudGVkICYmIHZpc2libGUgJiYgbW90aW9uRW50ZXIpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfRU5URVI7XG4gICAgfVxuXG4gICAgLy8gTGVhdmVcbiAgICBpZiAoaXNNb3VudGVkICYmICF2aXNpYmxlICYmIG1vdGlvbkxlYXZlIHx8ICFpc01vdW50ZWQgJiYgbW90aW9uTGVhdmVJbW1lZGlhdGVseSAmJiAhdmlzaWJsZSAmJiBtb3Rpb25MZWF2ZSkge1xuICAgICAgbmV4dFN0YXR1cyA9IFNUQVRVU19MRUFWRTtcbiAgICB9XG4gICAgdmFyIG5leHRFdmVudEhhbmRsZXJzID0gZ2V0RXZlbnRIYW5kbGVycyhuZXh0U3RhdHVzKTtcblxuICAgIC8vIFVwZGF0ZSB0byBuZXh0IHN0YXR1c1xuICAgIGlmIChuZXh0U3RhdHVzICYmIChzdXBwb3J0TW90aW9uIHx8IG5leHRFdmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV0pKSB7XG4gICAgICBzZXRTdGF0dXMobmV4dFN0YXR1cyk7XG4gICAgICBzdGFydFN0ZXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IGJhY2sgaW4gY2FzZSBubyBtb3Rpb24gYnV0IHByZXYgc3RhdHVzIGhhcyBwcmVwYXJlIHN0ZXBcbiAgICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgfVxuICAgIHZpc2libGVSZWYuY3VycmVudCA9IHZpc2libGU7XG4gIH0sIFt2aXNpYmxlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXNldCB3aGVuIG1vdGlvbiBjaGFuZ2VkXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFxuICAgIC8vIENhbmNlbCBhcHBlYXJcbiAgICBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfQVBQRUFSICYmICFtb3Rpb25BcHBlYXIgfHxcbiAgICAvLyBDYW5jZWwgZW50ZXJcbiAgICBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfRU5URVIgJiYgIW1vdGlvbkVudGVyIHx8XG4gICAgLy8gQ2FuY2VsIGxlYXZlXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0xFQVZFICYmICFtb3Rpb25MZWF2ZSkge1xuICAgICAgc2V0U3RhdHVzKFNUQVRVU19OT05FKTtcbiAgICB9XG4gIH0sIFttb3Rpb25BcHBlYXIsIG1vdGlvbkVudGVyLCBtb3Rpb25MZWF2ZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChkZWFkbGluZVJlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gVHJpZ2dlciBgb25WaXNpYmxlQ2hhbmdlZGBcbiAgdmFyIGZpcnN0TW91bnRDaGFuZ2VSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFt2aXNpYmxlICYgbW90aW9uIG5vdCBlbmRdID0+IFshdmlzaWJsZSAmIG1vdGlvbiBlbmRdIHN0aWxsIG5lZWQgdHJpZ2dlciBvblZpc2libGVDaGFuZ2VkXG4gICAgaWYgKGFzeW5jVmlzaWJsZSkge1xuICAgICAgZmlyc3RNb3VudENoYW5nZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGFzeW5jVmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRTdGF0dXMgPT09IFNUQVRVU19OT05FKSB7XG4gICAgICAvLyBTa2lwIGZpcnN0IHJlbmRlciBpcyBpbnZpc2libGUgc2luY2UgaXQncyBub3RoaW5nIGNoYW5nZWRcbiAgICAgIGlmIChmaXJzdE1vdW50Q2hhbmdlUmVmLmN1cnJlbnQgfHwgYXN5bmNWaXNpYmxlKSB7XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZWQgPT09IG51bGwgfHwgb25WaXNpYmxlQ2hhbmdlZCA9PT0gdm9pZCAwIHx8IG9uVmlzaWJsZUNoYW5nZWQoYXN5bmNWaXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0TW91bnRDaGFuZ2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICB9LCBbYXN5bmNWaXNpYmxlLCBjdXJyZW50U3RhdHVzXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdHlsZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkU3R5bGUgPSBzdHlsZTtcbiAgaWYgKGV2ZW50SGFuZGxlcnNbU1RFUF9QUkVQQVJFXSAmJiBzdGVwID09PSBTVEVQX1NUQVJUKSB7XG4gICAgbWVyZ2VkU3R5bGUgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHRyYW5zaXRpb246ICdub25lJ1xuICAgIH0sIG1lcmdlZFN0eWxlKTtcbiAgfVxuICByZXR1cm4gW2N1cnJlbnRTdGF0dXMsIHN0ZXAsIG1lcmdlZFN0eWxlLCBhc3luY1Zpc2libGUgIT09IG51bGwgJiYgYXN5bmNWaXNpYmxlICE9PSB2b2lkIDAgPyBhc3luY1Zpc2libGUgOiB2aXNpYmxlXTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB1c2VTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTdGF0ZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU1RFUF9BQ1RJVkFURUQsIFNURVBfQUNUSVZFLCBTVEVQX05PTkUsIFNURVBfUFJFUEFSRSwgU1RFUF9QUkVQQVJFRCwgU1RFUF9TVEFSVCB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IGZyb20gXCIuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCB1c2VOZXh0RnJhbWUgZnJvbSBcIi4vdXNlTmV4dEZyYW1lXCI7XG52YXIgRlVMTF9TVEVQX1FVRVVFID0gW1NURVBfUFJFUEFSRSwgU1RFUF9TVEFSVCwgU1RFUF9BQ1RJVkUsIFNURVBfQUNUSVZBVEVEXTtcbnZhciBTSU1QTEVfU1RFUF9RVUVVRSA9IFtTVEVQX1BSRVBBUkUsIFNURVBfUFJFUEFSRURdO1xuXG4vKiogU2tpcCBjdXJyZW50IHN0ZXAgKi9cbmV4cG9ydCB2YXIgU2tpcFN0ZXAgPSBmYWxzZTtcbi8qKiBDdXJyZW50IHN0ZXAgc2hvdWxkIGJlIHVwZGF0ZSBpbiAqL1xuZXhwb3J0IHZhciBEb1N0ZXAgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aXZlKHN0ZXApIHtcbiAgcmV0dXJuIHN0ZXAgPT09IFNURVBfQUNUSVZFIHx8IHN0ZXAgPT09IFNURVBfQUNUSVZBVEVEO1xufVxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChzdGF0dXMsIHByZXBhcmVPbmx5LCBjYWxsYmFjaykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoU1RFUF9OT05FKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzdGVwID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRTdGVwID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VOZXh0RnJhbWUgPSB1c2VOZXh0RnJhbWUoKSxcbiAgICBfdXNlTmV4dEZyYW1lMiA9IF9zbGljZWRUb0FycmF5KF91c2VOZXh0RnJhbWUsIDIpLFxuICAgIG5leHRGcmFtZSA9IF91c2VOZXh0RnJhbWUyWzBdLFxuICAgIGNhbmNlbE5leHRGcmFtZSA9IF91c2VOZXh0RnJhbWUyWzFdO1xuICBmdW5jdGlvbiBzdGFydFF1ZXVlKCkge1xuICAgIHNldFN0ZXAoU1RFUF9QUkVQQVJFLCB0cnVlKTtcbiAgfVxuICB2YXIgU1RFUF9RVUVVRSA9IHByZXBhcmVPbmx5ID8gU0lNUExFX1NURVBfUVVFVUUgOiBGVUxMX1NURVBfUVVFVUU7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdGVwICE9PSBTVEVQX05PTkUgJiYgc3RlcCAhPT0gU1RFUF9BQ1RJVkFURUQpIHtcbiAgICAgIHZhciBpbmRleCA9IFNURVBfUVVFVUUuaW5kZXhPZihzdGVwKTtcbiAgICAgIHZhciBuZXh0U3RlcCA9IFNURVBfUVVFVUVbaW5kZXggKyAxXTtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjayhzdGVwKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IFNraXBTdGVwKSB7XG4gICAgICAgIC8vIFNraXAgd2hlbiBubyBuZWVkZWRcbiAgICAgICAgc2V0U3RlcChuZXh0U3RlcCwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG5leHRTdGVwKSB7XG4gICAgICAgIC8vIERvIGFzIGZyYW1lIGZvciBzdGVwIHVwZGF0ZVxuICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgICBmdW5jdGlvbiBkb05leHQoKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHNpbmNlIGN1cnJlbnQgcXVldWUgaXMgb29kXG4gICAgICAgICAgICBpZiAoaW5mby5pc0NhbmNlbGVkKCkpIHJldHVybjtcbiAgICAgICAgICAgIHNldFN0ZXAobmV4dFN0ZXAsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkb05leHQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT25seSBwcm9taXNlIHNob3VsZCBiZSBhc3luY1xuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihkb05leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc3RhdHVzLCBzdGVwXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtzdGFydFF1ZXVlLCBzdGVwXTtcbn0pOyIsImltcG9ydCBDU1NNb3Rpb24gZnJvbSBcIi4vQ1NTTW90aW9uXCI7XG5pbXBvcnQgQ1NTTW90aW9uTGlzdCBmcm9tIFwiLi9DU1NNb3Rpb25MaXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByb3ZpZGVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuZXhwb3J0IHsgQ1NTTW90aW9uTGlzdCB9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTTW90aW9uOyIsImV4cG9ydCB2YXIgU1RBVFVTX05PTkUgPSAnbm9uZSc7XG5leHBvcnQgdmFyIFNUQVRVU19BUFBFQVIgPSAnYXBwZWFyJztcbmV4cG9ydCB2YXIgU1RBVFVTX0VOVEVSID0gJ2VudGVyJztcbmV4cG9ydCB2YXIgU1RBVFVTX0xFQVZFID0gJ2xlYXZlJztcbmV4cG9ydCB2YXIgU1RFUF9OT05FID0gJ25vbmUnO1xuZXhwb3J0IHZhciBTVEVQX1BSRVBBUkUgPSAncHJlcGFyZSc7XG5leHBvcnQgdmFyIFNURVBfU1RBUlQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBTVEVQX0FDVElWRSA9ICdhY3RpdmUnO1xuZXhwb3J0IHZhciBTVEVQX0FDVElWQVRFRCA9ICdlbmQnO1xuLyoqXG4gKiBVc2VkIGZvciBkaXNhYmxlZCBtb3Rpb24gY2FzZS5cbiAqIFByZXBhcmUgc3RhZ2Ugd2lsbCBzdGlsbCB3b3JrIGJ1dCBzdGFydCAmIGFjdGl2ZSB3aWxsIGJlIHNraXBwZWQuXG4gKi9cbmV4cG9ydCB2YXIgU1RFUF9QUkVQQVJFRCA9ICdwcmVwYXJlZCc7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmV4cG9ydCB2YXIgU1RBVFVTX0FERCA9ICdhZGQnO1xuZXhwb3J0IHZhciBTVEFUVVNfS0VFUCA9ICdrZWVwJztcbmV4cG9ydCB2YXIgU1RBVFVTX1JFTU9WRSA9ICdyZW1vdmUnO1xuZXhwb3J0IHZhciBTVEFUVVNfUkVNT1ZFRCA9ICdyZW1vdmVkJztcbmV4cG9ydCBmdW5jdGlvbiB3cmFwS2V5VG9PYmplY3Qoa2V5KSB7XG4gIHZhciBrZXlPYmo7XG4gIGlmIChrZXkgJiYgX3R5cGVvZihrZXkpID09PSAnb2JqZWN0JyAmJiAna2V5JyBpbiBrZXkpIHtcbiAgICBrZXlPYmogPSBrZXk7XG4gIH0gZWxzZSB7XG4gICAga2V5T2JqID0ge1xuICAgICAga2V5OiBrZXlcbiAgICB9O1xuICB9XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGtleU9iaiksIHt9LCB7XG4gICAga2V5OiBTdHJpbmcoa2V5T2JqLmtleSlcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLZXlzKCkge1xuICB2YXIga2V5cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gIHJldHVybiBrZXlzLm1hcCh3cmFwS2V5VG9PYmplY3QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZLZXlzKCkge1xuICB2YXIgcHJldktleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICB2YXIgY3VycmVudEtleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICB2YXIgbGlzdCA9IFtdO1xuICB2YXIgY3VycmVudEluZGV4ID0gMDtcbiAgdmFyIGN1cnJlbnRMZW4gPSBjdXJyZW50S2V5cy5sZW5ndGg7XG4gIHZhciBwcmV2S2V5T2JqZWN0cyA9IHBhcnNlS2V5cyhwcmV2S2V5cyk7XG4gIHZhciBjdXJyZW50S2V5T2JqZWN0cyA9IHBhcnNlS2V5cyhjdXJyZW50S2V5cyk7XG5cbiAgLy8gQ2hlY2sgcHJldiBrZXlzIHRvIGluc2VydCBvciBrZWVwXG4gIHByZXZLZXlPYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGtleU9iaikge1xuICAgIHZhciBoaXQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgY3VycmVudExlbjsgaSArPSAxKSB7XG4gICAgICB2YXIgY3VycmVudEtleU9iaiA9IGN1cnJlbnRLZXlPYmplY3RzW2ldO1xuICAgICAgaWYgKGN1cnJlbnRLZXlPYmoua2V5ID09PSBrZXlPYmoua2V5KSB7XG4gICAgICAgIC8vIE5ldyBhZGRlZCBrZXlzIHNob3VsZCBhZGQgYmVmb3JlIGN1cnJlbnQga2V5XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBpKSB7XG4gICAgICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGN1cnJlbnRLZXlPYmplY3RzLnNsaWNlKGN1cnJlbnRJbmRleCwgaSkubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHt9LCB7XG4gICAgICAgICAgICAgIHN0YXR1czogU1RBVFVTX0FERFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdC5wdXNoKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudEtleU9iaiksIHt9LCB7XG4gICAgICAgICAgc3RhdHVzOiBTVEFUVVNfS0VFUFxuICAgICAgICB9KSk7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSAxO1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBub3QgaGl0LCBpdCBtZWFucyBrZXkgaXMgcmVtb3ZlZFxuICAgIGlmICghaGl0KSB7XG4gICAgICBsaXN0LnB1c2goX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBrZXlPYmopLCB7fSwge1xuICAgICAgICBzdGF0dXM6IFNUQVRVU19SRU1PVkVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCByZXN0IHRvIHRoZSBsaXN0XG4gIGlmIChjdXJyZW50SW5kZXggPCBjdXJyZW50TGVuKSB7XG4gICAgbGlzdCA9IGxpc3QuY29uY2F0KGN1cnJlbnRLZXlPYmplY3RzLnNsaWNlKGN1cnJlbnRJbmRleCkubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHt9LCB7XG4gICAgICAgIHN0YXR1czogU1RBVFVTX0FERFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHNhbWUga2V5IHdoZW4gaXQgcmVtb3ZlIGFuZCBhZGQgYWdhaW46XG4gICAqICAgIFsxIC0gYWRkLCAyIC0ga2VlcCwgMSAtIHJlbW92ZV0gLT4gWzEgLSBrZWVwLCAyIC0ga2VlcF1cbiAgICovXG4gIHZhciBrZXlzID0ge307XG4gIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBrZXkgPSBfcmVmLmtleTtcbiAgICBrZXlzW2tleV0gPSAoa2V5c1trZXldIHx8IDApICsgMTtcbiAgfSk7XG4gIHZhciBkdXBsaWNhdGVkS2V5cyA9IE9iamVjdC5rZXlzKGtleXMpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleXNba2V5XSA+IDE7XG4gIH0pO1xuICBkdXBsaWNhdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaEtleSkge1xuICAgIC8vIFJlbW92ZSBgU1RBVFVTX1JFTU9WRWAgbm9kZS5cbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIga2V5ID0gX3JlZjIua2V5LFxuICAgICAgICBzdGF0dXMgPSBfcmVmMi5zdGF0dXM7XG4gICAgICByZXR1cm4ga2V5ICE9PSBtYXRjaEtleSB8fCBzdGF0dXMgIT09IFNUQVRVU19SRU1PVkU7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgYFNUQVRVU19BRERgIHRvIGBTVEFUVVNfS0VFUGBcbiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmtleSA9PT0gbWF0Y2hLZXkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG5vZGUuc3RhdHVzID0gU1RBVFVTX0tFRVA7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbGlzdDtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgY2FuVXNlRE9NIGZyb20gXCJyYy11dGlsL2VzL0RvbS9jYW5Vc2VEb21cIjtcbi8vID09PT09PT09PT09PT09PT09IFRyYW5zaXRpb24gPT09PT09PT09PT09PT09PT1cbi8vIEV2ZW50IHdyYXBwZXIuIENvcHkgZnJvbSByZWFjdCBzb3VyY2UgY29kZVxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzW1wiV2Via2l0XCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJ3ZWJraXRcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJNb3pcIi5jb25jYXQoc3R5bGVQcm9wKV0gPSBcIm1velwiLmNvbmNhdChldmVudE5hbWUpO1xuICBwcmVmaXhlc1tcIm1zXCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJNU1wiLmNvbmNhdChldmVudE5hbWUpO1xuICBwcmVmaXhlc1tcIk9cIi5jb25jYXQoc3R5bGVQcm9wKV0gPSBcIm9cIi5jb25jYXQoZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZXMoZG9tU3VwcG9ydCwgd2luKSB7XG4gIHZhciBwcmVmaXhlcyA9IHtcbiAgICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxuICB9O1xuICBpZiAoZG9tU3VwcG9ydCkge1xuICAgIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luKSkge1xuICAgICAgZGVsZXRlIHByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgfVxuICAgIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbikpIHtcbiAgICAgIGRlbGV0ZSBwcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IGdldFZlbmRvclByZWZpeGVzKGNhblVzZURPTSgpLCB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9KTtcbnZhciBzdHlsZSA9IHt9O1xuaWYgKGNhblVzZURPTSgpKSB7XG4gIHZhciBfZG9jdW1lbnQkY3JlYXRlRWxlbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgc3R5bGUgPSBfZG9jdW1lbnQkY3JlYXRlRWxlbWUuc3R5bGU7XG59XG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfVxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcbiAgaWYgKHByZWZpeE1hcCkge1xuICAgIHZhciBzdHlsZVByb3BMaXN0ID0gT2JqZWN0LmtleXMocHJlZml4TWFwKTtcbiAgICB2YXIgbGVuID0gc3R5bGVQcm9wTGlzdC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgdmFyIHN0eWxlUHJvcCA9IHN0eWxlUHJvcExpc3RbaV07XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByZWZpeE1hcCwgc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgICAgcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG52YXIgaW50ZXJuYWxBbmltYXRpb25FbmROYW1lID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIGludGVybmFsVHJhbnNpdGlvbkVuZE5hbWUgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuZXhwb3J0IHZhciBzdXBwb3J0VHJhbnNpdGlvbiA9ICEhKGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSAmJiBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lKTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uRW5kTmFtZSA9IGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSB8fCAnYW5pbWF0aW9uZW5kJztcbmV4cG9ydCB2YXIgdHJhbnNpdGlvbkVuZE5hbWUgPSBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lIHx8ICd0cmFuc2l0aW9uZW5kJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uTmFtZSh0cmFuc2l0aW9uTmFtZSwgdHJhbnNpdGlvblR5cGUpIHtcbiAgaWYgKCF0cmFuc2l0aW9uTmFtZSkgcmV0dXJuIG51bGw7XG4gIGlmIChfdHlwZW9mKHRyYW5zaXRpb25OYW1lKSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgdHlwZSA9IHRyYW5zaXRpb25UeXBlLnJlcGxhY2UoLy1cXHcvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbk5hbWVbdHlwZV07XG4gIH1cbiAgcmV0dXJuIFwiXCIuY29uY2F0KHRyYW5zaXRpb25OYW1lLCBcIi1cIikuY29uY2F0KHRyYW5zaXRpb25UeXBlKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHBpY2tBdHRycyBmcm9tIFwicmMtdXRpbC9lcy9waWNrQXR0cnNcIjtcbnZhciBOb3RpZnkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIF9wcm9wcyRkdXJhdGlvbiA9IHByb3BzLmR1cmF0aW9uLFxuICAgIGR1cmF0aW9uID0gX3Byb3BzJGR1cmF0aW9uID09PSB2b2lkIDAgPyA0LjUgOiBfcHJvcHMkZHVyYXRpb24sXG4gICAgc2hvd1Byb2dyZXNzID0gcHJvcHMuc2hvd1Byb2dyZXNzLFxuICAgIF9wcm9wcyRwYXVzZU9uSG92ZXIgPSBwcm9wcy5wYXVzZU9uSG92ZXIsXG4gICAgcGF1c2VPbkhvdmVyID0gX3Byb3BzJHBhdXNlT25Ib3ZlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRwYXVzZU9uSG92ZXIsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjb250ZW50ID0gcHJvcHMuY29udGVudCxcbiAgICBjbG9zYWJsZSA9IHByb3BzLmNsb3NhYmxlLFxuICAgIF9wcm9wcyRjbG9zZUljb24gPSBwcm9wcy5jbG9zZUljb24sXG4gICAgY2xvc2VJY29uID0gX3Byb3BzJGNsb3NlSWNvbiA9PT0gdm9pZCAwID8gJ3gnIDogX3Byb3BzJGNsb3NlSWNvbixcbiAgICBkaXZQcm9wcyA9IHByb3BzLnByb3BzLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uTm90aWNlQ2xvc2UgPSBwcm9wcy5vbk5vdGljZUNsb3NlLFxuICAgIHRpbWVzID0gcHJvcHMudGltZXMsXG4gICAgZm9yY2VkSG92ZXJpbmcgPSBwcm9wcy5ob3ZlcmluZztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBob3ZlcmluZyA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SG92ZXJpbmcgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBwZXJjZW50ID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRQZXJjZW50ID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNSwgMiksXG4gICAgc3BlbnRUaW1lID0gX1JlYWN0JHVzZVN0YXRlNlswXSxcbiAgICBzZXRTcGVudFRpbWUgPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuICB2YXIgbWVyZ2VkSG92ZXJpbmcgPSBmb3JjZWRIb3ZlcmluZyB8fCBob3ZlcmluZztcbiAgdmFyIG1lcmdlZFNob3dQcm9ncmVzcyA9IGR1cmF0aW9uID4gMCAmJiBzaG93UHJvZ3Jlc3M7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxDbG9zZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDbG9zZSgpIHtcbiAgICBvbk5vdGljZUNsb3NlKGV2ZW50S2V5KTtcbiAgfTtcbiAgdmFyIG9uQ2xvc2VLZXlEb3duID0gZnVuY3Rpb24gb25DbG9zZUtleURvd24oZSkge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmNvZGUgPT09ICdFbnRlcicgfHwgZS5rZXlDb2RlID09PSBLZXlDb2RlLkVOVEVSKSB7XG4gICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW1lcmdlZEhvdmVyaW5nICYmIGR1cmF0aW9uID4gMCkge1xuICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKSAtIHNwZW50VGltZTtcbiAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uSW50ZXJuYWxDbG9zZSgpO1xuICAgICAgfSwgZHVyYXRpb24gKiAxMDAwIC0gc3BlbnRUaW1lKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYXVzZU9uSG92ZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3BlbnRUaW1lKERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkdXJhdGlvbiwgbWVyZ2VkSG92ZXJpbmcsIHRpbWVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtZXJnZWRIb3ZlcmluZyAmJiBtZXJnZWRTaG93UHJvZ3Jlc3MgJiYgKHBhdXNlT25Ib3ZlciB8fCBzcGVudFRpbWUgPT09IDApKSB7XG4gICAgICB2YXIgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIHZhciBhbmltYXRpb25GcmFtZTtcbiAgICAgIHZhciBjYWxjdWxhdGUgPSBmdW5jdGlvbiBjYWxjdWxhdGUoKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICAgIHZhciBydW50aW1lID0gdGltZXN0YW1wICsgc3BlbnRUaW1lIC0gc3RhcnQ7XG4gICAgICAgICAgdmFyIHByb2dyZXNzID0gTWF0aC5taW4ocnVudGltZSAvIChkdXJhdGlvbiAqIDEwMDApLCAxKTtcbiAgICAgICAgICBzZXRQZXJjZW50KHByb2dyZXNzICogMTAwKTtcbiAgICAgICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XG4gICAgICAgICAgICBjYWxjdWxhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNhbGN1bGF0ZSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZHVyYXRpb24sIHNwZW50VGltZSwgbWVyZ2VkSG92ZXJpbmcsIG1lcmdlZFNob3dQcm9ncmVzcywgdGltZXNdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xvc2FibGUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjbG9zYWJsZU9iaiA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdHlwZW9mKGNsb3NhYmxlKSA9PT0gJ29iamVjdCcgJiYgY2xvc2FibGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjbG9zYWJsZTtcbiAgICB9XG4gICAgaWYgKGNsb3NhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbG9zZUljb246IGNsb3NlSWNvblxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9LCBbY2xvc2FibGUsIGNsb3NlSWNvbl0pO1xuICB2YXIgYXJpYVByb3BzID0gcGlja0F0dHJzKGNsb3NhYmxlT2JqLCB0cnVlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJvZ3Jlc3MgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB2YWxpZFBlcmNlbnQgPSAxMDAgLSAoIXBlcmNlbnQgfHwgcGVyY2VudCA8IDAgPyAwIDogcGVyY2VudCA+IDEwMCA/IDEwMCA6IHBlcmNlbnQpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBub3RpY2VQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdGljZVwiKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBkaXZQcm9wcywge1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhub3RpY2VQcmVmaXhDbHMsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNsb3NhYmxlXCIpLCBjbG9zYWJsZSkpLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcihlKSB7XG4gICAgICB2YXIgX2RpdlByb3BzJG9uTW91c2VFbnRlO1xuICAgICAgc2V0SG92ZXJpbmcodHJ1ZSk7XG4gICAgICBkaXZQcm9wcyA9PT0gbnVsbCB8fCBkaXZQcm9wcyA9PT0gdm9pZCAwIHx8IChfZGl2UHJvcHMkb25Nb3VzZUVudGUgPSBkaXZQcm9wcy5vbk1vdXNlRW50ZXIpID09PSBudWxsIHx8IF9kaXZQcm9wcyRvbk1vdXNlRW50ZSA9PT0gdm9pZCAwIHx8IF9kaXZQcm9wcyRvbk1vdXNlRW50ZS5jYWxsKGRpdlByb3BzLCBlKTtcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKGUpIHtcbiAgICAgIHZhciBfZGl2UHJvcHMkb25Nb3VzZUxlYXY7XG4gICAgICBzZXRIb3ZlcmluZyhmYWxzZSk7XG4gICAgICBkaXZQcm9wcyA9PT0gbnVsbCB8fCBkaXZQcm9wcyA9PT0gdm9pZCAwIHx8IChfZGl2UHJvcHMkb25Nb3VzZUxlYXYgPSBkaXZQcm9wcy5vbk1vdXNlTGVhdmUpID09PSBudWxsIHx8IF9kaXZQcm9wcyRvbk1vdXNlTGVhdiA9PT0gdm9pZCAwIHx8IF9kaXZQcm9wcyRvbk1vdXNlTGVhdi5jYWxsKGRpdlByb3BzLCBlKTtcbiAgICB9LFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItY29udGVudFwiKVxuICB9LCBjb250ZW50KSwgY2xvc2FibGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogMCxcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItY2xvc2VcIiksXG4gICAgb25LZXlEb3duOiBvbkNsb3NlS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiXG4gIH0sIGFyaWFQcm9wcywge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uSW50ZXJuYWxDbG9zZSgpO1xuICAgIH1cbiAgfSksIGNsb3NhYmxlT2JqLmNsb3NlSWNvbiksIG1lcmdlZFNob3dQcm9ncmVzcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInByb2dyZXNzXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItcHJvZ3Jlc3NcIiksXG4gICAgbWF4OiBcIjEwMFwiLFxuICAgIHZhbHVlOiB2YWxpZFBlcmNlbnRcbiAgfSwgdmFsaWRQZXJjZW50ICsgJyUnKSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IE5vdGlmeTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZXNcIiwgXCJzdHlsZXNcIl07XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBDU1NNb3Rpb25MaXN0IH0gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCBOb3RpY2UgZnJvbSBcIi4vTm90aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4vTm90aWZpY2F0aW9uUHJvdmlkZXJcIjtcbmltcG9ydCB1c2VTdGFjayBmcm9tIFwiLi9ob29rcy91c2VTdGFja1wiO1xudmFyIE5vdGljZUxpc3QgPSBmdW5jdGlvbiBOb3RpY2VMaXN0KHByb3BzKSB7XG4gIHZhciBjb25maWdMaXN0ID0gcHJvcHMuY29uZmlnTGlzdCxcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQsXG4gICAgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIG1vdGlvbiA9IHByb3BzLm1vdGlvbixcbiAgICBvbkFsbE5vdGljZVJlbW92ZWQgPSBwcm9wcy5vbkFsbE5vdGljZVJlbW92ZWQsXG4gICAgb25Ob3RpY2VDbG9zZSA9IHByb3BzLm9uTm90aWNlQ2xvc2UsXG4gICAgc3RhY2tDb25maWcgPSBwcm9wcy5zdGFjaztcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChOb3RpZmljYXRpb25Db250ZXh0KSxcbiAgICBjdHhDbHMgPSBfdXNlQ29udGV4dC5jbGFzc05hbWVzO1xuICB2YXIgZGljdFJlZiA9IHVzZVJlZih7fSk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBsYXRlc3ROb3RpY2UgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldExhdGVzdE5vdGljZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoW10pLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBob3ZlcktleXMgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldEhvdmVyS2V5cyA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBrZXlzID0gY29uZmlnTGlzdC5tYXAoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgIGtleTogU3RyaW5nKGNvbmZpZy5rZXkpXG4gICAgfTtcbiAgfSk7XG4gIHZhciBfdXNlU3RhY2sgPSB1c2VTdGFjayhzdGFja0NvbmZpZyksXG4gICAgX3VzZVN0YWNrMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGFjaywgMiksXG4gICAgc3RhY2sgPSBfdXNlU3RhY2syWzBdLFxuICAgIF91c2VTdGFjazIkID0gX3VzZVN0YWNrMlsxXSxcbiAgICBvZmZzZXQgPSBfdXNlU3RhY2syJC5vZmZzZXQsXG4gICAgdGhyZXNob2xkID0gX3VzZVN0YWNrMiQudGhyZXNob2xkLFxuICAgIGdhcCA9IF91c2VTdGFjazIkLmdhcDtcbiAgdmFyIGV4cGFuZGVkID0gc3RhY2sgJiYgKGhvdmVyS2V5cy5sZW5ndGggPiAwIHx8IGtleXMubGVuZ3RoIDw9IHRocmVzaG9sZCk7XG4gIHZhciBwbGFjZW1lbnRNb3Rpb24gPSB0eXBlb2YgbW90aW9uID09PSAnZnVuY3Rpb24nID8gbW90aW9uKHBsYWNlbWVudCkgOiBtb3Rpb247XG5cbiAgLy8gQ2xlYW4gaG92ZXIga2V5XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHN0YWNrICYmIGhvdmVyS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5cy5zb21lKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgZGF0YUtleSA9IF9yZWYua2V5O1xuICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0gZGF0YUtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtob3ZlcktleXMsIGtleXMsIHN0YWNrXSk7XG5cbiAgLy8gRm9yY2UgdXBkYXRlIGxhdGVzdCBub3RpY2VcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2tleXM7XG4gICAgaWYgKHN0YWNrICYmIGRpY3RSZWYuY3VycmVudFsoX2tleXMgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9rZXlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfa2V5cy5rZXldKSB7XG4gICAgICB2YXIgX2tleXMyO1xuICAgICAgc2V0TGF0ZXN0Tm90aWNlKGRpY3RSZWYuY3VycmVudFsoX2tleXMyID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfa2V5czIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rZXlzMi5rZXldKTtcbiAgICB9XG4gIH0sIFtrZXlzLCBzdGFja10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTTW90aW9uTGlzdCwgX2V4dGVuZHMoe1xuICAgIGtleTogcGxhY2VtZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChwbGFjZW1lbnQpLCBjdHhDbHMgPT09IG51bGwgfHwgY3R4Q2xzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdHhDbHMubGlzdCwgY2xhc3NOYW1lLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN0YWNrXCIpLCAhIXN0YWNrKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdGFjay1leHBhbmRlZFwiKSwgZXhwYW5kZWQpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAga2V5czoga2V5cyxcbiAgICBtb3Rpb25BcHBlYXI6IHRydWVcbiAgfSwgcGxhY2VtZW50TW90aW9uLCB7XG4gICAgb25BbGxSZW1vdmVkOiBmdW5jdGlvbiBvbkFsbFJlbW92ZWQoKSB7XG4gICAgICBvbkFsbE5vdGljZVJlbW92ZWQocGxhY2VtZW50KTtcbiAgICB9XG4gIH0pLCBmdW5jdGlvbiAoX3JlZjIsIG5vZGVSZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZjIuY29uZmlnLFxuICAgICAgbW90aW9uQ2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgbW90aW9uU3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICAgIG1vdGlvbkluZGV4ID0gX3JlZjIuaW5kZXg7XG4gICAgdmFyIF9yZWYzID0gY29uZmlnLFxuICAgICAga2V5ID0gX3JlZjMua2V5LFxuICAgICAgdGltZXMgPSBfcmVmMy50aW1lcztcbiAgICB2YXIgc3RyS2V5ID0gU3RyaW5nKGtleSk7XG4gICAgdmFyIF9yZWY0ID0gY29uZmlnLFxuICAgICAgY29uZmlnQ2xhc3NOYW1lID0gX3JlZjQuY2xhc3NOYW1lLFxuICAgICAgY29uZmlnU3R5bGUgPSBfcmVmNC5zdHlsZSxcbiAgICAgIGNvbmZpZ0NsYXNzTmFtZXMgPSBfcmVmNC5jbGFzc05hbWVzLFxuICAgICAgY29uZmlnU3R5bGVzID0gX3JlZjQuc3R5bGVzLFxuICAgICAgcmVzdENvbmZpZyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgX2V4Y2x1ZGVkKTtcbiAgICB2YXIgZGF0YUluZGV4ID0ga2V5cy5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gc3RyS2V5O1xuICAgIH0pO1xuXG4gICAgLy8gSWYgZGF0YUluZGV4IGlzIC0xLCB0aGF0IG1lYW5zIHRoaXMgbm90aWNlIGhhcyBiZWVuIHJlbW92ZWQgaW4gZGF0YSwgYnV0IHN0aWxsIGluIGRvbVxuICAgIC8vIFNob3VsZCBtaW51cyAobW90aW9uSW5kZXggLSAxKSB0byBnZXQgdGhlIGNvcnJlY3QgaW5kZXggYmVjYXVzZSBrZXlzLmxlbmd0aCBpcyBub3QgdGhlIHNhbWUgYXMgZG9tIGxlbmd0aFxuICAgIHZhciBzdGFja1N0eWxlID0ge307XG4gICAgaWYgKHN0YWNrKSB7XG4gICAgICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aCAtIDEgLSAoZGF0YUluZGV4ID4gLTEgPyBkYXRhSW5kZXggOiBtb3Rpb25JbmRleCAtIDEpO1xuICAgICAgdmFyIHRyYW5zZm9ybVggPSBwbGFjZW1lbnQgPT09ICd0b3AnIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgPyAnLTUwJScgOiAnMCc7XG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIHZhciBfZGljdFJlZiRjdXJyZW50JHN0ckssIF9kaWN0UmVmJGN1cnJlbnQkc3RySzIsIF9kaWN0UmVmJGN1cnJlbnQkc3RySzM7XG4gICAgICAgIHN0YWNrU3R5bGUuaGVpZ2h0ID0gZXhwYW5kZWQgPyAoX2RpY3RSZWYkY3VycmVudCRzdHJLID0gZGljdFJlZi5jdXJyZW50W3N0cktleV0pID09PSBudWxsIHx8IF9kaWN0UmVmJGN1cnJlbnQkc3RySyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RpY3RSZWYkY3VycmVudCRzdHJLLm9mZnNldEhlaWdodCA6IGxhdGVzdE5vdGljZSA9PT0gbnVsbCB8fCBsYXRlc3ROb3RpY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhdGVzdE5vdGljZS5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtXG4gICAgICAgIHZhciB2ZXJ0aWNhbE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgIHZhciBfZGljdFJlZiRjdXJyZW50JGtleXM7XG4gICAgICAgICAgdmVydGljYWxPZmZzZXQgKz0gKChfZGljdFJlZiRjdXJyZW50JGtleXMgPSBkaWN0UmVmLmN1cnJlbnRba2V5c1trZXlzLmxlbmd0aCAtIDEgLSBpXS5rZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JGtleXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kaWN0UmVmJGN1cnJlbnQka2V5cy5vZmZzZXRIZWlnaHQpICsgZ2FwO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFuc2Zvcm1ZID0gKGV4cGFuZGVkID8gdmVydGljYWxPZmZzZXQgOiBpbmRleCAqIG9mZnNldCkgKiAocGxhY2VtZW50LnN0YXJ0c1dpdGgoJ3RvcCcpID8gMSA6IC0xKTtcbiAgICAgICAgdmFyIHNjYWxlWCA9ICFleHBhbmRlZCAmJiBsYXRlc3ROb3RpY2UgIT09IG51bGwgJiYgbGF0ZXN0Tm90aWNlICE9PSB2b2lkIDAgJiYgbGF0ZXN0Tm90aWNlLm9mZnNldFdpZHRoICYmIChfZGljdFJlZiRjdXJyZW50JHN0cksyID0gZGljdFJlZi5jdXJyZW50W3N0cktleV0pICE9PSBudWxsICYmIF9kaWN0UmVmJGN1cnJlbnQkc3RySzIgIT09IHZvaWQgMCAmJiBfZGljdFJlZiRjdXJyZW50JHN0cksyLm9mZnNldFdpZHRoID8gKChsYXRlc3ROb3RpY2UgPT09IG51bGwgfHwgbGF0ZXN0Tm90aWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXRlc3ROb3RpY2Uub2Zmc2V0V2lkdGgpIC0gb2Zmc2V0ICogMiAqIChpbmRleCA8IDMgPyBpbmRleCA6IDMpKSAvICgoX2RpY3RSZWYkY3VycmVudCRzdHJLMyA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JHN0ckszID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGljdFJlZiRjdXJyZW50JHN0ckszLm9mZnNldFdpZHRoKSA6IDE7XG4gICAgICAgIHN0YWNrU3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodHJhbnNmb3JtWCwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtWSwgXCJweCwgMCkgc2NhbGVYKFwiKS5jb25jYXQoc2NhbGVYLCBcIilcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFja1N0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KHRyYW5zZm9ybVgsIFwiLCAwLCAwKVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIHJlZjogbm9kZVJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdGljZS13cmFwcGVyXCIpLCBtb3Rpb25DbGFzc05hbWUsIGNvbmZpZ0NsYXNzTmFtZXMgPT09IG51bGwgfHwgY29uZmlnQ2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnQ2xhc3NOYW1lcy53cmFwcGVyKSxcbiAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW90aW9uU3R5bGUpLCBzdGFja1N0eWxlKSwgY29uZmlnU3R5bGVzID09PSBudWxsIHx8IGNvbmZpZ1N0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnU3R5bGVzLndyYXBwZXIpLFxuICAgICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgICByZXR1cm4gcHJldi5pbmNsdWRlcyhzdHJLZXkpID8gcHJldiA6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocHJldiksIFtzdHJLZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Nb3VzZUxlYXZlOiBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHJldHVybiBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgICByZXR1cm4gcHJldi5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHJldHVybiBrICE9PSBzdHJLZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vdGljZSwgX2V4dGVuZHMoe30sIHJlc3RDb25maWcsIHtcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgaWYgKGRhdGFJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZGljdFJlZi5jdXJyZW50W3N0cktleV0gPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBkaWN0UmVmLmN1cnJlbnRbc3RyS2V5XTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgY2xhc3NOYW1lczogY29uZmlnQ2xhc3NOYW1lcyxcbiAgICAgIHN0eWxlczogY29uZmlnU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNvbmZpZ0NsYXNzTmFtZSwgY3R4Q2xzID09PSBudWxsIHx8IGN0eENscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Q2xzLm5vdGljZSksXG4gICAgICBzdHlsZTogY29uZmlnU3R5bGUsXG4gICAgICB0aW1lczogdGltZXMsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIGV2ZW50S2V5OiBrZXksXG4gICAgICBvbk5vdGljZUNsb3NlOiBvbk5vdGljZUNsb3NlLFxuICAgICAgaG92ZXJpbmc6IHN0YWNrICYmIGhvdmVyS2V5cy5sZW5ndGggPiAwXG4gICAgfSkpKTtcbiAgfSk7XG59O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTm90aWNlTGlzdC5kaXNwbGF5TmFtZSA9ICdOb3RpY2VMaXN0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IE5vdGljZUxpc3Q7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgTm90aWZpY2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBOb3RpZmljYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIE5vdGlmaWNhdGlvblByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWVzID0gX3JlZi5jbGFzc05hbWVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWZpY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB7XG4gICAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzXG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IGRlZmF1bHQgTm90aWZpY2F0aW9uUHJvdmlkZXI7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgTm90aWNlTGlzdCBmcm9tIFwiLi9Ob3RpY2VMaXN0XCI7XG4vLyBhbnQtbm90aWZpY2F0aW9uIGFudC1ub3RpZmljYXRpb24tdG9wUmlnaHRcbnZhciBOb3RpZmljYXRpb25zID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW5vdGlmaWNhdGlvbicgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIGNvbnRhaW5lciA9IHByb3BzLmNvbnRhaW5lcixcbiAgICBtb3Rpb24gPSBwcm9wcy5tb3Rpb24sXG4gICAgbWF4Q291bnQgPSBwcm9wcy5tYXhDb3VudCxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBvbkFsbFJlbW92ZWQgPSBwcm9wcy5vbkFsbFJlbW92ZWQsXG4gICAgc3RhY2sgPSBwcm9wcy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcHJvcHMucmVuZGVyTm90aWZpY2F0aW9ucztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKFtdKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBjb25maWdMaXN0ID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRDb25maWdMaXN0ID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xvc2UgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25Ob3RpY2VDbG9zZSA9IGZ1bmN0aW9uIG9uTm90aWNlQ2xvc2Uoa2V5KSB7XG4gICAgdmFyIF9jb25maWckb25DbG9zZTtcbiAgICAvLyBUcmlnZ2VyIGNsb3NlIGV2ZW50XG4gICAgdmFyIGNvbmZpZyA9IGNvbmZpZ0xpc3QuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBrZXk7XG4gICAgfSk7XG4gICAgY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwIHx8IChfY29uZmlnJG9uQ2xvc2UgPSBjb25maWcub25DbG9zZSkgPT09IG51bGwgfHwgX2NvbmZpZyRvbkNsb3NlID09PSB2b2lkIDAgfHwgX2NvbmZpZyRvbkNsb3NlLmNhbGwoY29uZmlnKTtcbiAgICBzZXRDb25maWdMaXN0KGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ICE9PSBrZXk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKGNvbmZpZykge1xuICAgICAgICBzZXRDb25maWdMaXN0KGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgICAgdmFyIGNsb25lID0gX3RvQ29uc3VtYWJsZUFycmF5KGxpc3QpO1xuXG4gICAgICAgICAgLy8gUmVwbGFjZSBpZiBleGlzdFxuICAgICAgICAgIHZhciBpbmRleCA9IGNsb25lLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBjb25maWcua2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBpbm5lckNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIGNvbmZpZyk7XG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHZhciBfbGlzdCRpbmRleDtcbiAgICAgICAgICAgIGlubmVyQ29uZmlnLnRpbWVzID0gKCgoX2xpc3QkaW5kZXggPSBsaXN0W2luZGV4XSkgPT09IG51bGwgfHwgX2xpc3QkaW5kZXggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9saXN0JGluZGV4LnRpbWVzKSB8fCAwKSArIDE7XG4gICAgICAgICAgICBjbG9uZVtpbmRleF0gPSBpbm5lckNvbmZpZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5uZXJDb25maWcudGltZXMgPSAwO1xuICAgICAgICAgICAgY2xvbmUucHVzaChpbm5lckNvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhDb3VudCA+IDAgJiYgY2xvbmUubGVuZ3RoID4gbWF4Q291bnQpIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmUuc2xpY2UoLW1heENvdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2Uoa2V5KSB7XG4gICAgICAgIG9uTm90aWNlQ2xvc2Uoa2V5KTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBzZXRDb25maWdMaXN0KFtdKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFBsYWNlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgcGxhY2VtZW50cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGxhY2VtZW50cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5leHRQbGFjZW1lbnRzID0ge307XG4gICAgY29uZmlnTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgIHZhciBfY29uZmlnJHBsYWNlbWVudCA9IGNvbmZpZy5wbGFjZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudCA9IF9jb25maWckcGxhY2VtZW50ID09PSB2b2lkIDAgPyAndG9wUmlnaHQnIDogX2NvbmZpZyRwbGFjZW1lbnQ7XG4gICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgIG5leHRQbGFjZW1lbnRzW3BsYWNlbWVudF0gPSBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdIHx8IFtdO1xuICAgICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdLnB1c2goY29uZmlnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbGwgZXhpc3QgcGxhY2VtZW50cyB0byBhdm9pZCBlbXB0eSBsaXN0IGNhdXNpbmcgcmVtb3ZlIHdpdGhvdXQgbW90aW9uXG4gICAgT2JqZWN0LmtleXMocGxhY2VtZW50cykuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdID0gbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSB8fCBbXTtcbiAgICB9KTtcbiAgICBzZXRQbGFjZW1lbnRzKG5leHRQbGFjZW1lbnRzKTtcbiAgfSwgW2NvbmZpZ0xpc3RdKTtcblxuICAvLyBDbGVhbiB1cCBjb250YWluZXIgaWYgYWxsIG5vdGljZXMgZmFkZSBvdXRcbiAgdmFyIG9uQWxsTm90aWNlUmVtb3ZlZCA9IGZ1bmN0aW9uIG9uQWxsTm90aWNlUmVtb3ZlZChwbGFjZW1lbnQpIHtcbiAgICBzZXRQbGFjZW1lbnRzKGZ1bmN0aW9uIChvcmlnaW5QbGFjZW1lbnRzKSB7XG4gICAgICB2YXIgY2xvbmUgPSBfb2JqZWN0U3ByZWFkKHt9LCBvcmlnaW5QbGFjZW1lbnRzKTtcbiAgICAgIHZhciBsaXN0ID0gY2xvbmVbcGxhY2VtZW50XSB8fCBbXTtcbiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGNsb25lW3BsYWNlbWVudF07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gRWZmZWN0IHRlbGwgdGhhdCBwbGFjZW1lbnRzIGlzIGVtcHR5IG5vd1xuICB2YXIgZW1wdHlSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhwbGFjZW1lbnRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlbXB0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVtcHR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIFRyaWdnZXIgb25seSB3aGVuIGZyb20gZXhpc3QgdG8gZW1wdHlcbiAgICAgIG9uQWxsUmVtb3ZlZCA9PT0gbnVsbCB8fCBvbkFsbFJlbW92ZWQgPT09IHZvaWQgMCB8fCBvbkFsbFJlbW92ZWQoKTtcbiAgICAgIGVtcHR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtwbGFjZW1lbnRzXSk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHBsYWNlbWVudExpc3QgPSBPYmplY3Qua2V5cyhwbGFjZW1lbnRzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBwbGFjZW1lbnRMaXN0Lm1hcChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHBsYWNlbWVudENvbmZpZ0xpc3QgPSBwbGFjZW1lbnRzW3BsYWNlbWVudF07XG4gICAgdmFyIGxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpY2VMaXN0LCB7XG4gICAgICBrZXk6IHBsYWNlbWVudCxcbiAgICAgIGNvbmZpZ0xpc3Q6IHBsYWNlbWVudENvbmZpZ0xpc3QsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUgPT09IG51bGwgfHwgY2xhc3NOYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWUocGxhY2VtZW50KSxcbiAgICAgIHN0eWxlOiBzdHlsZSA9PT0gbnVsbCB8fCBzdHlsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGUocGxhY2VtZW50KSxcbiAgICAgIG1vdGlvbjogbW90aW9uLFxuICAgICAgb25Ob3RpY2VDbG9zZTogb25Ob3RpY2VDbG9zZSxcbiAgICAgIG9uQWxsTm90aWNlUmVtb3ZlZDogb25BbGxOb3RpY2VSZW1vdmVkLFxuICAgICAgc3RhY2s6IHN0YWNrXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbmRlck5vdGlmaWNhdGlvbnMgPyByZW5kZXJOb3RpZmljYXRpb25zKGxpc3QsIHtcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAga2V5OiBwbGFjZW1lbnRcbiAgICB9KSA6IGxpc3Q7XG4gIH0pKSwgY29udGFpbmVyKTtcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTm90aWZpY2F0aW9ucy5kaXNwbGF5TmFtZSA9ICdOb3RpZmljYXRpb25zJztcbn1cbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvbnM7IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJnZXRDb250YWluZXJcIiwgXCJtb3Rpb25cIiwgXCJwcmVmaXhDbHNcIiwgXCJtYXhDb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwib25BbGxSZW1vdmVkXCIsIFwic3RhY2tcIiwgXCJyZW5kZXJOb3RpZmljYXRpb25zXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSBcIi4uL05vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCB7IHVzZUV2ZW50IH0gZnJvbSAncmMtdXRpbCc7XG52YXIgZGVmYXVsdEdldENvbnRhaW5lciA9IGZ1bmN0aW9uIGRlZmF1bHRHZXRDb250YWluZXIoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufTtcbnZhciB1bmlxdWVLZXkgPSAwO1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb2JqTGlzdCA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvYmpMaXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIG9iakxpc3QuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbG9uZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VOb3RpZmljYXRpb24oKSB7XG4gIHZhciByb290Q29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9yb290Q29uZmlnJGdldENvbnRhaSA9IHJvb3RDb25maWcuZ2V0Q29udGFpbmVyLFxuICAgIGdldENvbnRhaW5lciA9IF9yb290Q29uZmlnJGdldENvbnRhaSA9PT0gdm9pZCAwID8gZGVmYXVsdEdldENvbnRhaW5lciA6IF9yb290Q29uZmlnJGdldENvbnRhaSxcbiAgICBtb3Rpb24gPSByb290Q29uZmlnLm1vdGlvbixcbiAgICBwcmVmaXhDbHMgPSByb290Q29uZmlnLnByZWZpeENscyxcbiAgICBtYXhDb3VudCA9IHJvb3RDb25maWcubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcm9vdENvbmZpZy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSByb290Q29uZmlnLnN0eWxlLFxuICAgIG9uQWxsUmVtb3ZlZCA9IHJvb3RDb25maWcub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcm9vdENvbmZpZy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcm9vdENvbmZpZy5yZW5kZXJOb3RpZmljYXRpb25zLFxuICAgIHNoYXJlQ29uZmlnID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJvb3RDb25maWcsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRhaW5lciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG5vdGlmaWNhdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGNvbnRleHRIb2xkZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpZmljYXRpb25zLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgcmVmOiBub3RpZmljYXRpb25zUmVmLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG1vdGlvbjogbW90aW9uLFxuICAgIG1heENvdW50OiBtYXhDb3VudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkOiBvbkFsbFJlbW92ZWQsXG4gICAgc3RhY2s6IHN0YWNrLFxuICAgIHJlbmRlck5vdGlmaWNhdGlvbnM6IHJlbmRlck5vdGlmaWNhdGlvbnNcbiAgfSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICB0YXNrUXVldWUgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFRhc2tRdWV1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBvcGVuID0gdXNlRXZlbnQoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBtZXJnZWRDb25maWcgPSBtZXJnZUNvbmZpZyhzaGFyZUNvbmZpZywgY29uZmlnKTtcbiAgICBpZiAobWVyZ2VkQ29uZmlnLmtleSA9PT0gbnVsbCB8fCBtZXJnZWRDb25maWcua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlZENvbmZpZy5rZXkgPSBcInJjLW5vdGlmaWNhdGlvbi1cIi5jb25jYXQodW5pcXVlS2V5KTtcbiAgICAgIHVuaXF1ZUtleSArPSAxO1xuICAgIH1cbiAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShxdWV1ZSksIFt7XG4gICAgICAgIHR5cGU6ICdvcGVuJyxcbiAgICAgICAgY29uZmlnOiBtZXJnZWRDb25maWdcbiAgICAgIH1dKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGFwaSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGtleSkge1xuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlJyxcbiAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgfV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ2Rlc3Ryb3knXG4gICAgICAgICAgfV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29udGFpbmVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVhY3QgMTggc2hvdWxkIGFsbCBpbiBlZmZlY3QgdGhhdCB3ZSB3aWxsIGNoZWNrIGNvbnRhaW5lciBpbiBlYWNoIHJlbmRlclxuICAvLyBXaGljaCBtZWFucyBnZXRDb250YWluZXIgc2hvdWxkIGJlIHN0YWJsZS5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRDb250YWluZXIoZ2V0Q29udGFpbmVyKCkpO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIEZsdXNoIHRhc2sgd2hlbiBub2RlIHJlYWR5XG4gICAgaWYgKG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudCAmJiB0YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICB0YXNrUXVldWUuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgICAgICBzd2l0Y2ggKHRhc2sudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50Lm9wZW4odGFzay5jb25maWcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50LmNsb3NlKHRhc2sua2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNTI1OTBcbiAgICAgIC8vIFJlYWN0IGBzdGFydFRyYW5zaXRpb25gIHdpbGwgcnVuIG9uY2UgYHVzZUVmZmVjdGAgYnV0IG1hbnkgdGltZXMgYHNldFN0YXRlYCxcbiAgICAgIC8vIFNvIGBzZXRUYXNrUXVldWVgIHdpdGggZmlsdGVyZWQgYXJyYXkgd2lsbCBjYXVzZSBpbmZpbml0ZSBsb29wLlxuICAgICAgLy8gV2UgY2FjaGUgdGhlIGZpcnN0IG1hdGNoIHF1ZXVlIGluc3RlYWQuXG4gICAgICB2YXIgb3JpVGFza1F1ZXVlO1xuICAgICAgdmFyIHRndFRhc2tRdWV1ZTtcblxuICAgICAgLy8gUmVhY3QgMTcgd2lsbCBtaXggb3JkZXIgb2YgZWZmZWN0ICYgc2V0U3RhdGUgaW4gYXN5bmNcbiAgICAgIC8vIC0gb3Blbjogc2V0U3RhdGVbMF1cbiAgICAgIC8vIC0gZWZmZWN0WzBdXG4gICAgICAvLyAtIG9wZW46IHNldFN0YXRlWzFdXG4gICAgICAvLyAtIGVmZmVjdCBzZXRTdGF0ZShbXSkgKiBoZXJlIHdpbGwgY2xlYW4gdXAgWzAsIDFdIGluIFJlYWN0IDE3XG4gICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKG9yaVF1ZXVlKSB7XG4gICAgICAgIGlmIChvcmlUYXNrUXVldWUgIT09IG9yaVF1ZXVlIHx8ICF0Z3RUYXNrUXVldWUpIHtcbiAgICAgICAgICBvcmlUYXNrUXVldWUgPSBvcmlRdWV1ZTtcbiAgICAgICAgICB0Z3RUYXNrUXVldWUgPSBvcmlRdWV1ZS5maWx0ZXIoZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgIHJldHVybiAhdGFza1F1ZXVlLmluY2x1ZGVzKHRhc2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0Z3RUYXNrUXVldWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt0YXNrUXVldWVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmV0dXJuID09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gW2FwaSwgY29udGV4dEhvbGRlcl07XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xudmFyIERFRkFVTFRfT0ZGU0VUID0gODtcbnZhciBERUZBVUxUX1RIUkVTSE9MRCA9IDM7XG52YXIgREVGQVVMVF9HQVAgPSAxNjtcbnZhciB1c2VTdGFjayA9IGZ1bmN0aW9uIHVzZVN0YWNrKGNvbmZpZykge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIG9mZnNldDogREVGQVVMVF9PRkZTRVQsXG4gICAgdGhyZXNob2xkOiBERUZBVUxUX1RIUkVTSE9MRCxcbiAgICBnYXA6IERFRkFVTFRfR0FQXG4gIH07XG4gIGlmIChjb25maWcgJiYgX3R5cGVvZihjb25maWcpID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBfY29uZmlnJG9mZnNldCwgX2NvbmZpZyR0aHJlc2hvbGQsIF9jb25maWckZ2FwO1xuICAgIHJlc3VsdC5vZmZzZXQgPSAoX2NvbmZpZyRvZmZzZXQgPSBjb25maWcub2Zmc2V0KSAhPT0gbnVsbCAmJiBfY29uZmlnJG9mZnNldCAhPT0gdm9pZCAwID8gX2NvbmZpZyRvZmZzZXQgOiBERUZBVUxUX09GRlNFVDtcbiAgICByZXN1bHQudGhyZXNob2xkID0gKF9jb25maWckdGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZCkgIT09IG51bGwgJiYgX2NvbmZpZyR0aHJlc2hvbGQgIT09IHZvaWQgMCA/IF9jb25maWckdGhyZXNob2xkIDogREVGQVVMVF9USFJFU0hPTEQ7XG4gICAgcmVzdWx0LmdhcCA9IChfY29uZmlnJGdhcCA9IGNvbmZpZy5nYXApICE9PSBudWxsICYmIF9jb25maWckZ2FwICE9PSB2b2lkIDAgPyBfY29uZmlnJGdhcCA6IERFRkFVTFRfR0FQO1xuICB9XG4gIHJldHVybiBbISFjb25maWcsIHJlc3VsdF07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlU3RhY2s7IiwiaW1wb3J0IHVzZU5vdGlmaWNhdGlvbiBmcm9tIFwiLi9ob29rcy91c2VOb3RpZmljYXRpb25cIjtcbmltcG9ydCBOb3RpY2UgZnJvbSBcIi4vTm90aWNlXCI7XG5pbXBvcnQgTm90aWZpY2F0aW9uUHJvdmlkZXIgZnJvbSBcIi4vTm90aWZpY2F0aW9uUHJvdmlkZXJcIjtcbmV4cG9ydCB7IHVzZU5vdGlmaWNhdGlvbiwgTm90aWNlLCBOb3RpZmljYXRpb25Qcm92aWRlciB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==