|  |  | "use strict";
 | 
						
						
						
							|  |  | /*
 | 
						
						
						
							|  |  |  * ATTENTION: An "eval-source-map" devtool has been used.
 | 
						
						
						
							|  |  |  * This devtool is neither made for production nor for readable output files.
 | 
						
						
						
							|  |  |  * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 | 
						
						
						
							|  |  |  * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 | 
						
						
						
							|  |  |  * or disable the default devtool with "devtool: false".
 | 
						
						
						
							|  |  |  * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 | 
						
						
						
							|  |  |  */
 | 
						
						
						
							|  |  | exports.id = "vendor-chunks/js-yaml";
 | 
						
						
						
							|  |  | exports.ids = ["vendor-chunks/js-yaml"];
 | 
						
						
						
							|  |  | exports.modules = {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/index.js":
 | 
						
						
						
							|  |  | /*!***************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/index.js ***!
 | 
						
						
						
							|  |  |   \***************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar loader = __webpack_require__(/*! ./lib/loader */ \"(ssr)/./node_modules/js-yaml/lib/loader.js\");\nvar dumper = __webpack_require__(/*! ./lib/dumper */ \"(ssr)/./node_modules/js-yaml/lib/dumper.js\");\nfunction renamed(from, to) {\n    return function() {\n        throw new Error(\"Function yaml.\" + from + \" is removed in js-yaml 4. \" + \"Use yaml.\" + to + \" instead, which is now safe by default.\");\n    };\n}\nmodule.exports.Type = __webpack_require__(/*! ./lib/type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nmodule.exports.Schema = __webpack_require__(/*! ./lib/schema */ \"(ssr)/./node_modules/js-yaml/lib/schema.js\");\nmodule.exports.FAILSAFE_SCHEMA = __webpack_require__(/*! ./lib/schema/failsafe */ \"(ssr)/./node_modules/js-yaml/lib/schema/failsafe.js\");\nmodule.exports.JSON_SCHEMA = __webpack_require__(/*! ./lib/schema/json */ \"(ssr)/./node_modules/js-yaml/lib/schema/json.js\");\nmodule.exports.CORE_SCHEMA = __webpack_require__(/*! ./lib/schema/core */ \"(ssr)/./node_modules/js-yaml/lib/schema/core.js\");\nmodule.exports.DEFAULT_SCHEMA = __webpack_require__(/*! ./lib/schema/default */ \"(ssr)/./node_modules/js-yaml/lib/schema/default.js\");\nmodule.exports.load = loader.load;\nmodule.exports.loadAll = loader.loadAll;\nmodule.exports.dump = dumper.dump;\nmodule.exports.YAMLException = __webpack_require__(/*! ./lib/exception */ \"(ssr)/./node_modules/js-yaml/lib/exception.js\");\n// Re-export all types in case user wants to create custom schema\nmodule.exports.types = {\n    binary: __webpack_require__(/*! ./lib/type/binary */ \"(ssr)/./node_modules/js-yaml/lib/type/binary.js\"),\n    float: __webpack_require__(/*! ./lib/type/float */ \"(ssr)/./node_modules/js-yaml/lib/type/float.js\"),\n    map: __webpack_require__(/*! ./lib/type/map */ \"(ssr)/./node_modules/js-yaml/lib/type/map.js\"),\n    null: __webpack_require__(/*! ./lib/type/null */ \"(ssr)/./node_modules/js-yaml/lib/type/null.js\"),\n    pairs: __webpack_require__(/*! ./lib/type/pairs */ \"(ssr)/./node_modules/js-yaml/lib/type/pairs.js\"),\n    set: __webpack_require__(/*! ./lib/type/set */ \"(ssr)/./node_modules/js-yaml/lib/type/set.js\"),\n    timestamp: __webpack_require__(/*! ./lib/type/timestamp */ \"(ssr)/./node_modules/js-yaml/lib/type/timestamp.js\"),\n    bool: __webpack_require__(/*! ./lib/type/bool */ \"(ssr)/./node_modules/js-yaml/lib/type/bool.js\"),\n    int: __webpack_require__(/*! ./lib/type/int */ \"(ssr)/./node_modules/js-yaml/lib/type/int.js\"),\n    merge: __webpack_require__(/*! ./lib/type/merge */ \"(ssr)/./node_modules/js-yaml/lib/type/merge.js\"),\n    omap: __webpack_require__(/*! ./lib/type/omap */ \"(ssr)/./node_modules/js-yaml/lib/type/omap.js\"),\n    seq: __webpack_require__(/*! ./lib/type/seq */ \"(ssr)/./node_modules/js-yaml/lib/type/seq.js\"),\n    str: __webpack_require__(/*! ./lib/type/str */ \"(ssr)/./node_modules/js-yaml/lib/type/str.js\")\n};\n// Removed functions from JS-YAML 3.0.x\nmodule.exports.safeLoad = renamed(\"safeLoad\", \"load\");\nmodule.exports.safeLoadAll = renamed(\"safeLoadAll\", \"loadAll\");\nmodule.exports.safeDump = renamed(\"safeDump\", \"dump\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUdBLElBQUlBLFNBQVNDLG1CQUFPQSxDQUFDO0FBQ3JCLElBQUlDLFNBQVNELG1CQUFPQSxDQUFDO0FBR3JCLFNBQVNFLFFBQVFDLElBQUksRUFBRUMsRUFBRTtJQUN2QixPQUFPO1FBQ0wsTUFBTSxJQUFJQyxNQUFNLG1CQUFtQkYsT0FBTywrQkFDeEMsY0FBY0MsS0FBSztJQUN2QjtBQUNGO0FBR0FFLHVHQUE2QztBQUM3Q0EsNkdBQTZDO0FBQzdDQSx3SUFBNkM7QUFDN0NBLDRIQUE2QztBQUM3Q0EsNEhBQTZDO0FBQzdDQSxxSUFBNkM7QUFDN0NBLG1CQUFtQixHQUFrQlAsT0FBT2UsSUFBSTtBQUNoRFIsc0JBQXNCLEdBQWVQLE9BQU9nQixPQUFPO0FBQ25EVCxtQkFBbUIsR0FBa0JMLE9BQU9lLElBQUk7QUFDaERWLDBIQUE2QztBQUU3QyxpRUFBaUU7QUFDakVBLG9CQUFvQixHQUFHO0lBQ3JCYSxRQUFXbkIsbUJBQU9BLENBQUM7SUFDbkJvQixPQUFXcEIsbUJBQU9BLENBQUM7SUFDbkJxQixLQUFXckIsbUJBQU9BLENBQUM7SUFDbkJzQixNQUFXdEIsbUJBQU9BLENBQUM7SUFDbkJ1QixPQUFXdkIsbUJBQU9BLENBQUM7SUFDbkJ3QixLQUFXeEIsbUJBQU9BLENBQUM7SUFDbkJ5QixXQUFXekIsbUJBQU9BLENBQUM7SUFDbkIwQixNQUFXMUIsbUJBQU9BLENBQUM7SUFDbkIyQixLQUFXM0IsbUJBQU9BLENBQUM7SUFDbkI0QixPQUFXNUIsbUJBQU9BLENBQUM7SUFDbkI2QixNQUFXN0IsbUJBQU9BLENBQUM7SUFDbkI4QixLQUFXOUIsbUJBQU9BLENBQUM7SUFDbkIrQixLQUFXL0IsbUJBQU9BLENBQUM7QUFDckI7QUFFQSx1Q0FBdUM7QUFDdkNNLHVCQUF1QixHQUFjSixRQUFRLFlBQVk7QUFDekRJLDBCQUEwQixHQUFXSixRQUFRLGVBQWU7QUFDNURJLHVCQUF1QixHQUFjSixRQUFRLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2luZGV4LmpzPzg0NTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBsb2FkZXIgPSByZXF1aXJlKCcuL2xpYi9sb2FkZXInKTtcbnZhciBkdW1wZXIgPSByZXF1aXJlKCcuL2xpYi9kdW1wZXInKTtcblxuXG5mdW5jdGlvbiByZW5hbWVkKGZyb20sIHRvKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiB5YW1sLicgKyBmcm9tICsgJyBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gJyArXG4gICAgICAnVXNlIHlhbWwuJyArIHRvICsgJyBpbnN0ZWFkLCB3aGljaCBpcyBub3cgc2FmZSBieSBkZWZhdWx0LicpO1xuICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLlR5cGUgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2xpYi90eXBlJyk7XG5tb2R1bGUuZXhwb3J0cy5TY2hlbWEgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9saWIvc2NoZW1hJyk7XG5tb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgICAgID0gcmVxdWlyZSgnLi9saWIvc2NoZW1hL2ZhaWxzYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5KU09OX1NDSEVNQSAgICAgICAgID0gcmVxdWlyZSgnLi9saWIvc2NoZW1hL2pzb24nKTtcbm1vZHVsZS5leHBvcnRzLkNPUkVfU0NIRU1BICAgICAgICAgPSByZXF1aXJlKCcuL2xpYi9zY2hlbWEvY29yZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUEgICAgICA9IHJlcXVpcmUoJy4vbGliL3NjaGVtYS9kZWZhdWx0Jyk7XG5tb2R1bGUuZXhwb3J0cy5sb2FkICAgICAgICAgICAgICAgID0gbG9hZGVyLmxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5sb2FkQWxsICAgICAgICAgICAgID0gbG9hZGVyLmxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5kdW1wICAgICAgICAgICAgICAgID0gZHVtcGVyLmR1bXA7XG5tb2R1bGUuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9saWIvZXhjZXB0aW9uJyk7XG5cbi8vIFJlLWV4cG9ydCBhbGwgdHlwZXMgaW4gY2FzZSB1c2VyIHdhbnRzIHRvIGNyZWF0ZSBjdXN0b20gc2NoZW1hXG5tb2R1bGUuZXhwb3J0cy50eXBlcyA9IHtcbiAgYmluYXJ5OiAgICByZXF1aXJlKCcuL2xpYi90eXBlL2JpbmFyeScpLFxuICBmbG9hdDogICAgIHJlcXVpcmUoJy4vbGliL3R5cGUvZmxvYXQnKSxcbiAgbWFwOiAgICAgICByZXF1aXJlKCcuL2xpYi90eXBlL21hcCcpLFxuICBudWxsOiAgICAgIHJlcXVpcmUoJy4vbGliL3R5cGUvbnVsbCcpLFxuICBwYWlyczogICAgIHJlcXVpcmUoJy4vbGliL3R5cGUvcGFpcnMnKSxcbiAgc2V0OiAgICAgICByZXF1aXJlKCcuL2xpYi90eXBlL3NldCcpLFxuICB0aW1lc3RhbXA6IHJlcXVpcmUoJy4vbGliL3R5cGUvdGltZXN0YW1wJyksXG4gIGJvb2w6ICAgICAgcmVxdWlyZSgnLi9saWIvdHlwZS9ib29sJyksXG4gIGludDogICAgICAgcmVxdWlyZSgnLi9saWIvdHlwZS9pbnQnKSxcbiAgbWVyZ2U6ICAgICByZXF1aXJlKCcuL2xpYi90eXBlL21lcmdlJyksXG4gIG9tYXA6ICAgICAgcmVxdWlyZSgnLi9saWIvdHlwZS9vbWFwJyksXG4gIHNlcTogICAgICAgcmVxdWlyZSgnLi9saWIvdHlwZS9zZXEnKSxcbiAgc3RyOiAgICAgICByZXF1aXJlKCcuL2xpYi90eXBlL3N0cicpXG59O1xuXG4vLyBSZW1vdmVkIGZ1bmN0aW9ucyBmcm9tIEpTLVlBTUwgMy4wLnhcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkICAgICAgICAgICAgPSByZW5hbWVkKCdzYWZlTG9hZCcsICdsb2FkJyk7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCAgICAgICAgID0gcmVuYW1lZCgnc2FmZUxvYWRBbGwnLCAnbG9hZEFsbCcpO1xubW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgICAgICAgICAgICA9IHJlbmFtZWQoJ3NhZmVEdW1wJywgJ2R1bXAnKTtcbiJdLCJuYW1lcyI6WyJsb2FkZXIiLCJyZXF1aXJlIiwiZHVtcGVyIiwicmVuYW1lZCIsImZyb20iLCJ0byIsIkVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsIlR5cGUiLCJTY2hlbWEiLCJGQUlMU0FGRV9TQ0hFTUEiLCJKU09OX1NDSEVNQSIsIkNPUkVfU0NIRU1BIiwiREVGQVVMVF9TQ0hFTUEiLCJsb2FkIiwibG9hZEFsbCIsImR1bXAiLCJZQU1MRXhjZXB0aW9uIiwidHlwZXMiLCJiaW5hcnkiLCJmbG9hdCIsIm1hcCIsIm51bGwiLCJwYWlycyIsInNldCIsInRpbWVzdGFtcCIsImJvb2wiLCJpbnQiLCJtZXJnZSIsIm9tYXAiLCJzZXEiLCJzdHIiLCJzYWZlTG9hZCIsInNhZmVMb2FkQWxsIiwic2FmZUR1bXAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/index.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/common.js":
 | 
						
						
						
							|  |  | /*!********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/common.js ***!
 | 
						
						
						
							|  |  |   \********************************************/
 | 
						
						
						
							|  |  | /***/ ((module) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nfunction isNothing(subject) {\n    return typeof subject === \"undefined\" || subject === null;\n}\nfunction isObject(subject) {\n    return typeof subject === \"object\" && subject !== null;\n}\nfunction toArray(sequence) {\n    if (Array.isArray(sequence)) return sequence;\n    else if (isNothing(sequence)) return [];\n    return [\n        sequence\n    ];\n}\nfunction extend(target, source) {\n    var index, length, key, sourceKeys;\n    if (source) {\n        sourceKeys = Object.keys(source);\n        for(index = 0, length = sourceKeys.length; index < length; index += 1){\n            key = sourceKeys[index];\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\nfunction repeat(string, count) {\n    var result = \"\", cycle;\n    for(cycle = 0; cycle < count; cycle += 1){\n        result += string;\n    }\n    return result;\n}\nfunction isNegativeZero(number) {\n    return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvY29tbW9uLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBR0EsU0FBU0EsVUFBVUMsT0FBTztJQUN4QixPQUFPLE9BQVFBLFlBQVksZUFBaUJBLFlBQVk7QUFDMUQ7QUFHQSxTQUFTQyxTQUFTRCxPQUFPO0lBQ3ZCLE9BQU8sT0FBUUEsWUFBWSxZQUFjQSxZQUFZO0FBQ3ZEO0FBR0EsU0FBU0UsUUFBUUMsUUFBUTtJQUN2QixJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFdBQVcsT0FBT0E7U0FDL0IsSUFBSUosVUFBVUksV0FBVyxPQUFPLEVBQUU7SUFFdkMsT0FBTztRQUFFQTtLQUFVO0FBQ3JCO0FBR0EsU0FBU0csT0FBT0MsTUFBTSxFQUFFQyxNQUFNO0lBQzVCLElBQUlDLE9BQU9DLFFBQVFDLEtBQUtDO0lBRXhCLElBQUlKLFFBQVE7UUFDVkksYUFBYUMsT0FBT0MsSUFBSSxDQUFDTjtRQUV6QixJQUFLQyxRQUFRLEdBQUdDLFNBQVNFLFdBQVdGLE1BQU0sRUFBRUQsUUFBUUMsUUFBUUQsU0FBUyxFQUFHO1lBQ3RFRSxNQUFNQyxVQUFVLENBQUNILE1BQU07WUFDdkJGLE1BQU0sQ0FBQ0ksSUFBSSxHQUFHSCxNQUFNLENBQUNHLElBQUk7UUFDM0I7SUFDRjtJQUVBLE9BQU9KO0FBQ1Q7QUFHQSxTQUFTUSxPQUFPQyxNQUFNLEVBQUVDLEtBQUs7SUFDM0IsSUFBSUMsU0FBUyxJQUFJQztJQUVqQixJQUFLQSxRQUFRLEdBQUdBLFFBQVFGLE9BQU9FLFNBQVMsRUFBRztRQUN6Q0QsVUFBVUY7SUFDWjtJQUVBLE9BQU9FO0FBQ1Q7QUFHQSxTQUFTRSxlQUFlQyxNQUFNO0lBQzVCLE9BQU8sV0FBWSxLQUFPQyxPQUFPQyxpQkFBaUIsS0FBSyxJQUFJRjtBQUM3RDtBQUdBRyx3QkFBd0IsR0FBUXpCO0FBQ2hDeUIsdUJBQXVCLEdBQVN2QjtBQUNoQ3VCLHNCQUFzQixHQUFVdEI7QUFDaENzQixxQkFBcUIsR0FBV1Q7QUFDaENTLDZCQUE2QixHQUFHSjtBQUNoQ0kscUJBQXFCLEdBQVdsQiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2NvbW1vbi5qcz9lNWY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBzdWJqZWN0ID09PSAndW5kZWZpbmVkJykgfHwgKHN1YmplY3QgPT09IG51bGwpO1xufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ29iamVjdCcpICYmIChzdWJqZWN0ICE9PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlO1xuICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFsgc2VxdWVuY2UgXTtcbn1cblxuXG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIGtleSwgc291cmNlS2V5cztcblxuICBpZiAoc291cmNlKSB7XG4gICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gJycsIGN5Y2xlO1xuXG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyKSB7XG4gIHJldHVybiAobnVtYmVyID09PSAwKSAmJiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5pc05vdGhpbmcgICAgICA9IGlzTm90aGluZztcbm1vZHVsZS5leHBvcnRzLmlzT2JqZWN0ICAgICAgID0gaXNPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cy50b0FycmF5ICAgICAgICA9IHRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0cy5yZXBlYXQgICAgICAgICA9IHJlcGVhdDtcbm1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmVaZXJvID0gaXNOZWdhdGl2ZVplcm87XG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgICAgICAgICA9IGV4dGVuZDtcbiJdLCJuYW1lcyI6WyJpc05vdGhpbmciLCJzdWJqZWN0IiwiaXNPYmplY3QiLCJ0b0FycmF5Iiwic2VxdWVuY2UiLCJBcnJheSIsImlzQXJyYXkiLCJleHRlbmQiLCJ0YXJnZXQiLCJzb3VyY2UiLCJpbmRleCIsImxlbmd0aCIsImtleSIsInNvdXJjZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicmVwZWF0Iiwic3RyaW5nIiwiY291bnQiLCJyZXN1bHQiLCJjeWNsZSIsImlzTmVnYXRpdmVaZXJvIiwibnVtYmVyIiwiTnVtYmVyIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/common.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/dumper.js":
 | 
						
						
						
							|  |  | /*!********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/dumper.js ***!
 | 
						
						
						
							|  |  |   \********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\n/*eslint-disable no-use-before-define*/ var common = __webpack_require__(/*! ./common */ \"(ssr)/./node_modules/js-yaml/lib/common.js\");\nvar YAMLException = __webpack_require__(/*! ./exception */ \"(ssr)/./node_modules/js-yaml/lib/exception.js\");\nvar DEFAULT_SCHEMA = __webpack_require__(/*! ./schema/default */ \"(ssr)/./node_modules/js-yaml/lib/schema/default.js\");\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */ \nvar CHAR_LINE_FEED = 0x0A; /* LF */ \nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ \nvar CHAR_SPACE = 0x20; /* Space */ \nvar CHAR_EXCLAMATION = 0x21; /* ! */ \nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */ \nvar CHAR_SHARP = 0x23; /* # */ \nvar CHAR_PERCENT = 0x25; /* % */ \nvar CHAR_AMPERSAND = 0x26; /* & */ \nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */ \nvar CHAR_ASTERISK = 0x2A; /* * */ \nvar CHAR_COMMA = 0x2C; /* , */ \nvar CHAR_MINUS = 0x2D; /* - */ \nvar CHAR_COLON = 0x3A; /* : */ \nvar CHAR_EQUALS = 0x3D; /* = */ \nvar CHAR_GREATER_THAN = 0x3E; /* > */ \nvar CHAR_QUESTION = 0x3F; /* ? */ \nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */ \nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ \nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ \nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */ \nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ \nvar CHAR_VERTICAL_LINE = 0x7C; /* | */ \nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ \nvar ESCAPE_SEQUENCES = {};\nESCAPE_SEQUENCES[0x00] = \"\\\\0\";\nESCAPE_SEQUENCES[0x07] = \"\\\\a\";\nESCAPE_SEQUENCES[0x08] = \"\\\\b\";\nESCAPE_SEQUENCES[0x09] = \"\\\\t\";\nESCAPE_SEQUENCES[0x0A] = \"\\\\n\";\nESCAPE_SEQUENCES[0x0B] = \"\\\\v\";\nESCAPE_SEQUENCES[0x0C] = \"\\\\f\";\nESCAPE_SEQUENCES[0x0D] = \"\\\\r\";\nESCAPE_SEQUENCES[0x1B] = \"\\\\e\";\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = \"\\\\\\\\\";\nESCAPE_SEQUENCES[0x85] = \"\\\\N\";\nESCAPE_SEQUENCES[0xA0] = \"\\\\_\";\nESCAPE_SEQUENCES[0x2028] = \"\\\\L\";\nESCAPE_SEQUENCES[0x2029] = \"\\\\P\";\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n    \"y\",\n    \"Y\",\n    \"yes\",\n    \"Yes\",\n    \"YES\",\n    \"on\",\n    \"On\",\n    \"ON\",\n    \"n\",\n    \"N\",\n    \"no\",\n    \"No\",\n    \"NO\",\n    \"off\",\n    \"Off\",\n    \"OFF\"\n];\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\nfunction compileStyleMap(schema, map) {\n    var result, keys, index, length, tag, style, type;\n    if (map === null) return {};\n    result = {};\n    keys = Object.keys(map);\n    for(index = 0, length = keys.length; index < length; index += 1){\n        tag = keys[index];\n        style = String(map[tag]);\n        if (tag.slice(0, 2) === \"!!\") {\n            tag = \"tag:yaml.org,2002:\" + tag.slice(2);\n        }\n        type = schema.compiledTypeMap[\"fallback\"][tag];\n        if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n            style = type.styleAliases[style];\n        }\n        result[tag] = style;\n    }\n    return result;\n}\nfunction encodeHex(character) {\n    var string, handle, length;\n    string = character.toString(16).toUpperCase();\n    if (character <= 0xFF) {\n        handle = \"x\";\n        length = 2;\n    } else if (character <= 0xFFFF) {\n        handle = \"u\";\n        length = 4;\n    } else if (character <= 0xFFFFFFFF) {\n        handle = \"U\";\n        length = 8;\n    } else {\n        throw new YAMLException(\"code point within a string may not be greater than 0xFFFFFFFF\");\n    }\n    return \"\\\\\" + handle + common.repeat(\"0\", length - string.length) + string;\n}\nvar QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2;\nfunction State(options) {\n    this.schema = options[\"schema\"] || DEFAULT_SCHEMA;\n    this.indent = Math.max(1, options[\"indent\"] || 2);\n    this.noArrayIndent = options[\"noArrayIndent\"] || false;\n    this.skipInvalid = options[\"skipInvalid\"] || false;\n    this.flowLevel = common.isNothing(options[\"flowLevel\"]) ? -1 : options[\"flowLevel\"];\n    this.styleMap = compileStyleMap(this.schema, options[\"styles\"] || null);\n    this.sortKeys = options[\"sortKeys\"] || false;\n    this.lineWidth = options[\"lineWidth\"] || 80;\n    this.noRefs = options[\"noRefs\"] || false;\n    this.noCompatMode = options[\"noCompatMode\"] || false;\n    this.condenseFlow = options[\"condenseFlow\"] || false;\n    this.quotingType = options[\"quotingType\"] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n    this.forceQuotes = options[\"forceQuotes\"] || false;\n    this.replacer = typeof options[\"replacer\"] === \"function\" ? options[\"replacer\"] : null;\n    this.implicitTypes = this.schema.compiledImplicit;\n    this.explicitTypes = this.schema.compiledExplicit;\n    this.tag = null;\n    this.result = \"\";\n    this.duplicates = [];\n    this.usedDuplicates = null;\n}\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n    var ind = common.repeat(\" \", spaces), position = 0, next = -1, result = \"\", line, length = string.length;\n    while(position < length){\n        next = string.indexOf(\"\\n\", position);\n        if (next === -1) {\n            line = string.slice(position);\n            position = length;\n        } else {\n            line = string.slice(position, next + 1);\n            position = next + 1;\n        }\n        if (line.length && line !== \"\\n\") result += ind;\n        result += line;\n    }\n    return result;\n}\nfunction generateNextLine(state, level) {\n    return \"\\n\" + common.repeat(\" \", state.indent * level);\n}\nfunction testImplicitResolving(state, str) {\n    var index, length, type;\n    for(index = 0, length = state.implicitTypes.length; index < length; index += 1){\n        type = state.implicitTypes[index];\n        if (type.resolve(str)) {\n            return true;\n        }\n    }\n    return false;\n}\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n    return c === CHAR_SPACE || c === CHAR_TAB;\n}\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n    return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== CHAR_BOM || 0x10000 <= c && c <= 0x10FFFF;\n}\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char  ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n    return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;\n}\n// [127]  ns-plain-safe(c) ::= c = flow-out  ⇒ ns-plain-safe-out\n//                             c = flow-in   ⇒ ns-plain-safe-in\n//                             c = block-key ⇒ ns-plain-safe-out\n//                             c = flow-key  ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129]  ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130]  ns-plain-char(c) ::=  ( ns-plain-safe(c) - “:” - “#” )\n//                            | ( /* An ns-char preceding */ “#” )\n//                            | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n    var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n    var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n    return(// ns-plain-safe\n    (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP // false on '#'\n     && !(prev === CHAR_COLON && !cIsNsChar // false on ': '\n    ) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP // change to true on '[^ ]#'\n     || prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n    // Uses a subset of ns-char - c-indicator\n    // where ns-char = nb-char - s-white.\n    // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n    return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) // - s-white\n     && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;\n}\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n    // just not whitespace or colon, it will be checked to be plain character later\n    return !isWhitespace(c) && c !== CHAR_COLON;\n}\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n    var first = string.charCodeAt(pos), second;\n    if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n        second = string.charCodeAt(pos + 1);\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n            // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n    }\n    return first;\n}\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n    var leadingSpaceRe = /^\\n* /;\n    return leadingSpaceRe.test(string);\n}\nvar STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5;\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n//    STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n//    STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n//    STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {\n    var i;\n    var char = 0;\n    var prevChar = null;\n    var hasLineBreak = false;\n    var hasFoldableLine = false; // only checked if shouldTrackWidth\n    var shouldTrackWidth = lineWidth !== -1;\n    var previousLineBreak = -1; // count the first line correctly\n    var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));\n    if (singleLineOnly || forceQuotes) {\n        // Case: no block styles.\n        // Check for disallowed characters to rule out plain and single.\n        for(i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n            char = codePointAt(string, i);\n            if (!isPrintable(char)) {\n                return STYLE_DOUBLE;\n            }\n            plain = plain && isPlainSafe(char, prevChar, inblock);\n            prevChar = char;\n        }\n    } else {\n        // Case: block styles permitted.\n        for(i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n            char = codePointAt(string, i);\n            if (char === CHAR_LINE_FEED) {\n                hasLineBreak = true;\n                // Check if any line can be folded.\n                if (shouldTrackWidth) {\n                    hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.\n                    i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n                    previousLineBreak = i;\n                }\n            } else if (!isPrintable(char)) {\n                return STYLE_DOUBLE;\n            }\n            plain = plain && isPlainSafe(char, prevChar, inblock);\n            prevChar = char;\n        }\n        // in case the end is missing a \\n\n        hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n    }\n    // Although every style can represent \\n without escaping, prefer block styles\n    // for multiline, since they're more readable and they don't add empty lines.\n    // Also prefer folding a super-long line.\n    if (!hasLineBreak && !hasFoldableLine) {\n        // Strings interpretable as another type have to be quoted;\n        // e.g. the string 'true' vs. the boolean true.\n        if (plain && !forceQuotes && !testAmbiguousType(string)) {\n            return STYLE_PLAIN;\n        }\n        return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n    }\n    // Edge case: block indentation indicator can only have one digit.\n    if (indentPerLevel > 9 && needIndentIndicator(string)) {\n        return STYLE_DOUBLE;\n    }\n    // At this point we know block styles are valid.\n    // Prefer literal style unless we want to fold.\n    if (!forceQuotes) {\n        return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n    }\n    return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n//  since the dumper adds its own newline. This always works:\n//    • No ending newline => unaffected; already using strip \"-\" chomping.\n//    • Ending newline    => removed then restored.\n//  Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n    state.dump = function() {\n        if (string.length === 0) {\n            return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n        }\n        if (!state.noCompatMode) {\n            if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n                return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"' + string + '\"' : \"'\" + string + \"'\";\n            }\n        }\n        var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n        // As indentation gets deeper, let the width decrease monotonically\n        // to the lower bound min(state.lineWidth, 40).\n        // Note that this implies\n        //  state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n        //  state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n        // This behaves better than a constant minimum width which disallows narrower options,\n        // or an indent threshold which causes the width to suddenly increase.\n        var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n        // Without knowing if keys are implicit/explicit, assume implicit for safety.\n        var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;\n        function testAmbiguity(string) {\n            return testImplicitResolving(state, string);\n        }\n        switch(chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)){\n            case STYLE_PLAIN:\n                return string;\n            case STYLE_SINGLE:\n                return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n            case STYLE_LITERAL:\n                return \"|\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));\n            case STYLE_FOLDED:\n                return \">\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n            case STYLE_DOUBLE:\n                return '\"' + escapeString(string, lineWidth) + '\"';\n            default:\n                throw new YAMLException(\"impossible error: invalid scalar style\");\n        }\n    }();\n}\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n    var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : \"\";\n    // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n    var clip = string[string.length - 1] === \"\\n\";\n    var keep = clip && (string[string.length - 2] === \"\\n\" || string === \"\\n\");\n    var chomp = keep ? \"+\" : clip ? \"\" : \"-\";\n    return indentIndicator + chomp + \"\\n\";\n}\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n    return string[string.length - 1] === \"\\n\" ? string.slice(0, -1) : string;\n}\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n    // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n    // unless they're before or after a more-indented line, or at the very\n    // beginning or end, in which case $k$ maps to $k$.\n    // Therefore, parse each chunk as newline(s) followed by a content line.\n    var lineRe = /(\\n+)([^\\n]*)/g;\n    // first line (possibly an empty line)\n    var result = function() {\n        var nextLF = string.indexOf(\"\\n\");\n        nextLF = nextLF !== -1 ? nextLF : string.length;\n        lineRe.lastIndex = nextLF;\n        return foldLine(string.slice(0, nextLF), width);\n    }();\n    // If we haven't reached the first content line yet, don't add an extra \\n.\n    var prevMoreIndented = string[0] === \"\\n\" || string[0] === \" \";\n    var moreIndented;\n    // rest of the lines\n    var match;\n    while(match = lineRe.exec(string)){\n        var prefix = match[1], line = match[2];\n        moreIndented = line[0] === \" \";\n        result += prefix + (!prevMoreIndented && !moreIndented && line !== \"\" ? \"\\n\" : \"\") + foldLine(line, width);\n        prevMoreIndented = moreIndented;\n    }\n    return result;\n}\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n    if (line === \"\" || line[0] === \" \") return line;\n    // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n    var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n    var match;\n    // start is an inclusive index. end, curr, and next are exclusive.\n    var start = 0, end, curr = 0, next = 0;\n    var result = \"\";\n    // Invariants: 0 <= start <= length-1.\n    //   0 <= curr <= next <= max(0, length-2). curr - start <= width.\n    // Inside the loop:\n    //   A match implies length >= 2, so curr and next are <= length-2.\n    while(match = breakRe.exec(line)){\n        next = match.index;\n        // maintain invariant: curr - start <= width\n        if (next - start > width) {\n            end = curr > start ? curr : next; // derive end <= length-2\n            result += \"\\n\" + line.slice(start, end);\n            // skip the space that was output as \\n\n            start = end + 1; // derive start <= length-1\n        }\n        curr = next;\n    }\n    // By the invariants, start <= length-1, so there is something left over.\n    // It is either the whole string or a part starting from non-whitespace.\n    result += \"\\n\";\n    // Insert a break if the remainder is too long and there is a break available.\n    if (line.length - start > width && curr > start) {\n        result += line.slice(start, curr) + \"\\n\" + line.slice(curr + 1);\n    } else {\n        result += line.slice(start);\n    }\n    return result.slice(1); // drop extra \\n joiner\n}\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n    var result = \"\";\n    var char = 0;\n    var escapeSeq;\n    for(var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n        char = codePointAt(string, i);\n        escapeSeq = ESCAPE_SEQUENCES[char];\n        if (!escapeSeq && isPrintable(char)) {\n            result += string[i];\n            if (char >= 0x10000) result += string[i + 1];\n        } else {\n            result += escapeSeq || encodeHex(char);\n        }\n    }\n    return result;\n}\nfunction writeFlowSequence(state, level, object) {\n    var _result = \"\", _tag = state.tag, index, length, value;\n    for(index = 0, length = object.length; index < length; index += 1){\n        value = object[index];\n        if (state.replacer) {\n            value = state.replacer.call(object, String(index), value);\n        }\n        // Write only valid elements, put null instead of invalid elements.\n        if (writeNode(state, level, value, false, false) || typeof value === \"undefined\" && writeNode(state, level, null, false, false)) {\n            if (_result !== \"\") _result += \",\" + (!state.condenseFlow ? \" \" : \"\");\n            _result += state.dump;\n        }\n    }\n    state.tag = _tag;\n    state.dump = \"[\" + _result + \"]\";\n}\nfunction writeBlockSequence(state, level, object, compact) {\n    var _result = \"\", _tag = state.tag, index, length, value;\n    for(index = 0, length = object.length; index < length; index += 1){\n        value = object[index];\n        if (state.replacer) {\n            value = state.replacer.call(object, String(index), value);\n        }\n        // Write only valid elements, put null instead of invalid elements.\n        if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === \"undefined\" && writeNode(state, level + 1, null, true, true, false, true)) {\n            if (!compact || _result !== \"\") {\n                _result += generateNextLine(state, level);\n            }\n            if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n                _result += \"-\";\n            } else {\n                _result += \"- \";\n            }\n            _result += state.dump;\n        }\n    }\n    state.tag = _tag;\n    state.dump = _result || \"[]\"; // Empty sequence if no valid values.\n}\nfunction writeFlowMapping(state, level, object) {\n    var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;\n    for(index = 0, length = objectKeyList.length; index < length; index += 1){\n        pairBuffer = \"\";\n        if (_result !== \"\") pairBuffer += \", \";\n        if (state.condenseFlow) pairBuffer += '\"';\n        objectKey = objectKeyList[index];\n        objectValue = object[objectKey];\n        if (state.replacer) {\n            objectValue = state.replacer.call(object, objectKey, objectValue);\n        }\n        if (!writeNode(state, level, objectKey, false, false)) {\n            continue; // Skip this pair because of invalid key;\n        }\n        if (state.dump.length > 1024) pairBuffer += \"? \";\n        pairBuffer += state.dump + (state.condenseFlow ? '\"' : \"\") + \":\" + (state.condenseFlow ? \"\" : \" \");\n        if (!writeNode(state, level, objectValue, false, false)) {\n            continue; // Skip this pair because of invalid value.\n        }\n        pairBuffer += state.dump;\n        // Both key and value are valid.\n        _result += pairBuffer;\n    }\n    state.tag = _tag;\n    state.dump = \"{\" + _result + \"}\";\n}\nfunction writeBlockMapping(state, level, object, compact) {\n    var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;\n    // Allow sorting keys so that the output file is deterministic\n    if (state.sortKeys === true) {\n        // Default sorting\n        objectKeyList.sort();\n    } else if (typeof state.sortKeys === \"function\") {\n        // Custom sort function\n        objectKeyList.sort(state.sortKeys);\n    } else if (state.sortKeys) {\n        // Something is wrong\n        throw new YAMLException(\"sortKeys must be a boolean or a function\");\n    }\n    for(index = 0, length = objectKeyList.length; index < length; index += 1){\n        pairBuffer = \"\";\n        if (!compact || _result !== \"\") {\n            pairBuffer += generateNextLine(state, level);\n        }\n        objectKey = objectKeyList[index];\n        objectValue = object[objectKey];\n        if (state.replacer) {\n            objectValue = state.replacer.call(object, objectKey, objectValue);\n        }\n        if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n            continue; // Skip this pair because of invalid key.\n        }\n        explicitPair = state.tag !== null && state.tag !== \"?\" || state.dump && state.dump.length > 1024;\n        if (explicitPair) {\n            if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n                pairBuffer += \"?\";\n            } else {\n                pairBuffer += \"? \";\n            }\n        }\n        pairBuffer += state.dump;\n        if (explicitPair) {\n            pairBuffer += generateNextLine(state, level);\n        }\n        if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n            continue; // Skip this pair because of invalid value.\n        }\n        if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n            pairBuffer += \":\";\n        } else {\n            pairBuffer += \": \";\n        }\n        pairBuffer += state.dump;\n        // Both key and value are valid.\n        _result += pairBuffer;\n    }\n    state.tag = _tag;\n    state.dump = _result || \"{}\"; // Empty mapping if no valid pairs.\n}\nfunction detectType(state, object, explicit) {\n    var _result, typeList, index, length, type, style;\n    typeList = explicit ? state.explicitTypes : state.implicitTypes;\n    for(index = 0, length = typeList.length; index < length; index += 1){\n        type = typeList[index];\n        if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === \"object\" && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {\n            if (explicit) {\n                if (type.multi && type.representName) {\n                    state.tag = type.representName(object);\n                } else {\n                    state.tag = type.tag;\n                }\n            } else {\n                state.tag = \"?\";\n            }\n            if (type.represent) {\n                style = state.styleMap[type.tag] || type.defaultStyle;\n                if (_toString.call(type.represent) === \"[object Function]\") {\n                    _result = type.represent(object, style);\n                } else if (_hasOwnProperty.call(type.represent, style)) {\n                    _result = type.represent[style](object, style);\n                } else {\n                    throw new YAMLException(\"!<\" + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n                }\n                state.dump = _result;\n            }\n            return true;\n        }\n    }\n    return false;\n}\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n    state.tag = null;\n    state.dump = object;\n    if (!detectType(state, object, false)) {\n        detectType(state, object, true);\n    }\n    var type = _toString.call(state.dump);\n    var inblock = block;\n    var tagStr;\n    if (block) {\n        block = state.flowLevel < 0 || state.flowLevel > level;\n    }\n    var objectOrArray = type === \"[object Object]\" || type === \"[object Array]\", duplicateIndex, duplicate;\n    if (objectOrArray) {\n        duplicateIndex = state.duplicates.indexOf(object);\n        duplicate = duplicateIndex !== -1;\n    }\n    if (state.tag !== null && state.tag !== \"?\" || duplicate || state.indent !== 2 && level > 0) {\n        compact = false;\n    }\n    if (duplicate && state.usedDuplicates[duplicateIndex]) {\n        state.dump = \"*ref_\" + duplicateIndex;\n    } else {\n        if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n            state.usedDuplicates[duplicateIndex] = true;\n        }\n        if (type === \"[object Object]\") {\n            if (block && Object.keys(state.dump).length !== 0) {\n                writeBlockMapping(state, level, state.dump, compact);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + state.dump;\n                }\n            } else {\n                writeFlowMapping(state, level, state.dump);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n                }\n            }\n        } else if (type === \"[object Array]\") {\n            if (block && state.dump.length !== 0) {\n                if (state.noArrayIndent && !isblockseq && level > 0) {\n                    writeBlockSequence(state, level - 1, state.dump, compact);\n                } else {\n                    writeBlockSequence(state, level, state.dump, compact);\n                }\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + state.dump;\n                }\n            } else {\n                writeFlowSequence(state, level, state.dump);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n                }\n            }\n        } else if (type === \"[object String]\") {\n            if (state.tag !== \"?\") {\n                writeScalar(state, state.dump, level, iskey, inblock);\n            }\n        } else if (type === \"[object Undefined]\") {\n            return false;\n        } else {\n            if (state.skipInvalid) return false;\n            throw new YAMLException(\"unacceptable kind of an object to dump \" + type);\n        }\n        if (state.tag !== null && state.tag !== \"?\") {\n            // Need to encode all characters except those allowed by the spec:\n            //\n            // [35] ns-dec-digit    ::=  [#x30-#x39] /* 0-9 */\n            // [36] ns-hex-digit    ::=  ns-dec-digit\n            //                         | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n            // [37] ns-ascii-letter ::=  [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n            // [38] ns-word-char    ::=  ns-dec-digit | ns-ascii-letter | “-”\n            // [39] ns-uri-char     ::=  “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n            //                         | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n            //                         | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n            //\n            // Also need to encode '!' because it has special meaning (end of tag prefix).\n            //\n            tagStr = encodeURI(state.tag[0] === \"!\" ? state.tag.slice(1) : state.tag).replace(/!/g, \"%21\");\n            if (state.tag[0] === \"!\") {\n                tagStr = \"!\" + tagStr;\n            } else if (tagStr.slice(0, 18) === \"tag:yaml.org,2002:\") {\n                tagStr = \"!!\" + tagStr.slice(18);\n            } else {\n                tagStr = \"!<\" + tagStr + \">\";\n            }\n            state.dump = tagStr + \" \" + state.dump;\n        }\n    }\n    return true;\n}\nfunction getDuplicateReferences(object, state) {\n    var objects = [], duplicatesIndexes = [], index, length;\n    inspectNode(object, objects, duplicatesIndexes);\n    for(index = 0, length = duplicatesIndexes.length; index < length; index += 1){\n        state.duplicates.push(objects[duplicatesIndexes[index]]);\n    }\n    state.usedDuplicates = new Array(length);\n}\nfunction inspectNode(object, objects, duplicatesIndexes) {\n    var objectKeyList, index, length;\n    if (object !== null && typeof object === \"object\") {\n        index = objects.indexOf(object);\n        if (index !== -1) {\n            if (duplicatesIndexes.indexOf(index) === -1) {\n                duplicatesIndexes.push(index);\n            }\n        } else {\n            objects.push(object);\n            if (Array.isArray(object)) {\n                for(index = 0, length = object.length; index < length; index += 1){\n                    inspectNode(object[index], objects, duplicatesIndexes);\n                }\n            } else {\n                objectKeyList = Object.keys(object);\n                for(index = 0, length = objectKeyList.length; index < length; index += 1){\n                    inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n                }\n            }\n        }\n    }\n}\nfunction dump(input, options) {\n    options = options || {};\n    var state = new State(options);\n    if (!state.noRefs) getDuplicateReferences(input, state);\n    var value = input;\n    if (state.replacer) {\n        value = state.replacer.call({\n            \"\": value\n        }, \"\", value);\n    }\n    if (writeNode(state, 0, value, true, true)) return state.dump + \"\\n\";\n    return \"\";\n}\nmodule.exports.dump = dump;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvZHVtcGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEscUNBQXFDLEdBRXJDLElBQUlBLFNBQXNCQyxtQkFBT0EsQ0FBQztBQUNsQyxJQUFJQyxnQkFBc0JELG1CQUFPQSxDQUFDO0FBQ2xDLElBQUlFLGlCQUFzQkYsbUJBQU9BLENBQUM7QUFFbEMsSUFBSUcsWUFBa0JDLE9BQU9DLFNBQVMsQ0FBQ0MsUUFBUTtBQUMvQyxJQUFJQyxrQkFBa0JILE9BQU9DLFNBQVMsQ0FBQ0csY0FBYztBQUVyRCxJQUFJQyxXQUE0QjtBQUNoQyxJQUFJQyxXQUE0QixNQUFNLE9BQU87QUFDN0MsSUFBSUMsaUJBQTRCLE1BQU0sTUFBTTtBQUM1QyxJQUFJQyx1QkFBNEIsTUFBTSxNQUFNO0FBQzVDLElBQUlDLGFBQTRCLE1BQU0sU0FBUztBQUMvQyxJQUFJQyxtQkFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLG9CQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFBSUMsYUFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLGVBQTRCLE1BQU0sS0FBSztBQUMzQyxJQUFJQyxpQkFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLG9CQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFBSUMsZ0JBQTRCLE1BQU0sS0FBSztBQUMzQyxJQUFJQyxhQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFBSUMsYUFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLGFBQTRCLE1BQU0sS0FBSztBQUMzQyxJQUFJQyxjQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFBSUMsb0JBQTRCLE1BQU0sS0FBSztBQUMzQyxJQUFJQyxnQkFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLHFCQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFBSUMsMkJBQTRCLE1BQU0sS0FBSztBQUMzQyxJQUFJQyw0QkFBNEIsTUFBTSxLQUFLO0FBQzNDLElBQUlDLG9CQUE0QixNQUFNLEtBQUs7QUFDM0MsSUFB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QUM1SjtZQUN6QjtRQUNGLE9BQU87WUFDTHlKLFFBQVFHLElBQUksQ0FBQ25DO1lBRWIsSUFBSW9DLE1BQU1DLE9BQU8sQ0FBQ3JDLFNBQVM7Z0JBQ3pCLElBQUt6SCxRQUFRLEdBQUdDLFNBQVN3SCxPQUFPeEgsTUFBTSxFQUFFRCxRQUFRQyxRQUFRRCxTQUFTLEVBQUc7b0JBQ2xFMkosWUFBWWxDLE1BQU0sQ0FBQ3pILE1BQU0sRUFBRXlKLFNBQVNDO2dCQUN0QztZQUNGLE9BQU87Z0JBQ0x6QixnQkFBZ0J2SyxPQUFPcUMsSUFBSSxDQUFDMEg7Z0JBRTVCLElBQUt6SCxRQUFRLEdBQUdDLFNBQVNnSSxjQUFjaEksTUFBTSxFQUFFRCxRQUFRQyxRQUFRRCxTQUFTLEVBQUc7b0JBQ3pFMkosWUFBWWxDLE1BQU0sQ0FBQ1EsYUFBYSxDQUFDakksTUFBTSxDQUFDLEVBQUV5SixTQUFTQztnQkFDckQ7WUFDRjtRQUNGO0lBQ0Y7QUFDRjtBQUVBLFNBQVM3RCxLQUFLa0UsS0FBSyxFQUFFNUksT0FBTztJQUMxQkEsVUFBVUEsV0FBVyxDQUFDO0lBRXRCLElBQUkrQixRQUFRLElBQUloQyxNQUFNQztJQUV0QixJQUFJLENBQUMrQixNQUFNcEIsTUFBTSxFQUFFMEgsdUJBQXVCTyxPQUFPN0c7SUFFakQsSUFBSTBFLFFBQVFtQztJQUVaLElBQUk3RyxNQUFNZixRQUFRLEVBQUU7UUFDbEJ5RixRQUFRMUUsTUFBTWYsUUFBUSxDQUFDM0IsSUFBSSxDQUFDO1lBQUUsSUFBSW9IO1FBQU0sR0FBRyxJQUFJQTtJQUNqRDtJQUVBLElBQUlDLFVBQVUzRSxPQUFPLEdBQUcwRSxPQUFPLE1BQU0sT0FBTyxPQUFPMUUsTUFBTTJDLElBQUksR0FBRztJQUVoRSxPQUFPO0FBQ1Q7QUFFQW1FLG1CQUFtQixHQUFHbkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9kdW1wZXIuanM/ZTNjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG52YXIgY29tbW9uICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiAgICAgICA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgREVGQVVMVF9TQ0hFTUEgICAgICA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHQnKTtcblxudmFyIF90b1N0cmluZyAgICAgICA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIENIQVJfQk9NICAgICAgICAgICAgICAgICAgPSAweEZFRkY7XG52YXIgQ0hBUl9UQUIgICAgICAgICAgICAgICAgICA9IDB4MDk7IC8qIFRhYiAqL1xudmFyIENIQVJfTElORV9GRUVEICAgICAgICAgICAgPSAweDBBOyAvKiBMRiAqL1xudmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOICAgICAgPSAweDBEOyAvKiBDUiAqL1xudmFyIENIQVJfU1BBQ0UgICAgICAgICAgICAgICAgPSAweDIwOyAvKiBTcGFjZSAqL1xudmFyIENIQVJfRVhDTEFNQVRJT04gICAgICAgICAgPSAweDIxOyAvKiAhICovXG52YXIgQ0hBUl9ET1VCTEVfUVVPVEUgICAgICAgICA9IDB4MjI7IC8qIFwiICovXG52YXIgQ0hBUl9TSEFSUCAgICAgICAgICAgICAgICA9IDB4MjM7IC8qICMgKi9cbnZhciBDSEFSX1BFUkNFTlQgICAgICAgICAgICAgID0gMHgyNTsgLyogJSAqL1xudmFyIENIQVJfQU1QRVJTQU5EICAgICAgICAgICAgPSAweDI2OyAvKiAmICovXG52YXIgQ0hBUl9TSU5HTEVfUVVPVEUgICAgICAgICA9IDB4Mjc7IC8qICcgKi9cbnZhciBDSEFSX0FTVEVSSVNLICAgICAgICAgICAgID0gMHgyQTsgLyogKiAqL1xudmFyIENIQVJfQ09NTUEgICAgICAgICAgICAgICAgPSAweDJDOyAvKiAsICovXG52YXIgQ0hBUl9NSU5VUyAgICAgICAgICAgICAgICA9IDB4MkQ7IC8qIC0gKi9cbnZhciBDSEFSX0NPTE9OICAgICAgICAgICAgICAgID0gMHgzQTsgLyogOiAqL1xudmFyIENIQVJfRVFVQUxTICAgICAgICAgICAgICAgPSAweDNEOyAvKiA9ICovXG52YXIgQ0hBUl9HUkVBVEVSX1RIQU4gICAgICAgICA9IDB4M0U7IC8qID4gKi9cbnZhciBDSEFSX1FVRVNUSU9OICAgICAgICAgICAgID0gMHgzRjsgLyogPyAqL1xudmFyIENIQVJfQ09NTUVSQ0lBTF9BVCAgICAgICAgPSAweDQwOyAvKiBAICovXG52YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICA9IDB4NUI7IC8qIFsgKi9cbnZhciBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUID0gMHg1RDsgLyogXSAqL1xudmFyIENIQVJfR1JBVkVfQUNDRU5UICAgICAgICAgPSAweDYwOyAvKiBgICovXG52YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgICA9IDB4N0I7IC8qIHsgKi9cbnZhciBDSEFSX1ZFUlRJQ0FMX0xJTkUgICAgICAgID0gMHg3QzsgLyogfCAqL1xudmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCAgPSAweDdEOyAvKiB9ICovXG5cbnZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307XG5cbkVTQ0FQRV9TRVFVRU5DRVNbMHgwMF0gICA9ICdcXFxcMCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDddICAgPSAnXFxcXGEnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA4XSAgID0gJ1xcXFxiJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwOV0gICA9ICdcXFxcdCc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEFdICAgPSAnXFxcXG4nO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBCXSAgID0gJ1xcXFx2JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQ10gICA9ICdcXFxcZic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MERdICAgPSAnXFxcXHInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDFCXSAgID0gJ1xcXFxlJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMl0gICA9ICdcXFxcXCInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDVDXSAgID0gJ1xcXFxcXFxcJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHg4NV0gICA9ICdcXFxcTic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4QTBdICAgPSAnXFxcXF8nO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjhdID0gJ1xcXFxMJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMDI5XSA9ICdcXFxcUCc7XG5cbnZhciBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWCA9IFtcbiAgJ3knLCAnWScsICd5ZXMnLCAnWWVzJywgJ1lFUycsICdvbicsICdPbicsICdPTicsXG4gICduJywgJ04nLCAnbm8nLCAnTm8nLCAnTk8nLCAnb2ZmJywgJ09mZicsICdPRkYnXG5dO1xuXG52YXIgREVQUkVDQVRFRF9CQVNFNjBfU1lOVEFYID0gL15bLStdP1swLTlfXSsoPzo6WzAtOV9dKykrKD86XFwuWzAtOV9dKik/JC87XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcCkge1xuICB2YXIgcmVzdWx0LCBrZXlzLCBpbmRleCwgbGVuZ3RoLCB0YWcsIHN0eWxlLCB0eXBlO1xuXG4gIGlmIChtYXAgPT09IG51bGwpIHJldHVybiB7fTtcblxuICByZXN1bHQgPSB7fTtcbiAga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHRhZyA9IGtleXNbaW5kZXhdO1xuICAgIHN0eWxlID0gU3RyaW5nKG1hcFt0YWddKTtcblxuICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09ICchIScpIHtcbiAgICAgIHRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjonICsgdGFnLnNsaWNlKDIpO1xuICAgIH1cbiAgICB0eXBlID0gc2NoZW1hLmNvbXBpbGVkVHlwZU1hcFsnZmFsbGJhY2snXVt0YWddO1xuXG4gICAgaWYgKHR5cGUgJiYgX2hhc093blByb3BlcnR5LmNhbGwodHlwZS5zdHlsZUFsaWFzZXMsIHN0eWxlKSkge1xuICAgICAgc3R5bGUgPSB0eXBlLnN0eWxlQWxpYXNlc1tzdHlsZV07XG4gICAgfVxuXG4gICAgcmVzdWx0W3RhZ10gPSBzdHlsZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUhleChjaGFyYWN0ZXIpIHtcbiAgdmFyIHN0cmluZywgaGFuZGxlLCBsZW5ndGg7XG5cbiAgc3RyaW5nID0gY2hhcmFjdGVyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXG4gIGlmIChjaGFyYWN0ZXIgPD0gMHhGRikge1xuICAgIGhhbmRsZSA9ICd4JztcbiAgICBsZW5ndGggPSAyO1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweEZGRkYpIHtcbiAgICBoYW5kbGUgPSAndSc7XG4gICAgbGVuZ3RoID0gNDtcbiAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gMHhGRkZGRkZGRikge1xuICAgIGhhbmRsZSA9ICdVJztcbiAgICBsZW5ndGggPSA4O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGJyk7XG4gIH1cblxuICByZXR1cm4gJ1xcXFwnICsgaGFuZGxlICsgY29tbW9uLnJlcGVhdCgnMCcsIGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuXG5cbnZhciBRVU9USU5HX1RZUEVfU0lOR0xFID0gMSxcbiAgICBRVU9USU5HX1RZUEVfRE9VQkxFID0gMjtcblxuZnVuY3Rpb24gU3RhdGUob3B0aW9ucykge1xuICB0aGlzLnNjaGVtYSAgICAgICAgPSBvcHRpb25zWydzY2hlbWEnXSB8fCBERUZBVUxUX1NDSEVNQTtcbiAgdGhpcy5pbmRlbnQgICAgICAgID0gTWF0aC5tYXgoMSwgKG9wdGlvbnNbJ2luZGVudCddIHx8IDIpKTtcbiAgdGhpcy5ub0FycmF5SW5kZW50ID0gb3B0aW9uc1snbm9BcnJheUluZGVudCddIHx8IGZhbHNlO1xuICB0aGlzLnNraXBJbnZhbGlkICAgPSBvcHRpb25zWydza2lwSW52YWxpZCddIHx8IGZhbHNlO1xuICB0aGlzLmZsb3dMZXZlbCAgICAgPSAoY29tbW9uLmlzTm90aGluZyhvcHRpb25zWydmbG93TGV2ZWwnXSkgPyAtMSA6IG9wdGlvbnNbJ2Zsb3dMZXZlbCddKTtcbiAgdGhpcy5zdHlsZU1hcCAgICAgID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zWydzdHlsZXMnXSB8fCBudWxsKTtcbiAgdGhpcy5zb3J0S2V5cyAgICAgID0gb3B0aW9uc1snc29ydEtleXMnXSB8fCBmYWxzZTtcbiAgdGhpcy5saW5lV2lkdGggICAgID0gb3B0aW9uc1snbGluZVdpZHRoJ10gfHwgODA7XG4gIHRoaXMubm9SZWZzICAgICAgICA9IG9wdGlvbnNbJ25vUmVmcyddIHx8IGZhbHNlO1xuICB0aGlzLm5vQ29tcGF0TW9kZSAgPSBvcHRpb25zWydub0NvbXBhdE1vZGUnXSB8fCBmYWxzZTtcbiAgdGhpcy5jb25kZW5zZUZsb3cgID0gb3B0aW9uc1snY29uZGVuc2VGbG93J10gfHwgZmFsc2U7XG4gIHRoaXMucXVvdGluZ1R5cGUgICA9IG9wdGlvbnNbJ3F1b3RpbmdUeXBlJ10gPT09ICdcIicgPyBRVU9USU5HX1RZUEVfRE9VQkxFIDogUVVPVElOR19UWVBFX1NJTkdMRTtcbiAgdGhpcy5mb3JjZVF1b3RlcyAgID0gb3B0aW9uc1snZm9yY2VRdW90ZXMnXSB8fCBmYWxzZTtcbiAgdGhpcy5yZXBsYWNlciAgICAgID0gdHlwZW9mIG9wdGlvbnNbJ3JlcGxhY2VyJ10gPT09ICdmdW5jdGlvbicgPyBvcHRpb25zWydyZXBsYWNlciddIDogbnVsbDtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0O1xuXG4gIHRoaXMudGFnID0gbnVsbDtcbiAgdGhpcy5yZXN1bHQgPSAnJztcblxuICB0aGlzLmR1cGxpY2F0ZXMgPSBbXTtcbiAgdGhpcy51c2VkRHVwbGljYXRlcyA9IG51bGw7XG59XG5cbi8vIEluZGVudHMgZXZlcnkgbGluZSBpbiBhIHN0cmluZy4gRW1wdHkgbGluZXMgKFxcbiBvbmx5KSBhcmUgbm90IGluZGVudGVkLlxuZnVuY3Rpb24gaW5kZW50U3RyaW5nKHN0cmluZywgc3BhY2VzKSB7XG4gIHZhciBpbmQgPSBjb21tb24ucmVwZWF0KCcgJywgc3BhY2VzKSxcbiAgICAgIHBvc2l0aW9uID0gMCxcbiAgICAgIG5leHQgPSAtMSxcbiAgICAgIHJlc3VsdCA9ICcnLFxuICAgICAgbGluZSxcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgbmV4dCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBwb3NpdGlvbik7XG4gICAgaWYgKG5leHQgPT09IC0xKSB7XG4gICAgICBsaW5lID0gc3RyaW5nLnNsaWNlKHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uID0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lID0gc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBuZXh0ICsgMSk7XG4gICAgICBwb3NpdGlvbiA9IG5leHQgKyAxO1xuICAgIH1cblxuICAgIGlmIChsaW5lLmxlbmd0aCAmJiBsaW5lICE9PSAnXFxuJykgcmVzdWx0ICs9IGluZDtcblxuICAgIHJlc3VsdCArPSBsaW5lO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpIHtcbiAgcmV0dXJuICdcXG4nICsgY29tbW9uLnJlcGVhdCgnICcsIHN0YXRlLmluZGVudCAqIGxldmVsKTtcbn1cblxuZnVuY3Rpb24gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIpIHtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIHR5cGU7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW2luZGV4XTtcblxuICAgIGlmICh0eXBlLnJlc29sdmUoc3RyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBbMzNdIHMtd2hpdGUgOjo9IHMtc3BhY2UgfCBzLXRhYlxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpIHtcbiAgcmV0dXJuIGMgPT09IENIQVJfU1BBQ0UgfHwgYyA9PT0gQ0hBUl9UQUI7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGNhbiBiZSBwcmludGVkIHdpdGhvdXQgZXNjYXBpbmcuXG4vLyBGcm9tIFlBTUwgMS4yOiBcImFueSBhbGxvd2VkIGNoYXJhY3RlcnMga25vd24gdG8gYmUgbm9uLXByaW50YWJsZVxuLy8gc2hvdWxkIGFsc28gYmUgZXNjYXBlZC4gW0hvd2V2ZXIsXSBUaGlzIGlzbuKAmXQgbWFuZGF0b3J5XCJcbi8vIERlcml2ZWQgZnJvbSBuYi1jaGFyIC0gXFx0IC0gI3g4NSAtICN4QTAgLSAjeDIwMjggLSAjeDIwMjkuXG5mdW5jdGlvbiBpc1ByaW50YWJsZShjKSB7XG4gIHJldHVybiAgKDB4MDAwMjAgPD0gYyAmJiBjIDw9IDB4MDAwMDdFKVxuICAgICAgfHwgKCgweDAwMEExIDw9IGMgJiYgYyA8PSAweDAwRDdGRikgJiYgYyAhPT0gMHgyMDI4ICYmIGMgIT09IDB4MjAyOSlcbiAgICAgIHx8ICgoMHgwRTAwMCA8PSBjICYmIGMgPD0gMHgwMEZGRkQpICYmIGMgIT09IENIQVJfQk9NKVxuICAgICAgfHwgICgweDEwMDAwIDw9IGMgJiYgYyA8PSAweDEwRkZGRik7XG59XG5cbi8vIFszNF0gbnMtY2hhciA6Oj0gbmItY2hhciAtIHMtd2hpdGVcbi8vIFsyN10gbmItY2hhciA6Oj0gYy1wcmludGFibGUgLSBiLWNoYXIgLSBjLWJ5dGUtb3JkZXItbWFya1xuLy8gWzI2XSBiLWNoYXIgIDo6PSBiLWxpbmUtZmVlZCB8IGItY2FycmlhZ2UtcmV0dXJuXG4vLyBJbmNsdWRpbmcgcy13aGl0ZSAoZm9yIHNvbWUgcmVhc29uLCBleGFtcGxlcyBkb2Vzbid0IG1hdGNoIHNwZWNzIGluIHRoaXMgYXNwZWN0KVxuLy8gbnMtY2hhciA6Oj0gYy1wcmludGFibGUgLSBiLWxpbmUtZmVlZCAtIGItY2FycmlhZ2UtcmV0dXJuIC0gYy1ieXRlLW9yZGVyLW1hcmtcbmZ1bmN0aW9uIGlzTnNDaGFyT3JXaGl0ZXNwYWNlKGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpXG4gICAgJiYgYyAhPT0gQ0hBUl9CT01cbiAgICAvLyAtIGItY2hhclxuICAgICYmIGMgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOXG4gICAgJiYgYyAhPT0gQ0hBUl9MSU5FX0ZFRUQ7XG59XG5cbi8vIFsxMjddICBucy1wbGFpbi1zYWZlKGMpIDo6PSBjID0gZmxvdy1vdXQgIOKHkiBucy1wbGFpbi1zYWZlLW91dFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBmbG93LWluICAg4oeSIG5zLXBsYWluLXNhZmUtaW5cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gYmxvY2sta2V5IOKHkiBucy1wbGFpbi1zYWZlLW91dFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBmbG93LWtleSAg4oeSIG5zLXBsYWluLXNhZmUtaW5cbi8vIFsxMjhdIG5zLXBsYWluLXNhZmUtb3V0IDo6PSBucy1jaGFyXG4vLyBbMTI5XSAgbnMtcGxhaW4tc2FmZS1pbiA6Oj0gbnMtY2hhciAtIGMtZmxvdy1pbmRpY2F0b3Jcbi8vIFsxMzBdICBucy1wbGFpbi1jaGFyKGMpIDo6PSAgKCBucy1wbGFpbi1zYWZlKGMpIC0g4oCcOuKAnSAtIOKAnCPigJ0gKVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIC8qIEFuIG5zLWNoYXIgcHJlY2VkaW5nICovIOKAnCPigJ0gKVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIOKAnDrigJ0gLyogRm9sbG93ZWQgYnkgYW4gbnMtcGxhaW4tc2FmZShjKSAqLyApXG5mdW5jdGlvbiBpc1BsYWluU2FmZShjLCBwcmV2LCBpbmJsb2NrKSB7XG4gIHZhciBjSXNOc0NoYXJPcldoaXRlc3BhY2UgPSBpc05zQ2hhck9yV2hpdGVzcGFjZShjKTtcbiAgdmFyIGNJc05zQ2hhciA9IGNJc05zQ2hhck9yV2hpdGVzcGFjZSAmJiAhaXNXaGl0ZXNwYWNlKGMpO1xuICByZXR1cm4gKFxuICAgIC8vIG5zLXBsYWluLXNhZmVcbiAgICBpbmJsb2NrID8gLy8gYyA9IGZsb3ctaW5cbiAgICAgIGNJc05zQ2hhck9yV2hpdGVzcGFjZVxuICAgICAgOiBjSXNOc0NoYXJPcldoaXRlc3BhY2VcbiAgICAgICAgLy8gLSBjLWZsb3ctaW5kaWNhdG9yXG4gICAgICAgICYmIGMgIT09IENIQVJfQ09NTUFcbiAgICAgICAgJiYgYyAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVRcbiAgICAgICAgJiYgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVRcbiAgICAgICAgJiYgYyAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUXG4gIClcbiAgICAvLyBucy1wbGFpbi1jaGFyXG4gICAgJiYgYyAhPT0gQ0hBUl9TSEFSUCAvLyBmYWxzZSBvbiAnIydcbiAgICAmJiAhKHByZXYgPT09IENIQVJfQ09MT04gJiYgIWNJc05zQ2hhcikgLy8gZmFsc2Ugb24gJzogJ1xuICAgIHx8IChpc05zQ2hhck9yV2hpdGVzcGFjZShwcmV2KSAmJiAhaXNXaGl0ZXNwYWNlKHByZXYpICYmIGMgPT09IENIQVJfU0hBUlApIC8vIGNoYW5nZSB0byB0cnVlIG9uICdbXiBdIydcbiAgICB8fCAocHJldiA9PT0gQ0hBUl9DT0xPTiAmJiBjSXNOc0NoYXIpOyAvLyBjaGFuZ2UgdG8gdHJ1ZSBvbiAnOlteIF0nXG59XG5cbi8vIFNpbXBsaWZpZWQgdGVzdCBmb3IgdmFsdWVzIGFsbG93ZWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBwbGFpbiBzdHlsZS5cbmZ1bmN0aW9uIGlzUGxhaW5TYWZlRmlyc3QoYykge1xuICAvLyBVc2VzIGEgc3Vic2V0IG9mIG5zLWNoYXIgLSBjLWluZGljYXRvclxuICAvLyB3aGVyZSBucy1jaGFyID0gbmItY2hhciAtIHMtd2hpdGUuXG4gIC8vIE5vIHN1cHBvcnQgb2YgKCAoIOKAnD/igJ0gfCDigJw64oCdIHwg4oCcLeKAnSApIC8qIEZvbGxvd2VkIGJ5IGFuIG5zLXBsYWluLXNhZmUoYykpICovICkgcGFydFxuICByZXR1cm4gaXNQcmludGFibGUoYykgJiYgYyAhPT0gQ0hBUl9CT01cbiAgICAmJiAhaXNXaGl0ZXNwYWNlKGMpIC8vIC0gcy13aGl0ZVxuICAgIC8vIC0gKGMtaW5kaWNhdG9yIDo6PVxuICAgIC8vIOKAnC3igJ0gfCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnCzigJ0gfCDigJxb4oCdIHwg4oCcXeKAnSB8IOKAnHvigJ0gfCDigJx94oCdXG4gICAgJiYgYyAhPT0gQ0hBUl9NSU5VU1xuICAgICYmIGMgIT09IENIQVJfUVVFU1RJT05cbiAgICAmJiBjICE9PSBDSEFSX0NPTE9OXG4gICAgJiYgYyAhPT0gQ0hBUl9DT01NQVxuICAgICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVFxuICAgICYmIGMgIT09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVFxuICAgICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVFxuICAgIC8vIHwg4oCcI+KAnSB8IOKAnCbigJ0gfCDigJwq4oCdIHwg4oCcIeKAnSB8IOKAnHzigJ0gfCDigJw94oCdIHwg4oCcPuKAnSB8IOKAnCfigJ0gfCDigJxcIuKAnVxuICAgICYmIGMgIT09IENIQVJfU0hBUlBcbiAgICAmJiBjICE9PSBDSEFSX0FNUEVSU0FORFxuICAgICYmIGMgIT09IENIQVJfQVNURVJJU0tcbiAgICAmJiBjICE9PSBDSEFSX0VYQ0xBTUFUSU9OXG4gICAgJiYgYyAhPT0gQ0hBUl9WRVJUSUNBTF9MSU5FXG4gICAgJiYgYyAhPT0gQ0hBUl9FUVVBTFNcbiAgICAmJiBjICE9PSBDSEFSX0dSRUFURVJfVEhBTlxuICAgICYmIGMgIT09IENIQVJfU0lOR0xFX1FVT1RFXG4gICAgJiYgYyAhPT0gQ0hBUl9ET1VCTEVfUVVPVEVcbiAgICAvLyB8IOKAnCXigJ0gfCDigJxA4oCdIHwg4oCcYOKAnSlcbiAgICAmJiBjICE9PSBDSEFSX1BFUkNFTlRcbiAgICAmJiBjICE9PSBDSEFSX0NPTU1FUkNJQUxfQVRcbiAgICAmJiBjICE9PSBDSEFSX0dSQVZFX0FDQ0VOVDtcbn1cblxuLy8gU2ltcGxpZmllZCB0ZXN0IGZvciB2YWx1ZXMgYWxsb3dlZCBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZUxhc3QoYykge1xuICAvLyBqdXN0IG5vdCB3aGl0ZXNwYWNlIG9yIGNvbG9uLCBpdCB3aWxsIGJlIGNoZWNrZWQgdG8gYmUgcGxhaW4gY2hhcmFjdGVyIGxhdGVyXG4gIHJldHVybiAhaXNXaGl0ZXNwYWNlKGMpICYmIGMgIT09IENIQVJfQ09MT047XG59XG5cbi8vIFNhbWUgYXMgJ3N0cmluZycuY29kZVBvaW50QXQocG9zKSwgYnV0IHdvcmtzIGluIG9sZGVyIGJyb3dzZXJzLlxuZnVuY3Rpb24gY29kZVBvaW50QXQoc3RyaW5nLCBwb3MpIHtcbiAgdmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQocG9zKSwgc2Vjb25kO1xuICBpZiAoZmlyc3QgPj0gMHhEODAwICYmIGZpcnN0IDw9IDB4REJGRiAmJiBwb3MgKyAxIDwgc3RyaW5nLmxlbmd0aCkge1xuICAgIHNlY29uZCA9IHN0cmluZy5jaGFyQ29kZUF0KHBvcyArIDEpO1xuICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHtcbiAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgcmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdDtcbn1cblxuLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGJsb2NrIGluZGVudGF0aW9uIGluZGljYXRvciBpcyByZXF1aXJlZC5cbmZ1bmN0aW9uIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSB7XG4gIHZhciBsZWFkaW5nU3BhY2VSZSA9IC9eXFxuKiAvO1xuICByZXR1cm4gbGVhZGluZ1NwYWNlUmUudGVzdChzdHJpbmcpO1xufVxuXG52YXIgU1RZTEVfUExBSU4gICA9IDEsXG4gICAgU1RZTEVfU0lOR0xFICA9IDIsXG4gICAgU1RZTEVfTElURVJBTCA9IDMsXG4gICAgU1RZTEVfRk9MREVEICA9IDQsXG4gICAgU1RZTEVfRE9VQkxFICA9IDU7XG5cbi8vIERldGVybWluZXMgd2hpY2ggc2NhbGFyIHN0eWxlcyBhcmUgcG9zc2libGUgYW5kIHJldHVybnMgdGhlIHByZWZlcnJlZCBzdHlsZS5cbi8vIGxpbmVXaWR0aCA9IC0xID0+IG5vIGxpbWl0LlxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0ci5sZW5ndGggPiAwLlxuLy8gUG9zdC1jb25kaXRpb25zOlxuLy8gICAgU1RZTEVfUExBSU4gb3IgU1RZTEVfU0lOR0xFID0+IG5vIFxcbiBhcmUgaW4gdGhlIHN0cmluZy5cbi8vICAgIFNUWUxFX0xJVEVSQUwgPT4gbm8gbGluZXMgYXJlIHN1aXRhYmxlIGZvciBmb2xkaW5nIChvciBsaW5lV2lkdGggaXMgLTEpLlxuLy8gICAgU1RZTEVfRk9MREVEID0+IGEgbGluZSA+IGxpbmVXaWR0aCBhbmQgY2FuIGJlIGZvbGRlZCAoYW5kIGxpbmVXaWR0aCAhPSAtMSkuXG5mdW5jdGlvbiBjaG9vc2VTY2FsYXJTdHlsZShzdHJpbmcsIHNpbmdsZUxpbmVPbmx5LCBpbmRlbnRQZXJMZXZlbCwgbGluZVdpZHRoLFxuICB0ZXN0QW1iaWd1b3VzVHlwZSwgcXVvdGluZ1R5cGUsIGZvcmNlUXVvdGVzLCBpbmJsb2NrKSB7XG5cbiAgdmFyIGk7XG4gIHZhciBjaGFyID0gMDtcbiAgdmFyIHByZXZDaGFyID0gbnVsbDtcbiAgdmFyIGhhc0xpbmVCcmVhayA9IGZhbHNlO1xuICB2YXIgaGFzRm9sZGFibGVMaW5lID0gZmFsc2U7IC8vIG9ubHkgY2hlY2tlZCBpZiBzaG91bGRUcmFja1dpZHRoXG4gIHZhciBzaG91bGRUcmFja1dpZHRoID0gbGluZVdpZHRoICE9PSAtMTtcbiAgdmFyIHByZXZpb3VzTGluZUJyZWFrID0gLTE7IC8vIGNvdW50IHRoZSBmaXJzdCBsaW5lIGNvcnJlY3RseVxuICB2YXIgcGxhaW4gPSBpc1BsYWluU2FmZUZpcnN0KGNvZGVQb2ludEF0KHN0cmluZywgMCkpXG4gICAgICAgICAgJiYgaXNQbGFpblNhZmVMYXN0KGNvZGVQb2ludEF0KHN0cmluZywgc3RyaW5nLmxlbmd0aCAtIDEpKTtcblxuICBpZiAoc2luZ2xlTGluZU9ubHkgfHwgZm9yY2VRdW90ZXMpIHtcbiAgICAvLyBDYXNlOiBubyBibG9jayBzdHlsZXMuXG4gICAgLy8gQ2hlY2sgZm9yIGRpc2FsbG93ZWQgY2hhcmFjdGVycyB0byBydWxlIG91dCBwbGFpbiBhbmQgc2luZ2xlLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBjaGFyID49IDB4MTAwMDAgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2Q2hhciwgaW5ibG9jayk7XG4gICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENhc2U6IGJsb2NrIHN0eWxlcyBwZXJtaXR0ZWQuXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGNoYXIgPj0gMHgxMDAwMCA/IGkgKz0gMiA6IGkrKykge1xuICAgICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgICBpZiAoY2hhciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHtcbiAgICAgICAgaGFzTGluZUJyZWFrID0gdHJ1ZTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYW55IGxpbmUgY2FuIGJlIGZvbGRlZC5cbiAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHtcbiAgICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHxcbiAgICAgICAgICAgIC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLlxuICAgICAgICAgICAgKGkgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiZcbiAgICAgICAgICAgICBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gJyAnKTtcbiAgICAgICAgICBwcmV2aW91c0xpbmVCcmVhayA9IGk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gICAgICB9XG4gICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZDaGFyLCBpbmJsb2NrKTtcbiAgICAgIHByZXZDaGFyID0gY2hhcjtcbiAgICB9XG4gICAgLy8gaW4gY2FzZSB0aGUgZW5kIGlzIG1pc3NpbmcgYSBcXG5cbiAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgKHNob3VsZFRyYWNrV2lkdGggJiZcbiAgICAgIChpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICcgJykpO1xuICB9XG4gIC8vIEFsdGhvdWdoIGV2ZXJ5IHN0eWxlIGNhbiByZXByZXNlbnQgXFxuIHdpdGhvdXQgZXNjYXBpbmcsIHByZWZlciBibG9jayBzdHlsZXNcbiAgLy8gZm9yIG11bHRpbGluZSwgc2luY2UgdGhleSdyZSBtb3JlIHJlYWRhYmxlIGFuZCB0aGV5IGRvbid0IGFkZCBlbXB0eSBsaW5lcy5cbiAgLy8gQWxzbyBwcmVmZXIgZm9sZGluZyBhIHN1cGVyLWxvbmcgbGluZS5cbiAgaWYgKCFoYXNMaW5lQnJlYWsgJiYgIWhhc0ZvbGRhYmxlTGluZSkge1xuICAgIC8vIFN0cmluZ3MgaW50ZXJwcmV0YWJsZSBhcyBhbm90aGVyIHR5cGUgaGF2ZSB0byBiZSBxdW90ZWQ7XG4gICAgLy8gZS5nLiB0aGUgc3RyaW5nICd0cnVlJyB2cy4gdGhlIGJvb2xlYW4gdHJ1ZS5cbiAgICBpZiAocGxhaW4gJiYgIWZvcmNlUXVvdGVzICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gU1RZTEVfUExBSU47XG4gICAgfVxuICAgIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbiAgfVxuICAvLyBFZGdlIGNhc2U6IGJsb2NrIGluZGVudGF0aW9uIGluZGljYXRvciBjYW4gb25seSBoYXZlIG9uZSBkaWdpdC5cbiAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykpIHtcbiAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICB9XG4gIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyBibG9jayBzdHlsZXMgYXJlIHZhbGlkLlxuICAvLyBQcmVmZXIgbGl0ZXJhbCBzdHlsZSB1bmxlc3Mgd2Ugd2FudCB0byBmb2xkLlxuICBpZiAoIWZvcmNlUXVvdGVzKSB7XG4gICAgcmV0dXJuIGhhc0ZvbGRhYmxlTGluZSA/IFNUWUxFX0ZPTERFRCA6IFNUWUxFX0xJVEVSQUw7XG4gIH1cbiAgcmV0dXJuIHF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gU1RZTEVfRE9VQkxFIDogU1RZTEVfU0lOR0xFO1xufVxuXG4vLyBOb3RlOiBsaW5lIGJyZWFraW5nL2ZvbGRpbmcgaXMgaW1wbGVtZW50ZWQgZm9yIG9ubHkgdGhlIGZvbGRlZCBzdHlsZS5cbi8vIE5CLiBXZSBkcm9wIHRoZSBsYXN0IHRyYWlsaW5nIG5ld2xpbmUgKGlmIGFueSkgb2YgYSByZXR1cm5lZCBibG9jayBzY2FsYXJcbi8vICBzaW5jZSB0aGUgZHVtcGVyIGFkZHMgaXRzIG93biBuZXdsaW5lLiBUaGlzIGFsd2F5cyB3b3Jrczpcbi8vICAgIOKAoiBObyBlbmRpbmcgbmV3bGluZSA9PiB1bmFmZmVjdGVkOyBhbHJlYWR5IHVzaW5nIHN0cmlwIFwiLVwiIGNob21waW5nLlxuLy8gICAg4oCiIEVuZGluZyBuZXdsaW5lICAgID0+IHJlbW92ZWQgdGhlbiByZXN0b3JlZC5cbi8vICBJbXBvcnRhbnRseSwgdGhpcyBrZWVwcyB0aGUgXCIrXCIgY2hvbXAgaW5kaWNhdG9yIGZyb20gZ2FpbmluZyBhbiBleHRyYSBsaW5lLlxuZnVuY3Rpb24gd3JpdGVTY2FsYXIoc3RhdGUsIHN0cmluZywgbGV2ZWwsIGlza2V5LCBpbmJsb2NrKSB7XG4gIHN0YXRlLmR1bXAgPSAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gc3RhdGUucXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyAnXCJcIicgOiBcIicnXCI7XG4gICAgfVxuICAgIGlmICghc3RhdGUubm9Db21wYXRNb2RlKSB7XG4gICAgICBpZiAoREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVguaW5kZXhPZihzdHJpbmcpICE9PSAtMSB8fCBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVgudGVzdChzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5xdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/ICgnXCInICsgc3RyaW5nICsgJ1wiJykgOiAoXCInXCIgKyBzdHJpbmcgKyBcIidcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudCAqIE1hdGgubWF4KDEsIGxldmVsKTsgLy8gbm8gMC1pbmRlbnQgc2NhbGFyc1xuICAgIC8vIEFzIGluZGVudGF0aW9uIGdldHMgZGVlcGVyLCBsZXQgdGhlIHdpZHRoIGRlY3JlYXNlIG1vbm90b25pY2FsbHlcbiAgICAvLyB0byB0aGUgbG93ZXIgYm91bmQgbWluKHN0YXRlLmxpbmVXaWR0aCwgNDApLlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGltcGxpZXNcbiAgICAvLyAgc3RhdGUubGluZVdpZHRoIOKJpCA0MCArIHN0YXRlLmluZGVudDogd2lkdGggaXMgZml4ZWQgYXQgdGhlIGxvd2VyIGJvdW5kLlxuICAgIC8vICBzdGF0ZS5saW5lV2lkdGggPiA0MCArIHN0YXRlLmluZGVudDogd2lkdGggZGVjcmVhc2VzIHVudGlsIHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyBUaGlzIGJlaGF2ZXMgYmV0dGVyIHRoYW4gYSBjb25zdGFudCBtaW5pbXVtIHdpZHRoIHdoaWNoIGRpc2FsbG93cyBuYXJyb3dlciBvcHRpb25zLFxuICAgIC8vIG9yIGFuIGluZGVudCB0aHJlc2hvbGQgd2hpY2ggY2F1c2VzIHRoZSB3aWR0aCB0byBzdWRkZW5seSBpbmNyZWFzZS5cbiAgICB2YXIgbGluZVdpZHRoID0gc3RhdGUubGluZVdpZHRoID09PSAtMVxuICAgICAgPyAtMSA6IE1hdGgubWF4KE1hdGgubWluKHN0YXRlLmxpbmVXaWR0aCwgNDApLCBzdGF0ZS5saW5lV2lkdGggLSBpbmRlbnQpO1xuXG4gICAgLy8gV2l0aG91dCBrbm93aW5nIGlmIGtleXMgYXJlIGltcGxpY2l0L2V4cGxpY2l0LCBhc3N1bWUgaW1wbGljaXQgZm9yIHNhZmV0eS5cbiAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleVxuICAgICAgLy8gTm8gYmxvY2sgc3R5bGVzIGluIGZsb3cgbW9kZS5cbiAgICAgIHx8IChzdGF0ZS5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZS5mbG93TGV2ZWwpO1xuICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHJpbmcpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgc3RhdGUuaW5kZW50LCBsaW5lV2lkdGgsXG4gICAgICB0ZXN0QW1iaWd1aXR5LCBzdGF0ZS5xdW90aW5nVHlwZSwgc3RhdGUuZm9yY2VRdW90ZXMgJiYgIWlza2V5LCBpbmJsb2NrKSkge1xuXG4gICAgICBjYXNlIFNUWUxFX1BMQUlOOlxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6XG4gICAgICAgIHJldHVybiBcIidcIiArIHN0cmluZy5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcbiAgICAgIGNhc2UgU1RZTEVfTElURVJBTDpcbiAgICAgICAgcmV0dXJuICd8JyArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KVxuICAgICAgICAgICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKHN0cmluZywgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0ZPTERFRDpcbiAgICAgICAgcmV0dXJuICc+JyArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KVxuICAgICAgICAgICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nLCBsaW5lV2lkdGgpLCBpbmRlbnQpKTtcbiAgICAgIGNhc2UgU1RZTEVfRE9VQkxFOlxuICAgICAgICByZXR1cm4gJ1wiJyArIGVzY2FwZVN0cmluZyhzdHJpbmcsIGxpbmVXaWR0aCkgKyAnXCInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ2ltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlJyk7XG4gICAgfVxuICB9KCkpO1xufVxuXG4vLyBQcmUtY29uZGl0aW9uczogc3RyaW5nIGlzIHZhbGlkIGZvciBhIGJsb2NrIHNjYWxhciwgMSA8PSBpbmRlbnRQZXJMZXZlbCA8PSA5LlxuZnVuY3Rpb24gYmxvY2tIZWFkZXIoc3RyaW5nLCBpbmRlbnRQZXJMZXZlbCkge1xuICB2YXIgaW5kZW50SW5kaWNhdG9yID0gbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpID8gU3RyaW5nKGluZGVudFBlckxldmVsKSA6ICcnO1xuXG4gIC8vIG5vdGUgdGhlIHNwZWNpYWwgY2FzZTogdGhlIHN0cmluZyAnXFxuJyBjb3VudHMgYXMgYSBcInRyYWlsaW5nXCIgZW1wdHkgbGluZS5cbiAgdmFyIGNsaXAgPSAgICAgICAgICBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAnXFxuJztcbiAgdmFyIGtlZXAgPSBjbGlwICYmIChzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDJdID09PSAnXFxuJyB8fCBzdHJpbmcgPT09ICdcXG4nKTtcbiAgdmFyIGNob21wID0ga2VlcCA/ICcrJyA6IChjbGlwID8gJycgOiAnLScpO1xuXG4gIHJldHVybiBpbmRlbnRJbmRpY2F0b3IgKyBjaG9tcCArICdcXG4nO1xufVxuXG4vLyAoU2VlIHRoZSBub3RlIGZvciB3cml0ZVNjYWxhci4pXG5mdW5jdGlvbiBkcm9wRW5kaW5nTmV3bGluZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMV0gPT09ICdcXG4nID8gc3RyaW5nLnNsaWNlKDAsIC0xKSA6IHN0cmluZztcbn1cblxuLy8gTm90ZTogYSBsb25nIGxpbmUgd2l0aG91dCBhIHN1aXRhYmxlIGJyZWFrIHBvaW50IHdpbGwgZXhjZWVkIHRoZSB3aWR0aCBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBldmVyeSBjaGFyIGluIHN0ciBpc1ByaW50YWJsZSwgc3RyLmxlbmd0aCA+IDAsIHdpZHRoID4gMC5cbmZ1bmN0aW9uIGZvbGRTdHJpbmcoc3RyaW5nLCB3aWR0aCkge1xuICAvLyBJbiBmb2xkZWQgc3R5bGUsICRrJCBjb25zZWN1dGl2ZSBuZXdsaW5lcyBvdXRwdXQgYXMgJGsrMSQgbmV3bGluZXPigJRcbiAgLy8gdW5sZXNzIHRoZXkncmUgYmVmb3JlIG9yIGFmdGVyIGEgbW9yZS1pbmRlbnRlZCBsaW5lLCBvciBhdCB0aGUgdmVyeVxuICAvLyBiZWdpbm5pbmcgb3IgZW5kLCBpbiB3aGljaCBjYXNlICRrJCBtYXBzIHRvICRrJC5cbiAgLy8gVGhlcmVmb3JlLCBwYXJzZSBlYWNoIGNodW5rIGFzIG5ld2xpbmUocykgZm9sbG93ZWQgYnkgYSBjb250ZW50IGxpbmUuXG4gIHZhciBsaW5lUmUgPSAvKFxcbispKFteXFxuXSopL2c7XG5cbiAgLy8gZmlyc3QgbGluZSAocG9zc2libHkgYW4gZW1wdHkgbGluZSlcbiAgdmFyIHJlc3VsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5leHRMRiA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcbiAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDtcbiAgICBsaW5lUmUubGFzdEluZGV4ID0gbmV4dExGO1xuICAgIHJldHVybiBmb2xkTGluZShzdHJpbmcuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpO1xuICB9KCkpO1xuICAvLyBJZiB3ZSBoYXZlbid0IHJlYWNoZWQgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSB5ZXQsIGRvbid0IGFkZCBhbiBleHRyYSBcXG4uXG4gIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nWzBdID09PSAnXFxuJyB8fCBzdHJpbmdbMF0gPT09ICcgJztcbiAgdmFyIG1vcmVJbmRlbnRlZDtcblxuICAvLyByZXN0IG9mIHRoZSBsaW5lc1xuICB2YXIgbWF0Y2g7XG4gIHdoaWxlICgobWF0Y2ggPSBsaW5lUmUuZXhlYyhzdHJpbmcpKSkge1xuICAgIHZhciBwcmVmaXggPSBtYXRjaFsxXSwgbGluZSA9IG1hdGNoWzJdO1xuICAgIG1vcmVJbmRlbnRlZCA9IChsaW5lWzBdID09PSAnICcpO1xuICAgIHJlc3VsdCArPSBwcmVmaXhcbiAgICAgICsgKCFwcmV2TW9yZUluZGVudGVkICYmICFtb3JlSW5kZW50ZWQgJiYgbGluZSAhPT0gJydcbiAgICAgICAgPyAnXFxuJyA6ICcnKVxuICAgICAgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7XG4gICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdyZWVkeSBsaW5lIGJyZWFraW5nLlxuLy8gUGlja3MgdGhlIGxvbmdlc3QgbGluZSB1bmRlciB0aGUgbGltaXQgZWFjaCB0aW1lLFxuLy8gb3RoZXJ3aXNlIHNldHRsZXMgZm9yIHRoZSBzaG9ydGVzdCBsaW5lIG92ZXIgdGhlIGxpbWl0LlxuLy8gTkIuIE1vcmUtaW5kZW50ZWQgbGluZXMgKmNhbm5vdCogYmUgZm9sZGVkLCBhcyB0aGF0IHdvdWxkIGFkZCBhbiBleHRyYSBcXG4uXG5mdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkge1xuICBpZiAobGluZSA9PT0gJycgfHwgbGluZVswXSA9PT0gJyAnKSByZXR1cm4gbGluZTtcblxuICAvLyBTaW5jZSBhIG1vcmUtaW5kZW50ZWQgbGluZSBhZGRzIGEgXFxuLCBicmVha3MgY2FuJ3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZS5cbiAgdmFyIGJyZWFrUmUgPSAvIFteIF0vZzsgLy8gbm90ZTogdGhlIG1hdGNoIGluZGV4IHdpbGwgYWx3YXlzIGJlIDw9IGxlbmd0aC0yLlxuICB2YXIgbWF0Y2g7XG4gIC8vIHN0YXJ0IGlzIGFuIGluY2x1c2l2ZSBpbmRleC4gZW5kLCBjdXJyLCBhbmQgbmV4dCBhcmUgZXhjbHVzaXZlLlxuICB2YXIgc3RhcnQgPSAwLCBlbmQsIGN1cnIgPSAwLCBuZXh0ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIC8vIEludmFyaWFudHM6IDAgPD0gc3RhcnQgPD0gbGVuZ3RoLTEuXG4gIC8vICAgMCA8PSBjdXJyIDw9IG5leHQgPD0gbWF4KDAsIGxlbmd0aC0yKS4gY3VyciAtIHN0YXJ0IDw9IHdpZHRoLlxuICAvLyBJbnNpZGUgdGhlIGxvb3A6XG4gIC8vICAgQSBtYXRjaCBpbXBsaWVzIGxlbmd0aCA+PSAyLCBzbyBjdXJyIGFuZCBuZXh0IGFyZSA8PSBsZW5ndGgtMi5cbiAgd2hpbGUgKChtYXRjaCA9IGJyZWFrUmUuZXhlYyhsaW5lKSkpIHtcbiAgICBuZXh0ID0gbWF0Y2guaW5kZXg7XG4gICAgLy8gbWFpbnRhaW4gaW52YXJpYW50OiBjdXJyIC0gc3RhcnQgPD0gd2lkdGhcbiAgICBpZiAobmV4dCAtIHN0YXJ0ID4gd2lkdGgpIHtcbiAgICAgIGVuZCA9IChjdXJyID4gc3RhcnQpID8gY3VyciA6IG5leHQ7IC8vIGRlcml2ZSBlbmQgPD0gbGVuZ3RoLTJcbiAgICAgIHJlc3VsdCArPSAnXFxuJyArIGxpbmUuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAvLyBza2lwIHRoZSBzcGFjZSB0aGF0IHdhcyBvdXRwdXQgYXMgXFxuXG4gICAgICBzdGFydCA9IGVuZCArIDE7ICAgICAgICAgICAgICAgICAgICAvLyBkZXJpdmUgc3RhcnQgPD0gbGVuZ3RoLTFcbiAgICB9XG4gICAgY3VyciA9IG5leHQ7XG4gIH1cblxuICAvLyBCeSB0aGUgaW52YXJpYW50cywgc3RhcnQgPD0gbGVuZ3RoLTEsIHNvIHRoZXJlIGlzIHNvbWV0aGluZyBsZWZ0IG92ZXIuXG4gIC8vIEl0IGlzIGVpdGhlciB0aGUgd2hvbGUgc3RyaW5nIG9yIGEgcGFydCBzdGFydGluZyBmcm9tIG5vbi13aGl0ZXNwYWNlLlxuICByZXN1bHQgKz0gJ1xcbic7XG4gIC8vIEluc2VydCBhIGJyZWFrIGlmIHRoZSByZW1haW5kZXIgaXMgdG9vIGxvbmcgYW5kIHRoZXJlIGlzIGEgYnJlYWsgYXZhaWxhYmxlLlxuICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKSArICdcXG4nICsgbGluZS5zbGljZShjdXJyICsgMSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsgLy8gZHJvcCBleHRyYSBcXG4gam9pbmVyXG59XG5cbi8vIEVzY2FwZXMgYSBkb3VibGUtcXVvdGVkIHN0cmluZy5cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY2hhciA9IDA7XG4gIHZhciBlc2NhcGVTZXE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBjaGFyID49IDB4MTAwMDAgPyBpICs9IDIgOiBpKyspIHtcbiAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICBlc2NhcGVTZXEgPSBFU0NBUEVfU0VRVUVOQ0VTW2NoYXJdO1xuXG4gICAgaWYgKCFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmdbaV07XG4gICAgICBpZiAoY2hhciA+PSAweDEwMDAwKSByZXN1bHQgKz0gc3RyaW5nW2kgKyAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IGVzY2FwZVNlcSB8fCBlbmNvZGVIZXgoY2hhcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSAnJyxcbiAgICAgIF90YWcgICAgPSBzdGF0ZS50YWcsXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIHZhbHVlO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHZhbHVlID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgdmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgU3RyaW5nKGluZGV4KSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIG9ubHkgdmFsaWQgZWxlbWVudHMsIHB1dCBudWxsIGluc3RlYWQgb2YgaW52YWxpZCBlbGVtZW50cy5cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgdmFsdWUsIGZhbHNlLCBmYWxzZSkgfHxcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG51bGwsIGZhbHNlLCBmYWxzZSkpKSB7XG5cbiAgICAgIGlmIChfcmVzdWx0ICE9PSAnJykgX3Jlc3VsdCArPSAnLCcgKyAoIXN0YXRlLmNvbmRlbnNlRmxvdyA/ICcgJyA6ICcnKTtcbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gJ1snICsgX3Jlc3VsdCArICddJztcbn1cblxuZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICB2YWx1ZTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIHZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIFN0cmluZyhpbmRleCksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLCBwdXQgbnVsbCBpbnN0ZWFkIG9mIGludmFsaWQgZWxlbWVudHMuXG4gICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICB3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpKSkge1xuXG4gICAgICBpZiAoIWNvbXBhY3QgfHwgX3Jlc3VsdCAhPT0gJycpIHtcbiAgICAgICAgX3Jlc3VsdCArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVzdWx0ICs9ICctICc7XG4gICAgICB9XG5cbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCAnW10nOyAvLyBFbXB0eSBzZXF1ZW5jZSBpZiBubyB2YWxpZCB2YWx1ZXMuXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgICAgICAgPSAnJyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgb2JqZWN0S2V5LFxuICAgICAgb2JqZWN0VmFsdWUsXG4gICAgICBwYWlyQnVmZmVyO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcblxuICAgIHBhaXJCdWZmZXIgPSAnJztcbiAgICBpZiAoX3Jlc3VsdCAhPT0gJycpIHBhaXJCdWZmZXIgKz0gJywgJztcblxuICAgIGlmIChzdGF0ZS5jb25kZW5zZUZsb3cpIHBhaXJCdWZmZXIgKz0gJ1wiJztcblxuICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdO1xuICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07XG5cbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIG9iamVjdFZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIGtleTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcC5sZW5ndGggPiAxMDI0KSBwYWlyQnVmZmVyICs9ICc/ICc7XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXAgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gJ1wiJyA6ICcnKSArICc6JyArIChzdGF0ZS5jb25kZW5zZUZsb3cgPyAnJyA6ICcgJyk7XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdFZhbHVlLCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIHZhbHVlLlxuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9ICd7JyArIF9yZXN1bHQgKyAnfSc7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgZXhwbGljaXRQYWlyLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICAvLyBBbGxvdyBzb3J0aW5nIGtleXMgc28gdGhhdCB0aGUgb3V0cHV0IGZpbGUgaXMgZGV0ZXJtaW5pc3RpY1xuICBpZiAoc3RhdGUuc29ydEtleXMgPT09IHRydWUpIHtcbiAgICAvLyBEZWZhdWx0IHNvcnRpbmdcbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUuc29ydEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBDdXN0b20gc29ydCBmdW5jdGlvblxuICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZS5zb3J0S2V5cyk7XG4gIH0gZWxzZSBpZiAoc3RhdGUuc29ydEtleXMpIHtcbiAgICAvLyBTb21ldGhpbmcgaXMgd3JvbmdcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignc29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSAnJykge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/JykgfHxcbiAgICAgICAgICAgICAgICAgICAoc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8gJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6JztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOiAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ3t9JzsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbn1cblxuZnVuY3Rpb24gZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUsIHN0eWxlO1xuXG4gIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiAgfHwgdHlwZS5wcmVkaWNhdGUpICYmXG4gICAgICAgICghdHlwZS5pbnN0YW5jZU9mIHx8ICgodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpICYmIChvYmplY3QgaW5zdGFuY2VvZiB0eXBlLmluc3RhbmNlT2YpKSkgJiZcbiAgICAgICAgKCF0eXBlLnByZWRpY2F0ZSAgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSkpIHtcblxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlLm11bHRpICYmIHR5cGUucmVwcmVzZW50TmFtZSkge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSAnPyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLnJlcHJlc2VudCkge1xuICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGUudGFnXSB8fCB0eXBlLmRlZmF1bHRTdHlsZTtcblxuICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwodHlwZS5yZXByZXNlbnQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCchPCcgKyB0eXBlLnRhZyArICc+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCBcIicgKyBzdHlsZSArICdcIiBzdHlsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gU2VyaWFsaXplcyBgb2JqZWN0YCBhbmQgd3JpdGVzIGl0IHRvIGdsb2JhbCBgcmVzdWx0YC5cbi8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBpbnZhbGlkIG9iamVjdC5cbi8vXG5mdW5jdGlvbiB3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3QsIGJsb2NrLCBjb21wYWN0LCBpc2tleSwgaXNibG9ja3NlcSkge1xuICBzdGF0ZS50YWcgPSBudWxsO1xuICBzdGF0ZS5kdW1wID0gb2JqZWN0O1xuXG4gIGlmICghZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBmYWxzZSkpIHtcbiAgICBkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIHRydWUpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBfdG9TdHJpbmcuY2FsbChzdGF0ZS5kdW1wKTtcbiAgdmFyIGluYmxvY2sgPSBibG9jaztcbiAgdmFyIHRhZ1N0cjtcblxuICBpZiAoYmxvY2spIHtcbiAgICBibG9jayA9IChzdGF0ZS5mbG93TGV2ZWwgPCAwIHx8IHN0YXRlLmZsb3dMZXZlbCA+IGxldmVsKTtcbiAgfVxuXG4gIHZhciBvYmplY3RPckFycmF5ID0gdHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICAgIGR1cGxpY2F0ZUluZGV4LFxuICAgICAgZHVwbGljYXRlO1xuXG4gIGlmIChvYmplY3RPckFycmF5KSB7XG4gICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG4gIH1cblxuICBpZiAoKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/JykgfHwgZHVwbGljYXRlIHx8IChzdGF0ZS5pbmRlbnQgIT09IDIgJiYgbGV2ZWwgPiAwKSkge1xuICAgIGNvbXBhY3QgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChkdXBsaWNhdGUgJiYgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgc3RhdGUuZHVtcCA9ICcqcmVmXycgKyBkdXBsaWNhdGVJbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpZiAob2JqZWN0T3JBcnJheSAmJiBkdXBsaWNhdGUgJiYgIXN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkge1xuICAgICAgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKE9iamVjdC5rZXlzKHN0YXRlLmR1bXApLmxlbmd0aCAhPT0gMCkpIHtcbiAgICAgICAgd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gJyZyZWZfJyArIGR1cGxpY2F0ZUluZGV4ICsgJyAnICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgaWYgKGJsb2NrICYmIChzdGF0ZS5kdW1wLmxlbmd0aCAhPT0gMCkpIHtcbiAgICAgICAgaWYgKHN0YXRlLm5vQXJyYXlJbmRlbnQgJiYgIWlzYmxvY2tzZXEgJiYgbGV2ZWwgPiAwKSB7XG4gICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCAtIDEsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gJyZyZWZfJyArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gJz8nKSB7XG4gICAgICAgIHdyaXRlU2NhbGFyKHN0YXRlLCBzdGF0ZS5kdW1wLCBsZXZlbCwgaXNrZXksIGluYmxvY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgVW5kZWZpbmVkXScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigndW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgJyArIHR5cGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSAnPycpIHtcbiAgICAgIC8vIE5lZWQgdG8gZW5jb2RlIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB0aG9zZSBhbGxvd2VkIGJ5IHRoZSBzcGVjOlxuICAgICAgLy9cbiAgICAgIC8vIFszNV0gbnMtZGVjLWRpZ2l0ICAgIDo6PSAgWyN4MzAtI3gzOV0gLyogMC05ICovXG4gICAgICAvLyBbMzZdIG5zLWhleC1kaWdpdCAgICA6Oj0gIG5zLWRlYy1kaWdpdFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfCBbI3g0MS0jeDQ2XSAvKiBBLUYgKi8gfCBbI3g2MS0jeDY2XSAvKiBhLWYgKi9cbiAgICAgIC8vIFszN10gbnMtYXNjaWktbGV0dGVyIDo6PSAgWyN4NDEtI3g1QV0gLyogQS1aICovIHwgWyN4NjEtI3g3QV0gLyogYS16ICovXG4gICAgICAvLyBbMzhdIG5zLXdvcmQtY2hhciAgICA6Oj0gIG5zLWRlYy1kaWdpdCB8IG5zLWFzY2lpLWxldHRlciB8IOKAnC3igJ1cbiAgICAgIC8vIFszOV0gbnMtdXJpLWNoYXIgICAgIDo6PSAg4oCcJeKAnSBucy1oZXgtZGlnaXQgbnMtaGV4LWRpZ2l0IHwgbnMtd29yZC1jaGFyIHwg4oCcI+KAnVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfCDigJw74oCdIHwg4oCcL+KAnSB8IOKAnD/igJ0gfCDigJw64oCdIHwg4oCcQOKAnSB8IOKAnCbigJ0gfCDigJw94oCdIHwg4oCcK+KAnSB8IOKAnCTigJ0gfCDigJws4oCdXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB8IOKAnF/igJ0gfCDigJwu4oCdIHwg4oCcIeKAnSB8IOKAnH7igJ0gfCDigJwq4oCdIHwg4oCcJ+KAnSB8IOKAnCjigJ0gfCDigJwp4oCdIHwg4oCcW+KAnSB8IOKAnF3igJ1cbiAgICAgIC8vXG4gICAgICAvLyBBbHNvIG5lZWQgdG8gZW5jb2RlICchJyBiZWNhdXNlIGl0IGhhcyBzcGVjaWFsIG1lYW5pbmcgKGVuZCBvZiB0YWcgcHJlZml4KS5cbiAgICAgIC8vXG4gICAgICB0YWdTdHIgPSBlbmNvZGVVUkkoXG4gICAgICAgIHN0YXRlLnRhZ1swXSA9PT0gJyEnID8gc3RhdGUudGFnLnNsaWNlKDEpIDogc3RhdGUudGFnXG4gICAgICApLnJlcGxhY2UoLyEvZywgJyUyMScpO1xuXG4gICAgICBpZiAoc3RhdGUudGFnWzBdID09PSAnIScpIHtcbiAgICAgICAgdGFnU3RyID0gJyEnICsgdGFnU3RyO1xuICAgICAgfSBlbHNlIGlmICh0YWdTdHIuc2xpY2UoMCwgMTgpID09PSAndGFnOnlhbWwub3JnLDIwMDI6Jykge1xuICAgICAgICB0YWdTdHIgPSAnISEnICsgdGFnU3RyLnNsaWNlKDE4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ1N0ciA9ICchPCcgKyB0YWdTdHIgKyAnPic7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmR1bXAgPSB0YWdTdHIgKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKG9iamVjdCwgc3RhdGUpIHtcbiAgdmFyIG9iamVjdHMgPSBbXSxcbiAgICAgIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZHVwbGljYXRlc0luZGV4ZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4XV0pO1xuICB9XG4gIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpIHtcbiAgdmFyIG9iamVjdEtleUxpc3QsXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aDtcblxuICBpZiAob2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgaW5kZXggPSBvYmplY3RzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleCkgPT09IC0xKSB7XG4gICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3RbaW5kZXhdLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3Rbb2JqZWN0S2V5TGlzdFtpbmRleF1dLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZHVtcChpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG5cbiAgaWYgKCFzdGF0ZS5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlKTtcblxuICB2YXIgdmFsdWUgPSBpbnB1dDtcblxuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyAnJzogdmFsdWUgfSwgJycsIHZhbHVlKTtcbiAgfVxuXG4gIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIHZhbHVlLCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlLmR1bXAgKyAnXFxuJztcblxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzLmR1bXAgPSBkdW1wO1xuIl0sIm5hbWVzIjpbImNvbW1vbiIsInJlcXVpcmUiLCJZQU1MRXhjZXB0aW9uIiwiREVGQVVMVF9TQ0hFTUEiLCJfdG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsIl9oYXNPd25Qcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiQ0hBUl9CT00iLCJDSEFSX1RBQiIsIkNIQVJfTElORV9GRUVEIiwiQ0hBUl9DQVJSSUFHRV9SRVRVUk4iLCJDSEFSX1NQQUNFIiwiQ0hBUl9FWENMQU1BVElPTiIsIkNIQVJfRE9VQkxFX1FVT1RFIiwiQ0hBUl9TSEFSUCIsIkNIQVJfUEVSQ0VOVCIsIkNIQVJfQU1QRVJTQU5EIiwiQ0hBUl9TSU5HTEVfUVVPVEUiLCJDSEFSX0FTVEVSSVNLIiwiQ0hBUl9DT01NQSIsIkNIQVJfTUlOVVMiLCJDSEFSX0NPTE9OIiwiQ0hBUl9FUVVBTFMiLCJDSEFSX0dSRUFURVJfVEhBTiIsIkNIQVJfUVVFU1RJT04iLCJDSEFSX0NPTU1FUkNJQUxfQVQiLCJDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQiLCJDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUIiwiQ0hBUl9HUkFWRV9BQ0NFTlQiLCJDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCIsIkNIQVJfVkVSVElDQUxfTElORSIsIkNIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCIsIkVTQ0FQRV9TRVFVRU5DRVMiLCJERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWCIsIkRFUFJFQ0FURURfQkFTRTYwX1NZTlRBWCIsImNvbXBpbGVTdHlsZU1hcCIsInNjaGVtYSIsIm1hcCIsInJlc3VsdCIsImtleXMiLCJpbmRleCIsImxlbmd0aCIsInRhZyIsInN0eWxlIiwidHlwZSIsIlN0cmluZyIsInNsaWNlIiwiY29tcGlsZWRUeXBlTWFwIiwiY2FsbCIsInN0eWxlQWxpYXNlcyIsImVuY29kZUhleCIsImNoYXJhY3RlciIsInN0cmluZyIsImhhbmRsZSIsInRvVXBwZXJDYXNlIiwicmVwZWF0IiwiUVVPVElOR19UWVBFX1NJTkdMRSIsIlFVT1RJTkdfVFlQRV9ET1VCTEUiLCJTdGF0ZSIsIm9wdGlvbnMiLCJpbmRlbnQiLCJNYXRoIiwibWF4Iiwibm9BcnJheUluZGVudCIsInNraXBJbnZhbGlkIiwiZmxvd0xldmVsIiwiaXNOb3RoaW5nIiwic3R5bGVNYXAiLCJzb3J0S2V5cyIsImxpbmVXaWR0aCIsIm5vUmVmcyIsIm5vQ29tcGF0TW9kZSIsImNvbmRlbnNlRmxvdyIsInF1b3RpbmdUeXBlIiwiZm9yY2VRdW90ZXMiLCJyZXBsYWNlciIsImltcGxpY2l0VHlwZXMiLCJjb21waWxlZEltcGxpY2l0IiwiZXhwbGljaXRUeXBlcyIsImNvbXBpbGVkRXhwbGljaXQiLCJkdXBsaWNhdGVzIiwidXNlZER1cGxpY2F0ZXMiLCJpbmRlbnRTdHJpbmciLCJzcGFjZXMiLCJpbmQiLCJwb3NpdGlvbiIsIm5leHQiLCJsaW5lIiwiaW5kZXhPZiIsImdlbmVyYXRlTmV4dExpbmUiLCJzdGF0ZSIsImxldmVsIiwidGVzdEltcGxpY2l0UmVzb2x2aW5nIiwic3RyIiwicmVzb2x2ZSIsImlzV2hpdGVzcGFjZSIsImMiLCJpc1ByaW50YWJsZSIsImlzTnNDaGFyT3JXaGl0ZXNwYWNlIiwiaXNQbGFpblNhZmUiLCJwcmV2IiwiaW5ibG9jayIsImNJc05zQ2hhck9yV2hpdGVzcGFjZSIsImNJc05zQ2hhciIsImlzUGxhaW5TYWZlRmlyc3QiLCJpc1BsYWluU2FmZUxhc3QiLCJjb2RlUG9pbnRBdCIsInBvcyIsImZpcnN0IiwiY2hhckNvZGVBdCIsInNlY29uZCIsIm5lZWRJbmRlbnRJbmRpY2F0b3IiLCJsZWFkaW5nU3BhY2VSZSIsInRlc3QiLCJTVFlMRV9QTEFJTiIsIlNUWUxFX1NJTkdMRSIsIlNUWUxFX0xJVEVSQUwiLCJTVFlMRV9GT0xERUQiLCJTVFlMRV9ET1VCTEUiLCJjaG9vc2VTY2FsYXJTdHlsZSIsInNpbmdsZUxpbmVPbmx5IiwiaW5kZW50UGVyTGV2ZWwiLCJ0ZXN0QW1iaWd1b3VzVHlwZSIsImkiLCJjaGFyIiwicHJldkNoYXIiLCJoYXNMaW5lQnJlYWsiLCJoYXNGb2xkYWJsZUxpbmUiLCJzaG91bGRUcmFja1dpZHRoIiwicHJldmlvdXNMaW5lQnJlYWsiLCJwbGFpbiIsIndyaXRlU2NhbGFyIiwiaXNrZXkiLCJkdW1wIiwibWluIiwidGVzdEFtYmlndWl0eSIsInJlcGxhY2UiLCJibG9ja0hlYWRlciIsImRyb3BFbmRpbmdOZXdsaW5lIiwiZm9sZFN0cmluZyIsImVzY2FwZVN0cmluZyIsImluZGVudEluZGljYXRvciIsImNsaXAiLCJrZWVwIiwiY2hvbXAiLCJ3aWR0aCIsImxpbmVSZSIsIm5leHRMRiIsImxhc3RJbmRleCIsImZvbGRMaW5lIiwicHJldk1vcmVJbmRlbnRlZCIsIm1vcmVJbmRlbnRlZCIsIm1hdGNoIiwiZXhlYyIsInByZWZpeCIsImJyZWFrUmUiLCJzdGFydCIsImVuZCIsImN1cnIiLCJlc2NhcGVTZXEiLCJ3cml0ZUZsb3dTZXF1ZW5jZSIsIm9iamVjdCIsIl9yZXN1bHQiLCJfdGFnIiwidmFsdWUiLCJ3cml0ZU5vZGUiLCJ3cml0ZUJsb2NrU2VxdWVuY2UiLCJjb21wYWN0Iiwid3JpdGVGbG93TWFwcGluZyIsIm9iamVjdEtleUxpc3QiLCJvYmplY3RLZXkiLCJvYmplY3RWYWx1ZSIsInBhaXJCdWZmZXIiLCJ3cml0ZUJsb2NrTWFwcGluZyIsImV4cGxpY2l0UGFpciIsInNvcnQiLCJkZXRlY3RUeXBlIiwiZXhwbGljaXQiLCJ0eXBlTGlzdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJtdWx0aSIsInJlcHJlc2VudE5hbWUiLCJyZXByZXNlbnQiLCJkZWZhdWx0U3R5bGUiLCJibG9jayIsImlzYmxvY2tzZXEiLCJ0YWdTdHIiLCJvYmplY3RPckFycmF5IiwiZHVwbGljYXRlSW5kZXgiLCJkdXBsaWNhdGUiLCJlbmNvZGVVUkkiLCJnZXREdXBsaWNhdGVSZWZlcmVuY2VzIiwib2JqZWN0cyIsImR1cGxpY2F0ZXNJbmRleGVzIiwiaW5zcGVjdE5vZGUiLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5wdXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/dumper.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/exception.js":
 | 
						
						
						
							|  |  | /*!***********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/exception.js ***!
 | 
						
						
						
							|  |  |   \***********************************************/
 | 
						
						
						
							|  |  | /***/ ((module) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("// YAML error class. http://stackoverflow.com/questions/8458984\n//\n\nfunction formatError(exception, compact) {\n    var where = \"\", message = exception.reason || \"(unknown reason)\";\n    if (!exception.mark) return message;\n    if (exception.mark.name) {\n        where += 'in \"' + exception.mark.name + '\" ';\n    }\n    where += \"(\" + (exception.mark.line + 1) + \":\" + (exception.mark.column + 1) + \")\";\n    if (!compact && exception.mark.snippet) {\n        where += \"\\n\\n\" + exception.mark.snippet;\n    }\n    return message + \" \" + where;\n}\nfunction YAMLException(reason, mark) {\n    // Super constructor\n    Error.call(this);\n    this.name = \"YAMLException\";\n    this.reason = reason;\n    this.mark = mark;\n    this.message = formatError(this, false);\n    // Include stack trace in error object\n    if (Error.captureStackTrace) {\n        // Chrome and NodeJS\n        Error.captureStackTrace(this, this.constructor);\n    } else {\n        // FF, IE 10+ and Safari 6+. Fallback for others\n        this.stack = new Error().stack || \"\";\n    }\n}\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\nYAMLException.prototype.toString = function toString(compact) {\n    return this.name + \": \" + formatError(this, compact);\n};\nmodule.exports = YAMLException;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvZXhjZXB0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCxFQUFFO0FBQ0Y7QUFHQSxTQUFTQSxZQUFZQyxTQUFTLEVBQUVDLE9BQU87SUFDckMsSUFBSUMsUUFBUSxJQUFJQyxVQUFVSCxVQUFVSSxNQUFNLElBQUk7SUFFOUMsSUFBSSxDQUFDSixVQUFVSyxJQUFJLEVBQUUsT0FBT0Y7SUFFNUIsSUFBSUgsVUFBVUssSUFBSSxDQUFDQyxJQUFJLEVBQUU7UUFDdkJKLFNBQVMsU0FBU0YsVUFBVUssSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDMUM7SUFFQUosU0FBUyxNQUFPRixDQUFBQSxVQUFVSyxJQUFJLENBQUNFLElBQUksR0FBRyxLQUFLLE1BQU9QLENBQUFBLFVBQVVLLElBQUksQ0FBQ0csTUFBTSxHQUFHLEtBQUs7SUFFL0UsSUFBSSxDQUFDUCxXQUFXRCxVQUFVSyxJQUFJLENBQUNJLE9BQU8sRUFBRTtRQUN0Q1AsU0FBUyxTQUFTRixVQUFVSyxJQUFJLENBQUNJLE9BQU87SUFDMUM7SUFFQSxPQUFPTixVQUFVLE1BQU1EO0FBQ3pCO0FBR0EsU0FBU1EsY0FBY04sTUFBTSxFQUFFQyxJQUFJO0lBQ2pDLG9CQUFvQjtJQUNwQk0sTUFBTUMsSUFBSSxDQUFDLElBQUk7SUFFZixJQUFJLENBQUNOLElBQUksR0FBRztJQUNaLElBQUksQ0FBQ0YsTUFBTSxHQUFHQTtJQUNkLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtJQUNaLElBQUksQ0FBQ0YsT0FBTyxHQUFHSixZQUFZLElBQUksRUFBRTtJQUVqQyxzQ0FBc0M7SUFDdEMsSUFBSVksTUFBTUUsaUJBQWlCLEVBQUU7UUFDM0Isb0JBQW9CO1FBQ3BCRixNQUFNRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDQyxXQUFXO0lBQ2hELE9BQU87UUFDTCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBS0osUUFBU0ksS0FBSyxJQUFJO0lBQ3RDO0FBQ0Y7QUFHQSxxQkFBcUI7QUFDckJMLGNBQWNNLFNBQVMsR0FBR0MsT0FBT0MsTUFBTSxDQUFDUCxNQUFNSyxTQUFTO0FBQ3ZETixjQUFjTSxTQUFTLENBQUNGLFdBQVcsR0FBR0o7QUFHdENBLGNBQWNNLFNBQVMsQ0FBQ0csUUFBUSxHQUFHLFNBQVNBLFNBQVNsQixPQUFPO0lBQzFELE9BQU8sSUFBSSxDQUFDSyxJQUFJLEdBQUcsT0FBT1AsWUFBWSxJQUFJLEVBQUVFO0FBQzlDO0FBR0FtQixPQUFPQyxPQUFPLEdBQUdYIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvZXhjZXB0aW9uLmpzPzlhNGEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gWUFNTCBlcnJvciBjbGFzcy4gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDU4OTg0XG4vL1xuJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKGV4Y2VwdGlvbiwgY29tcGFjdCkge1xuICB2YXIgd2hlcmUgPSAnJywgbWVzc2FnZSA9IGV4Y2VwdGlvbi5yZWFzb24gfHwgJyh1bmtub3duIHJlYXNvbiknO1xuXG4gIGlmICghZXhjZXB0aW9uLm1hcmspIHJldHVybiBtZXNzYWdlO1xuXG4gIGlmIChleGNlcHRpb24ubWFyay5uYW1lKSB7XG4gICAgd2hlcmUgKz0gJ2luIFwiJyArIGV4Y2VwdGlvbi5tYXJrLm5hbWUgKyAnXCIgJztcbiAgfVxuXG4gIHdoZXJlICs9ICcoJyArIChleGNlcHRpb24ubWFyay5saW5lICsgMSkgKyAnOicgKyAoZXhjZXB0aW9uLm1hcmsuY29sdW1uICsgMSkgKyAnKSc7XG5cbiAgaWYgKCFjb21wYWN0ICYmIGV4Y2VwdGlvbi5tYXJrLnNuaXBwZXQpIHtcbiAgICB3aGVyZSArPSAnXFxuXFxuJyArIGV4Y2VwdGlvbi5tYXJrLnNuaXBwZXQ7XG4gIH1cblxuICByZXR1cm4gbWVzc2FnZSArICcgJyArIHdoZXJlO1xufVxuXG5cbmZ1bmN0aW9uIFlBTUxFeGNlcHRpb24ocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuXG4gIC8vIEluY2x1ZGUgc3RhY2sgdHJhY2UgaW4gZXJyb3Igb2JqZWN0XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIC8vIENocm9tZSBhbmQgTm9kZUpTXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gRkYsIElFIDEwKyBhbmQgU2FmYXJpIDYrLiBGYWxsYmFjayBmb3Igb3RoZXJzXG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2sgfHwgJyc7XG4gIH1cbn1cblxuXG4vLyBJbmhlcml0IGZyb20gRXJyb3JcbllBTUxFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBZQU1MRXhjZXB0aW9uO1xuXG5cbllBTUxFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICByZXR1cm4gdGhpcy5uYW1lICsgJzogJyArIGZvcm1hdEVycm9yKHRoaXMsIGNvbXBhY3QpO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFlBTUxFeGNlcHRpb247XG4iXSwibmFtZXMiOlsiZm9ybWF0RXJyb3IiLCJleGNlcHRpb24iLCJjb21wYWN0Iiwid2hlcmUiLCJtZXNzYWdlIiwicmVhc29uIiwibWFyayIsIm5hbWUiLCJsaW5lIiwiY29sdW1uIiwic25pcHBldCIsIllBTUxFeGNlcHRpb24iLCJFcnJvciIsImNhbGwiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwic3RhY2siLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJ0b1N0cmluZyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/exception.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/loader.js":
 | 
						
						
						
							|  |  | /*!********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/loader.js ***!
 | 
						
						
						
							|  |  |   \********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\n/*eslint-disable max-len,no-use-before-define*/ var common = __webpack_require__(/*! ./common */ \"(ssr)/./node_modules/js-yaml/lib/common.js\");\nvar YAMLException = __webpack_require__(/*! ./exception */ \"(ssr)/./node_modules/js-yaml/lib/exception.js\");\nvar makeSnippet = __webpack_require__(/*! ./snippet */ \"(ssr)/./node_modules/js-yaml/lib/snippet.js\");\nvar DEFAULT_SCHEMA = __webpack_require__(/*! ./schema/default */ \"(ssr)/./node_modules/js-yaml/lib/schema/default.js\");\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n    return Object.prototype.toString.call(obj);\n}\nfunction is_EOL(c) {\n    return c === 0x0A /* LF */  || c === 0x0D /* CR */ ;\n}\nfunction is_WHITE_SPACE(c) {\n    return c === 0x09 /* Tab */  || c === 0x20 /* Space */ ;\n}\nfunction is_WS_OR_EOL(c) {\n    return c === 0x09 /* Tab */  || c === 0x20 /* Space */  || c === 0x0A /* LF */  || c === 0x0D /* CR */ ;\n}\nfunction is_FLOW_INDICATOR(c) {\n    return c === 0x2C /* , */  || c === 0x5B /* [ */  || c === 0x5D /* ] */  || c === 0x7B /* { */  || c === 0x7D /* } */ ;\n}\nfunction fromHexCode(c) {\n    var lc;\n    if (0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ) {\n        return c - 0x30;\n    }\n    /*eslint-disable no-bitwise*/ lc = c | 0x20;\n    if (0x61 /* a */  <= lc && lc <= 0x66 /* f */ ) {\n        return lc - 0x61 + 10;\n    }\n    return -1;\n}\nfunction escapedHexLen(c) {\n    if (c === 0x78 /* x */ ) {\n        return 2;\n    }\n    if (c === 0x75 /* u */ ) {\n        return 4;\n    }\n    if (c === 0x55 /* U */ ) {\n        return 8;\n    }\n    return 0;\n}\nfunction fromDecimalCode(c) {\n    if (0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ) {\n        return c - 0x30;\n    }\n    return -1;\n}\nfunction simpleEscapeSequence(c) {\n    /* eslint-disable indent */ return c === 0x30 /* 0 */  ? \"\\x00\" : c === 0x61 /* a */  ? \"\\x07\" : c === 0x62 /* b */  ? \"\\b\" : c === 0x74 /* t */  ? \"\t\" : c === 0x09 /* Tab */  ? \"\t\" : c === 0x6E /* n */  ? \"\\n\" : c === 0x76 /* v */  ? \"\\v\" : c === 0x66 /* f */  ? \"\\f\" : c === 0x72 /* r */  ? \"\\r\" : c === 0x65 /* e */  ? \"\\x1b\" : c === 0x20 /* Space */  ? \" \" : c === 0x22 /* \" */  ? '\"' : c === 0x2F /* / */  ? \"/\" : c === 0x5C /* \\ */  ? \"\\\\\" : c === 0x4E /* N */  ? \"\\x85\" : c === 0x5F /* _ */  ? \"\\xa0\" : c === 0x4C /* L */  ? \"\\u2028\" : c === 0x50 /* P */  ? \"\\u2029\" : \"\";\n}\nfunction charFromCodepoint(c) {\n    if (c <= 0xFFFF) {\n        return String.fromCharCode(c);\n    }\n    // Encode UTF-16 surrogate pair\n    // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n    return String.fromCharCode((c - 0x010000 >> 10) + 0xD800, (c - 0x010000 & 0x03FF) + 0xDC00);\n}\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor(var i = 0; i < 256; i++){\n    simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n    simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nfunction State(input, options) {\n    this.input = input;\n    this.filename = options[\"filename\"] || null;\n    this.schema = options[\"schema\"] || DEFAULT_SCHEMA;\n    this.onWarning = options[\"onWarning\"] || null;\n    // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n    // if such documents have no explicit %YAML directive\n    this.legacy = options[\"legacy\"] || false;\n    this.json = options[\"json\"] || false;\n    this.listener = options[\"listener\"] || null;\n    this.implicitTypes = this.schema.compiledImplicit;\n    this.typeMap = this.schema.compiledTypeMap;\n    this.length = input.length;\n    this.position = 0;\n    this.line = 0;\n    this.lineStart = 0;\n    this.lineIndent = 0;\n    // position of first leading tab in the current line,\n    // used to make sure there are no tabs in the indentation\n    this.firstTabInLine = -1;\n    this.documents = [];\n/*\n  this.version;\n  this.checkLineBreaks;\n  this.tagMap;\n  this.anchorMap;\n  this.tag;\n  this.anchor;\n  this.kind;\n  this.result;*/ }\nfunction generateError(state, message) {\n    var mark = {\n        name: state.filename,\n        buffer: state.input.slice(0, -1),\n        position: state.position,\n        line: state.line,\n        column: state.position - state.lineStart\n    };\n    mark.snippet = makeSnippet(mark);\n    return new YAMLException(message, mark);\n}\nfunction throwError(state, message) {\n    throw generateError(state, message);\n}\nfunction throwWarning(state, message) {\n    if (state.onWarning) {\n        state.onWarning.call(null, generateError(state, message));\n    }\n}\nvar directiveHandlers = {\n    YAML: function handleYamlDirective(state, name, args) {\n        var match, major, minor;\n        if (state.version !== null) {\n            throwError(state, \"duplication of %YAML directive\");\n        }\n        if (args.length !== 1) {\n            throwError(state, \"YAML directive accepts exactly one argument\");\n        }\n        match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n        if (match === null) {\n            throwError(state, \"ill-formed argument of the YAML directive\");\n        }\n        major = parseInt(match[1], 10);\n        minor = parseInt(match[2], 10);\n        if (major !== 1) {\n            throwError(state, \"unacceptable YAML version of the document\");\n        }\n        state.version = args[0];\n        state.checkLineBreaks = minor < 2;\n        if (minor !== 1 && minor !== 2) {\n            throwWarning(state, \"unsupported YAML version of the document\");\n        }\n    },\n    TAG: function handleTagDirective(state, name, args) {\n        var handle, prefix;\n        if (args.length !== 2) {\n            throwError(state, \"TAG directive accepts exactly two arguments\");\n        }\n        handle = args[0];\n        prefix = args[1];\n        if (!PATTERN_TAG_HANDLE.test(handle)) {\n            throwError(state, \"ill-formed tag handle (first argument) of the TAG directive\");\n        }\n        if (_hasOwnProperty.call(state.tagMap, handle)) {\n            throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n        }\n        if (!PATTERN_TAG_URI.test(prefix)) {\n            throwError(state, \"ill-formed tag prefix (second argument) of the TAG directive\");\n        }\n        try {\n            prefix = decodeURIComponent(prefix);\n        } catch (err) {\n            throwError(state, \"tag prefix is malformed: \" + prefix);\n        }\n        state.tagMap[handle] = prefix;\n    }\n};\nfunction captureSegment(state, start, end, checkJson) {\n    var _position, _length, _character, _result;\n    if (start < end) {\n        _result = state.input.slice(start, end);\n        if (checkJson) {\n            for(_position = 0, _length = _result.length; _position < _length; _position += 1){\n                _character = _result.charCodeAt(_position);\n                if (!(_character === 0x09 || 0x20 <= _character && _character <= 0x10FFFF)) {\n                    throwError(state, \"expected valid JSON character\");\n                }\n            }\n        } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n            throwError(state, \"the stream contains non-printable characters\");\n        }\n        state.result += _result;\n    }\n}\nfunction mergeMappings(state, destination, source, overridableKeys) {\n    var sourceKeys, key, index, quantity;\n    if (!common.isObject(source)) {\n        throwError(state, \"cannot merge mappings; the provided source object is unacceptable\");\n    }\n    sourceKeys = Object.keys(source);\n    for(index = 0, quantity = sourceKeys.length; index < quantity; index += 1){\n        key = sourceKeys[index];\n        if (!_hasOwnProperty.call(destination, key)) {\n            destination[key] = source[key];\n            overridableKeys[key] = true;\n        }\n    }\n}\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n    var index, quantity;\n    // The output is a plain object here, so keys can only be strings.\n    // We need to convert keyNode to a string, but doing so can hang the process\n    // (deeply nested arrays that explode exponentially using aliases).\n    if (Array.isArray(keyNode)) {\n        keyNode = Array.prototype.slice.call(keyNode);\n        for(index = 0, quantity = keyNode.length; index < quantity; index += 1){\n            if (Array.isArray(keyNode[index])) {\n                throwError(state, \"nested arrays are not supported inside keys\");\n            }\n            if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n                keyNode[index] = \"[object Object]\";\n            }\n        }\n    }\n    // Avoid code execution in load() via toString property\n    // (still use its own toString for arrays, timestamps,\n    // and whatever user schema extensions happen to have @@toStringTag)\n    if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n        keyNode = \"[object Object]\";\n    }\n    keyNode = String(keyNode);\n    if (_result === null) {\n        _result = {};\n    }\n    if (keyTag === \"tag:yaml.org,2002:merge\") {\n        if (Array.isArray(valueNode)) {\n            for(index = 0, quantity = valueNode.length; index < quantity; index += 1){\n                mergeMappings(state, _result, valueNode[index], overridableKeys);\n            }\n        } else {\n            mergeMappings(state, _result, valueNode, overridableKeys);\n        }\n    } else {\n        if (!state.json && !_hasOwnProperty.call(overridableKeys, keyNode) && _hasOwnProperty.call(_result, keyNode)) {\n            state.line = startLine || state.line;\n            state.lineStart = startLineStart || state.lineStart;\n            state.position = startPos || state.position;\n            throwError(state, \"duplicated mapping key\");\n        }\n        // used for this specific key only because Object.defineProperty is slow\n        if (keyNode === \"__proto__\") {\n            Object.defineProperty(_result, keyNode, {\n                configurable: true,\n                enumerable: true,\n                writable: true,\n                value: valueNode\n            });\n        } else {\n            _result[keyNode] = valueNode;\n        }\n        delete overridableKeys[keyNode];\n    }\n    return _result;\n}\nfunction readLineBreak(state) {\n    var ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x0A /* LF */ ) {\n        state.position++;\n    } else if (ch === 0x0D /* CR */ ) {\n        state.position++;\n        if (state.input.charCodeAt(state.position) === 0x0A /* LF */ ) {\n            state.position++;\n        }\n    } else {\n        throwError(state, \"a line break is expected\");\n    }\n    state.line += 1;\n    state.lineStart = state.position;\n    state.firstTabInLine = -1;\n}\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n    var lineBreaks = 0, ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        while(is_WHITE_SPACE(ch)){\n            if (ch === 0x09 /* Tab */  && state.firstTabInLine === -1) {\n                state.firstTabInLine = state.position;\n            }\n            ch = state.input.charCodeAt(++state.position);\n        }\n        if (allowComments && ch === 0x23 /* # */ ) {\n            do {\n                ch = state.input.charCodeAt(++state.position);\n            }while (ch !== 0x0A /* LF */  && ch !== 0x0D /* CR */  && ch !== 0);\n        }\n        if (is_EOL(ch)) {\n            readLineBreak(state);\n            ch = state.input.charCodeAt(state.position);\n            lineBreaks++;\n            state.lineIndent = 0;\n            while(ch === 0x20 /* Space */ ){\n                state.lineIndent++;\n                ch = state.input.charCodeAt(++state.position);\n            }\n        } else {\n            break;\n        }\n    }\n    if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n        throwWarning(state, \"deficient indentation\");\n    }\n    return lineBreaks;\n}\nfunction testDocumentSeparator(state) {\n    var _position = state.position, ch;\n    ch = state.input.charCodeAt(_position);\n    // Condition state.position === state.lineStart is tested\n    // in parent on each call, for efficiency. No needs to test here again.\n    if ((ch === 0x2D /* - */  || ch === 0x2E /* . */ ) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {\n        _position += 3;\n        ch = state.input.charCodeAt(_position);\n        if (ch === 0 || is_WS_OR_EOL(ch)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction writeFoldedLines(state, count) {\n    if (count === 1) {\n        state.result += \" \";\n    } else if (count > 1) {\n        state.result += common.repeat(\"\\n\", count - 1);\n    }\n}\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n    var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23 /* # */  || ch === 0x26 /* & */  || ch === 0x2A /* * */  || ch === 0x21 /* ! */  || ch === 0x7C /* | */  || ch === 0x3E /* > */  || ch === 0x27 /* ' */  || ch === 0x22 /* \" */  || ch === 0x25 /* % */  || ch === 0x40 /* @ */  || ch === 0x60 /* ` */ ) {\n        return false;\n    }\n    if (ch === 0x3F /* ? */  || ch === 0x2D /* - */ ) {\n        following = state.input.charCodeAt(state.position + 1);\n        if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n            return false;\n        }\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    captureStart = captureEnd = state.position;\n    hasPendingContent = false;\n    while(ch !== 0){\n        if (ch === 0x3A /* : */ ) {\n            following = state.input.charCodeAt(state.position + 1);\n            if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n                break;\n            }\n        } else if (ch === 0x23 /* # */ ) {\n            preceding = state.input.charCodeAt(state.position - 1);\n            if (is_WS_OR_EOL(preceding)) {\n                break;\n            }\n        } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n            break;\n        } else if (is_EOL(ch)) {\n            _line = state.line;\n            _lineStart = state.lineStart;\n            _lineIndent = state.lineIndent;\n            skipSeparationSpace(state, false, -1);\n            if (state.lineIndent >= nodeIndent) {\n                hasPendingContent = true;\n                ch = state.input.charCodeAt(state.position);\n                continue;\n            } else {\n                state.position = captureEnd;\n                state.line = _line;\n                state.lineStart = _lineStart;\n                state.lineIndent = _lineIndent;\n                break;\n            }\n        }\n        if (hasPendingContent) {\n            captureSegment(state, captureStart, captureEnd, false);\n            writeFoldedLines(state, state.line - _line);\n            captureStart = captureEnd = state.position;\n            hasPendingContent = false;\n        }\n        if (!is_WHITE_SPACE(ch)) {\n            captureEnd = state.position + 1;\n        }\n        ch = state.input.charCodeAt(++state.position);\n    }\n    captureSegment(state, captureStart, captureEnd, false);\n    if (state.result) {\n        return true;\n    }\n    state.kind = _kind;\n    state.result = _result;\n    return false;\n}\nfunction readSingleQuotedScalar(state, nodeIndent) {\n    var ch, captureStart, captureEnd;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x27 /* ' */ ) {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    state.position++;\n    captureStart = captureEnd = state.position;\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        if (ch === 0x27 /* ' */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            ch = state.input.charCodeAt(++state.position);\n            if (ch === 0x27 /* ' */ ) {\n                captureStart = state.position;\n                state.position++;\n                captureEnd = state.position;\n            } else {\n                return true;\n            }\n        } else if (is_EOL(ch)) {\n            captureSegment(state, captureStart, captureEnd, true);\n            writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n            captureStart = captureEnd = state.position;\n        } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n            throwError(state, \"unexpected end of the document within a single quoted scalar\");\n        } else {\n            state.position++;\n            captureEnd = state.position;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a single quoted scalar\");\n}\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n    var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x22 /* \" */ ) {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    state.position++;\n    captureStart = captureEnd = state.position;\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        if (ch === 0x22 /* \" */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            state.position++;\n            return true;\n        } else if (ch === 0x5C /* \\ */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            ch = state.input.charCodeAt(++state.position);\n            if (is_EOL(ch)) {\n                skipSeparationSpace(state, false, nodeIndent);\n            // TODO: rework to inline fn with no type cast?\n            } else if (ch < 256 && simpleEscapeCheck[ch]) {\n                state.result += simpleEscapeMap[ch];\n                state.position++;\n            } else if ((tmp = escapedHexLen(ch)) > 0) {\n                hexLength = tmp;\n                hexResult = 0;\n                for(; hexLength > 0; hexLength--){\n                    ch = state.input.charCodeAt(++state.position);\n                    if ((tmp = fromHexCode(ch)) >= 0) {\n                        hexResult = (hexResult << 4) + tmp;\n                    } else {\n                        throwError(state, \"expected hexadecimal character\");\n                    }\n                }\n                state.result += charFromCodepoint(hexResult);\n                state.position++;\n            } else {\n                throwError(state, \"unknown escape sequence\");\n            }\n            captureStart = captureEnd = state.position;\n        } else if (is_EOL(ch)) {\n            captureSegment(state, captureStart, captureEnd, true);\n            writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n            captureStart = captureEnd = state.position;\n        } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n            throwError(state, \"unexpected end of the document within a double quoted scalar\");\n        } else {\n            state.position++;\n            captureEnd = state.position;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a double quoted scalar\");\n}\nfunction readFlowCollection(state, nodeIndent) {\n    var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = Object.create(null), keyNode, keyTag, valueNode, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x5B /* [ */ ) {\n        terminator = 0x5D; /* ] */ \n        isMapping = false;\n        _result = [];\n    } else if (ch === 0x7B /* { */ ) {\n        terminator = 0x7D; /* } */ \n        isMapping = true;\n        _result = {};\n    } else {\n        return false;\n    }\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(++state.position);\n    while(ch !== 0){\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if (ch === terminator) {\n            state.position++;\n            state.tag = _tag;\n            state.anchor = _anchor;\n            state.kind = isMapping ? \"mapping\" : \"sequence\";\n            state.result = _result;\n            return true;\n        } else if (!readNext) {\n            throwError(state, \"missed comma between flow collection entries\");\n        } else if (ch === 0x2C /* , */ ) {\n            // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n            throwError(state, \"expected the node content, but found ','\");\n        }\n        keyTag = keyNode = valueNode = null;\n        isPair = isExplicitPair = false;\n        if (ch === 0x3F /* ? */ ) {\n            following = state.input.charCodeAt(state.position + 1);\n            if (is_WS_OR_EOL(following)) {\n                isPair = isExplicitPair = true;\n                state.position++;\n                skipSeparationSpace(state, true, nodeIndent);\n            }\n        }\n        _line = state.line; // Save the current line.\n        _lineStart = state.lineStart;\n        _pos = state.position;\n        composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n        keyTag = state.tag;\n        keyNode = state.result;\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if ((isExplicitPair || state.line === _line) && ch === 0x3A /* : */ ) {\n            isPair = true;\n            ch = state.input.charCodeAt(++state.position);\n            skipSeparationSpace(state, true, nodeIndent);\n            composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n            valueNode = state.result;\n        }\n        if (isMapping) {\n            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n        } else if (isPair) {\n            _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n        } else {\n            _result.push(keyNode);\n        }\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if (ch === 0x2C /* , */ ) {\n            readNext = true;\n            ch = state.input.charCodeAt(++state.position);\n        } else {\n            readNext = false;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a flow collection\");\n}\nfunction readBlockScalar(state, nodeIndent) {\n    var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x7C /* | */ ) {\n        folding = false;\n    } else if (ch === 0x3E /* > */ ) {\n        folding = true;\n    } else {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    while(ch !== 0){\n        ch = state.input.charCodeAt(++state.position);\n        if (ch === 0x2B /* + */  || ch === 0x2D /* - */ ) {\n            if (CHOMPING_CLIP === chomping) {\n                chomping = ch === 0x2B /* + */  ? CHOMPING_KEEP : CHOMPING_STRIP;\n            } else {\n                throwError(state, \"repeat of a chomping mode identifier\");\n            }\n        } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n            if (tmp === 0) {\n                throwError(state, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n            } else if (!detectedIndent) {\n                textIndent = nodeIndent + tmp - 1;\n                detectedIndent = true;\n            } else {\n                throwError(state, \"repeat of an indentation width identifier\");\n            }\n        } else {\n            break;\n        }\n    }\n    if (is_WHITE_SPACE(ch)) {\n        do {\n            ch = state.input.charCodeAt(++state.position);\n        }while (is_WHITE_SPACE(ch));\n        if (ch === 0x23 /* # */ ) {\n            do {\n                ch = state.input.charCodeAt(++state.position);\n            }while (!is_EOL(ch) && ch !== 0);\n        }\n    }\n    while(ch !== 0){\n        readLineBreak(state);\n        state.lineIndent = 0;\n        ch = state.input.charCodeAt(state.position);\n        while((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20 /* Space */ ){\n            state.lineIndent++;\n            ch = state.input.charCodeAt(++state.position);\n        }\n        if (!detectedIndent && state.lineIndent > textIndent) {\n            textIndent = state.lineIndent;\n        }\n        if (is_EOL(ch)) {\n            emptyLines++;\n            continue;\n        }\n        // End of the scalar.\n        if (state.lineIndent < textIndent) {\n            // Perform the chomping.\n            if (chomping === CHOMPING_KEEP) {\n                state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n            } else if (chomping === CHOMPING_CLIP) {\n                if (didReadContent) {\n                    state.result += \"\\n\";\n                }\n            }\n            break;\n        }\n        // Folded style: use fancy rules to handle line breaks.\n        if (folding) {\n            // Lines starting with white space characters (more-indented lines) are not folded.\n            if (is_WHITE_SPACE(ch)) {\n                atMoreIndented = true;\n                // except for the first content line (cf. Example 8.1)\n                state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n            // End of more-indented block.\n            } else if (atMoreIndented) {\n                atMoreIndented = false;\n                state.result += common.repeat(\"\\n\", emptyLines + 1);\n            // Just one line break - perceive as the same line.\n            } else if (emptyLines === 0) {\n                if (didReadContent) {\n                    state.result += \" \";\n                }\n            // Several line breaks - perceive as different lines.\n            } else {\n                state.result += common.repeat(\"\\n\", emptyLines);\n            }\n        // Literal style: just add exact number of line breaks between content lines.\n        } else {\n            // Keep all line breaks except the header line break.\n            state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n        }\n        didReadContent = true;\n        detectedIndent = true;\n        emptyLines = 0;\n        captureStart = state.position;\n        while(!is_EOL(ch) && ch !== 0){\n            ch = state.input.charCodeAt(++state.position);\n        }\n        captureSegment(state, captureStart, state.position, false);\n    }\n    return true;\n}\nfunction readBlockSequence(state, nodeIndent) {\n    var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;\n    // there is a leading tab before this token, so it can't be a block sequence/mapping;\n    // it can still be flow sequence/mapping or a scalar\n    if (state.firstTabInLine !== -1) return false;\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        if (state.firstTabInLine !== -1) {\n            state.position = state.firstTabInLine;\n            throwError(state, \"tab characters must not be used in indentation\");\n        }\n        if (ch !== 0x2D /* - */ ) {\n            break;\n        }\n        following = state.input.charCodeAt(state.position + 1);\n        if (!is_WS_OR_EOL(following)) {\n            break;\n        }\n        detected = true;\n        state.position++;\n        if (skipSeparationSpace(state, true, -1)) {\n            if (state.lineIndent <= nodeIndent) {\n                _result.push(null);\n                ch = state.input.charCodeAt(state.position);\n                continue;\n            }\n        }\n        _line = state.line;\n        composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n        _result.push(state.result);\n        skipSeparationSpace(state, true, -1);\n        ch = state.input.charCodeAt(state.position);\n        if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n            throwError(state, \"bad indentation of a sequence entry\");\n        } else if (state.lineIndent < nodeIndent) {\n            break;\n        }\n    }\n    if (detected) {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        state.kind = \"sequence\";\n        state.result = _result;\n        return true;\n    }\n    return false;\n}\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n    var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n    // there is a leading tab before this token, so it can't be a block sequence/mapping;\n    // it can still be flow sequence/mapping or a scalar\n    if (state.firstTabInLine !== -1) return false;\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        if (!atExplicitKey && state.firstTabInLine !== -1) {\n            state.position = state.firstTabInLine;\n            throwError(state, \"tab characters must not be used in indentation\");\n        }\n        following = state.input.charCodeAt(state.position + 1);\n        _line = state.line; // Save the current line.\n        //\n        // Explicit notation case. There are two separate blocks:\n        // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n        //\n        if ((ch === 0x3F /* ? */  || ch === 0x3A /* : */ ) && is_WS_OR_EOL(following)) {\n            if (ch === 0x3F /* ? */ ) {\n                if (atExplicitKey) {\n                    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n                    keyTag = keyNode = valueNode = null;\n                }\n                detected = true;\n                atExplicitKey = true;\n                allowCompact = true;\n            } else if (atExplicitKey) {\n                // i.e. 0x3A/* : */ === character after the explicit key.\n                atExplicitKey = false;\n                allowCompact = true;\n            } else {\n                throwError(state, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n            }\n            state.position += 1;\n            ch = following;\n        //\n        // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n        //\n        } else {\n            _keyLine = state.line;\n            _keyLineStart = state.lineStart;\n            _keyPos = state.position;\n            if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n                break;\n            }\n            if (state.line === _line) {\n                ch = state.input.charCodeAt(state.position);\n                while(is_WHITE_SPACE(ch)){\n                    ch = state.input.charCodeAt(++state.position);\n                }\n                if (ch === 0x3A /* : */ ) {\n                    ch = state.input.charCodeAt(++state.position);\n                    if (!is_WS_OR_EOL(ch)) {\n                        throwError(state, \"a whitespace character is expected after the key-value separator within a block mapping\");\n                    }\n                    if (atExplicitKey) {\n                        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n                        keyTag = keyNode = valueNode = null;\n                    }\n                    detected = true;\n                    atExplicitKey = false;\n                    allowCompact = false;\n                    keyTag = state.tag;\n                    keyNode = state.result;\n                } else if (detected) {\n                    throwError(state, \"can not read an implicit mapping pair; a colon is missed\");\n                } else {\n                    state.tag = _tag;\n                    state.anchor = _anchor;\n                    return true; // Keep the result of `composeNode`.\n                }\n            } else if (detected) {\n                throwError(state, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n            } else {\n                state.tag = _tag;\n                state.anchor = _anchor;\n                return true; // Keep the result of `composeNode`.\n            }\n        }\n        //\n        // Common reading code for both explicit and implicit notations.\n        //\n        if (state.line === _line || state.lineIndent > nodeIndent) {\n            if (atExplicitKey) {\n                _keyLine = state.line;\n                _keyLineStart = state.lineStart;\n                _keyPos = state.position;\n            }\n            if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n                if (atExplicitKey) {\n                    keyNode = state.result;\n                } else {\n                    valueNode = state.result;\n                }\n            }\n            if (!atExplicitKey) {\n                storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n                keyTag = keyNode = valueNode = null;\n            }\n            skipSeparationSpace(state, true, -1);\n            ch = state.input.charCodeAt(state.position);\n        }\n        if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n            throwError(state, \"bad indentation of a mapping entry\");\n        } else if (state.lineIndent < nodeIndent) {\n            break;\n        }\n    }\n    //\n    // Epilogue.\n    //\n    // Special case: last mapping's node contains only the key in explicit notation.\n    if (atExplicitKey) {\n        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n    }\n    // Expose the resulting mapping.\n    if (detected) {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        state.kind = \"mapping\";\n        state.result = _result;\n    }\n    return detected;\n}\nfunction readTagProperty(state) {\n    var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x21 /* ! */ ) return false;\n    if (state.tag !== null) {\n        throwError(state, \"duplication of a tag property\");\n    }\n    ch = state.input.charCodeAt(++state.position);\n    if (ch === 0x3C /* < */ ) {\n        isVerbatim = true;\n        ch = state.input.charCodeAt(++state.position);\n    } else if (ch === 0x21 /* ! */ ) {\n        isNamed = true;\n        tagHandle = \"!!\";\n        ch = state.input.charCodeAt(++state.position);\n    } else {\n        tagHandle = \"!\";\n    }\n    _position = state.position;\n    if (isVerbatim) {\n        do {\n            ch = state.input.charCodeAt(++state.position);\n        }while (ch !== 0 && ch !== 0x3E /* > */ );\n        if (state.position < state.length) {\n            tagName = state.input.slice(_position, state.position);\n            ch = state.input.charCodeAt(++state.position);\n        } else {\n            throwError(state, \"unexpected end of the stream within a verbatim tag\");\n        }\n    } else {\n        while(ch !== 0 && !is_WS_OR_EOL(ch)){\n            if (ch === 0x21 /* ! */ ) {\n                if (!isNamed) {\n                    tagHandle = state.input.slice(_position - 1, state.position + 1);\n                    if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n                        throwError(state, \"named tag handle cannot contain such characters\");\n                    }\n                    isNamed = true;\n                    _position = state.position + 1;\n                } else {\n                    throwError(state, \"tag suffix cannot contain exclamation marks\");\n                }\n            }\n            ch = state.input.charCodeAt(++state.position);\n        }\n        tagName = state.input.slice(_position, state.position);\n        if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n            throwError(state, \"tag suffix cannot contain flow indicator characters\");\n        }\n    }\n    if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n        throwError(state, \"tag name cannot contain such characters: \" + tagName);\n    }\n    try {\n        tagName = decodeURIComponent(tagName);\n    } catch (err) {\n        throwError(state, \"tag name is malformed: \" + tagName);\n    }\n    if (isVerbatim) {\n        state.tag = tagName;\n    } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n        state.tag = state.tagMap[tagHandle] + tagName;\n    } else if (tagHandle === \"!\") {\n        state.tag = \"!\" + tagName;\n    } else if (tagHandle === \"!!\") {\n        state.tag = \"tag:yaml.org,2002:\" + tagName;\n    } else {\n        throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n    }\n    return true;\n}\nfunction readAnchorProperty(state) {\n    var _position, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x26 /* & */ ) return false;\n    if (state.anchor !== null) {\n        throwError(state, \"duplication of an anchor property\");\n    }\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n    while(ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)){\n        ch = state.input.charCodeAt(++state.position);\n    }\n    if (state.position === _position) {\n        throwError(state, \"name of an anchor node must contain at least one character\");\n    }\n    state.anchor = state.input.slice(_position, state.position);\n    return true;\n}\nfunction readAlias(state) {\n    var _position, alias, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x2A /* * */ ) return false;\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n    while(ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)){\n        ch = state.input.charCodeAt(++state.position);\n    }\n    if (state.position === _position) {\n        throwError(state, \"name of an alias node must contain at least one character\");\n    }\n    alias = state.input.slice(_position, state.position);\n    if (!_hasOwnProperty.call(state.anchorMap, alias)) {\n        throwError(state, 'unidentified alias \"' + alias + '\"');\n    }\n    state.result = state.anchorMap[alias];\n    skipSeparationSpace(state, true, -1);\n    return true;\n}\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n    var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type, flowIndent, blockIndent;\n    if (state.listener !== null) {\n        state.listener(\"open\", state);\n    }\n    state.tag = null;\n    state.anchor = null;\n    state.kind = null;\n    state.result = null;\n    allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n    if (allowToSeek) {\n        if (skipSeparationSpace(state, true, -1)) {\n            atNewLine = true;\n            if (state.lineIndent > parentIndent) {\n                indentStatus = 1;\n            } else if (state.lineIndent === parentIndent) {\n                indentStatus = 0;\n            } else if (state.lineIndent < parentIndent) {\n                indentStatus = -1;\n            }\n        }\n    }\n    if (indentStatus === 1) {\n        while(readTagProperty(state) || readAnchorProperty(state)){\n            if (skipSeparationSpace(state, true, -1)) {\n                atNewLine = true;\n                allowBlockCollections = allowBlockStyles;\n                if (state.lineIndent > parentIndent) {\n                    indentStatus = 1;\n                } else if (state.lineIndent === parentIndent) {\n                    indentStatus = 0;\n                } else if (state.lineIndent < parentIndent) {\n                    indentStatus = -1;\n                }\n            } else {\n                allowBlockCollections = false;\n            }\n        }\n    }\n    if (allowBlockCollections) {\n        allowBlockCollections = atNewLine || allowCompact;\n    }\n    if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n        if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n            flowIndent = parentIndent;\n        } else {\n            flowIndent = parentIndent + 1;\n        }\n        blockIndent = state.position - state.lineStart;\n        if (indentStatus === 1) {\n            if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {\n                hasContent = true;\n            } else {\n                if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {\n                    hasContent = true;\n                } else if (readAlias(state)) {\n                    hasContent = true;\n                    if (state.tag !== null || state.anchor !== null) {\n                        throwError(state, \"alias node should not have any properties\");\n                    }\n                } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n                    hasContent = true;\n                    if (state.tag === null) {\n                        state.tag = \"?\";\n                    }\n                }\n                if (state.anchor !== null) {\n                    state.anchorMap[state.anchor] = state.result;\n                }\n            }\n        } else if (indentStatus === 0) {\n            // Special case: block sequences are allowed to have same indentation level as the parent.\n            // http://www.yaml.org/spec/1.2/spec.html#id2799784\n            hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n        }\n    }\n    if (state.tag === null) {\n        if (state.anchor !== null) {\n            state.anchorMap[state.anchor] = state.result;\n        }\n    } else if (state.tag === \"?\") {\n        // Implicit resolving is not allowed for non-scalar types, and '?'\n        // non-specific tag is only automatically assigned to plain scalars.\n        //\n        // We only need to check kind conformity in case user explicitly assigns '?'\n        // tag, for example like this: \"!<?> [0]\"\n        //\n        if (state.result !== null && state.kind !== \"scalar\") {\n            throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n        }\n        for(typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1){\n            type = state.implicitTypes[typeIndex];\n            if (type.resolve(state.result)) {\n                state.result = type.construct(state.result);\n                state.tag = type.tag;\n                if (state.anchor !== null) {\n                    state.anchorMap[state.anchor] = state.result;\n                }\n                break;\n            }\n        }\n    } else if (state.tag !== \"!\") {\n        if (_hasOwnProperty.call(state.typeMap[state.kind || \"fallback\"], state.tag)) {\n            type = state.typeMap[state.kind || \"fallback\"][state.tag];\n        } else {\n            // looking for multi type\n            type = null;\n            typeList = state.typeMap.multi[state.kind || \"fallback\"];\n            for(typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1){\n                if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n                    type = typeList[typeIndex];\n                    break;\n                }\n            }\n        }\n        if (!type) {\n            throwError(state, \"unknown tag !<\" + state.tag + \">\");\n        }\n        if (state.result !== null && type.kind !== state.kind) {\n            throwError(state, \"unacceptable node kind for !<\" + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n        }\n        if (!type.resolve(state.result, state.tag)) {\n            throwError(state, \"cannot resolve a node with !<\" + state.tag + \"> explicit tag\");\n        } else {\n            state.result = type.construct(state.result, state.tag);\n            if (state.anchor !== null) {\n                state.anchorMap[state.anchor] = state.result;\n            }\n        }\n    }\n    if (state.listener !== null) {\n        state.listener(\"close\", state);\n    }\n    return state.tag !== null || state.anchor !== null || hasContent;\n}\nfunction readDocument(state) {\n    var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n    state.version = null;\n    state.checkLineBreaks = state.legacy;\n    state.tagMap = Object.create(null);\n    state.anchorMap = Object.create(null);\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        skipSeparationSpace(state, true, -1);\n        ch = state.input.charCodeAt(state.position);\n        if (state.lineIndent > 0 || ch !== 0x25 /* % */ ) {\n            break;\n        }\n        hasDirectives = true;\n        ch = state.input.charCodeAt(++state.position);\n        _position = state.position;\n        while(ch !== 0 && !is_WS_OR_EOL(ch)){\n            ch = state.input.charCodeAt(++state.position);\n        }\n        directiveName = state.input.slice(_position, state.position);\n        directiveArgs = [];\n        if (directiveName.length < 1) {\n            throwError(state, \"directive name must not be less than one character in length\");\n        }\n        while(ch !== 0){\n            while(is_WHITE_SPACE(ch)){\n                ch = state.input.charCodeAt(++state.position);\n            }\n            if (ch === 0x23 /* # */ ) {\n                do {\n                    ch = state.input.charCodeAt(++state.position);\n                }while (ch !== 0 && !is_EOL(ch));\n                break;\n            }\n            if (is_EOL(ch)) break;\n            _position = state.position;\n            while(ch !== 0 && !is_WS_OR_EOL(ch)){\n                ch = state.input.charCodeAt(++state.position);\n            }\n            directiveArgs.push(state.input.slice(_position, state.position));\n        }\n        if (ch !== 0) readLineBreak(state);\n        if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n            directiveHandlers[directiveName](state, directiveName, directiveArgs);\n        } else {\n            throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n        }\n    }\n    skipSeparationSpace(state, true, -1);\n    if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D /* - */  && state.input.charCodeAt(state.position + 1) === 0x2D /* - */  && state.input.charCodeAt(state.position + 2) === 0x2D /* - */ ) {\n        state.position += 3;\n        skipSeparationSpace(state, true, -1);\n    } else if (hasDirectives) {\n        throwError(state, \"directives end mark is expected\");\n    }\n    composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n    skipSeparationSpace(state, true, -1);\n    if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n        throwWarning(state, \"non-ASCII line breaks are interpreted as content\");\n    }\n    state.documents.push(state.result);\n    if (state.position === state.lineStart && testDocumentSeparator(state)) {\n        if (state.input.charCodeAt(state.position) === 0x2E /* . */ ) {\n            state.position += 3;\n            skipSeparationSpace(state, true, -1);\n        }\n        return;\n    }\n    if (state.position < state.length - 1) {\n        throwError(state, \"end of the stream or a document separator is expected\");\n    } else {\n        return;\n    }\n}\nfunction loadDocuments(input, options) {\n    input = String(input);\n    options = options || {};\n    if (input.length !== 0) {\n        // Add tailing `\\n` if not exists\n        if (input.charCodeAt(input.length - 1) !== 0x0A /* LF */  && input.charCodeAt(input.length - 1) !== 0x0D /* CR */ ) {\n            input += \"\\n\";\n        }\n        // Strip BOM\n        if (input.charCodeAt(0) === 0xFEFF) {\n            input = input.slice(1);\n        }\n    }\n    var state = new State(input, options);\n    var nullpos = input.indexOf(\"\\x00\");\n    if (nullpos !== -1) {\n        state.position = nullpos;\n        throwError(state, \"null byte is not allowed in input\");\n    }\n    // Use 0 as string terminator. That significantly simplifies bounds check.\n    state.input += \"\\x00\";\n    while(state.input.charCodeAt(state.position) === 0x20 /* Space */ ){\n        state.lineIndent += 1;\n        state.position += 1;\n    }\n    while(state.position < state.length - 1){\n        readDocument(state);\n    }\n    return state.documents;\n}\nfunction loadAll(input, iterator, options) {\n    if (iterator !== null && typeof iterator === \"object\" && typeof options === \"undefined\") {\n        options = iterator;\n        iterator = null;\n    }\n    var documents = loadDocuments(input, options);\n    if (typeof iterator !== \"function\") {\n        return documents;\n    }\n    for(var index = 0, length = documents.length; index < length; index += 1){\n        iterator(documents[index]);\n    }\n}\nfunction load(input, options) {\n    var documents = loadDocuments(input, options);\n    if (documents.length === 0) {\n        /*eslint-disable no-undefined*/ return undefined;\n    } else if (documents.length === 1) {\n        return documents[0];\n    }\n    throw new YAMLException(\"expected a single document in the stream, but found more\");\n}\nmodule.exports.loadAll = loadAll;\nmodule.exports.load = load;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvbG9hZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsNkNBQTZDLEdBRTdDLElBQUlBLFNBQXNCQyxtQkFBT0EsQ0FBQztBQUNsQyxJQUFJQyxnQkFBc0JELG1CQUFPQSxDQUFDO0FBQ2xDLElBQUlFLGNBQXNCRixtQkFBT0EsQ0FBQztBQUNsQyxJQUFJRyxpQkFBc0JILG1CQUFPQSxDQUFDO0FBR2xDLElBQUlJLGtCQUFrQkMsT0FBT0MsU0FBUyxDQUFDQyxjQUFjO0FBR3JELElBQUlDLGtCQUFvQjtBQUN4QixJQUFJQyxtQkFBb0I7QUFDeEIsSUFBSUMsbUJBQW9CO0FBQ3hCLElBQUlDLG9CQUFvQjtBQUd4QixJQUFJQyxnQkFBaUI7QUFDckIsSUFBSUMsaUJBQWlCO0FBQ3JCLElBQUlDLGdCQUFpQjtBQUdyQixJQUFJQyx3QkFBZ0M7QUFDcEMsSUFBSUMsZ0NBQWdDO0FBQ3BDLElBQUlDLDBCQUFnQztBQUNwQyxJQUFJQyxxQkFBZ0M7QUFDcEMsSUFBSUMsa0JBQWdDO0FBR3BDLFNBQVNDLE9BQU9DLEdBQUc7SUFBSSxPQUFPaEIsT0FBT0MsU0FBUyxDQUFDZ0IsUUFBUSxDQUFDQyxJQUFJLENBQUNGO0FBQU07QUFFbkUsU0FBU0csT0FBT0MsQ0FBQztJQUNmLE9BQU8sTUFBTyxLQUFJLE1BQU0sT0FBUUEsTUFBTSxLQUFJLE1BQU07QUFDbEQ7QUFFQSxTQUFTQyxlQUFlRCxDQUFDO0lBQ3ZCLE9BQU8sTUFBTyxLQUFJLE9BQU8sT0FBUUEsTUFBTSxLQUFJLFNBQVM7QUFDdEQ7QUFFQSxTQUFTRSxhQUFhRixDQUFDO0lBQ3JCLE9BQU8sTUFBTyxLQUFJLE9BQU8sT0FDakJBLE1BQU0sS0FBSSxTQUFTLE9BQ25CQSxNQUFNLEtBQUksTUFBTSxPQUNoQkEsTUFBTSxLQUFJLE1BQU07QUFDMUI7QUFFQSxTQUFTRyxrQkFBa0JILENBQUM7SUFDMUIsT0FBT0EsTUFBTSxLQUFJLEtBQUssT0FDZkEsTUFB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QUkrSyxhQUFhLFFBQVEsT0FBT0EsYUFBYSxZQUFZLE9BQU8vSyxZQUFZLGFBQWE7UUFDdkZBLFVBQVUrSztRQUNWQSxXQUFXO0lBQ2I7SUFFQSxJQUFJOUosWUFBWTBKLGNBQWM1SyxPQUFPQztJQUVyQyxJQUFJLE9BQU8rSyxhQUFhLFlBQVk7UUFDbEMsT0FBTzlKO0lBQ1Q7SUFFQSxJQUFLLElBQUkrQyxRQUFRLEdBQUdyRCxTQUFTTSxVQUFVTixNQUFNLEVBQUVxRCxRQUFRckQsUUFBUXFELFNBQVMsRUFBRztRQUN6RStHLFNBQVM5SixTQUFTLENBQUMrQyxNQUFNO0lBQzNCO0FBQ0Y7QUFHQSxTQUFTZ0gsS0FBS2pMLEtBQUssRUFBRUMsT0FBTztJQUMxQixJQUFJaUIsWUFBWTBKLGNBQWM1SyxPQUFPQztJQUVyQyxJQUFJaUIsVUFBVU4sTUFBTSxLQUFLLEdBQUc7UUFDMUIsNkJBQTZCLEdBQzdCLE9BQU9zSztJQUNULE9BQU8sSUFBSWhLLFVBQVVOLE1BQU0sS0FBSyxHQUFHO1FBQ2pDLE9BQU9NLFNBQVMsQ0FBQyxFQUFFO0lBQ3JCO0lBQ0EsTUFBTSxJQUFJM0QsY0FBYztBQUMxQjtBQUdBNE4sc0JBQXNCLEdBQUdKO0FBQ3pCSSxtQkFBbUIsR0FBTUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9sb2FkZXIuanM/M2E4MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbWF4LWxlbixuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbnZhciBjb21tb24gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBtYWtlU25pcHBldCAgICAgICAgID0gcmVxdWlyZSgnLi9zbmlwcGV0Jyk7XG52YXIgREVGQVVMVF9TQ0hFTUEgICAgICA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHQnKTtcblxuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuXG52YXIgQ09OVEVYVF9GTE9XX0lOICAgPSAxO1xudmFyIENPTlRFWFRfRkxPV19PVVQgID0gMjtcbnZhciBDT05URVhUX0JMT0NLX0lOICA9IDM7XG52YXIgQ09OVEVYVF9CTE9DS19PVVQgPSA0O1xuXG5cbnZhciBDSE9NUElOR19DTElQICA9IDE7XG52YXIgQ0hPTVBJTkdfU1RSSVAgPSAyO1xudmFyIENIT01QSU5HX0tFRVAgID0gMztcblxuXG52YXIgUEFUVEVSTl9OT05fUFJJTlRBQkxFICAgICAgICAgPSAvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4ODRcXHg4Ni1cXHg5RlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXS87XG52YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1xceDg1XFx1MjAyOFxcdTIwMjldLztcbnZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyAgICAgICA9IC9bLFxcW1xcXVxce1xcfV0vO1xudmFyIFBBVFRFUk5fVEFHX0hBTkRMRSAgICAgICAgICAgID0gL14oPzohfCEhfCFbYS16XFwtXSshKSQvaTtcbnZhciBQQVRURVJOX1RBR19VUkkgICAgICAgICAgICAgICA9IC9eKD86IXxbXixcXFtcXF1cXHtcXH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XFwtIztcXC9cXD86QCY9XFwrXFwkLF9cXC4hflxcKidcXChcXClcXFtcXF1dKSokL2k7XG5cblxuZnVuY3Rpb24gX2NsYXNzKG9iaikgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7IH1cblxuZnVuY3Rpb24gaXNfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDBBLyogTEYgKi8pIHx8IChjID09PSAweDBELyogQ1IgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19XSElURV9TUEFDRShjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwOS8qIFRhYiAqLykgfHwgKGMgPT09IDB4MjAvKiBTcGFjZSAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dTX09SX0VPTChjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwOS8qIFRhYiAqLykgfHxcbiAgICAgICAgIChjID09PSAweDIwLyogU3BhY2UgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwQS8qIExGICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX0ZMT1dfSU5ESUNBVE9SKGMpIHtcbiAgcmV0dXJuIGMgPT09IDB4MkMvKiAsICovIHx8XG4gICAgICAgICBjID09PSAweDVCLyogWyAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg1RC8qIF0gKi8gfHxcbiAgICAgICAgIGMgPT09IDB4N0IvKiB7ICovIHx8XG4gICAgICAgICBjID09PSAweDdELyogfSAqLztcbn1cblxuZnVuY3Rpb24gZnJvbUhleENvZGUoYykge1xuICB2YXIgbGM7XG5cbiAgaWYgKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHtcbiAgICByZXR1cm4gYyAtIDB4MzA7XG4gIH1cblxuICAvKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UqL1xuICBsYyA9IGMgfCAweDIwO1xuXG4gIGlmICgoMHg2MS8qIGEgKi8gPD0gbGMpICYmIChsYyA8PSAweDY2LyogZiAqLykpIHtcbiAgICByZXR1cm4gbGMgLSAweDYxICsgMTA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZWRIZXhMZW4oYykge1xuICBpZiAoYyA9PT0gMHg3OC8qIHggKi8pIHsgcmV0dXJuIDI7IH1cbiAgaWYgKGMgPT09IDB4NzUvKiB1ICovKSB7IHJldHVybiA0OyB9XG4gIGlmIChjID09PSAweDU1LyogVSAqLykgeyByZXR1cm4gODsgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnJvbURlY2ltYWxDb2RlKGMpIHtcbiAgaWYgKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHtcbiAgICByZXR1cm4gYyAtIDB4MzA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG4gIHJldHVybiAoYyA9PT0gMHgzMC8qIDAgKi8pID8gJ1xceDAwJyA6XG4gICAgICAgIChjID09PSAweDYxLyogYSAqLykgPyAnXFx4MDcnIDpcbiAgICAgICAgKGMgPT09IDB4NjIvKiBiICovKSA/ICdcXHgwOCcgOlxuICAgICAgICAoYyA9PT0gMHg3NC8qIHQgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDA5LyogVGFiICovKSA/ICdcXHgwOScgOlxuICAgICAgICAoYyA9PT0gMHg2RS8qIG4gKi8pID8gJ1xceDBBJyA6XG4gICAgICAgIChjID09PSAweDc2LyogdiAqLykgPyAnXFx4MEInIDpcbiAgICAgICAgKGMgPT09IDB4NjYvKiBmICovKSA/ICdcXHgwQycgOlxuICAgICAgICAoYyA9PT0gMHg3Mi8qIHIgKi8pID8gJ1xceDBEJyA6XG4gICAgICAgIChjID09PSAweDY1LyogZSAqLykgPyAnXFx4MUInIDpcbiAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgPyAnICcgOlxuICAgICAgICAoYyA9PT0gMHgyMi8qIFwiICovKSA/ICdcXHgyMicgOlxuICAgICAgICAoYyA9PT0gMHgyRi8qIC8gKi8pID8gJy8nIDpcbiAgICAgICAgKGMgPT09IDB4NUMvKiBcXCAqLykgPyAnXFx4NUMnIDpcbiAgICAgICAgKGMgPT09IDB4NEUvKiBOICovKSA/ICdcXHg4NScgOlxuICAgICAgICAoYyA9PT0gMHg1Ri8qIF8gKi8pID8gJ1xceEEwJyA6XG4gICAgICAgIChjID09PSAweDRDLyogTCAqLykgPyAnXFx1MjAyOCcgOlxuICAgICAgICAoYyA9PT0gMHg1MC8qIFAgKi8pID8gJ1xcdTIwMjknIDogJyc7XG59XG5cbmZ1bmN0aW9uIGNoYXJGcm9tQ29kZXBvaW50KGMpIHtcbiAgaWYgKGMgPD0gMHhGRkZGKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gIH1cbiAgLy8gRW5jb2RlIFVURi0xNiBzdXJyb2dhdGUgcGFpclxuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtMTYjQ29kZV9wb2ludHNfVS4yQjAxMDAwMF90b19VLjJCMTBGRkZGXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICgoYyAtIDB4MDEwMDAwKSA+PiAxMCkgKyAweEQ4MDAsXG4gICAgKChjIC0gMHgwMTAwMDApICYgMHgwM0ZGKSArIDB4REMwMFxuICApO1xufVxuXG52YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTsgLy8gaW50ZWdlciwgZm9yIGZhc3QgYWNjZXNzXG52YXIgc2ltcGxlRXNjYXBlTWFwID0gbmV3IEFycmF5KDI1Nik7XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIHNpbXBsZUVzY2FwZUNoZWNrW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSkgPyAxIDogMDtcbiAgc2ltcGxlRXNjYXBlTWFwW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSk7XG59XG5cblxuZnVuY3Rpb24gU3RhdGUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gIHRoaXMuZmlsZW5hbWUgID0gb3B0aW9uc1snZmlsZW5hbWUnXSAgfHwgbnVsbDtcbiAgdGhpcy5zY2hlbWEgICAgPSBvcHRpb25zWydzY2hlbWEnXSAgICB8fCBERUZBVUxUX1NDSEVNQTtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zWydvbldhcm5pbmcnXSB8fCBudWxsO1xuICAvLyAoSGlkZGVuKSBSZW1vdmU/IG1ha2VzIHRoZSBsb2FkZXIgdG8gZXhwZWN0IFlBTUwgMS4xIGRvY3VtZW50c1xuICAvLyBpZiBzdWNoIGRvY3VtZW50cyBoYXZlIG5vIGV4cGxpY2l0ICVZQU1MIGRpcmVjdGl2ZVxuICB0aGlzLmxlZ2FjeSAgICA9IG9wdGlvbnNbJ2xlZ2FjeSddICAgIHx8IGZhbHNlO1xuXG4gIHRoaXMuanNvbiAgICAgID0gb3B0aW9uc1snanNvbiddICAgICAgfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgID0gb3B0aW9uc1snbGlzdGVuZXInXSAgfHwgbnVsbDtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLnR5cGVNYXAgICAgICAgPSB0aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXA7XG5cbiAgdGhpcy5sZW5ndGggICAgID0gaW5wdXQubGVuZ3RoO1xuICB0aGlzLnBvc2l0aW9uICAgPSAwO1xuICB0aGlzLmxpbmUgICAgICAgPSAwO1xuICB0aGlzLmxpbmVTdGFydCAgPSAwO1xuICB0aGlzLmxpbmVJbmRlbnQgPSAwO1xuXG4gIC8vIHBvc2l0aW9uIG9mIGZpcnN0IGxlYWRpbmcgdGFiIGluIHRoZSBjdXJyZW50IGxpbmUsXG4gIC8vIHVzZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB0YWJzIGluIHRoZSBpbmRlbnRhdGlvblxuICB0aGlzLmZpcnN0VGFiSW5MaW5lID0gLTE7XG5cbiAgdGhpcy5kb2N1bWVudHMgPSBbXTtcblxuICAvKlxuICB0aGlzLnZlcnNpb247XG4gIHRoaXMuY2hlY2tMaW5lQnJlYWtzO1xuICB0aGlzLnRhZ01hcDtcbiAgdGhpcy5hbmNob3JNYXA7XG4gIHRoaXMudGFnO1xuICB0aGlzLmFuY2hvcjtcbiAgdGhpcy5raW5kO1xuICB0aGlzLnJlc3VsdDsqL1xuXG59XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkge1xuICB2YXIgbWFyayA9IHtcbiAgICBuYW1lOiAgICAgc3RhdGUuZmlsZW5hbWUsXG4gICAgYnVmZmVyOiAgIHN0YXRlLmlucHV0LnNsaWNlKDAsIC0xKSwgLy8gb21pdCB0cmFpbGluZyBcXDBcbiAgICBwb3NpdGlvbjogc3RhdGUucG9zaXRpb24sXG4gICAgbGluZTogICAgIHN0YXRlLmxpbmUsXG4gICAgY29sdW1uOiAgIHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0XG4gIH07XG5cbiAgbWFyay5zbmlwcGV0ID0gbWFrZVNuaXBwZXQobWFyayk7XG5cbiAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKG1lc3NhZ2UsIG1hcmspO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHN0YXRlLm9uV2FybmluZykge1xuICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5cbnZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHtcblxuICBZQU1MOiBmdW5jdGlvbiBoYW5kbGVZYW1sRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICB2YXIgbWF0Y2gsIG1ham9yLCBtaW5vcjtcblxuICAgIGlmIChzdGF0ZS52ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIG1hdGNoID0gL14oWzAtOV0rKVxcLihbMC05XSspJC8uZXhlYyhhcmdzWzBdKTtcblxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblxuICAgIGlmIChtYWpvciAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgfVxuXG4gICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gKG1pbm9yIDwgMik7XG5cbiAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHtcbiAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ3Vuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG4gIH0sXG5cbiAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBoYW5kbGUsIHByZWZpeDtcblxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ1RBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBoYW5kbGUgPSBhcmdzWzBdO1xuICAgIHByZWZpeCA9IGFyZ3NbMV07XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIicgKyBoYW5kbGUgKyAnXCIgdGFnIGhhbmRsZScpO1xuICAgIH1cblxuICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcmVmaXggPSBkZWNvZGVVUklDb21wb25lbnQocHJlZml4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogJyArIHByZWZpeCk7XG4gICAgfVxuXG4gICAgc3RhdGUudGFnTWFwW2hhbmRsZV0gPSBwcmVmaXg7XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUsIHN0YXJ0LCBlbmQsIGNoZWNrSnNvbikge1xuICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0O1xuXG4gIGlmIChzdGFydCA8IGVuZCkge1xuICAgIF9yZXN1bHQgPSBzdGF0ZS5pbnB1dC5zbGljZShzdGFydCwgZW5kKTtcblxuICAgIGlmIChjaGVja0pzb24pIHtcbiAgICAgIGZvciAoX3Bvc2l0aW9uID0gMCwgX2xlbmd0aCA9IF9yZXN1bHQubGVuZ3RoOyBfcG9zaXRpb24gPCBfbGVuZ3RoOyBfcG9zaXRpb24gKz0gMSkge1xuICAgICAgICBfY2hhcmFjdGVyID0gX3Jlc3VsdC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG4gICAgICAgIGlmICghKF9jaGFyYWN0ZXIgPT09IDB4MDkgfHxcbiAgICAgICAgICAgICAgKDB4MjAgPD0gX2NoYXJhY3RlciAmJiBfY2hhcmFjdGVyIDw9IDB4MTBGRkZGKSkpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoUEFUVEVSTl9OT05fUFJJTlRBQkxFLnRlc3QoX3Jlc3VsdCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHN0YXRlLnJlc3VsdCArPSBfcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWFwcGluZ3Moc3RhdGUsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykge1xuICB2YXIgc291cmNlS2V5cywga2V5LCBpbmRleCwgcXVhbnRpdHk7XG5cbiAgaWYgKCFjb21tb24uaXNPYmplY3Qoc291cmNlKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZScpO1xuICB9XG5cbiAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcblxuICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSxcbiAgc3RhcnRMaW5lLCBzdGFydExpbmVTdGFydCwgc3RhcnRQb3MpIHtcblxuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuXG4gIC8vIFRoZSBvdXRwdXQgaXMgYSBwbGFpbiBvYmplY3QgaGVyZSwgc28ga2V5cyBjYW4gb25seSBiZSBzdHJpbmdzLlxuICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQga2V5Tm9kZSB0byBhIHN0cmluZywgYnV0IGRvaW5nIHNvIGNhbiBoYW5nIHRoZSBwcm9jZXNzXG4gIC8vIChkZWVwbHkgbmVzdGVkIGFycmF5cyB0aGF0IGV4cGxvZGUgZXhwb25lbnRpYWxseSB1c2luZyBhbGlhc2VzKS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHtcbiAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gJ29iamVjdCcgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSAnW29iamVjdCBPYmplY3RdJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBjb2RlIGV4ZWN1dGlvbiBpbiBsb2FkKCkgdmlhIHRvU3RyaW5nIHByb3BlcnR5XG4gIC8vIChzdGlsbCB1c2UgaXRzIG93biB0b1N0cmluZyBmb3IgYXJyYXlzLCB0aW1lc3RhbXBzLFxuICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICdvYmplY3QnICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBrZXlOb2RlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gIH1cblxuXG4gIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7XG5cbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cblxuICBpZiAoa2V5VGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJlxuICAgICAgICAhX2hhc093blByb3BlcnR5LmNhbGwob3ZlcnJpZGFibGVLZXlzLCBrZXlOb2RlKSAmJlxuICAgICAgICBfaGFzT3duUHJvcGVydHkuY2FsbChfcmVzdWx0LCBrZXlOb2RlKSkge1xuICAgICAgc3RhdGUubGluZSA9IHN0YXJ0TGluZSB8fCBzdGF0ZS5saW5lO1xuICAgICAgc3RhdGUubGluZVN0YXJ0ID0gc3RhcnRMaW5lU3RhcnQgfHwgc3RhdGUubGluZVN0YXJ0O1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGFydFBvcyB8fCBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGVkIG1hcHBpbmcga2V5Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlZCBmb3IgdGhpcyBzcGVjaWZpYyBrZXkgb25seSBiZWNhdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpcyBzbG93XG4gICAgaWYgKGtleU5vZGUgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVOb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdFtrZXlOb2RlXSA9IHZhbHVlTm9kZTtcbiAgICB9XG4gICAgZGVsZXRlIG92ZXJyaWRhYmxlS2V5c1trZXlOb2RlXTtcbiAgfVxuXG4gIHJldHVybiBfcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlKSB7XG4gIHZhciBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHgwQS8qIExGICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgwRC8qIENSICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MEEvKiBMRiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2EgbGluZSBicmVhayBpcyBleHBlY3RlZCcpO1xuICB9XG5cbiAgc3RhdGUubGluZSArPSAxO1xuICBzdGF0ZS5saW5lU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgc3RhdGUuZmlyc3RUYWJJbkxpbmUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgYWxsb3dDb21tZW50cywgY2hlY2tJbmRlbnQpIHtcbiAgdmFyIGxpbmVCcmVha3MgPSAwLFxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MDkvKiBUYWIgKi8gJiYgc3RhdGUuZmlyc3RUYWJJbkxpbmUgPT09IC0xKSB7XG4gICAgICAgIHN0YXRlLmZpcnN0VGFiSW5MaW5lID0gc3RhdGUucG9zaXRpb247XG4gICAgICB9XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGFsbG93Q29tbWVudHMgJiYgY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH0gd2hpbGUgKGNoICE9PSAweDBBLyogTEYgKi8gJiYgY2ggIT09IDB4MEQvKiBDUiAqLyAmJiBjaCAhPT0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgbGluZUJyZWFrcysrO1xuICAgICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICAgIHdoaWxlIChjaCA9PT0gMHgyMC8qIFNwYWNlICovKSB7XG4gICAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50KSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAnZGVmaWNpZW50IGluZGVudGF0aW9uJyk7XG4gIH1cblxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cblxuZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gIC8vIENvbmRpdGlvbiBzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0IGlzIHRlc3RlZFxuICAvLyBpbiBwYXJlbnQgb24gZWFjaCBjYWxsLCBmb3IgZWZmaWNpZW5jeS4gTm8gbmVlZHMgdG8gdGVzdCBoZXJlIGFnYWluLlxuICBpZiAoKGNoID09PSAweDJELyogLSAqLyB8fCBjaCA9PT0gMHgyRS8qIC4gKi8pICYmXG4gICAgICBjaCA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMikpIHtcblxuICAgIF9wb3NpdGlvbiArPSAzO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBjb3VudCkge1xuICBpZiAoY291bnQgPT09IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBjb3VudCAtIDEpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZFBsYWluU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikge1xuICB2YXIgcHJlY2VkaW5nLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50LFxuICAgICAgX2xpbmUsXG4gICAgICBfbGluZVN0YXJ0LFxuICAgICAgX2xpbmVJbmRlbnQsXG4gICAgICBfa2luZCA9IHN0YXRlLmtpbmQsXG4gICAgICBfcmVzdWx0ID0gc3RhdGUucmVzdWx0LFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoaXNfV1NfT1JfRU9MKGNoKSAgICAgIHx8XG4gICAgICBpc19GTE9XX0lORElDQVRPUihjaCkgfHxcbiAgICAgIGNoID09PSAweDIzLyogIyAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjYvKiAmICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyQS8qICogKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIxLyogISAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4N0MvKiB8ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgzRS8qID4gKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI3LyogJyAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjIvKiBcIiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjUvKiAlICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg0MC8qIEAgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDYwLyogYCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHxcbiAgICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgIHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChwcmVjZWRpbmcpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICgoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB8fFxuICAgICAgICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgICBicmVhaztcblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7XG5cbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID49IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uID0gY2FwdHVyZUVuZDtcbiAgICAgICAgc3RhdGUubGluZSA9IF9saW5lO1xuICAgICAgICBzdGF0ZS5saW5lU3RhcnQgPSBfbGluZVN0YXJ0O1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50ID0gX2xpbmVJbmRlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQZW5kaW5nQ29udGVudCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc3RhdGUubGluZSAtIF9saW5lKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgfVxuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpO1xuXG4gIGlmIChzdGF0ZS5yZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSBfa2luZDtcbiAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjaCxcbiAgICAgIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyNy8qICcgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGNoID09PSAweDI3LyogJyAqLykge1xuICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBjYXB0dXJlRW5kLFxuICAgICAgaGV4TGVuZ3RoLFxuICAgICAgaGV4UmVzdWx0LFxuICAgICAgdG1wLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjIvKiBcIiAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG4gIHN0YXRlLnBvc2l0aW9uKys7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAweDIyLyogXCIgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NUMvKiBcXCAqLykge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCk7XG5cbiAgICAgICAgLy8gVE9ETzogcmV3b3JrIHRvIGlubGluZSBmbiB3aXRoIG5vIHR5cGUgY2FzdD9cbiAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2hdO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgICB9IGVsc2UgaWYgKCh0bXAgPSBlc2NhcGVkSGV4TGVuKGNoKSkgPiAwKSB7XG4gICAgICAgIGhleExlbmd0aCA9IHRtcDtcbiAgICAgICAgaGV4UmVzdWx0ID0gMDtcblxuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgICAgICAgaGV4UmVzdWx0ID0gKGhleFJlc3VsdCA8PCA0KSArIHRtcDtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7XG5cbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gZXNjYXBlIHNlcXVlbmNlJyk7XG4gICAgICB9XG5cbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXInKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgcmVhZE5leHQgPSB0cnVlLFxuICAgICAgX2xpbmUsXG4gICAgICBfbGluZVN0YXJ0LFxuICAgICAgX3BvcyxcbiAgICAgIF90YWcgICAgID0gc3RhdGUudGFnLFxuICAgICAgX3Jlc3VsdCxcbiAgICAgIF9hbmNob3IgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgdGVybWluYXRvcixcbiAgICAgIGlzUGFpcixcbiAgICAgIGlzRXhwbGljaXRQYWlyLFxuICAgICAgaXNNYXBwaW5nLFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGtleU5vZGUsXG4gICAgICBrZXlUYWcsXG4gICAgICB2YWx1ZU5vZGUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHg1Qi8qIFsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg1RDsvKiBdICovXG4gICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgX3Jlc3VsdCA9IFtdO1xuICB9IGVsc2UgaWYgKGNoID09PSAweDdCLyogeyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDdEOy8qIH0gKi9cbiAgICBpc01hcHBpbmcgPSB0cnVlO1xuICAgIF9yZXN1bHQgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/ICdtYXBwaW5nJyA6ICdzZXF1ZW5jZSc7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcycpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkMvKiAsICovKSB7XG4gICAgICAvLyBcImZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIGNhbiBuZXZlciBiZSBjb21wbGV0ZWx5IGVtcHR5XCIsIGFzIHBlciBZQU1MIDEuMiwgc2VjdGlvbiA3LjRcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJ1wiKTtcbiAgICB9XG5cbiAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuXG4gICAgaWYgKGNoID09PSAweDNGLyogPyAqLykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7IC8vIFNhdmUgdGhlIGN1cnJlbnQgbGluZS5cbiAgICBfbGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0O1xuICAgIF9wb3MgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChpc0V4cGxpY2l0UGFpciB8fCBzdGF0ZS5saW5lID09PSBfbGluZSkgJiYgY2ggPT09IDB4M0EvKiA6ICovKSB7XG4gICAgICBpc1BhaXIgPSB0cnVlO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpO1xuICAgIH1cblxuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQy8qICwgKi8pIHtcbiAgICAgIHJlYWROZXh0ID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBmb2xkaW5nLFxuICAgICAgY2hvbXBpbmcgICAgICAgPSBDSE9NUElOR19DTElQLFxuICAgICAgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSxcbiAgICAgIGRldGVjdGVkSW5kZW50ID0gZmFsc2UsXG4gICAgICB0ZXh0SW5kZW50ICAgICA9IG5vZGVJbmRlbnQsXG4gICAgICBlbXB0eUxpbmVzICAgICA9IDAsXG4gICAgICBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLFxuICAgICAgdG1wLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4N0MvKiB8ICovKSB7XG4gICAgZm9sZGluZyA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGNoID09PSAweDNFLyogPiAqLykge1xuICAgIGZvbGRpbmcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAweDJCLyogKyAqLyB8fCBjaCA9PT0gMHgyRC8qIC0gKi8pIHtcbiAgICAgIGlmIChDSE9NUElOR19DTElQID09PSBjaG9tcGluZykge1xuICAgICAgICBjaG9tcGluZyA9IChjaCA9PT0gMHgyQi8qICsgKi8pID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllcicpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgaWYgKHRtcCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZScpO1xuICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHtcbiAgICAgICAgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQgKyB0bXAgLSAxO1xuICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAncmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKTtcblxuICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgKGNoICE9PSAwKSk7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7XG4gICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmXG4gICAgICAgICAgIChjaCA9PT0gMHgyMC8qIFNwYWNlICovKSkge1xuICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmICghZGV0ZWN0ZWRJbmRlbnQgJiYgc3RhdGUubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHtcbiAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50O1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBlbXB0eUxpbmVzKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFbmQgb2YgdGhlIHNjYWxhci5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHtcblxuICAgICAgLy8gUGVyZm9ybSB0aGUgY2hvbXBpbmcuXG4gICAgICBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0tFRVApIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHtcbiAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7IC8vIGkuZS4gb25seSBpZiB0aGUgc2NhbGFyIGlzIG5vdCBlbXB0eS5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnJlYWsgdGhpcyBgd2hpbGVgIGN5Y2xlIGFuZCBnbyB0byB0aGUgZnVuY2l0b24ncyBlcGlsb2d1ZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEZvbGRlZCBzdHlsZTogdXNlIGZhbmN5IHJ1bGVzIHRvIGhhbmRsZSBsaW5lIGJyZWFrcy5cbiAgICBpZiAoZm9sZGluZykge1xuXG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgKG1vcmUtaW5kZW50ZWQgbGluZXMpIGFyZSBub3QgZm9sZGVkLlxuICAgICAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBhdE1vcmVJbmRlbnRlZCA9IHRydWU7XG4gICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGNvbnRlbnQgbGluZSAoY2YuIEV4YW1wbGUgOC4xKVxuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpO1xuXG4gICAgICAvLyBFbmQgb2YgbW9yZS1pbmRlbnRlZCBibG9jay5cbiAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcblxuICAgICAgLy8gSnVzdCBvbmUgbGluZSBicmVhayAtIHBlcmNlaXZlIGFzIHRoZSBzYW1lIGxpbmUuXG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXMgPT09IDApIHtcbiAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7IC8vIGkuZS4gb25seSBpZiB3ZSBoYXZlIGFscmVhZHkgcmVhZCBzb21lIHNjYWxhciBjb250ZW50LlxuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAnICc7XG4gICAgICAgIH1cblxuICAgICAgLy8gU2V2ZXJhbCBsaW5lIGJyZWFrcyAtIHBlcmNlaXZlIGFzIGRpZmZlcmVudCBsaW5lcy5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICAgIH1cblxuICAgIC8vIExpdGVyYWwgc3R5bGU6IGp1c3QgYWRkIGV4YWN0IG51bWJlciBvZiBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNvbnRlbnQgbGluZXMuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEtlZXAgYWxsIGxpbmUgYnJlYWtzIGV4Y2VwdCB0aGUgaGVhZGVyIGxpbmUgYnJlYWsuXG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpO1xuICAgIH1cblxuICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTtcbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIF9saW5lLFxuICAgICAgX3RhZyAgICAgID0gc3RhdGUudGFnLFxuICAgICAgX2FuY2hvciAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgID0gW10sXG4gICAgICBmb2xsb3dpbmcsXG4gICAgICBkZXRlY3RlZCAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIC8vIHRoZXJlIGlzIGEgbGVhZGluZyB0YWIgYmVmb3JlIHRoaXMgdG9rZW4sIHNvIGl0IGNhbid0IGJlIGEgYmxvY2sgc2VxdWVuY2UvbWFwcGluZztcbiAgLy8gaXQgY2FuIHN0aWxsIGJlIGZsb3cgc2VxdWVuY2UvbWFwcGluZyBvciBhIHNjYWxhclxuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAweDJELyogLSAqLykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKCFpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7XG4gICAgICAgIF9yZXN1bHQucHVzaChudWxsKTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgX3Jlc3VsdC5wdXNoKHN0YXRlLnJlc3VsdCk7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gJ3NlcXVlbmNlJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZSwgbm9kZUluZGVudCwgZmxvd0luZGVudCkge1xuICB2YXIgZm9sbG93aW5nLFxuICAgICAgYWxsb3dDb21wYWN0LFxuICAgICAgX2xpbmUsXG4gICAgICBfa2V5TGluZSxcbiAgICAgIF9rZXlMaW5lU3RhcnQsXG4gICAgICBfa2V5UG9zLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICAgICAgPSBzdGF0ZS5hbmNob3IsXG4gICAgICBfcmVzdWx0ICAgICAgID0ge30sXG4gICAgICBvdmVycmlkYWJsZUtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAga2V5VGFnICAgICAgICA9IG51bGwsXG4gICAgICBrZXlOb2RlICAgICAgID0gbnVsbCxcbiAgICAgIHZhbHVlTm9kZSAgICAgPSBudWxsLFxuICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlLFxuICAgICAgZGV0ZWN0ZWQgICAgICA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgLy8gdGhlcmUgaXMgYSBsZWFkaW5nIHRhYiBiZWZvcmUgdGhpcyB0b2tlbiwgc28gaXQgY2FuJ3QgYmUgYSBibG9jayBzZXF1ZW5jZS9tYXBwaW5nO1xuICAvLyBpdCBjYW4gc3RpbGwgYmUgZmxvdyBzZXF1ZW5jZS9tYXBwaW5nIG9yIGEgc2NhbGFyXG4gIGlmIChzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBpZiAoIWF0RXhwbGljaXRLZXkgJiYgc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiA9IHN0YXRlLmZpcnN0VGFiSW5MaW5lO1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24nKTtcbiAgICB9XG5cbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgICAvL1xuICAgIC8vIEV4cGxpY2l0IG5vdGF0aW9uIGNhc2UuIFRoZXJlIGFyZSB0d28gc2VwYXJhdGUgYmxvY2tzOlxuICAgIC8vIGZpcnN0IGZvciB0aGUga2V5IChkZW5vdGVkIGJ5IFwiP1wiKSBhbmQgc2Vjb25kIGZvciB0aGUgdmFsdWUgKGRlbm90ZWQgYnkgXCI6XCIpXG4gICAgLy9cbiAgICBpZiAoKGNoID09PSAweDNGLyogPyAqLyB8fCBjaCA9PT0gMHgzQS8qIDogKi8pICYmIGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcblxuICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIC8vIGkuZS4gMHgzQS8qIDogKi8gPT09IGNoYXJhY3RlciBhZnRlciB0aGUgZXhwbGljaXQga2V5LlxuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lJyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gICAgICBjaCA9IGZvbGxvd2luZztcblxuICAgIC8vXG4gICAgLy8gSW1wbGljaXQgbm90YXRpb24gY2FzZS4gRmxvdy1zdHlsZSBub2RlIGFzIHRoZSBrZXkgZmlyc3QsIHRoZW4gXCI6XCIsIGFuZCB0aGUgdmFsdWUuXG4gICAgLy9cbiAgICB9IGVsc2Uge1xuICAgICAgX2tleUxpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIF9rZXlQb3MgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgICAgaWYgKCFjb21wb3NlTm9kZShzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX09VVCwgZmFsc2UsIHRydWUpKSB7XG4gICAgICAgIC8vIE5laXRoZXIgaW1wbGljaXQgbm9yIGV4cGxpY2l0IG5vdGF0aW9uLlxuICAgICAgICAvLyBSZWFkaW5nIGlzIGRvbmUuIEdvIHRvIHRoZSBlcGlsb2d1ZS5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5saW5lID09PSBfbGluZSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09IDB4M0EvKiA6ICovKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICAgIGFsbG93Q29tcGFjdCA9IGZhbHNlO1xuICAgICAgICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICAgICAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQnKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Jyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByZXN1bHQgb2YgYGNvbXBvc2VOb2RlYC5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENvbW1vbiByZWFkaW5nIGNvZGUgZm9yIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IG5vdGF0aW9ucy5cbiAgICAvL1xuICAgIGlmIChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkge1xuICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgX2tleUxpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgICBfa2V5TGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0O1xuICAgICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdCkpIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIEVwaWxvZ3VlLlxuICAvL1xuXG4gIC8vIFNwZWNpYWwgY2FzZTogbGFzdCBtYXBwaW5nJ3Mgbm9kZSBjb250YWlucyBvbmx5IHRoZSBrZXkgaW4gZXhwbGljaXQgbm90YXRpb24uXG4gIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gJ21hcHBpbmcnO1xuICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZGV0ZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLFxuICAgICAgaXNWZXJiYXRpbSA9IGZhbHNlLFxuICAgICAgaXNOYW1lZCAgICA9IGZhbHNlLFxuICAgICAgdGFnSGFuZGxlLFxuICAgICAgdGFnTmFtZSxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDIxLyogISAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS50YWcgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHknKTtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4M0MvKiA8ICovKSB7XG4gICAgaXNWZXJiYXRpbSA9IHRydWU7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MjEvKiAhICovKSB7XG4gICAgaXNOYW1lZCA9IHRydWU7XG4gICAgdGFnSGFuZGxlID0gJyEhJztcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgfSBlbHNlIHtcbiAgICB0YWdIYW5kbGUgPSAnISc7XG4gIH1cblxuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGNoICE9PSAwICYmIGNoICE9PSAweDNFLyogPiAqLyk7XG5cbiAgICBpZiAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4MjEvKiAhICovKSB7XG4gICAgICAgIGlmICghaXNOYW1lZCkge1xuICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KHRhZ0hhbmRsZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoUEFUVEVSTl9GTE9XX0lORElDQVRPUlMudGVzdCh0YWdOYW1lKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICcgKyB0YWdOYW1lKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGFnTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0YWdOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBuYW1lIGlzIG1hbGZvcm1lZDogJyArIHRhZ05hbWUpO1xuICB9XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBzdGF0ZS50YWcgPSB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnIScpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnISEnKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDI2LyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyQS8qICogKi8pIHJldHVybiBmYWxzZTtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUuYW5jaG9yTWFwLCBhbGlhcykpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5pZGVudGlmaWVkIGFsaWFzIFwiJyArIGFsaWFzICsgJ1wiJyk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bHQgPSBzdGF0ZS5hbmNob3JNYXBbYWxpYXNdO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZSwgcGFyZW50SW5kZW50LCBub2RlQ29udGV4dCwgYWxsb3dUb1NlZWssIGFsbG93Q29tcGFjdCkge1xuICB2YXIgYWxsb3dCbG9ja1N0eWxlcyxcbiAgICAgIGFsbG93QmxvY2tTY2FsYXJzLFxuICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zLFxuICAgICAgaW5kZW50U3RhdHVzID0gMSwgLy8gMTogdGhpcz5wYXJlbnQsIDA6IHRoaXM9cGFyZW50LCAtMTogdGhpczxwYXJlbnRcbiAgICAgIGF0TmV3TGluZSAgPSBmYWxzZSxcbiAgICAgIGhhc0NvbnRlbnQgPSBmYWxzZSxcbiAgICAgIHR5cGVJbmRleCxcbiAgICAgIHR5cGVRdWFudGl0eSxcbiAgICAgIHR5cGVMaXN0LFxuICAgICAgdHlwZSxcbiAgICAgIGZsb3dJbmRlbnQsXG4gICAgICBibG9ja0luZGVudDtcblxuICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5saXN0ZW5lcignb3BlbicsIHN0YXRlKTtcbiAgfVxuXG4gIHN0YXRlLnRhZyAgICA9IG51bGw7XG4gIHN0YXRlLmFuY2hvciA9IG51bGw7XG4gIHN0YXRlLmtpbmQgICA9IG51bGw7XG4gIHN0YXRlLnJlc3VsdCA9IG51bGw7XG5cbiAgYWxsb3dCbG9ja1N0eWxlcyA9IGFsbG93QmxvY2tTY2FsYXJzID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zID1cbiAgICBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQgfHxcbiAgICBDT05URVhUX0JMT0NLX0lOICA9PT0gbm9kZUNvbnRleHQ7XG5cbiAgaWYgKGFsbG93VG9TZWVrKSB7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgIHdoaWxlIChyZWFkVGFnUHJvcGVydHkoc3RhdGUpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkpIHtcbiAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYWxsb3dCbG9ja1N0eWxlcztcblxuICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHtcbiAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0O1xuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSB8fCBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQpIHtcbiAgICBpZiAoQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0ZMT1dfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudCArIDE7XG4gICAgfVxuXG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydDtcblxuICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHtcbiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiZcbiAgICAgICAgICAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KSB8fFxuICAgICAgICAgICByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8XG4gICAgICAgICAgcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICAgIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8XG4gICAgICAgICAgICByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcycpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLnRhZyA9ICc/JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlOiBibG9jayBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgdG8gaGF2ZSBzYW1lIGluZGVudGF0aW9uIGxldmVsIGFzIHRoZSBwYXJlbnQuXG4gICAgICAvLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3OTk3ODRcbiAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUudGFnID09PSBudWxsKSB7XG4gICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgfVxuXG4gIH0gZWxzZSBpZiAoc3RhdGUudGFnID09PSAnPycpIHtcbiAgICAvLyBJbXBsaWNpdCByZXNvbHZpbmcgaXMgbm90IGFsbG93ZWQgZm9yIG5vbi1zY2FsYXIgdHlwZXMsIGFuZCAnPydcbiAgICAvLyBub24tc3BlY2lmaWMgdGFnIGlzIG9ubHkgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byBwbGFpbiBzY2FsYXJzLlxuICAgIC8vXG4gICAgLy8gV2Ugb25seSBuZWVkIHRvIGNoZWNrIGtpbmQgY29uZm9ybWl0eSBpbiBjYXNlIHVzZXIgZXhwbGljaXRseSBhc3NpZ25zICc/J1xuICAgIC8vIHRhZywgZm9yIGV4YW1wbGUgbGlrZSB0aGlzOiBcIiE8Pz4gWzBdXCJcbiAgICAvL1xuICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUua2luZCAhPT0gJ3NjYWxhcicpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlIFwic2NhbGFyXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgdHlwZSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XTtcblxuICAgICAgaWYgKHR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICBzdGF0ZS50YWcgPSB0eXBlLnRhZztcbiAgICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChzdGF0ZS50YWcgIT09ICchJykge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50eXBlTWFwW3N0YXRlLmtpbmQgfHwgJ2ZhbGxiYWNrJ10sIHN0YXRlLnRhZykpIHtcbiAgICAgIHR5cGUgPSBzdGF0ZS50eXBlTWFwW3N0YXRlLmtpbmQgfHwgJ2ZhbGxiYWNrJ11bc3RhdGUudGFnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9va2luZyBmb3IgbXVsdGkgdHlwZVxuICAgICAgdHlwZSA9IG51bGw7XG4gICAgICB0eXBlTGlzdCA9IHN0YXRlLnR5cGVNYXAubXVsdGlbc3RhdGUua2luZCB8fCAnZmFsbGJhY2snXTtcblxuICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSB0eXBlTGlzdC5sZW5ndGg7IHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTsgdHlwZUluZGV4ICs9IDEpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRhZy5zbGljZSgwLCB0eXBlTGlzdFt0eXBlSW5kZXhdLnRhZy5sZW5ndGgpID09PSB0eXBlTGlzdFt0eXBlSW5kZXhdLnRhZykge1xuICAgICAgICAgIHR5cGUgPSB0eXBlTGlzdFt0eXBlSW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5rbm93biB0YWcgITwnICsgc3RhdGUudGFnICsgJz4nKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucmVzdWx0ICE9PSBudWxsICYmIHR5cGUua2luZCAhPT0gc3RhdGUua2luZCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8JyArIHN0YXRlLnRhZyArICc+IHRhZzsgaXQgc2hvdWxkIGJlIFwiJyArIHR5cGUua2luZCArICdcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG5cbiAgICBpZiAoIXR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQsIHN0YXRlLnRhZykpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwnICsgc3RhdGUudGFnICsgJz4gZXhwbGljaXQgdGFnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCwgc3RhdGUudGFnKTtcbiAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUubGlzdGVuZXIoJ2Nsb3NlJywgc3RhdGUpO1xuICB9XG4gIHJldHVybiBzdGF0ZS50YWcgIT09IG51bGwgfHwgIHN0YXRlLmFuY2hvciAhPT0gbnVsbCB8fCBoYXNDb250ZW50O1xufVxuXG5mdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUpIHtcbiAgdmFyIGRvY3VtZW50U3RhcnQgPSBzdGF0ZS5wb3NpdGlvbixcbiAgICAgIF9wb3NpdGlvbixcbiAgICAgIGRpcmVjdGl2ZU5hbWUsXG4gICAgICBkaXJlY3RpdmVBcmdzLFxuICAgICAgaGFzRGlyZWN0aXZlcyA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgc3RhdGUudmVyc2lvbiA9IG51bGw7XG4gIHN0YXRlLmNoZWNrTGluZUJyZWFrcyA9IHN0YXRlLmxlZ2FjeTtcbiAgc3RhdGUudGFnTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RhdGUuYW5jaG9yTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMHgyNS8qICUgKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG5cbiAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX0VPTChjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzX0VPTChjaCkpIGJyZWFrO1xuXG4gICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGlyZWN0aXZlQXJncy5wdXNoKHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSAgICAgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDB4MkQvKiAtICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MkUvKiAuICovKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAweDBBLyogTEYgKi8gJiZcbiAgICAgICAgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwRC8qIENSICovKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZShpbnB1dCwgb3B0aW9ucyk7XG5cbiAgdmFyIG51bGxwb3MgPSBpbnB1dC5pbmRleE9mKCdcXDAnKTtcblxuICBpZiAobnVsbHBvcyAhPT0gLTEpIHtcbiAgICBzdGF0ZS5wb3NpdGlvbiA9IG51bGxwb3M7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ251bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCcpO1xuICB9XG5cbiAgLy8gVXNlIDAgYXMgc3RyaW5nIHRlcm1pbmF0b3IuIFRoYXQgc2lnbmlmaWNhbnRseSBzaW1wbGlmaWVzIGJvdW5kcyBjaGVjay5cbiAgc3RhdGUuaW5wdXQgKz0gJ1xcMCc7XG5cbiAgd2hpbGUgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDIwLyogU3BhY2UgKi8pIHtcbiAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wb3NpdGlvbiA8IChzdGF0ZS5sZW5ndGggLSAxKSkge1xuICAgIHJlYWREb2N1bWVudChzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGUuZG9jdW1lbnRzO1xufVxuXG5cbmZ1bmN0aW9uIGxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yLCBvcHRpb25zKSB7XG4gIGlmIChpdGVyYXRvciAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlcmF0b3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBpdGVyYXRvcjtcbiAgICBpdGVyYXRvciA9IG51bGw7XG4gIH1cblxuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7XG5cbiAgaWYgKHR5cGVvZiBpdGVyYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkb2N1bWVudHM7XG4gIH1cblxuICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgaXRlcmF0b3IoZG9jdW1lbnRzW2luZGV4XSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcblxuICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZScpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMubG9hZCAgICA9IGxvYWQ7XG4iXSwibmFtZXMiOlsiY29tbW9uIiwicmVxdWlyZSIsIllBTUxFeGNlcHRpb24iLCJtYWtlU25pcHBldCIsIkRFRkFVTFRfU0NIRU1BIiwiX2hhc093blByb3BlcnR5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJDT05URVhUX0ZMT1dfSU4iLCJDT05URVhUX0ZMT1dfT1VUIiwiQ09OVEVYVF9CTE9DS19JTiIsIkNPTlRFWFRfQkxPQ0tfT1VUIiwiQ0hPTVBJTkdfQ0xJUCIsIkNIT01QSU5HX1NUUklQIiwiQ0hPTVBJTkdfS0VFUCIsIlBBVFRFUk5fTk9OX1BSSU5UQUJMRSIsIlBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTIiwiUEFUVEVSTl9GTE9XX0lORElDQVRPUlMiLCJQQVRURVJOX1RBR19IQU5ETEUiLCJQQVRURVJOX1RBR19VUkkiLCJfY2xhc3MiLCJvYmoiLCJ0b1N0cmluZyIsImNhbGwiLCJpc19FT0wiLCJjIiwiaXNfV0hJVEVfU1BBQ0UiLCJpc19XU19PUl9FT0wiLCJpc19GTE9XX0lORElDQVRPUiIsImZyb21IZXhDb2RlIiwibGMiLCJlc2NhcGVkSGV4TGVuIiwiZnJvbURlY2ltYWxDb2RlIiwic2ltcGxlRXNjYXBlU2VxdWVuY2UiLCJjaGFyRnJvbUNvZGVwb2ludCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInNpbXBsZUVzY2FwZUNoZWNrIiwiQXJyYXkiLCJzaW1wbGVFc2NhcGVNYXAiLCJpIiwiU3RhdGUiLCJpbnB1dCIsIm9wdGlvbnMiLCJmaWxlbmFtZSIsInNjaGVtYSIsIm9uV2FybmluZyIsImxlZ2FjeSIsImpzb24iLCJsaXN0ZW5lciIsImltcGxpY2l0VHlwZXMiLCJjb21waWxlZEltcGxpY2l0IiwidHlwZU1hcCIsImNvbXBpbGVkVHlwZU1hcCIsImxlbmd0aCIsInBvc2l0aW9uIiwibGluZSIsImxpbmVTdGFydCIsImxpbmVJbmRlbnQiLCJmaXJzdFRhYkluTGluZSIsImRvY3VtZW50cyIsImdlbmVyYXRlRXJyb3IiLCJzdGF0ZSIsIm1lc3NhZ2UiLCJtYXJrIiwibmFtZSIsImJ1ZmZlciIsInNsaWNlIiwiY29sdW1uIiwic25pcHBldCIsInRocm93RXJyb3IiLCJ0aHJvd1dhcm5pbmciLCJkaXJlY3RpdmVIYW5kbGVycyIsIllBTUwiLCJoYW5kbGVZYW1sRGlyZWN0aXZlIiwiYXJncyIsIm1hdGNoIiwibWFqb3IiLCJtaW5vciIsInZlcnNpb24iLCJleGVjIiwicGFyc2VJbnQiLCJjaGVja0xpbmVCcmVha3MiLCJUQUciLCJoYW5kbGVUYWdEaXJlY3RpdmUiLCJoYW5kbGUiLCJwcmVmaXgiLCJ0ZXN0IiwidGFnTWFwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXJyIiwiY2FwdHVyZVNlZ21lbnQiLCJzdGFydCIsImVuZCIsImNoZWNrSnNvbiIsIl9wb3NpdGlvbiIsIl9sZW5ndGgiLCJfY2hhcmFjdGVyIiwiX3Jlc3VsdCIsImNoYXJDb2RlQXQiLCJyZXN1bHQiLCJtZXJnZU1hcHBpbmdzIiwiZGVzdGluYXRpb24iLCJzb3VyY2UiLCJvdmVycmlkYWJsZUtleXMiLCJzb3VyY2VLZXlzIiwia2V5IiwiaW5kZXgiLCJxdWFudGl0eSIsImlzT2JqZWN0Iiwia2V5cyIsInN0b3JlTWFwcGluZ1BhaXIiLCJrZXlUYWciLCJrZXlOb2RlIiwidmFsdWVOb2RlIiwic3RhcnRMaW5lIiwic3RhcnRMaW5lU3RhcnQiLCJzdGFydFBvcyIsImlzQXJyYXkiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsInZhbHVlIiwicmVhZExpbmVCcmVhayIsImNoIiwic2tpcFNlcGFyYXRpb25TcGFjZSIsImFsbG93Q29tbWVudHMiLCJjaGVja0luZGVudCIsImxpbmVCcmVha3MiLCJ0ZXN0RG9jdW1lbnRTZXBhcmF0b3IiLCJ3cml0ZUZvbGRlZExpbmVzIiwiY291bnQiLCJyZXBlYXQiLCJyZWFkUGxhaW5TY2FsYXIiLCJub2RlSW5kZW50Iiwid2l0aGluRmxvd0NvbGxlY3Rpb24iLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJjYXB0dXJlU3RhcnQiLCJjYXB0dXJlRW5kIiwiaGFzUGVuZGluZ0NvbnRlbnQiLCJfbGluZSIsIl9saW5lU3RhcnQiLCJfbGluZUluZGVudCIsIl9raW5kIiwia2luZCIsInJlYWRTaW5nbGVRdW90ZWRTY2FsYXIiLCJyZWFkRG91YmxlUXVvdGVkU2NhbGFyIiwiaGV4TGVuZ3RoIiwiaGV4UmVzdWx0IiwidG1wIiwicmVhZEZsb3dDb2xsZWN0aW9uIiwicmVhZE5leHQiLCJfcG9zIiwiX3RhZyIsInRhZyIsIl9hbmNob3IiLCJhbmNob3IiLCJ0ZXJtaW5hdG9yIiwiaXNQYWlyIiwiaXNFeHBsaWNpdFBhaXIiLCJpc01hcHBpbmciLCJjcmVhdGUiLCJhbmNob3JNYXAiLCJjb21wb3NlTm9kZSIsInB1c2giLCJyZWFkQmxvY2tTY2FsYXIiLCJmb2xkaW5nIiwiY2hvbXBpbmciLCJkaWRSZWFkQ29udGVudCIsImRldGVjdGVkSW5kZW50IiwidGV4dEluZGVudCIsImVtcHR5TGluZXMiLCJhdE1vcmVJbmRlbnRlZCIsInJlYWRCbG9ja1NlcXVlbmNlIiwiZGV0ZWN0ZWQiLCJyZWFkQmxvY2tNYXBwaW5nIiwiZmxvd0luZGVudCIsImFsbG93Q29tcGFjdCIsIl9rZXlMaW5lIiwiX2tleUxpbmVTdGFydCIsIl9rZXlQb3MiLCJhdEV4cGxpY2l0S2V5IiwicmVhZFRhZ1Byb3BlcnR5IiwiaXNWZXJiYXRpbSIsImlzTmFtZWQiLCJ0YWdIYW5kbGUiLCJ0YWdOYW1lIiwicmVhZEFuY2hvclByb3BlcnR5IiwicmVhZEFsaWFzIiwiYWxpYXMiLCJwYXJlbnRJbmRlbnQiLCJub2RlQ29udGV4dCIsImFsbG93VG9TZWVrIiwiYWxsb3dCbG9ja1N0eWxlcyIsImFsbG93QmxvY2tTY2FsYXJzIiwiYWxsb3dCbG9ja0NvbGxlY3Rpb25zIiwiaW5kZW50U3RhdHVzIiwiYXROZXdMaW5lIiwiaGFzQ29udGVudCIsInR5cGVJbmRleCIsInR5cGVRdWFudGl0eSIsInR5cGVMaXN0IiwidHlwZSIsImJsb2NrSW5kZW50IiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsIm11bHRpIiwicmVhZERvY3VtZW50IiwiZG9jdW1lbnRTdGFydCIsImRpcmVjdGl2ZU5hbWUiLCJkaXJlY3RpdmVBcmdzIiwiaGFzRGlyZWN0aXZlcyIsImxvYWREb2N1bWVudHMiLCJudWxscG9zIiwiaW5kZXhPZiIsImxvYWRBbGwiLCJpdGVyYXRvciIsImxvYWQiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/loader.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/schema.js":
 | 
						
						
						
							|  |  | /*!********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/schema.js ***!
 | 
						
						
						
							|  |  |   \********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\n/*eslint-disable max-len*/ var YAMLException = __webpack_require__(/*! ./exception */ \"(ssr)/./node_modules/js-yaml/lib/exception.js\");\nvar Type = __webpack_require__(/*! ./type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nfunction compileList(schema, name) {\n    var result = [];\n    schema[name].forEach(function(currentType) {\n        var newIndex = result.length;\n        result.forEach(function(previousType, previousIndex) {\n            if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n                newIndex = previousIndex;\n            }\n        });\n        result[newIndex] = currentType;\n    });\n    return result;\n}\nfunction compileMap() {\n    var result = {\n        scalar: {},\n        sequence: {},\n        mapping: {},\n        fallback: {},\n        multi: {\n            scalar: [],\n            sequence: [],\n            mapping: [],\n            fallback: []\n        }\n    }, index, length;\n    function collectType(type) {\n        if (type.multi) {\n            result.multi[type.kind].push(type);\n            result.multi[\"fallback\"].push(type);\n        } else {\n            result[type.kind][type.tag] = result[\"fallback\"][type.tag] = type;\n        }\n    }\n    for(index = 0, length = arguments.length; index < length; index += 1){\n        arguments[index].forEach(collectType);\n    }\n    return result;\n}\nfunction Schema(definition) {\n    return this.extend(definition);\n}\nSchema.prototype.extend = function extend(definition) {\n    var implicit = [];\n    var explicit = [];\n    if (definition instanceof Type) {\n        // Schema.extend(type)\n        explicit.push(definition);\n    } else if (Array.isArray(definition)) {\n        // Schema.extend([ type1, type2, ... ])\n        explicit = explicit.concat(definition);\n    } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n        // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n        if (definition.implicit) implicit = implicit.concat(definition.implicit);\n        if (definition.explicit) explicit = explicit.concat(definition.explicit);\n    } else {\n        throw new YAMLException(\"Schema.extend argument should be a Type, [ Type ], \" + \"or a schema definition ({ implicit: [...], explicit: [...] })\");\n    }\n    implicit.forEach(function(type) {\n        if (!(type instanceof Type)) {\n            throw new YAMLException(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n        }\n        if (type.loadKind && type.loadKind !== \"scalar\") {\n            throw new YAMLException(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n        }\n        if (type.multi) {\n            throw new YAMLException(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n        }\n    });\n    explicit.forEach(function(type) {\n        if (!(type instanceof Type)) {\n            throw new YAMLException(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n        }\n    });\n    var result = Object.create(Schema.prototype);\n    result.implicit = (this.implicit || []).concat(implicit);\n    result.explicit = (this.explicit || []).concat(explicit);\n    result.compiledImplicit = compileList(result, \"implicit\");\n    result.compiledExplicit = compileList(result, \"explicit\");\n    result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n    return result;\n};\nmodule.exports = Schema;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsd0JBQXdCLEdBRXhCLElBQUlBLGdCQUFnQkMsbUJBQU9BLENBQUM7QUFDNUIsSUFBSUMsT0FBZ0JELG1CQUFPQSxDQUFDO0FBRzVCLFNBQVNFLFlBQVlDLE1BQU0sRUFBRUMsSUFBSTtJQUMvQixJQUFJQyxTQUFTLEVBQUU7SUFFZkYsTUFBTSxDQUFDQyxLQUFLLENBQUNFLE9BQU8sQ0FBQyxTQUFVQyxXQUFXO1FBQ3hDLElBQUlDLFdBQVdILE9BQU9JLE1BQU07UUFFNUJKLE9BQU9DLE9BQU8sQ0FBQyxTQUFVSSxZQUFZLEVBQUVDLGFBQWE7WUFDbEQsSUFBSUQsYUFBYUUsR0FBRyxLQUFLTCxZQUFZSyxHQUFHLElBQ3BDRixhQUFhRyxJQUFJLEtBQUtOLFlBQVlNLElBQUksSUFDdENILGFBQWFJLEtBQUssS0FBS1AsWUFBWU8sS0FBSyxFQUFFO2dCQUU1Q04sV0FBV0c7WUFDYjtRQUNGO1FBRUFOLE1BQU0sQ0FBQ0csU0FBUyxHQUFHRDtJQUNyQjtJQUVBLE9BQU9GO0FBQ1Q7QUFHQSxTQUFTVTtJQUNQLElBQUlWLFNBQVM7UUFDUFcsUUFBUSxDQUFDO1FBQ1RDLFVBQVUsQ0FBQztRQUNYQyxTQUFTLENBQUM7UUFDVkMsVUFBVSxDQUFDO1FBQ1hMLE9BQU87WUFDTEUsUUFBUSxFQUFFO1lBQ1ZDLFVBQVUsRUFBRTtZQUNaQyxTQUFTLEVBQUU7WUFDWEMsVUFBVSxFQUFFO1FBQ2Q7SUFDRixHQUFHQyxPQUFPWDtJQUVkLFNBQVNZLFlBQVlDLElBQUk7UUFDdkIsSUFBSUEsS0FBS1IsS0FBSyxFQUFFO1lBQ2RULE9BQU9TLEtBQUssQ0FBQ1EsS0FBS1QsSUFBSSxDQUFDLENBQUNVLElBQUksQ0FBQ0Q7WUFDN0JqQixPQUFPUyxLQUFLLENBQUMsV0FBVyxDQUFDUyxJQUFJLENBQUNEO1FBQ2hDLE9BQU87WUFDTGpCLE1BQU0sQ0FBQ2lCLEtBQUtULElBQUksQ0FBQyxDQUFDUyxLQUFLVixHQUFHLENBQUMsR0FBR1AsTUFBTSxDQUFDLFdBQVcsQ0FBQ2lCLEtBQUtWLEdBQUcsQ0FBQyxHQUFHVTtRQUMvRDtJQUNGO0lBRUEsSUFBS0YsUUFBUSxHQUFHWCxTQUFTZSxVQUFVZixNQUFNLEVBQUVXLFFBQVFYLFFBQVFXLFNBQVMsRUFBRztRQUNyRUksU0FBUyxDQUFDSixNQUFNLENBQUNkLE9BQU8sQ0FBQ2U7SUFDM0I7SUFDQSxPQUFPaEI7QUFDVDtBQUdBLFNBQVNvQixPQUFPQyxVQUFVO0lBQ3hCLE9BQU8sSUFBSSxDQUFDQyxNQUFNLENBQUNEO0FBQ3JCO0FBR0FELE9BQU9HLFNBQVMsQ0FBQ0QsTUFBTSxHQUFHLFNBQVNBLE9BQU9ELFVBQVU7SUFDbEQsSUFBSUcsV0FBVyxFQUFFO0lBQ2pCLElBQUlDLFdBQVcsRUFBRTtJQUVqQixJQUFJSixzQkFBc0J6QixNQUFNO1FBQzlCLHNCQUFzQjtRQUN0QjZCLFNBQVNQLElBQUksQ0FBQ0c7SUFFaEIsT0FBTyxJQUFJSyxNQUFNQyxPQUFPLENBQUNOLGFBQWE7UUFDcEMsdUNBQXVDO1FBQ3ZDSSxXQUFXQSxTQUFTRyxNQUFNLENBQUNQO0lBRTdCLE9BQU8sSUFBSUEsY0FBZUssQ0FBQUEsTUFBTUMsT0FBTyxDQUFDTixXQUFXRyxRQUFRLEtBQUtFLE1BQU1DLE9BQU8sQ0FBQ04sV0FBV0ksUUFBUSxJQUFJO1FBQ25HLHNGQUFzRjtRQUN0RixJQUFJSixXQUFXRyxRQUFRLEVBQUVBLFdBQVdBLFNBQVNJLE1BQU0sQ0FBQ1AsV0FBV0csUUFBUTtRQUN2RSxJQUFJSCxXQUFXSSxRQUFRLEVBQUVBLFdBQVdBLFNBQVNHLE1BQU0sQ0FBQ1AsV0FBV0ksUUFBUTtJQUV6RSxPQUFPO1FBQ0wsTUFBTSxJQUFJL0IsY0FBYyx3REFDdEI7SUFDSjtJQUVBOEIsU0FBU3ZCLE9BQU8sQ0FBQyxTQUFVZ0IsSUFBSTtRQUM3QixJQUFJLENBQUVBLENBQUFBLGdCQUFnQnJCLElBQUcsR0FBSTtZQUMzQixNQUFNLElBQUlGLGNBQWM7UUFDMUI7UUFFQSxJQUFJdUIsS0FBS1ksUUFBUSxJQUFJWixLQUFLWSxRQUFRLEtBQUssVUFBVTtZQUMvQyxNQUFNLElBQUluQyxjQUFjO1FBQzFCO1FBRUEsSUFBSXVCLEtBQUtSLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSWYsY0FBYztRQUMxQjtJQUNGO0lBRUErQixTQUFTeEIsT0FBTyxDQUFDLFNBQVVnQixJQUFJO1FBQzdCLElBQUksQ0FBRUEsQ0FBQUEsZ0JBQWdCckIsSUFBRyxHQUFJO1lBQzNCLE1BQU0sSUFBSUYsY0FBYztRQUMxQjtJQUNGO0lBRUEsSUFBSU0sU0FBUzhCLE9BQU9DLE1BQU0sQ0FBQ1gsT0FBT0csU0FBUztJQUUzQ3ZCLE9BQU93QixRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUNBLFFBQVEsSUFBSSxFQUFFLEVBQUVJLE1BQU0sQ0FBQ0o7SUFDL0N4QixPQUFPeUIsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDQSxRQUFRLElBQUksRUFBRSxFQUFFRyxNQUFNLENBQUNIO0lBRS9DekIsT0FBT2dDLGdCQUFnQixHQUFHbkMsWUFBWUcsUUFBUTtJQUM5Q0EsT0FBT2lDLGdCQUFnQixHQUFHcEMsWUFBWUcsUUFBUTtJQUM5Q0EsT0FBT2tDLGVBQWUsR0FBSXhCLFdBQVdWLE9BQU9nQyxnQkFBZ0IsRUFBRWhDLE9BQU9pQyxnQkFBZ0I7SUFFckYsT0FBT2pDO0FBQ1Q7QUFHQW1DLE9BQU9DLE9BQU8sR0FBR2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hLmpzPzNmNGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4qL1xuXG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgVHlwZSAgICAgICAgICA9IHJlcXVpcmUoJy4vdHlwZScpO1xuXG5cbmZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgc2NoZW1hW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRUeXBlKSB7XG4gICAgdmFyIG5ld0luZGV4ID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgIHJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2aW91c1R5cGUsIHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChwcmV2aW91c1R5cGUudGFnID09PSBjdXJyZW50VHlwZS50YWcgJiZcbiAgICAgICAgICBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZCAmJlxuICAgICAgICAgIHByZXZpb3VzVHlwZS5tdWx0aSA9PT0gY3VycmVudFR5cGUubXVsdGkpIHtcblxuICAgICAgICBuZXdJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHRbbmV3SW5kZXhdID0gY3VycmVudFR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gY29tcGlsZU1hcCgvKiBsaXN0cy4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBzY2FsYXI6IHt9LFxuICAgICAgICBzZXF1ZW5jZToge30sXG4gICAgICAgIG1hcHBpbmc6IHt9LFxuICAgICAgICBmYWxsYmFjazoge30sXG4gICAgICAgIG11bHRpOiB7XG4gICAgICAgICAgc2NhbGFyOiBbXSxcbiAgICAgICAgICBzZXF1ZW5jZTogW10sXG4gICAgICAgICAgbWFwcGluZzogW10sXG4gICAgICAgICAgZmFsbGJhY2s6IFtdXG4gICAgICAgIH1cbiAgICAgIH0sIGluZGV4LCBsZW5ndGg7XG5cbiAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZSkge1xuICAgIGlmICh0eXBlLm11bHRpKSB7XG4gICAgICByZXN1bHQubXVsdGlbdHlwZS5raW5kXS5wdXNoKHR5cGUpO1xuICAgICAgcmVzdWx0Lm11bHRpWydmYWxsYmFjayddLnB1c2godHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0eXBlLmtpbmRdW3R5cGUudGFnXSA9IHJlc3VsdFsnZmFsbGJhY2snXVt0eXBlLnRhZ10gPSB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGFyZ3VtZW50c1tpbmRleF0uZm9yRWFjaChjb2xsZWN0VHlwZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5mdW5jdGlvbiBTY2hlbWEoZGVmaW5pdGlvbikge1xuICByZXR1cm4gdGhpcy5leHRlbmQoZGVmaW5pdGlvbik7XG59XG5cblxuU2NoZW1hLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQoZGVmaW5pdGlvbikge1xuICB2YXIgaW1wbGljaXQgPSBbXTtcbiAgdmFyIGV4cGxpY2l0ID0gW107XG5cbiAgaWYgKGRlZmluaXRpb24gaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgLy8gU2NoZW1hLmV4dGVuZCh0eXBlKVxuICAgIGV4cGxpY2l0LnB1c2goZGVmaW5pdGlvbik7XG5cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgLy8gU2NoZW1hLmV4dGVuZChbIHR5cGUxLCB0eXBlMiwgLi4uIF0pXG4gICAgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbik7XG5cbiAgfSBlbHNlIGlmIChkZWZpbml0aW9uICYmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24uaW1wbGljaXQpIHx8IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbi5leHBsaWNpdCkpKSB7XG4gICAgLy8gU2NoZW1hLmV4dGVuZCh7IGV4cGxpY2l0OiBbIHR5cGUxLCB0eXBlMiwgLi4uIF0sIGltcGxpY2l0OiBbIHR5cGUxLCB0eXBlMiwgLi4uIF0gfSlcbiAgICBpZiAoZGVmaW5pdGlvbi5pbXBsaWNpdCkgaW1wbGljaXQgPSBpbXBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5pbXBsaWNpdCk7XG4gICAgaWYgKGRlZmluaXRpb24uZXhwbGljaXQpIGV4cGxpY2l0ID0gZXhwbGljaXQuY29uY2F0KGRlZmluaXRpb24uZXhwbGljaXQpO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1NjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sICcgK1xuICAgICAgJ29yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSknKTtcbiAgfVxuXG4gIGltcGxpY2l0LmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUubG9hZEtpbmQgJiYgdHlwZS5sb2FkS2luZCAhPT0gJ3NjYWxhcicpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5tdWx0aSkge1xuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1RoZXJlIGlzIGEgbXVsdGkgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gTXVsdGkgdGFncyBjYW4gb25seSBiZSBsaXN0ZWQgYXMgZXhwbGljaXQuJyk7XG4gICAgfVxuICB9KTtcblxuICBleHBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUoU2NoZW1hLnByb3RvdHlwZSk7XG5cbiAgcmVzdWx0LmltcGxpY2l0ID0gKHRoaXMuaW1wbGljaXQgfHwgW10pLmNvbmNhdChpbXBsaWNpdCk7XG4gIHJlc3VsdC5leHBsaWNpdCA9ICh0aGlzLmV4cGxpY2l0IHx8IFtdKS5jb25jYXQoZXhwbGljaXQpO1xuXG4gIHJlc3VsdC5jb21waWxlZEltcGxpY2l0ID0gY29tcGlsZUxpc3QocmVzdWx0LCAnaW1wbGljaXQnKTtcbiAgcmVzdWx0LmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdChyZXN1bHQsICdleHBsaWNpdCcpO1xuICByZXN1bHQuY29tcGlsZWRUeXBlTWFwICA9IGNvbXBpbGVNYXAocmVzdWx0LmNvbXBpbGVkSW1wbGljaXQsIHJlc3VsdC5jb21waWxlZEV4cGxpY2l0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTtcbiJdLCJuYW1lcyI6WyJZQU1MRXhjZXB0aW9uIiwicmVxdWlyZSIsIlR5cGUiLCJjb21waWxlTGlzdCIsInNjaGVtYSIsIm5hbWUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiY3VycmVudFR5cGUiLCJuZXdJbmRleCIsImxlbmd0aCIsInByZXZpb3VzVHlwZSIsInByZXZpb3VzSW5kZXgiLCJ0YWciLCJraW5kIiwibXVsdGkiLCJjb21waWxlTWFwIiwic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIiwiZmFsbGJhY2siLCJpbmRleCIsImNvbGxlY3RUeXBlIiwidHlwZSIsInB1c2giLCJhcmd1bWVudHMiLCJTY2hlbWEiLCJkZWZpbml0aW9uIiwiZXh0ZW5kIiwicHJvdG90eXBlIiwiaW1wbGljaXQiLCJleHBsaWNpdCIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImxvYWRLaW5kIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29tcGlsZWRJbXBsaWNpdCIsImNvbXBpbGVkRXhwbGljaXQiLCJjb21waWxlZFR5cGVNYXAiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/schema.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/schema/core.js":
 | 
						
						
						
							|  |  | /*!*************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/schema/core.js ***!
 | 
						
						
						
							|  |  |   \*************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\nmodule.exports = __webpack_require__(/*! ./json */ \"(ssr)/./node_modules/js-yaml/lib/schema/json.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hL2NvcmUuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YsOEVBQThFO0FBQzlFLG1FQUFtRTtBQUduRTtBQUdBQSxxR0FBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9zY2hlbWEvY29yZS5qcz8xOGU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFN0YW5kYXJkIFlBTUwncyBDb3JlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIENvcmUgc2NoZW1hIGhhcyBubyBkaXN0aW5jdGlvbnMgZnJvbSBKU09OIHNjaGVtYSBpcyBKUy1ZQU1MLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vanNvbicpO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/schema/core.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/schema/default.js":
 | 
						
						
						
							|  |  | /*!****************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/schema/default.js ***!
 | 
						
						
						
							|  |  |   \****************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\nmodule.exports = (__webpack_require__(/*! ./core */ \"(ssr)/./node_modules/js-yaml/lib/schema/core.js\").extend)({\n    implicit: [\n        __webpack_require__(/*! ../type/timestamp */ \"(ssr)/./node_modules/js-yaml/lib/type/timestamp.js\"),\n        __webpack_require__(/*! ../type/merge */ \"(ssr)/./node_modules/js-yaml/lib/type/merge.js\")\n    ],\n    explicit: [\n        __webpack_require__(/*! ../type/binary */ \"(ssr)/./node_modules/js-yaml/lib/type/binary.js\"),\n        __webpack_require__(/*! ../type/omap */ \"(ssr)/./node_modules/js-yaml/lib/type/omap.js\"),\n        __webpack_require__(/*! ../type/pairs */ \"(ssr)/./node_modules/js-yaml/lib/type/pairs.js\"),\n        __webpack_require__(/*! ../type/set */ \"(ssr)/./node_modules/js-yaml/lib/type/set.js\")\n    ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hL2RlZmF1bHQuanMiLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELGlEQUFpRDtBQUNqRCxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUd4RTtBQUdBQSxPQUFPQyxPQUFPLEdBQUdDLDZGQUF3QixDQUFDO0lBQ3hDRSxVQUFVO1FBQ1JGLG1CQUFPQSxDQUFDO1FBQ1JBLG1CQUFPQSxDQUFDO0tBQ1Q7SUFDREcsVUFBVTtRQUNSSCxtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztLQUNUO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9zY2hlbWEvZGVmYXVsdC5qcz9jZmNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEpTLVlBTUwncyBkZWZhdWx0IHNjaGVtYSBmb3IgYHNhZmVMb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBzdGFuZGFyZCBZQU1MJ3MgQ29yZSBzY2hlbWEgYW5kIGluY2x1ZGVzIG1vc3Qgb2Zcbi8vIGV4dHJhIHR5cGVzIGRlc2NyaWJlZCBhdCBZQU1MIHRhZyByZXBvc2l0b3J5LiAoaHR0cDovL3lhbWwub3JnL3R5cGUvKVxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS90aW1lc3RhbXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL21lcmdlJylcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL2JpbmFyeScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvb21hcCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvcGFpcnMnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NldCcpXG4gIF1cbn0pO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIiwiZXh0ZW5kIiwiaW1wbGljaXQiLCJleHBsaWNpdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/schema/default.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/schema/failsafe.js":
 | 
						
						
						
							|  |  | /*!*****************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/schema/failsafe.js ***!
 | 
						
						
						
							|  |  |   \*****************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\nvar Schema = __webpack_require__(/*! ../schema */ \"(ssr)/./node_modules/js-yaml/lib/schema.js\");\nmodule.exports = new Schema({\n    explicit: [\n        __webpack_require__(/*! ../type/str */ \"(ssr)/./node_modules/js-yaml/lib/type/str.js\"),\n        __webpack_require__(/*! ../type/seq */ \"(ssr)/./node_modules/js-yaml/lib/type/seq.js\"),\n        __webpack_require__(/*! ../type/map */ \"(ssr)/./node_modules/js-yaml/lib/type/map.js\")\n    ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hL2ZhaWxzYWZlLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUNuQyxtREFBbUQ7QUFHbkQ7QUFHQSxJQUFJQSxTQUFTQyxtQkFBT0EsQ0FBQztBQUdyQkMsT0FBT0MsT0FBTyxHQUFHLElBQUlILE9BQU87SUFDMUJJLFVBQVU7UUFDUkgsbUJBQU9BLENBQUM7UUFDUkEsbUJBQU9BLENBQUM7UUFDUkEsbUJBQU9BLENBQUM7S0FDVDtBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hL2ZhaWxzYWZlLmpzPzU0NzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3N0cicpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2VxJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tYXAnKVxuICBdXG59KTtcbiJdLCJuYW1lcyI6WyJTY2hlbWEiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImV4cGxpY2l0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/schema/failsafe.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/schema/json.js":
 | 
						
						
						
							|  |  | /*!*************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/schema/json.js ***!
 | 
						
						
						
							|  |  |   \*************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\nmodule.exports = (__webpack_require__(/*! ./failsafe */ \"(ssr)/./node_modules/js-yaml/lib/schema/failsafe.js\").extend)({\n    implicit: [\n        __webpack_require__(/*! ../type/null */ \"(ssr)/./node_modules/js-yaml/lib/type/null.js\"),\n        __webpack_require__(/*! ../type/bool */ \"(ssr)/./node_modules/js-yaml/lib/type/bool.js\"),\n        __webpack_require__(/*! ../type/int */ \"(ssr)/./node_modules/js-yaml/lib/type/int.js\"),\n        __webpack_require__(/*! ../type/float */ \"(ssr)/./node_modules/js-yaml/lib/type/float.js\")\n    ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc2NoZW1hL2pzb24uanMiLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFHN0U7QUFHQUEsT0FBT0MsT0FBTyxHQUFHQyxxR0FBNEIsQ0FBQztJQUM1Q0UsVUFBVTtRQUNSRixtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztRQUNSQSxtQkFBT0EsQ0FBQztLQUNUO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9zY2hlbWEvanNvbi5qcz9iMTE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFN0YW5kYXJkIFlBTUwncyBKU09OIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMzIzMVxuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIHRoaXMgc2NoZW1hIGlzIG5vdCBzdWNoIHN0cmljdCBhcyBkZWZpbmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vLyBJdCBhbGxvd3MgbnVtYmVycyBpbiBiaW5hcnkgbm90YWlvbiwgdXNlIGBOdWxsYCBhbmQgYE5VTExgIGFzIGBudWxsYCwgZXRjLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFpbHNhZmUnKS5leHRlbmQoe1xuICBpbXBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvbnVsbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvYm9vbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvaW50JyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9mbG9hdCcpXG4gIF1cbn0pO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIiwiZXh0ZW5kIiwiaW1wbGljaXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/schema/json.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/snippet.js":
 | 
						
						
						
							|  |  | /*!*********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/snippet.js ***!
 | 
						
						
						
							|  |  |   \*********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar common = __webpack_require__(/*! ./common */ \"(ssr)/./node_modules/js-yaml/lib/common.js\");\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n    var head = \"\";\n    var tail = \"\";\n    var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n    if (position - lineStart > maxHalfLength) {\n        head = \" ... \";\n        lineStart = position - maxHalfLength + head.length;\n    }\n    if (lineEnd - position > maxHalfLength) {\n        tail = \" ...\";\n        lineEnd = position + maxHalfLength - tail.length;\n    }\n    return {\n        str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"→\") + tail,\n        pos: position - lineStart + head.length // relative position\n    };\n}\nfunction padStart(string, max) {\n    return common.repeat(\" \", max - string.length) + string;\n}\nfunction makeSnippet(mark, options) {\n    options = Object.create(options || null);\n    if (!mark.buffer) return null;\n    if (!options.maxLength) options.maxLength = 79;\n    if (typeof options.indent !== \"number\") options.indent = 1;\n    if (typeof options.linesBefore !== \"number\") options.linesBefore = 3;\n    if (typeof options.linesAfter !== \"number\") options.linesAfter = 2;\n    var re = /\\r?\\n|\\r|\\0/g;\n    var lineStarts = [\n        0\n    ];\n    var lineEnds = [];\n    var match;\n    var foundLineNo = -1;\n    while(match = re.exec(mark.buffer)){\n        lineEnds.push(match.index);\n        lineStarts.push(match.index + match[0].length);\n        if (mark.position <= match.index && foundLineNo < 0) {\n            foundLineNo = lineStarts.length - 2;\n        }\n    }\n    if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n    var result = \"\", i, line;\n    var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n    var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n    for(i = 1; i <= options.linesBefore; i++){\n        if (foundLineNo - i < 0) break;\n        line = getLine(mark.buffer, lineStarts[foundLineNo - i], lineEnds[foundLineNo - i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength);\n        result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n    }\n    line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n    result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n    result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\" + \"\\n\";\n    for(i = 1; i <= options.linesAfter; i++){\n        if (foundLineNo + i >= lineEnds.length) break;\n        line = getLine(mark.buffer, lineStarts[foundLineNo + i], lineEnds[foundLineNo + i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength);\n        result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n    }\n    return result.replace(/\\n$/, \"\");\n}\nmodule.exports = makeSnippet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc25pcHBldC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUdBLElBQUlBLFNBQVNDLG1CQUFPQSxDQUFDO0FBR3JCLHNEQUFzRDtBQUN0RCxTQUFTQyxRQUFRQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLGFBQWE7SUFDbEUsSUFBSUMsT0FBTztJQUNYLElBQUlDLE9BQU87SUFDWCxJQUFJQyxnQkFBZ0JDLEtBQUtDLEtBQUssQ0FBQ0wsZ0JBQWdCLEtBQUs7SUFFcEQsSUFBSUQsV0FBV0YsWUFBWU0sZUFBZTtRQUN4Q0YsT0FBTztRQUNQSixZQUFZRSxXQUFXSSxnQkFBZ0JGLEtBQUtLLE1BQU07SUFDcEQ7SUFFQSxJQUFJUixVQUFVQyxXQUFXSSxlQUFlO1FBQ3RDRCxPQUFPO1FBQ1BKLFVBQVVDLFdBQVdJLGdCQUFnQkQsS0FBS0ksTUFBTTtJQUNsRDtJQUVBLE9BQU87UUFDTEMsS0FBS04sT0FBT0wsT0FBT1ksS0FBSyxDQUFDWCxXQUFXQyxTQUFTVyxPQUFPLENBQUMsT0FBTyxPQUFPUDtRQUNuRVEsS0FBS1gsV0FBV0YsWUFBWUksS0FBS0ssTUFBTSxDQUFDLG9CQUFvQjtJQUM5RDtBQUNGO0FBR0EsU0FBU0ssU0FBU0MsTUFBTSxFQUFFQyxHQUFHO0lBQzNCLE9BQU9wQixPQUFPcUIsTUFBTSxDQUFDLEtBQUtELE1BQU1ELE9BQU9OLE1BQU0sSUFBSU07QUFDbkQ7QUFHQSxTQUFTRyxZQUFZQyxJQUFJLEVBQUVDLE9BQU87SUFDaENBLFVBQVVDLE9BQU9DLE1BQU0sQ0FBQ0YsV0FBVztJQUVuQyxJQUFJLENBQUNELEtBQUtwQixNQUFNLEVBQUUsT0FBTztJQUV6QixJQUFJLENBQUNxQixRQUFRRyxTQUFTLEVBQUVILFFBQVFHLFNBQVMsR0FBRztJQUM1QyxJQUFJLE9BQU9ILFFBQVFJLE1BQU0sS0FBVSxVQUFVSixRQUFRSSxNQUFNLEdBQVE7SUFDbkUsSUFBSSxP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RixnQkFDdEYsUUFBUUQsS0FBSzNCLEdBQUcsR0FBRztJQUN2QjtJQUVBLE9BQU95QixPQUFPdkIsT0FBTyxDQUFDLE9BQU87QUFDL0I7QUFHQTZCLE9BQU9DLE9BQU8sR0FBR3hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvc25pcHBldC5qcz8xOGIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxuXG4vLyBnZXQgc25pcHBldCBmb3IgYSBzaW5nbGUgbGluZSwgcmVzcGVjdGluZyBtYXhMZW5ndGhcbmZ1bmN0aW9uIGdldExpbmUoYnVmZmVyLCBsaW5lU3RhcnQsIGxpbmVFbmQsIHBvc2l0aW9uLCBtYXhMaW5lTGVuZ3RoKSB7XG4gIHZhciBoZWFkID0gJyc7XG4gIHZhciB0YWlsID0gJyc7XG4gIHZhciBtYXhIYWxmTGVuZ3RoID0gTWF0aC5mbG9vcihtYXhMaW5lTGVuZ3RoIC8gMikgLSAxO1xuXG4gIGlmIChwb3NpdGlvbiAtIGxpbmVTdGFydCA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICBoZWFkID0gJyAuLi4gJztcbiAgICBsaW5lU3RhcnQgPSBwb3NpdGlvbiAtIG1heEhhbGZMZW5ndGggKyBoZWFkLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChsaW5lRW5kIC0gcG9zaXRpb24gPiBtYXhIYWxmTGVuZ3RoKSB7XG4gICAgdGFpbCA9ICcgLi4uJztcbiAgICBsaW5lRW5kID0gcG9zaXRpb24gKyBtYXhIYWxmTGVuZ3RoIC0gdGFpbC5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cjogaGVhZCArIGJ1ZmZlci5zbGljZShsaW5lU3RhcnQsIGxpbmVFbmQpLnJlcGxhY2UoL1xcdC9nLCAn4oaSJykgKyB0YWlsLFxuICAgIHBvczogcG9zaXRpb24gLSBsaW5lU3RhcnQgKyBoZWFkLmxlbmd0aCAvLyByZWxhdGl2ZSBwb3NpdGlvblxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbWF4KSB7XG4gIHJldHVybiBjb21tb24ucmVwZWF0KCcgJywgbWF4IC0gc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59XG5cblxuZnVuY3Rpb24gbWFrZVNuaXBwZXQobWFyaywgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zIHx8IG51bGwpO1xuXG4gIGlmICghbWFyay5idWZmZXIpIHJldHVybiBudWxsO1xuXG4gIGlmICghb3B0aW9ucy5tYXhMZW5ndGgpIG9wdGlvbnMubWF4TGVuZ3RoID0gNzk7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbmRlbnQgICAgICAhPT0gJ251bWJlcicpIG9wdGlvbnMuaW5kZW50ICAgICAgPSAxO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNCZWZvcmUgIT09ICdudW1iZXInKSBvcHRpb25zLmxpbmVzQmVmb3JlID0gMztcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbmVzQWZ0ZXIgICE9PSAnbnVtYmVyJykgb3B0aW9ucy5saW5lc0FmdGVyICA9IDI7XG5cbiAgdmFyIHJlID0gL1xccj9cXG58XFxyfFxcMC9nO1xuICB2YXIgbGluZVN0YXJ0cyA9IFsgMCBdO1xuICB2YXIgbGluZUVuZHMgPSBbXTtcbiAgdmFyIG1hdGNoO1xuICB2YXIgZm91bmRMaW5lTm8gPSAtMTtcblxuICB3aGlsZSAoKG1hdGNoID0gcmUuZXhlYyhtYXJrLmJ1ZmZlcikpKSB7XG4gICAgbGluZUVuZHMucHVzaChtYXRjaC5pbmRleCk7XG4gICAgbGluZVN0YXJ0cy5wdXNoKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIGlmIChtYXJrLnBvc2l0aW9uIDw9IG1hdGNoLmluZGV4ICYmIGZvdW5kTGluZU5vIDwgMCkge1xuICAgICAgZm91bmRMaW5lTm8gPSBsaW5lU3RhcnRzLmxlbmd0aCAtIDI7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kTGluZU5vIDwgMCkgZm91bmRMaW5lTm8gPSBsaW5lU3RhcnRzLmxlbmd0aCAtIDE7XG5cbiAgdmFyIHJlc3VsdCA9ICcnLCBpLCBsaW5lO1xuICB2YXIgbGluZU5vTGVuZ3RoID0gTWF0aC5taW4obWFyay5saW5lICsgb3B0aW9ucy5saW5lc0FmdGVyLCBsaW5lRW5kcy5sZW5ndGgpLnRvU3RyaW5nKCkubGVuZ3RoO1xuICB2YXIgbWF4TGluZUxlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoIC0gKG9wdGlvbnMuaW5kZW50ICsgbGluZU5vTGVuZ3RoICsgMyk7XG5cbiAgZm9yIChpID0gMTsgaSA8PSBvcHRpb25zLmxpbmVzQmVmb3JlOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gLSBpIDwgMCkgYnJlYWs7XG4gICAgbGluZSA9IGdldExpbmUoXG4gICAgICBtYXJrLmJ1ZmZlcixcbiAgICAgIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIGxpbmVFbmRzW2ZvdW5kTGluZU5vIC0gaV0sXG4gICAgICBtYXJrLnBvc2l0aW9uIC0gKGxpbmVTdGFydHNbZm91bmRMaW5lTm9dIC0gbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldKSxcbiAgICAgIG1heExpbmVMZW5ndGhcbiAgICApO1xuICAgIHJlc3VsdCA9IGNvbW1vbi5yZXBlYXQoJyAnLCBvcHRpb25zLmluZGVudCkgKyBwYWRTdGFydCgobWFyay5saW5lIC0gaSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgK1xuICAgICAgJyB8ICcgKyBsaW5lLnN0ciArICdcXG4nICsgcmVzdWx0O1xuICB9XG5cbiAgbGluZSA9IGdldExpbmUobWFyay5idWZmZXIsIGxpbmVTdGFydHNbZm91bmRMaW5lTm9dLCBsaW5lRW5kc1tmb3VuZExpbmVOb10sIG1hcmsucG9zaXRpb24sIG1heExpbmVMZW5ndGgpO1xuICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyAxKS50b1N0cmluZygpLCBsaW5lTm9MZW5ndGgpICtcbiAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbic7XG4gIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KCctJywgb3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzICsgbGluZS5wb3MpICsgJ14nICsgJ1xcbic7XG5cbiAgZm9yIChpID0gMTsgaSA8PSBvcHRpb25zLmxpbmVzQWZ0ZXI7IGkrKykge1xuICAgIGlmIChmb3VuZExpbmVObyArIGkgPj0gbGluZUVuZHMubGVuZ3RoKSBicmVhaztcbiAgICBsaW5lID0gZ2V0TGluZShcbiAgICAgIG1hcmsuYnVmZmVyLFxuICAgICAgbGluZVN0YXJ0c1tmb3VuZExpbmVObyArIGldLFxuICAgICAgbGluZUVuZHNbZm91bmRMaW5lTm8gKyBpXSxcbiAgICAgIG1hcmsucG9zaXRpb24gLSAobGluZVN0YXJ0c1tmb3VuZExpbmVOb10gLSBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vICsgaV0pLFxuICAgICAgbWF4TGluZUxlbmd0aFxuICAgICk7XG4gICAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJyAnLCBvcHRpb25zLmluZGVudCkgKyBwYWRTdGFydCgobWFyay5saW5lICsgaSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgK1xuICAgICAgJyB8ICcgKyBsaW5lLnN0ciArICdcXG4nO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9cXG4kLywgJycpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gbWFrZVNuaXBwZXQ7XG4iXSwibmFtZXMiOlsiY29tbW9uIiwicmVxdWlyZSIsImdldExpbmUiLCJidWZmZXIiLCJsaW5lU3RhcnQiLCJsaW5lRW5kIiwicG9zaXRpb24iLCJtYXhMaW5lTGVuZ3RoIiwiaGVhZCIsInRhaWwiLCJtYXhIYWxmTGVuZ3RoIiwiTWF0aCIsImZsb29yIiwibGVuZ3RoIiwic3RyIiwic2xpY2UiLCJyZXBsYWNlIiwicG9zIiwicGFkU3RhcnQiLCJzdHJpbmciLCJtYXgiLCJyZXBlYXQiLCJtYWtlU25pcHBldCIsIm1hcmsiLCJvcHRpb25zIiwiT2JqZWN0IiwiY3JlYXRlIiwibWF4TGVuZ3RoIiwiaW5kZW50IiwibGluZXNCZWZvcmUiLCJsaW5lc0FmdGVyIiwicmUiLCJsaW5lU3RhcnRzIiwibGluZUVuZHMiLCJtYXRjaCIsImZvdW5kTGluZU5vIiwiZXhlYyIsInB1c2giLCJpbmRleCIsInJlc3VsdCIsImkiLCJsaW5lIiwibGluZU5vTGVuZ3RoIiwibWluIiwidG9TdHJpbmciLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/snippet.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type.js":
 | 
						
						
						
							|  |  | /*!******************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type.js ***!
 | 
						
						
						
							|  |  |   \******************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar YAMLException = __webpack_require__(/*! ./exception */ \"(ssr)/./node_modules/js-yaml/lib/exception.js\");\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n    \"kind\",\n    \"multi\",\n    \"resolve\",\n    \"construct\",\n    \"instanceOf\",\n    \"predicate\",\n    \"represent\",\n    \"representName\",\n    \"defaultStyle\",\n    \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n    \"scalar\",\n    \"sequence\",\n    \"mapping\"\n];\nfunction compileStyleAliases(map) {\n    var result = {};\n    if (map !== null) {\n        Object.keys(map).forEach(function(style) {\n            map[style].forEach(function(alias) {\n                result[String(alias)] = style;\n            });\n        });\n    }\n    return result;\n}\nfunction Type(tag, options) {\n    options = options || {};\n    Object.keys(options).forEach(function(name) {\n        if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n            throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n        }\n    });\n    // TODO: Add tag format check.\n    this.options = options; // keep original options in case user wants to extend this type later\n    this.tag = tag;\n    this.kind = options[\"kind\"] || null;\n    this.resolve = options[\"resolve\"] || function() {\n        return true;\n    };\n    this.construct = options[\"construct\"] || function(data) {\n        return data;\n    };\n    this.instanceOf = options[\"instanceOf\"] || null;\n    this.predicate = options[\"predicate\"] || null;\n    this.represent = options[\"represent\"] || null;\n    this.representName = options[\"representName\"] || null;\n    this.defaultStyle = options[\"defaultStyle\"] || null;\n    this.multi = options[\"multi\"] || false;\n    this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n    if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n        throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n    }\n}\nmodule.exports = Type;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUVBLElBQUlBLGdCQUFnQkMsbUJBQU9BLENBQUM7QUFFNUIsSUFBSUMsMkJBQTJCO0lBQzdCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxJQUFJQyxrQkFBa0I7SUFDcEI7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxTQUFTQyxvQkFBb0JDLEdBQUc7SUFDOUIsSUFBSUMsU0FBUyxDQUFDO0lBRWQsSUFBSUQsUUFBUSxNQUFNO1FBQ2hCRSxPQUFPQyxJQUFJLENBQUNILEtBQUtJLE9BQU8sQ0FBQyxTQUFVQyxLQUFLO1lBQ3RDTCxHQUFHLENBQUNLLE1BQU0sQ0FBQ0QsT0FBTyxDQUFDLFNBQVVFLEtBQUs7Z0JBQ2hDTCxNQUFNLENBQUNNLE9BQU9ELE9BQU8sR0FBR0Q7WUFDMUI7UUFDRjtJQUNGO0lBRUEsT0FBT0o7QUFDVDtBQUVBLFNBQVNPLEtBQUtDLEdBQUcsRUFBRUMsT0FBTztJQUN4QkEsVUFBVUEsV0FBVyxDQUFDO0lBRXRCUixPQUFPQyxJQUFJLENBQUNPLFNBQVNOLE9BQU8sQ0FBQyxTQUFVTyxJQUFJO1FBQ3pDLElBQUlkLHlCQUF5QmUsT0FBTyxDQUFDRCxVQUFVLENBQUMsR0FBRztZQUNqRCxNQUFNLElBQUloQixjQUFjLHFCQUFxQmdCLE9BQU8sZ0NBQWdDRixNQUFNO1FBQzVGO0lBQ0Y7SUFFQSw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDQyxPQUFPLEdBQVNBLFNBQVMscUVBQXFFO0lBQ25HLElBQUksQ0FBQ0QsR0FBRyxHQUFhQTtJQUNyQixJQUFJLENBQUNJLElBQUksR0FBWUgsT0FBTyxDQUFDLE9BQU8sSUFBYTtJQUNqRCxJQUFJLENBQUNJLE9BQU8sR0FBU0osT0FBTyxDQUFDLFVBQVUsSUFBVTtRQUFjLE9BQU87SUFBTTtJQUM1RSxJQUFJLENBQUNLLFNBQVMsR0FBT0wsT0FBTyxDQUFDLFlBQVksSUFBUSxTQUFVTSxJQUFJO1FBQUksT0FBT0E7SUFBTTtJQUNoRixJQUFJLENBQUNDLFVBQVUsR0FBTVAsT0FBTyxDQUFDLGFBQWEsSUFBTztJQUNqRCxJQUFJLENBQUNRLFNBQVMsR0FBT1IsT0FBTyxDQUFDLFlBQVksSUFBUTtJQUNqRCxJQUFJLENBQUNTLFNBQVMsR0FBT1QsT0FBTyxDQUFDLFlBQVksSUFBUTtJQUNqRCxJQUFJLENBQUNVLGFBQWEsR0FBR1YsT0FBTyxDQUFDLGdCQUFnQixJQUFJO0lBQ2pELElBQUksQ0FBQ1csWUFBWSxHQUFJWCxPQUFPLENBQUMsZUFBZSxJQUFLO0lBQ2pELElBQUksQ0FBQ1ksS0FBSyxHQUFXWixPQUFPLENBQUMsUUFBUSxJQUFZO0lBQ2pELElBQUksQ0FBQ2EsWUFBWSxHQUFJeEIsb0JBQW9CVyxPQUFPLENBQUMsZUFBZSxJQUFJO0lBRXBFLElBQUlaLGdCQUFnQmMsT0FBTyxDQUFDLElBQUksQ0FBQ0MsSUFBSSxNQUFNLENBQUMsR0FBRztRQUM3QyxNQUFNLElBQUlsQixjQUFjLG1CQUFtQixJQUFJLENBQUNrQixJQUFJLEdBQUcseUJBQXlCSixNQUFNO0lBQ3hGO0FBQ0Y7QUFFQWUsT0FBT0MsT0FBTyxHQUFHakIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlLmpzPzQ2NzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gICdraW5kJyxcbiAgJ211bHRpJyxcbiAgJ3Jlc29sdmUnLFxuICAnY29uc3RydWN0JyxcbiAgJ2luc3RhbmNlT2YnLFxuICAncHJlZGljYXRlJyxcbiAgJ3JlcHJlc2VudCcsXG4gICdyZXByZXNlbnROYW1lJyxcbiAgJ2RlZmF1bHRTdHlsZScsXG4gICdzdHlsZUFsaWFzZXMnXG5dO1xuXG52YXIgWUFNTF9OT0RFX0tJTkRTID0gW1xuICAnc2NhbGFyJyxcbiAgJ3NlcXVlbmNlJyxcbiAgJ21hcHBpbmcnXG5dO1xuXG5mdW5jdGlvbiBjb21waWxlU3R5bGVBbGlhc2VzKG1hcCkge1xuICB2YXIgcmVzdWx0ID0ge307XG5cbiAgaWYgKG1hcCAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgIG1hcFtzdHlsZV0uZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgcmVzdWx0W1N0cmluZyhhbGlhcyldID0gc3R5bGU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIFR5cGUodGFnLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMub3B0aW9ucyAgICAgICA9IG9wdGlvbnM7IC8vIGtlZXAgb3JpZ2luYWwgb3B0aW9ucyBpbiBjYXNlIHVzZXIgd2FudHMgdG8gZXh0ZW5kIHRoaXMgdHlwZSBsYXRlclxuICB0aGlzLnRhZyAgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudE5hbWUgPSBvcHRpb25zWydyZXByZXNlbnROYW1lJ10gfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gIHx8IG51bGw7XG4gIHRoaXMubXVsdGkgICAgICAgICA9IG9wdGlvbnNbJ211bHRpJ10gICAgICAgICB8fCBmYWxzZTtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBraW5kIFwiJyArIHRoaXMua2luZCArICdcIiBpcyBzcGVjaWZpZWQgZm9yIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUeXBlO1xuIl0sIm5hbWVzIjpbIllBTUxFeGNlcHRpb24iLCJyZXF1aXJlIiwiVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TIiwiWUFNTF9OT0RFX0tJTkRTIiwiY29tcGlsZVN0eWxlQWxpYXNlcyIsIm1hcCIsInJlc3VsdCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3R5bGUiLCJhbGlhcyIsIlN0cmluZyIsIlR5cGUiLCJ0YWciLCJvcHRpb25zIiwibmFtZSIsImluZGV4T2YiLCJraW5kIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImRhdGEiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsIm11bHRpIiwic3R5bGVBbGlhc2VzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/binary.js":
 | 
						
						
						
							|  |  | /*!*************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/binary.js ***!
 | 
						
						
						
							|  |  |   \*************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\n/*eslint-disable no-bitwise*/ var Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n    if (data === null) return false;\n    var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n    // Convert one by one.\n    for(idx = 0; idx < max; idx++){\n        code = map.indexOf(data.charAt(idx));\n        // Skip CR/LF\n        if (code > 64) continue;\n        // Fail on illegal characters\n        if (code < 0) return false;\n        bitlen += 6;\n    }\n    // If there are any bits left, source was corrupted\n    return bitlen % 8 === 0;\n}\nfunction constructYamlBinary(data) {\n    var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map = BASE64_MAP, bits = 0, result = [];\n    // Collect by 6*4 bits (3 bytes)\n    for(idx = 0; idx < max; idx++){\n        if (idx % 4 === 0 && idx) {\n            result.push(bits >> 16 & 0xFF);\n            result.push(bits >> 8 & 0xFF);\n            result.push(bits & 0xFF);\n        }\n        bits = bits << 6 | map.indexOf(input.charAt(idx));\n    }\n    // Dump tail\n    tailbits = max % 4 * 6;\n    if (tailbits === 0) {\n        result.push(bits >> 16 & 0xFF);\n        result.push(bits >> 8 & 0xFF);\n        result.push(bits & 0xFF);\n    } else if (tailbits === 18) {\n        result.push(bits >> 10 & 0xFF);\n        result.push(bits >> 2 & 0xFF);\n    } else if (tailbits === 12) {\n        result.push(bits >> 4 & 0xFF);\n    }\n    return new Uint8Array(result);\n}\nfunction representYamlBinary(object /*, style*/ ) {\n    var result = \"\", bits = 0, idx, tail, max = object.length, map = BASE64_MAP;\n    // Convert every three bytes to 4 ASCII characters.\n    for(idx = 0; idx < max; idx++){\n        if (idx % 3 === 0 && idx) {\n            result += map[bits >> 18 & 0x3F];\n            result += map[bits >> 12 & 0x3F];\n            result += map[bits >> 6 & 0x3F];\n            result += map[bits & 0x3F];\n        }\n        bits = (bits << 8) + object[idx];\n    }\n    // Dump tail\n    tail = max % 3;\n    if (tail === 0) {\n        result += map[bits >> 18 & 0x3F];\n        result += map[bits >> 12 & 0x3F];\n        result += map[bits >> 6 & 0x3F];\n        result += map[bits & 0x3F];\n    } else if (tail === 2) {\n        result += map[bits >> 10 & 0x3F];\n        result += map[bits >> 4 & 0x3F];\n        result += map[bits << 2 & 0x3F];\n        result += map[64];\n    } else if (tail === 1) {\n        result += map[bits >> 2 & 0x3F];\n        result += map[bits << 4 & 0x3F];\n        result += map[64];\n        result += map[64];\n    }\n    return result;\n}\nfunction isBinary(obj) {\n    return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:binary\", {\n    kind: \"scalar\",\n    resolve: resolveYamlBinary,\n    construct: constructYamlBinary,\n    predicate: isBinary,\n    represent: representYamlBinary\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9iaW5hcnkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSwyQkFBMkIsR0FHM0IsSUFBSUEsT0FBT0MsbUJBQU9BLENBQUM7QUFHbkIsd0NBQXdDO0FBQ3hDLElBQUlDLGFBQWE7QUFHakIsU0FBU0Msa0JBQWtCQyxJQUFJO0lBQzdCLElBQUlBLFNBQVMsTUFBTSxPQUFPO0lBRTFCLElBQUlDLE1BQU1DLEtBQUtDLFNBQVMsR0FBR0MsTUFBTUosS0FBS0ssTUFBTSxFQUFFQyxNQUFNUjtJQUVwRCxzQkFBc0I7SUFDdEIsSUFBS0ksTUFBTSxHQUFHQSxNQUFNRSxLQUFLRixNQUFPO1FBQzlCRCxPQUFPSyxJQUFJQyxPQUFPLENBQUNQLEtBQUtRLE1BQU0sQ0FBQ047UUFFL0IsYUFBYTtRQUNiLElBQUlELE9BQU8sSUFBSTtRQUVmLDZCQUE2QjtRQUM3QixJQUFJQSxPQUFPLEdBQUcsT0FBTztRQUVyQkUsVUFBVTtJQUNaO0lBRUEsbURBQW1EO0lBQ25ELE9BQU8sU0FBVSxNQUFPO0FBQzFCO0FBRUEsU0FBU00sb0JBQW9CVCxJQUFJO0lBQy9CLElBQUlFLEtBQUtRLFVBQ0xDLFFBQVFYLEtBQUtZLE9BQU8sQ0FBQyxZQUFZLEtBQ2pDUixNQUFNTyxNQUFNTixNQUFNLEVBQ2xCQyxNQUFNUixZQUNOZSxPQUFPLEdBQ1BDLFNBQVMsRUFBRTtJQUVmLGdDQUFnQztJQUVoQyxJQUFLWixNQUFNLEdBQUdBLE1BQU1FLEtBQUtGLE1BQU87UUFDOUIsSUFBSSxNQUFPLE1BQU0sS0FBTUEsS0FBSztZQUMxQlksT0FBT0MsSUFBSSxDQUFDLFFBQVMsS0FBTTtZQUMzQkQsT0FBT0MsSUFBSSxDQUFDLFFBQVMsSUFBSztZQUMxQkQsT0FBT0MsSUFBSSxDQUFDRixPQUFPO1FBQ3JCO1FBRUFBLE9BQU8sUUFBUyxJQUFLUCxJQUFJQyxPQUFPLENBQUNJLE1BQU1ILE1BQU0sQ0FBQ047SUFDaEQ7SUFFQSxZQUFZO0lBRVpRLFdBQVcsTUFBTyxJQUFLO0lBRXZCLElBQUlBLGFBQWEsR0FBRztRQUNsQkksT0FBT0MsSUFBSSxDQUFDLFFBQVMsS0FBTTtRQUMzQkQsT0FBT0MsSUFBSSxDQUFDLFFBQVMsSUFBSztRQUMxQkQsT0FBT0MsSUFBSSxDQUFDRixPQUFPO0lBQ3JCLE9BQU8sSUFBSUgsYUFBYSxJQUFJO1FBQzFCSSxPQUFPQyxJQUFJLENBQUMsUUFBUyxLQUFNO1FBQzNCRCxPQUFPQyxJQUFJLENBQUMsUUFBUyxJQUFLO0lBQzVCLE9BQU8sSUFBSUwsYUFBYSxJQUFJO1FBQzFCSSxPQUFPQyxJQUFJLENBQUMsUUFBUyxJQUFLO0lBQzVCO0lBRUEsT0FBTyxJQUFJQyxXQUFXRjtBQUN4QjtBQUVBLFNBQVNHLG9CQUFvQkMsT0FBTyxTQUFTLEdBQVY7SUFDakMsSUFBSUosU0FBUyxJQUFJRCxPQUFPLEdBQUdYLEtBQUtpQixNQUM1QmYsTUFBTWMsT0FBT2IsTUFBTSxFQUNuQkMsTUFBTVI7SUFFVixtREFBbUQ7SUFFbkQsSUFBS0ksTUFBTSxHQUFHQSxNQUFNRSxLQUFLRixNQUFPO1FBQzlCLElBQUksTUFBTyxNQUFNLEtBQU1BLEtBQUs7WUFDMUJZLFVBQVVSLEdBQUcsQ0FBQyxRQUFTLEtBQU0sS0FBSztZQUNsQ1EsVUFBVVIsR0FBRyxDQUFDLFFBQVMsS0FBTSxLQUFLO1lBQ2xDUSxVQUFVUixHQUFHLENBQUMsUUFBUyxJQUFLLEtBQUs7WUFDakNRLFVBQVVSLEdBQUcsQ0FBQ08sT0FBTyxLQUFLO1FBQzVCO1FBRUFBLE9BQU8sQ0FBQ0EsUUFBUSxLQUFLSyxNQUFNLENBQUNoQixJQUFJO0lBQ2xDO0lBRUEsWUFBWTtJQUVaaUIsT0FBT2YsTUFBTTtJQUViLElBQUllLFNBQVMsR0FBRztRQUNkTCxVQUFVUixHQUFHLENBQUMsUUFBUyxLQUFNLEtBQUs7UUFDbENRLFVBQVVSLEdBQUcsQ0FBQyxRQUFTLEtBQU0sS0FBSztRQUNsQ1EsVUFBVVIsR0FBRyxDQUFDLFFBQVMsSUFBSyxLQUFLO1FBQ2pDUSxVQUFVUixHQUFHLENBQUNPLE9BQU8sS0FBSztJQUM1QixPQUFPLElBQUlNLFNBQVMsR0FBRztRQUNyQkwsVUFBVVIsR0FBRyxDQUFDLFFBQVMsS0FBTSxLQUFLO1FBQ2xDUSxVQUFVUixHQUFHLENBQUMsUUFBUyxJQUFLLEtBQUs7UUFDakNRLFVBQVVSLEdBQUcsQ0FBQyxRQUFTLElBQUssS0FBSztRQUNqQ1EsVUFBVVIsR0FBRyxDQUFDLEdBQUc7SUFDbkIsT0FBTyxJQUFJYSxTQUFTLEdBQUc7UUFDckJMLFVBQVVSLEdBQUcsQ0FBQyxRQUFTLElBQUssS0FBSztRQUNqQ1EsVUFBVVIsR0FBRyxDQUFDLFFBQVMsSUFBSyxLQUFLO1FBQ2pDUSxVQUFVUixHQUFHLENBQUMsR0FBRztRQUNqQlEsVUFBVVIsR0FBRyxDQUFDLEdBQUc7SUFDbkI7SUFFQSxPQUFPUTtBQUNUO0FBRUEsU0FBU00sU0FBU0MsR0FBRztJQUNuQixPQUFPQyxPQUFPQyxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSixTQUFVO0FBQ2xEO0FBRUFLLE9BQU9DLE9BQU8sR0FBRyxJQUFJL0IsS0FBSyw0QkFBNEI7SUFDcERnQyxNQUFNO0lBQ05DLFNBQVM5QjtJQUNUK0IsV0FBV3JCO0lBQ1hzQixXQUFXWDtJQUNYWSxXQUFXZjtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9iaW5hcnkuanM/ZDBlMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gKGJpdGxlbiAlIDgpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHtcbiAgdmFyIGlkeCwgdGFpbGJpdHMsXG4gICAgICBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csICcnKSwgLy8gcmVtb3ZlIENSL0xGICYgcGFkZGluZyB0byBzaW1wbGlmeSBzY2FuXG4gICAgICBtYXggPSBpbnB1dC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQLFxuICAgICAgYml0cyA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgNCA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDYpIHwgbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDEwKSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDIpICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gNCkgJiAweEZGKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gICdbb2JqZWN0IFVpbnQ4QXJyYXldJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSxcbiAgcHJlZGljYXRlOiBpc0JpbmFyeSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5XG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIkJBU0U2NF9NQVAiLCJyZXNvbHZlWWFtbEJpbmFyeSIsImRhdGEiLCJjb2RlIiwiaWR4IiwiYml0bGVuIiwibWF4IiwibGVuZ3RoIiwibWFwIiwiaW5kZXhPZiIsImNoYXJBdCIsImNvbnN0cnVjdFlhbWxCaW5hcnkiLCJ0YWlsYml0cyIsImlucHV0IiwicmVwbGFjZSIsImJpdHMiLCJyZXN1bHQiLCJwdXNoIiwiVWludDhBcnJheSIsInJlcHJlc2VudFlhbWxCaW5hcnkiLCJvYmplY3QiLCJ0YWlsIiwiaXNCaW5hcnkiLCJvYmoiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJtb2R1bGUiLCJleHBvcnRzIiwia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/binary.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/bool.js":
 | 
						
						
						
							|  |  | /*!***********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/bool.js ***!
 | 
						
						
						
							|  |  |   \***********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nfunction resolveYamlBoolean(data) {\n    if (data === null) return false;\n    var max = data.length;\n    return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\nfunction constructYamlBoolean(data) {\n    return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\nfunction isBoolean(object) {\n    return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:bool\", {\n    kind: \"scalar\",\n    resolve: resolveYamlBoolean,\n    construct: constructYamlBoolean,\n    predicate: isBoolean,\n    represent: {\n        lowercase: function(object) {\n            return object ? \"true\" : \"false\";\n        },\n        uppercase: function(object) {\n            return object ? \"TRUE\" : \"FALSE\";\n        },\n        camelcase: function(object) {\n            return object ? \"True\" : \"False\";\n        }\n    },\n    defaultStyle: \"lowercase\"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9ib29sLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsSUFBSUEsT0FBT0MsbUJBQU9BLENBQUM7QUFFbkIsU0FBU0MsbUJBQW1CQyxJQUFJO0lBQzlCLElBQUlBLFNBQVMsTUFBTSxPQUFPO0lBRTFCLElBQUlDLE1BQU1ELEtBQUtFLE1BQU07SUFFckIsT0FBTyxRQUFTLEtBQU1GLENBQUFBLFNBQVMsVUFBVUEsU0FBUyxVQUFVQSxTQUFTLE1BQUssS0FDbEVDLFFBQVEsS0FBTUQsQ0FBQUEsU0FBUyxXQUFXQSxTQUFTLFdBQVdBLFNBQVMsT0FBTTtBQUMvRTtBQUVBLFNBQVNHLHFCQUFxQkgsSUFBSTtJQUNoQyxPQUFPQSxTQUFTLFVBQ1RBLFNBQVMsVUFDVEEsU0FBUztBQUNsQjtBQUVBLFNBQVNJLFVBQVVDLE1BQU07SUFDdkIsT0FBT0MsT0FBT0MsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ0osWUFBWTtBQUNwRDtBQUVBSyxPQUFPQyxPQUFPLEdBQUcsSUFBSWQsS0FBSywwQkFBMEI7SUFDbERlLE1BQU07SUFDTkMsU0FBU2Q7SUFDVGUsV0FBV1g7SUFDWFksV0FBV1g7SUFDWFksV0FBVztRQUNUQyxXQUFXLFNBQVVaLE1BQU07WUFBSSxPQUFPQSxTQUFTLFNBQVM7UUFBUztRQUNqRWEsV0FBVyxTQUFVYixNQUFNO1lBQUksT0FBT0EsU0FBUyxTQUFTO1FBQVM7UUFDakVjLFdBQVcsU0FBVWQsTUFBTTtZQUFJLE9BQU9BLFNBQVMsU0FBUztRQUFTO0lBQ25FO0lBQ0FlLGNBQWM7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlL2Jvb2wuanM/NTA4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gJ3RydWUnIHx8IGRhdGEgPT09ICdUcnVlJyB8fCBkYXRhID09PSAnVFJVRScpKSB8fFxuICAgICAgICAgKG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gJ2ZhbHNlJyB8fCBkYXRhID09PSAnRmFsc2UnIHx8IGRhdGEgPT09ICdGQUxTRScpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVHJ1ZScgfHxcbiAgICAgICAgIGRhdGEgPT09ICdUUlVFJztcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbixcbiAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sXG4gIHJlcHJlc2VudDoge1xuICAgIGxvd2VyY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ3RydWUnIDogJ2ZhbHNlJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICdUUlVFJyA6ICdGQUxTRSc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVHJ1ZScgOiAnRmFsc2UnOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIl0sIm5hbWVzIjpbIlR5cGUiLCJyZXF1aXJlIiwicmVzb2x2ZVlhbWxCb29sZWFuIiwiZGF0YSIsIm1heCIsImxlbmd0aCIsImNvbnN0cnVjdFlhbWxCb29sZWFuIiwiaXNCb29sZWFuIiwib2JqZWN0IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibW9kdWxlIiwiZXhwb3J0cyIsImtpbmQiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwibG93ZXJjYXNlIiwidXBwZXJjYXNlIiwiY2FtZWxjYXNlIiwiZGVmYXVsdFN0eWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/bool.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/float.js":
 | 
						
						
						
							|  |  | /*!************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/float.js ***!
 | 
						
						
						
							|  |  |   \************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar common = __webpack_require__(/*! ../common */ \"(ssr)/./node_modules/js-yaml/lib/common.js\");\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nvar YAML_FLOAT_PATTERN = new RegExp(// 2.5e4, 2.5 and integers\n\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?\" + // .2e4, .2\n// special case, seems not from spec\n\"|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?\" + // .inf\n\"|[-+]?\\\\.(?:inf|Inf|INF)\" + // .nan\n\"|\\\\.(?:nan|NaN|NAN))$\");\nfunction resolveYamlFloat(data) {\n    if (data === null) return false;\n    if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n    // Probably should update regexp & check speed\n    data[data.length - 1] === \"_\") {\n        return false;\n    }\n    return true;\n}\nfunction constructYamlFloat(data) {\n    var value, sign;\n    value = data.replace(/_/g, \"\").toLowerCase();\n    sign = value[0] === \"-\" ? -1 : 1;\n    if (\"+-\".indexOf(value[0]) >= 0) {\n        value = value.slice(1);\n    }\n    if (value === \".inf\") {\n        return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n    } else if (value === \".nan\") {\n        return NaN;\n    }\n    return sign * parseFloat(value, 10);\n}\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n    var res;\n    if (isNaN(object)) {\n        switch(style){\n            case \"lowercase\":\n                return \".nan\";\n            case \"uppercase\":\n                return \".NAN\";\n            case \"camelcase\":\n                return \".NaN\";\n        }\n    } else if (Number.POSITIVE_INFINITY === object) {\n        switch(style){\n            case \"lowercase\":\n                return \".inf\";\n            case \"uppercase\":\n                return \".INF\";\n            case \"camelcase\":\n                return \".Inf\";\n        }\n    } else if (Number.NEGATIVE_INFINITY === object) {\n        switch(style){\n            case \"lowercase\":\n                return \"-.inf\";\n            case \"uppercase\":\n                return \"-.INF\";\n            case \"camelcase\":\n                return \"-.Inf\";\n        }\n    } else if (common.isNegativeZero(object)) {\n        return \"-0.0\";\n    }\n    res = object.toString(10);\n    // JS stringifier can build scientific format without dots: 5e-100,\n    // while YAML requres dot: 5.e-100. Fix it with simple hack\n    return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\nfunction isFloat(object) {\n    return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:float\", {\n    kind: \"scalar\",\n    resolve: resolveYamlFloat,\n    construct: constructYamlFloat,\n    predicate: isFloat,\n    represent: representYamlFloat,\n    defaultStyle: \"lowercase\"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9mbG9hdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUVBLElBQUlBLFNBQVNDLG1CQUFPQSxDQUFDO0FBQ3JCLElBQUlDLE9BQVNELG1CQUFPQSxDQUFDO0FBRXJCLElBQUlFLHFCQUFxQixJQUFJQyxPQUMzQiwwQkFBMEI7QUFDMUIsaUVBQ0EsV0FBVztBQUNYLG9DQUFvQztBQUNwQyxvQ0FDQSxPQUFPO0FBQ1AsNkJBQ0EsT0FBTztBQUNQO0FBRUYsU0FBU0MsaUJBQWlCQyxJQUFJO0lBQzVCLElBQUlBLFNBQVMsTUFBTSxPQUFPO0lBRTFCLElBQUksQ0FBQ0gsbUJBQW1CSSxJQUFJLENBQUNELFNBQ3pCLGdEQUFnRDtJQUNoRCw4Q0FBOEM7SUFDOUNBLElBQUksQ0FBQ0EsS0FBS0UsTUFBTSxHQUFHLEVBQUUsS0FBSyxLQUFLO1FBQ2pDLE9BQU87SUFDVDtJQUVBLE9BQU87QUFDVDtBQUVBLFNBQVNDLG1CQUFtQkgsSUFBSTtJQUM5QixJQUFJSSxPQUFPQztJQUVYRCxRQUFTSixLQUFLTSxPQUFPLENBQUMsTUFBTSxJQUFJQyxXQUFXO0lBQzNDRixPQUFTRCxLQUFLLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJO0lBRWpDLElBQUksS0FBS0ksT0FBTyxDQUFDSixLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUc7UUFDL0JBLFFBQVFBLE1BQU1LLEtBQUssQ0FBQztJQUN0QjtJQUVBLElBQUlMLFVBQVUsUUFBUTtRQUNwQixPQUFPLFNBQVUsSUFBS00sT0FBT0MsaUJBQWlCLEdBQUdELE9BQU9FLGlCQUFpQjtJQUUzRSxPQUFPLElBQUlSLFVBQVUsUUFBUTtRQUMzQixPQUFPUztJQUNUO0lBQ0EsT0FBT1IsT0FBT1MsV0FBV1YsT0FBTztBQUNsQztBQUdBLElBQUlXLHlCQUF5QjtBQUU3QixTQUFTQyxtQkFBbUJDLE1BQU0sRUFBRUMsS0FBSztJQUN2QyxJQUFJQztJQUVKLElBQUlDLE1BQU1ILFNBQVM7UUFDakIsT0FBUUM7WUFDTixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztRQUMzQjtJQUNGLE9BQU8sSUFBSVIsT0FBT0MsaUJBQWlCLEtBQUtNLFFBQVE7UUFDOUMsT0FBUUM7WUFDTixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztRQUMzQjtJQUNGLE9BQU8sSUFBSVIsT0FBT0UsaUJBQWlCLEtBQUtLLFFBQVE7UUFDOUMsT0FBUUM7WUFDTixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztRQUMzQjtJQUNGLE9BQU8sSUFBSXhCLE9BQU8yQixjQUFjLENBQUNKLFNBQVM7UUFDeEMsT0FBTztJQUNUO0lBRUFFLE1BQU1GLE9BQU9LLFFBQVEsQ0FBQztJQUV0QixtRUFBbUU7SUFDbkUsMkRBQTJEO0lBRTNELE9BQU9QLHVCQUF1QmQsSUFBSSxDQUFDa0IsT0FBT0EsSUFBSWIsT0FBTyxDQUFDLEtBQUssUUFBUWE7QUFDckU7QUFFQSxTQUFTSSxRQUFRTixNQUFNO0lBQ3JCLE9BQU8sT0FBUVEsU0FBUyxDQUFDSCxRQUFRLENBQUNJLElBQUksQ0FBQ1QsWUFBWSxxQkFDM0NBLENBQUFBLFNBQVMsTUFBTSxLQUFLdkIsT0FBTzJCLGNBQWMsQ0FBQ0osT0FBTTtBQUMxRDtBQUVBVSxPQUFPQyxPQUFPLEdBQUcsSUFBSWhDLEtBQUssMkJBQTJCO0lBQ25EaUMsTUFBTTtJQUNOQyxTQUFTL0I7SUFDVGdDLFdBQVc1QjtJQUNYNkIsV0FBV1Q7SUFDWFUsV0FBV2pCO0lBQ1hrQixjQUFjO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9mbG9hdC5qcz8yY2RjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIFR5cGUgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gICdeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuMmU0LCAuMlxuICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuaW5mXG4gICd8Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKScgK1xuICAvLyAubmFuXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8XG4gICAgICAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2BcbiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbjtcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG5cbiAgaWYgKCcrLScuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcuaW5mJykge1xuICAgIHJldHVybiAoc2lnbiA9PT0gMSkgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJy5uYW4nKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUsIDEwKTtcbn1cblxuXG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcblxuICBpZiAoaXNOYU4ob2JqZWN0KSkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLm5hbic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5OQU4nO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuTmFOJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICctLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy0uSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLS5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiAnLTAuMCc7XG4gIH1cblxuICByZXMgPSBvYmplY3QudG9TdHJpbmcoMTApO1xuXG4gIC8vIEpTIHN0cmluZ2lmaWVyIGNhbiBidWlsZCBzY2llbnRpZmljIGZvcm1hdCB3aXRob3V0IGRvdHM6IDVlLTEwMCxcbiAgLy8gd2hpbGUgWUFNTCByZXF1cmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZSgnZScsICcuZScpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBOdW1iZXJdJykgJiZcbiAgICAgICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEZsb2F0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCxcbiAgcHJlZGljYXRlOiBpc0Zsb2F0LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxGbG9hdCxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iXSwibmFtZXMiOlsiY29tbW9uIiwicmVxdWlyZSIsIlR5cGUiLCJZQU1MX0ZMT0FUX1BBVFRFUk4iLCJSZWdFeHAiLCJyZXNvbHZlWWFtbEZsb2F0IiwiZGF0YSIsInRlc3QiLCJsZW5ndGgiLCJjb25zdHJ1Y3RZYW1sRmxvYXQiLCJ2YWx1ZSIsInNpZ24iLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwic2xpY2UiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsIk5FR0FUSVZFX0lORklOSVRZIiwiTmFOIiwicGFyc2VGbG9hdCIsIlNDSUVOVElGSUNfV0lUSE9VVF9ET1QiLCJyZXByZXNlbnRZYW1sRmxvYXQiLCJvYmplY3QiLCJzdHlsZSIsInJlcyIsImlzTmFOIiwiaXNOZWdhdGl2ZVplcm8iLCJ0b1N0cmluZyIsImlzRmxvYXQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwibW9kdWxlIiwiZXhwb3J0cyIsImtpbmQiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwiZGVmYXVsdFN0eWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/float.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/int.js":
 | 
						
						
						
							|  |  | /*!**********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/int.js ***!
 | 
						
						
						
							|  |  |   \**********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar common = __webpack_require__(/*! ../common */ \"(ssr)/./node_modules/js-yaml/lib/common.js\");\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nfunction isHexCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x39 /* 9 */  || 0x41 /* A */  <= c && c <= 0x46 /* F */  || 0x61 /* a */  <= c && c <= 0x66 /* f */ ;\n}\nfunction isOctCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x37 /* 7 */ ;\n}\nfunction isDecCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ;\n}\nfunction resolveYamlInteger(data) {\n    if (data === null) return false;\n    var max = data.length, index = 0, hasDigits = false, ch;\n    if (!max) return false;\n    ch = data[index];\n    // sign\n    if (ch === \"-\" || ch === \"+\") {\n        ch = data[++index];\n    }\n    if (ch === \"0\") {\n        // 0\n        if (index + 1 === max) return true;\n        ch = data[++index];\n        // base 2, base 8, base 16\n        if (ch === \"b\") {\n            // base 2\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (ch !== \"0\" && ch !== \"1\") return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n        if (ch === \"x\") {\n            // base 16\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (!isHexCode(data.charCodeAt(index))) return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n        if (ch === \"o\") {\n            // base 8\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (!isOctCode(data.charCodeAt(index))) return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n    }\n    // base 10 (except 0)\n    // value should not start with `_`;\n    if (ch === \"_\") return false;\n    for(; index < max; index++){\n        ch = data[index];\n        if (ch === \"_\") continue;\n        if (!isDecCode(data.charCodeAt(index))) {\n            return false;\n        }\n        hasDigits = true;\n    }\n    // Should have digits and should not end with `_`\n    if (!hasDigits || ch === \"_\") return false;\n    return true;\n}\nfunction constructYamlInteger(data) {\n    var value = data, sign = 1, ch;\n    if (value.indexOf(\"_\") !== -1) {\n        value = value.replace(/_/g, \"\");\n    }\n    ch = value[0];\n    if (ch === \"-\" || ch === \"+\") {\n        if (ch === \"-\") sign = -1;\n        value = value.slice(1);\n        ch = value[0];\n    }\n    if (value === \"0\") return 0;\n    if (ch === \"0\") {\n        if (value[1] === \"b\") return sign * parseInt(value.slice(2), 2);\n        if (value[1] === \"x\") return sign * parseInt(value.slice(2), 16);\n        if (value[1] === \"o\") return sign * parseInt(value.slice(2), 8);\n    }\n    return sign * parseInt(value, 10);\n}\nfunction isInteger(object) {\n    return Object.prototype.toString.call(object) === \"[object Number]\" && object % 1 === 0 && !common.isNegativeZero(object);\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:int\", {\n    kind: \"scalar\",\n    resolve: resolveYamlInteger,\n    construct: constructYamlInteger,\n    predicate: isInteger,\n    represent: {\n        binary: function(obj) {\n            return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n        },\n        octal: function(obj) {\n            return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n        },\n        decimal: function(obj) {\n            return obj.toString(10);\n        },\n        /* eslint-disable max-len */ hexadecimal: function(obj) {\n            return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n        }\n    },\n    defaultStyle: \"decimal\",\n    styleAliases: {\n        binary: [\n            2,\n            \"bin\"\n        ],\n        octal: [\n            8,\n            \"oct\"\n        ],\n        decimal: [\n            10,\n            \"dec\"\n        ],\n        hexadecimal: [\n            16,\n            \"hex\"\n        ]\n    }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9pbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxTQUFTQyxtQkFBT0EsQ0FBQztBQUNyQixJQUFJQyxPQUFTRCxtQkFBT0EsQ0FBQztBQUVyQixTQUFTRSxVQUFVQyxDQUFDO0lBQ2xCLE9BQU8sS0FBTSxLQUFLLE9BQU1BLEtBQU9BLEtBQUssS0FBSSxLQUFLLE9BQ3JDLEtBQUssS0FBSyxPQUFNQSxLQUFPQSxLQUFLLEtBQUksS0FBSyxPQUNyQyxLQUFLLEtBQUssT0FBTUEsS0FBT0EsS0FBSyxLQUFJLEtBQUs7QUFDL0M7QUFFQSxTQUFTQyxVQUFVRCxDQUFDO0lBQ2xCLE9BQVEsS0FBSyxLQUFLLE9BQU1BLEtBQU9BLEtBQUssS0FBSSxLQUFLO0FBQy9DO0FBRUEsU0FBU0UsVUFBVUYsQ0FBQztJQUNsQixPQUFRLEtBQUssS0FBSyxPQUFNQSxLQUFPQSxLQUFLLEtBQUksS0FBSztBQUMvQztBQUVBLFNBQVNHLG1CQUFtQkMsSUFBSTtJQUM5QixJQUFJQSxTQUFTLE1BQU0sT0FBTztJQUUxQixJQUFJQyxNQUFNRCxLQUFLRSxNQUFNLEVBQ2pCQyxRQUFRLEdBQ1JDLFlBQVksT0FDWkM7SUFFSixJQUFJLENBQUNKLEtBQUssT0FBTztJQUVqQkksS0FBS0wsSUFBSSxDQUFDRyxNQUFNO0lBRWhCLE9BQU87SUFDUCxJQUFJRSxPQUFPLE9BQU9BLE9BQU8sS0FBSztRQUM1QkEsS0FBS0wsSUFBSSxDQUFDLEVBQUVHLE1BQU07SUFDcEI7SUFFQSxJQUFJRSxPQUFPLEtBQUs7UUFDZCxJQUFJO1FBQ0osSUFBSUYsUUFBUSxNQUFNRixLQUFLLE9BQU87UUFDOUJJLEtBQUtMLElBQUksQ0FBQyxFQUFFRyxNQUFNO1FBRWxCLDBCQUEwQjtRQUUxQixJQUFJRSxPQUFPLEtBQUs7WUFDZCxTQUFTO1lBQ1RGO1lBRUEsTUFBT0EsUUFBUUYsS0FBS0UsUUFBUztnQkFDM0JFLEtBQUtMLElBQUks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YSxTQUFVRCxHQUFHO1lBQUksT0FBT0EsT0FBTyxJQUFJLE9BQVFBLElBQUlYLFFBQVEsQ0FBQyxLQUFLLFFBQVNXLElBQUlYLFFBQVEsQ0FBQyxHQUFHTixLQUFLLENBQUM7UUFBSTtRQUM3R21CLFNBQWEsU0FBVUYsR0FBRztZQUFJLE9BQU9BLElBQUlYLFFBQVEsQ0FBQztRQUFLO1FBQ3ZELDBCQUEwQixHQUMxQmMsYUFBYSxTQUFVSCxHQUFHO1lBQUksT0FBT0EsT0FBTyxJQUFJLE9BQU9BLElBQUlYLFFBQVEsQ0FBQyxJQUFJZSxXQUFXLEtBQU0sUUFBUUosSUFBSVgsUUFBUSxDQUFDLElBQUllLFdBQVcsR0FBR3JCLEtBQUssQ0FBQztRQUFJO0lBQzVJO0lBQ0FzQixjQUFjO0lBQ2RDLGNBQWM7UUFDWlAsUUFBYTtZQUFFO1lBQUk7U0FBTztRQUMxQkUsT0FBYTtZQUFFO1lBQUk7U0FBTztRQUMxQkMsU0FBYTtZQUFFO1lBQUk7U0FBTztRQUMxQkMsYUFBYTtZQUFFO1lBQUk7U0FBTztJQUM1QjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9pbnQuanM/ZTgzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBUeXBlICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIGlzSGV4Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkgfHxcbiAgICAgICAgICgoMHg0MS8qIEEgKi8gPD0gYykgJiYgKGMgPD0gMHg0Ni8qIEYgKi8pKSB8fFxuICAgICAgICAgKCgweDYxLyogYSAqLyA8PSBjKSAmJiAoYyA8PSAweDY2LyogZiAqLykpO1xufVxuXG5mdW5jdGlvbiBpc09jdENvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM3LyogNyAqLykpO1xufVxuXG5mdW5jdGlvbiBpc0RlY0NvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGhhc0RpZ2l0cyA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgaWYgKCFtYXgpIHJldHVybiBmYWxzZTtcblxuICBjaCA9IGRhdGFbaW5kZXhdO1xuXG4gIC8vIHNpZ25cbiAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgLy8gMFxuICAgIGlmIChpbmRleCArIDEgPT09IG1heCkgcmV0dXJuIHRydWU7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuXG4gICAgLy8gYmFzZSAyLCBiYXNlIDgsIGJhc2UgMTZcblxuICAgIGlmIChjaCA9PT0gJ2InKSB7XG4gICAgICAvLyBiYXNlIDJcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICdfJztcbiAgICB9XG5cblxuICAgIGlmIChjaCA9PT0gJ3gnKSB7XG4gICAgICAvLyBiYXNlIDE2XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAnbycpIHtcbiAgICAgIC8vIGJhc2UgOFxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICdfJztcbiAgICB9XG4gIH1cblxuICAvLyBiYXNlIDEwIChleGNlcHQgMClcblxuICAvLyB2YWx1ZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYF9gO1xuICBpZiAoY2ggPT09ICdfJykgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gIH1cblxuICAvLyBTaG91bGQgaGF2ZSBkaWdpdHMgYW5kIHNob3VsZCBub3QgZW5kIHdpdGggYF9gXG4gIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSAnXycpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEludGVnZXIoZGF0YSkge1xuICB2YXIgdmFsdWUgPSBkYXRhLCBzaWduID0gMSwgY2g7XG5cbiAgaWYgKHZhbHVlLmluZGV4T2YoJ18nKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL18vZywgJycpO1xuICB9XG5cbiAgY2ggPSB2YWx1ZVswXTtcblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgaWYgKGNoID09PSAnLScpIHNpZ24gPSAtMTtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgIGNoID0gdmFsdWVbMF07XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcwJykgcmV0dXJuIDA7XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICBpZiAodmFsdWVbMV0gPT09ICdiJykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMik7XG4gICAgaWYgKHZhbHVlWzFdID09PSAneCcpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDE2KTtcbiAgICBpZiAodmFsdWVbMV0gPT09ICdvJykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgOCk7XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHtcbiAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmXG4gICAgICAgICAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnk6ICAgICAgZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqID49IDAgPyAnMGInICsgb2JqLnRvU3RyaW5nKDIpIDogJy0wYicgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7IH0sXG4gICAgb2N0YWw6ICAgICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzBvJyAgKyBvYmoudG9TdHJpbmcoOCkgOiAnLTBvJyAgKyBvYmoudG9TdHJpbmcoOCkuc2xpY2UoMSk7IH0sXG4gICAgZGVjaW1hbDogICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iai50b1N0cmluZygxMCk7IH0sXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGhleGFkZWNpbWFsOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogPj0gMCA/ICcweCcgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgOiAgJy0weCcgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnZGVjaW1hbCcsXG4gIHN0eWxlQWxpYXNlczoge1xuICAgIGJpbmFyeTogICAgICBbIDIsICAnYmluJyBdLFxuICAgIG9jdGFsOiAgICAgICBbIDgsICAnb2N0JyBdLFxuICAgIGRlY2ltYWw6ICAgICBbIDEwLCAnZGVjJyBdLFxuICAgIGhleGFkZWNpbWFsOiBbIDE2LCAnaGV4JyBdXG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImNvbW1vbiIsInJlcXVpcmUiLCJUeXBlIiwiaXNIZXhDb2RlIiwiYyIsImlzT2N0Q29kZSIsImlzRGVjQ29kZSIsInJlc29sdmVZYW1sSW50ZWdlciIsImRhdGEiLCJtYXgiLCJsZW5ndGgiLCJpbmRleCIsImhhc0RpZ2l0cyIsImNoIiwiY2hhckNvZGVBdCIsImNvbnN0cnVjdFlhbWxJbnRlZ2VyIiwidmFsdWUiLCJzaWduIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJzbGljZSIsInBhcnNlSW50IiwiaXNJbnRlZ2VyIiwib2JqZWN0IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiaXNOZWdhdGl2ZVplcm8iLCJtb2R1bGUiLCJleHBvcnRzIiwia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJiaW5hcnkiLCJvYmoiLCJvY3RhbCIsImRlY2ltYWwiLCJoZXhhZGVjaW1hbCIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/int.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/map.js":
 | 
						
						
						
							|  |  | /*!**********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/map.js ***!
 | 
						
						
						
							|  |  |   \**********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nmodule.exports = new Type(\"tag:yaml.org,2002:map\", {\n    kind: \"mapping\",\n    construct: function(data) {\n        return data !== null ? data : {};\n    }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9tYXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxPQUFPQyxtQkFBT0EsQ0FBQztBQUVuQkMsT0FBT0MsT0FBTyxHQUFHLElBQUlILEtBQUsseUJBQXlCO0lBQ2pESSxNQUFNO0lBQ05DLFdBQVcsU0FBVUMsSUFBSTtRQUFJLE9BQU9BLFNBQVMsT0FBT0EsT0FBTyxDQUFDO0lBQUc7QUFDakUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlL21hcC5qcz8wZmZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCcsIHtcbiAga2luZDogJ21hcHBpbmcnLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9OyB9XG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJraW5kIiwiY29uc3RydWN0IiwiZGF0YSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/map.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/merge.js":
 | 
						
						
						
							|  |  | /*!************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/merge.js ***!
 | 
						
						
						
							|  |  |   \************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nfunction resolveYamlMerge(data) {\n    return data === \"<<\" || data === null;\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:merge\", {\n    kind: \"scalar\",\n    resolve: resolveYamlMerge\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9tZXJnZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUVBLElBQUlBLE9BQU9DLG1CQUFPQSxDQUFDO0FBRW5CLFNBQVNDLGlCQUFpQkMsSUFBSTtJQUM1QixPQUFPQSxTQUFTLFFBQVFBLFNBQVM7QUFDbkM7QUFFQUMsT0FBT0MsT0FBTyxHQUFHLElBQUlMLEtBQUssMkJBQTJCO0lBQ25ETSxNQUFNO0lBQ05DLFNBQVNMO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlL21lcmdlLmpzP2JiZmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSAnPDwnIHx8IGRhdGEgPT09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG4iXSwibmFtZXMiOlsiVHlwZSIsInJlcXVpcmUiLCJyZXNvbHZlWWFtbE1lcmdlIiwiZGF0YSIsIm1vZHVsZSIsImV4cG9ydHMiLCJraW5kIiwicmVzb2x2ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/merge.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/null.js":
 | 
						
						
						
							|  |  | /*!***********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/null.js ***!
 | 
						
						
						
							|  |  |   \***********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nfunction resolveYamlNull(data) {\n    if (data === null) return true;\n    var max = data.length;\n    return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\nfunction constructYamlNull() {\n    return null;\n}\nfunction isNull(object) {\n    return object === null;\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:null\", {\n    kind: \"scalar\",\n    resolve: resolveYamlNull,\n    construct: constructYamlNull,\n    predicate: isNull,\n    represent: {\n        canonical: function() {\n            return \"~\";\n        },\n        lowercase: function() {\n            return \"null\";\n        },\n        uppercase: function() {\n            return \"NULL\";\n        },\n        camelcase: function() {\n            return \"Null\";\n        },\n        empty: function() {\n            return \"\";\n        }\n    },\n    defaultStyle: \"lowercase\"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9udWxsLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsSUFBSUEsT0FBT0MsbUJBQU9BLENBQUM7QUFFbkIsU0FBU0MsZ0JBQWdCQyxJQUFJO0lBQzNCLElBQUlBLFNBQVMsTUFBTSxPQUFPO0lBRTFCLElBQUlDLE1BQU1ELEtBQUtFLE1BQU07SUFFckIsT0FBTyxRQUFTLEtBQUtGLFNBQVMsT0FDdEJDLFFBQVEsS0FBTUQsQ0FBQUEsU0FBUyxVQUFVQSxTQUFTLFVBQVVBLFNBQVMsTUFBSztBQUM1RTtBQUVBLFNBQVNHO0lBQ1AsT0FBTztBQUNUO0FBRUEsU0FBU0MsT0FBT0MsTUFBTTtJQUNwQixPQUFPQSxXQUFXO0FBQ3BCO0FBRUFDLE9BQU9DLE9BQU8sR0FBRyxJQUFJVixLQUFLLDBCQUEwQjtJQUNsRFcsTUFBTTtJQUNOQyxTQUFTVjtJQUNUVyxXQUFXUDtJQUNYUSxXQUFXUDtJQUNYUSxXQUFXO1FBQ1RDLFdBQVc7WUFBYyxPQUFPO1FBQVE7UUFDeENDLFdBQVc7WUFBYyxPQUFPO1FBQVE7UUFDeENDLFdBQVc7WUFBYyxPQUFPO1FBQVE7UUFDeENDLFdBQVc7WUFBYyxPQUFPO1FBQVE7UUFDeENDLE9BQVc7WUFBYyxPQUFPO1FBQVE7SUFDMUM7SUFDQUMsY0FBYztBQUNoQiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL3R5cGUvbnVsbC5qcz9jZGZhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sTnVsbChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDEgJiYgZGF0YSA9PT0gJ34nKSB8fFxuICAgICAgICAgKG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gJ251bGwnIHx8IGRhdGEgPT09ICdOdWxsJyB8fCBkYXRhID09PSAnTlVMTCcpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd+JzsgICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdudWxsJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOVUxMJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOdWxsJzsgfSxcbiAgICBlbXB0eTogICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcnOyAgICAgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsInJlc29sdmVZYW1sTnVsbCIsImRhdGEiLCJtYXgiLCJsZW5ndGgiLCJjb25zdHJ1Y3RZYW1sTnVsbCIsImlzTnVsbCIsIm9iamVjdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJraW5kIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsImNhbm9uaWNhbCIsImxvd2VyY2FzZSIsInVwcGVyY2FzZSIsImNhbWVsY2FzZSIsImVtcHR5IiwiZGVmYXVsdFN0eWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/null.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/omap.js":
 | 
						
						
						
							|  |  | /*!***********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/omap.js ***!
 | 
						
						
						
							|  |  |   \***********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n    if (data === null) return true;\n    var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        pairHasKey = false;\n        if (_toString.call(pair) !== \"[object Object]\") return false;\n        for(pairKey in pair){\n            if (_hasOwnProperty.call(pair, pairKey)) {\n                if (!pairHasKey) pairHasKey = true;\n                else return false;\n            }\n        }\n        if (!pairHasKey) return false;\n        if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n        else return false;\n    }\n    return true;\n}\nfunction constructYamlOmap(data) {\n    return data !== null ? data : [];\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:omap\", {\n    kind: \"sequence\",\n    resolve: resolveYamlOmap,\n    construct: constructYamlOmap\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9vbWFwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsSUFBSUEsT0FBT0MsbUJBQU9BLENBQUM7QUFFbkIsSUFBSUMsa0JBQWtCQyxPQUFPQyxTQUFTLENBQUNDLGNBQWM7QUFDckQsSUFBSUMsWUFBa0JILE9BQU9DLFNBQVMsQ0FBQ0csUUFBUTtBQUUvQyxTQUFTQyxnQkFBZ0JDLElBQUk7SUFDM0IsSUFBSUEsU0FBUyxNQUFNLE9BQU87SUFFMUIsSUFBSUMsYUFBYSxFQUFFLEVBQUVDLE9BQU9DLFFBQVFDLE1BQU1DLFNBQVNDLFlBQy9DQyxTQUFTUDtJQUViLElBQUtFLFFBQVEsR0FBR0MsU0FBU0ksT0FBT0osTUFBTSxFQUFFRCxRQUFRQyxRQUFRRCxTQUFTLEVBQUc7UUFDbEVFLE9BQU9HLE1BQU0sQ0FBQ0wsTUFBTTtRQUNwQkksYUFBYTtRQUViLElBQUlULFVBQVVXLElBQUksQ0FBQ0osVUFBVSxtQkFBbUIsT0FBTztRQUV2RCxJQUFLQyxXQUFXRCxLQUFNO1lBQ3BCLElBQUlYLGdCQUFnQmUsSUFBSSxDQUFDSixNQUFNQyxVQUFVO2dCQUN2QyxJQUFJLENBQUNDLFlBQVlBLGFBQWE7cUJBQ3pCLE9BQU87WUFDZDtRQUNGO1FBRUEsSUFBSSxDQUFDQSxZQUFZLE9BQU87UUFFeEIsSUFBSUwsV0FBV1EsT0FBTyxDQUFDSixhQUFhLENBQUMsR0FBR0osV0FBV1MsSUFBSSxDQUFDTDthQUNuRCxPQUFPO0lBQ2Q7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTTSxrQkFBa0JYLElBQUk7SUFDN0IsT0FBT0EsU0FBUyxPQUFPQSxPQUFPLEVBQUU7QUFDbEM7QUFFQVksT0FBT0MsT0FBTyxHQUFHLElBQUl0QixLQUFLLDBCQUEwQjtJQUNsRHVCLE1BQU07SUFDTkMsU0FBU2hCO0lBQ1RpQixXQUFXTDtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9vbWFwLmpzPzNhYTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAocGFpcktleSBpbiBwYWlyKSB7XG4gICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwocGFpciwgcGFpcktleSkpIHtcbiAgICAgICAgaWYgKCFwYWlySGFzS2V5KSBwYWlySGFzS2V5ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYWlySGFzS2V5KSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpO1xuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxPbWFwKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm9tYXAnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sT21hcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcFxufSk7XG4iXSwibmFtZXMiOlsiVHlwZSIsInJlcXVpcmUiLCJfaGFzT3duUHJvcGVydHkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsIl90b1N0cmluZyIsInRvU3RyaW5nIiwicmVzb2x2ZVlhbWxPbWFwIiwiZGF0YSIsIm9iamVjdEtleXMiLCJpbmRleCIsImxlbmd0aCIsInBhaXIiLCJwYWlyS2V5IiwicGFpckhhc0tleSIsIm9iamVjdCIsImNhbGwiLCJpbmRleE9mIiwicHVzaCIsImNvbnN0cnVjdFlhbWxPbWFwIiwibW9kdWxlIiwiZXhwb3J0cyIsImtpbmQiLCJyZXNvbHZlIiwiY29uc3RydWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/omap.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/pairs.js":
 | 
						
						
						
							|  |  | /*!************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/pairs.js ***!
 | 
						
						
						
							|  |  |   \************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nvar _toString = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n    if (data === null) return true;\n    var index, length, pair, keys, result, object = data;\n    result = new Array(object.length);\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        if (_toString.call(pair) !== \"[object Object]\") return false;\n        keys = Object.keys(pair);\n        if (keys.length !== 1) return false;\n        result[index] = [\n            keys[0],\n            pair[keys[0]]\n        ];\n    }\n    return true;\n}\nfunction constructYamlPairs(data) {\n    if (data === null) return [];\n    var index, length, pair, keys, result, object = data;\n    result = new Array(object.length);\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        keys = Object.keys(pair);\n        result[index] = [\n            keys[0],\n            pair[keys[0]]\n        ];\n    }\n    return result;\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:pairs\", {\n    kind: \"sequence\",\n    resolve: resolveYamlPairs,\n    construct: constructYamlPairs\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9wYWlycy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUVBLElBQUlBLE9BQU9DLG1CQUFPQSxDQUFDO0FBRW5CLElBQUlDLFlBQVlDLE9BQU9DLFNBQVMsQ0FBQ0MsUUFBUTtBQUV6QyxTQUFTQyxpQkFBaUJDLElBQUk7SUFDNUIsSUFBSUEsU0FBUyxNQUFNLE9BQU87SUFFMUIsSUFBSUMsT0FBT0MsUUFBUUMsTUFBTUMsTUFBTUMsUUFDM0JDLFNBQVNOO0lBRWJLLFNBQVMsSUFBSUUsTUFBTUQsT0FBT0osTUFBTTtJQUVoQyxJQUFLRCxRQUFRLEdBQUdDLFNBQVNJLE9BQU9KLE1BQU0sRUFBRUQsUUFBUUMsUUFBUUQsU0FBUyxFQUFHO1FBQ2xFRSxPQUFPRyxNQUFNLENBQUNMLE1BQU07UUFFcEIsSUFBSU4sVUFBVWEsSUFBSSxDQUFDTCxVQUFVLG1CQUFtQixPQUFPO1FBRXZEQyxPQUFPUixPQUFPUSxJQUFJLENBQUNEO1FBRW5CLElBQUlDLEtBQUtGLE1BQU0sS0FBSyxHQUFHLE9BQU87UUFFOUJHLE1BQU0sQ0FBQ0osTUFBTSxHQUFHO1lBQUVHLElBQUksQ0FBQyxFQUFFO1lBQUVELElBQUksQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFFO0lBQzVDO0lBRUEsT0FBTztBQUNUO0FBRUEsU0FBU0ssbUJBQW1CVCxJQUFJO0lBQzlCLElBQUlBLFNBQVMsTUFBTSxPQUFPLEVBQUU7SUFFNUIsSUFBSUMsT0FBT0MsUUFBUUMsTUFBTUMsTUFBTUMsUUFDM0JDLFNBQVNOO0lBRWJLLFNBQVMsSUFBSUUsTUFBTUQsT0FBT0osTUFBTTtJQUVoQyxJQUFLRCxRQUFRLEdBQUdDLFNBQVNJLE9BQU9KLE1BQU0sRUFBRUQsUUFBUUMsUUFBUUQsU0FBUyxFQUFHO1FBQ2xFRSxPQUFPRyxNQUFNLENBQUNMLE1BQU07UUFFcEJHLE9BQU9SLE9BQU9RLElBQUksQ0FBQ0Q7UUFFbkJFLE1BQU0sQ0FBQ0osTUFBTSxHQUFHO1lBQUVHLElBQUksQ0FBQyxFQUFFO1lBQUVELElBQUksQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFFO0lBQzVDO0lBRUEsT0FBT0M7QUFDVDtBQUVBSyxPQUFPQyxPQUFPLEdBQUcsSUFBSWxCLEtBQUssMkJBQTJCO0lBQ25EbUIsTUFBTTtJQUNOQyxTQUFTZDtJQUNUZSxXQUFXTDtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9wYWlycy5qcz9kMGM2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHJldHVybiBmYWxzZTtcblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmVzdWx0W2luZGV4XSA9IFsga2V5c1swXSwgcGFpcltrZXlzWzBdXSBdO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxQYWlycyhkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgdmFyIGluZGV4LCBsZW5ndGgsIHBhaXIsIGtleXMsIHJlc3VsdCxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgcmVzdWx0W2luZGV4XSA9IFsga2V5c1swXSwgcGFpcltrZXlzWzBdXSBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIl90b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwicmVzb2x2ZVlhbWxQYWlycyIsImRhdGEiLCJpbmRleCIsImxlbmd0aCIsInBhaXIiLCJrZXlzIiwicmVzdWx0Iiwib2JqZWN0IiwiQXJyYXkiLCJjYWxsIiwiY29uc3RydWN0WWFtbFBhaXJzIiwibW9kdWxlIiwiZXhwb3J0cyIsImtpbmQiLCJyZXNvbHZlIiwiY29uc3RydWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/pairs.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/seq.js":
 | 
						
						
						
							|  |  | /*!**********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/seq.js ***!
 | 
						
						
						
							|  |  |   \**********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nmodule.exports = new Type(\"tag:yaml.org,2002:seq\", {\n    kind: \"sequence\",\n    construct: function(data) {\n        return data !== null ? data : [];\n    }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9zZXEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxPQUFPQyxtQkFBT0EsQ0FBQztBQUVuQkMsT0FBT0MsT0FBTyxHQUFHLElBQUlILEtBQUsseUJBQXlCO0lBQ2pESSxNQUFNO0lBQ05DLFdBQVcsU0FBVUMsSUFBSTtRQUFJLE9BQU9BLFNBQVMsT0FBT0EsT0FBTyxFQUFFO0lBQUU7QUFDakUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlL3NlcS5qcz84NjQ2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsgfVxufSk7XG4iXSwibmFtZXMiOlsiVHlwZSIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwia2luZCIsImNvbnN0cnVjdCIsImRhdGEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/seq.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/set.js":
 | 
						
						
						
							|  |  | /*!**********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/set.js ***!
 | 
						
						
						
							|  |  |   \**********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n    if (data === null) return true;\n    var key, object = data;\n    for(key in object){\n        if (_hasOwnProperty.call(object, key)) {\n            if (object[key] !== null) return false;\n        }\n    }\n    return true;\n}\nfunction constructYamlSet(data) {\n    return data !== null ? data : {};\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:set\", {\n    kind: \"mapping\",\n    resolve: resolveYamlSet,\n    construct: constructYamlSet\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9zZXQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxPQUFPQyxtQkFBT0EsQ0FBQztBQUVuQixJQUFJQyxrQkFBa0JDLE9BQU9DLFNBQVMsQ0FBQ0MsY0FBYztBQUVyRCxTQUFTQyxlQUFlQyxJQUFJO0lBQzFCLElBQUlBLFNBQVMsTUFBTSxPQUFPO0lBRTFCLElBQUlDLEtBQUtDLFNBQVNGO0lBRWxCLElBQUtDLE9BQU9DLE9BQVE7UUFDbEIsSUFBSVAsZ0JBQWdCUSxJQUFJLENBQUNELFFBQVFELE1BQU07WUFDckMsSUFBSUMsTUFBTSxDQUFDRCxJQUFJLEtBQUssTUFBTSxPQUFPO1FBQ25DO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTRyxpQkFBaUJKLElBQUk7SUFDNUIsT0FBT0EsU0FBUyxPQUFPQSxPQUFPLENBQUM7QUFDakM7QUFFQUssT0FBT0MsT0FBTyxHQUFHLElBQUliLEtBQUsseUJBQXlCO0lBQ2pEYyxNQUFNO0lBQ05DLFNBQVNUO0lBQ1RVLFdBQVdMO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi90eXBlL3NldC5qcz9mYjU5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIga2V5LCBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoa2V5IGluIG9iamVjdCkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNldCcsIHtcbiAga2luZDogJ21hcHBpbmcnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFNldCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sU2V0XG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIl9oYXNPd25Qcm9wZXJ0eSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicmVzb2x2ZVlhbWxTZXQiLCJkYXRhIiwia2V5Iiwib2JqZWN0IiwiY2FsbCIsImNvbnN0cnVjdFlhbWxTZXQiLCJtb2R1bGUiLCJleHBvcnRzIiwia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/set.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/str.js":
 | 
						
						
						
							|  |  | /*!**********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/str.js ***!
 | 
						
						
						
							|  |  |   \**********************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nmodule.exports = new Type(\"tag:yaml.org,2002:str\", {\n    kind: \"scalar\",\n    construct: function(data) {\n        return data !== null ? data : \"\";\n    }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9zdHIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxPQUFPQyxtQkFBT0EsQ0FBQztBQUVuQkMsT0FBT0MsT0FBTyxHQUFHLElBQUlILEtBQUsseUJBQXlCO0lBQ2pESSxNQUFNO0lBQ05DLFdBQVcsU0FBVUMsSUFBSTtRQUFJLE9BQU9BLFNBQVMsT0FBT0EsT0FBTztJQUFJO0FBQ2pFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS9zdHIuanM/NzJiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6ICcnOyB9XG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJraW5kIiwiY29uc3RydWN0IiwiZGF0YSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/str.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/lib/type/timestamp.js":
 | 
						
						
						
							|  |  | /*!****************************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/lib/type/timestamp.js ***!
 | 
						
						
						
							|  |  |   \****************************************************/
 | 
						
						
						
							|  |  | /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("\nvar Type = __webpack_require__(/*! ../type */ \"(ssr)/./node_modules/js-yaml/lib/type.js\");\nvar YAML_DATE_REGEXP = new RegExp(\"^([0-9][0-9][0-9][0-9])\" + // [1] year\n\"-([0-9][0-9])\" + // [2] month\n\"-([0-9][0-9])$\"); // [3] day\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\"^([0-9][0-9][0-9][0-9])\" + // [1] year\n\"-([0-9][0-9]?)\" + // [2] month\n\"-([0-9][0-9]?)\" + // [3] day\n\"(?:[Tt]|[ \\\\t]+)\" + // ...\n\"([0-9][0-9]?)\" + // [4] hour\n\":([0-9][0-9])\" + // [5] minute\n\":([0-9][0-9])\" + // [6] second\n\"(?:\\\\.([0-9]*))?\" + // [7] fraction\n\"(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)\" + // [8] tz [9] tz_sign [10] tz_hour\n\"(?::([0-9][0-9]))?))?$\"); // [11] tz_minute\nfunction resolveYamlTimestamp(data) {\n    if (data === null) return false;\n    if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n    if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n    return false;\n}\nfunction constructYamlTimestamp(data) {\n    var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n    match = YAML_DATE_REGEXP.exec(data);\n    if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n    if (match === null) throw new Error(\"Date resolve error\");\n    // match: [1] year [2] month [3] day\n    year = +match[1];\n    month = +match[2] - 1; // JS month starts with 0\n    day = +match[3];\n    if (!match[4]) {\n        return new Date(Date.UTC(year, month, day));\n    }\n    // match: [4] hour [5] minute [6] second [7] fraction\n    hour = +match[4];\n    minute = +match[5];\n    second = +match[6];\n    if (match[7]) {\n        fraction = match[7].slice(0, 3);\n        while(fraction.length < 3){\n            fraction += \"0\";\n        }\n        fraction = +fraction;\n    }\n    // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n    if (match[9]) {\n        tz_hour = +match[10];\n        tz_minute = +(match[11] || 0);\n        delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n        if (match[9] === \"-\") delta = -delta;\n    }\n    date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n    if (delta) date.setTime(date.getTime() - delta);\n    return date;\n}\nfunction representYamlTimestamp(object /*, style*/ ) {\n    return object.toISOString();\n}\nmodule.exports = new Type(\"tag:yaml.org,2002:timestamp\", {\n    kind: \"scalar\",\n    resolve: resolveYamlTimestamp,\n    construct: constructYamlTimestamp,\n    instanceOf: Date,\n    represent: representYamlTimestamp\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvdHlwZS90aW1lc3RhbXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxPQUFPQyxtQkFBT0EsQ0FBQztBQUVuQixJQUFJQyxtQkFBbUIsSUFBSUMsT0FDekIsNEJBQXFDLFdBQVc7QUFDaEQsa0JBQXFDLFlBQVk7QUFDakQsbUJBQXFDLFVBQVU7QUFFakQsSUFBSUMsd0JBQXdCLElBQUlELE9BQzlCLDRCQUFxQyxXQUFXO0FBQ2hELG1CQUFxQyxZQUFZO0FBQ2pELG1CQUFxQyxVQUFVO0FBQy9DLHFCQUFxQyxNQUFNO0FBQzNDLGtCQUFxQyxXQUFXO0FBQ2hELGtCQUFxQyxhQUFhO0FBQ2xELGtCQUFxQyxhQUFhO0FBQ2xELHFCQUFxQyxlQUFlO0FBQ3BELHFDQUFxQyxrQ0FBa0M7QUFDdkUsMkJBQXFDLGlCQUFpQjtBQUV4RCxTQUFTRSxxQkFBcUJDLElBQUk7SUFDaEMsSUFBSUEsU0FBUyxNQUFNLE9BQU87SUFDMUIsSUFBSUosaUJBQWlCSyxJQUFJLENBQUNELFVBQVUsTUFBTSxPQUFPO0lBQ2pELElBQUlGLHNCQUFzQkcsSUFBSSxDQUFDRCxVQUFVLE1BQU0sT0FBTztJQUN0RCxPQUFPO0FBQ1Q7QUFFQSxTQUFTRSx1QkFBdUJGLElBQUk7SUFDbEMsSUFBSUcsT0FBT0MsTUFBTUMsT0FBT0MsS0FBS0MsTUFBTUMsUUFBUUMsUUFBUUMsV0FBVyxHQUMxREMsUUFBUSxNQUFNQyxTQUFTQyxXQUFXQztJQUV0Q1gsUUFBUVAsaUJBQWlCSyxJQUFJLENBQUNEO0lBQzlCLElBQUlHLFVBQVUsTUFBTUEsUUFBUUwsc0JBQXNCRyxJQUFJLENBQUNEO0lBRXZELElBQUlHLFVBQVUsTUFBTSxNQUFNLElBQUlZLE1BQU07SUFFcEMsb0NBQW9DO0lBRXBDWCxPQUFPLENBQUVELEtBQUssQ0FBQyxFQUFFO0lBQ2pCRSxRQUFRLENBQUVGLEtBQUssQ0FBQyxFQUFFLEdBQUksR0FBRyx5QkFBeUI7SUFDbERHLE1BQU0sQ0FBRUgsS0FBSyxDQUFDLEVBQUU7SUFFaEIsSUFBSSxDQUFDQSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2IsT0FBTyxJQUFJYSxLQUFLQSxLQUFLQyxHQUFHLENBQUNiLE1BQU1DLE9BQU9DO0lBQ3hDO0lBRUEscURBQXFEO0lBRXJEQyxPQUFPLENBQUVKLEtBQUssQ0FBQyxFQUFFO0lBQ2pCSyxTQUFTLENBQUVMLEtBQUssQ0FBQyxFQUFFO0lBQ25CTSxTQUFTLENBQUVOLEtBQUssQ0FBQyxFQUFFO0lBRW5CLElBQUlBLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDWk8sV0FBV1AsS0FBSyxDQUFDLEVBQUUsQ0FBQ2UsS0FBSyxDQUFDLEdBQUc7UUFDN0IsTUFBT1IsU0FBU1MsTUFBTSxHQUFHLEVBQUc7WUFDMUJULFlBQVk7UUFDZDtRQUNBQSxXQUFXLENBQUNBO0lBQ2Q7SUFFQSx3REFBd0Q7SUFFeEQsSUFBSVAsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUNaUyxVQUFVLENBQUVULEtBQUssQ0FBQyxHQUFHO1FBQ3JCVSxZQUFZLENBQUVWLENBQUFBLEtBQUssQ0FBQyxHQUFHLElBQUk7UUFDM0JRLFFBQVEsQ0FBQ0MsVUFBVSxLQUFLQyxTQUFRLElBQUssT0FBTyx3QkFBd0I7UUFDcEUsSUFBSVYsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLUSxRQUFRLENBQUNBO0lBQ2pDO0lBRUFHLE9BQU8sSUFBSUUsS0FBS0EsS0FBS0MsR0FBRyxDQUFDYixNQUFNQyxPQUFPQyxLQUFLQyxNQUFNQyxRQUFRQyxRQUFRQztJQUVqRSxJQUFJQyxPQUFPRyxLQUFLTSxPQUFPLENBQUNOLEtBQUtPLE9BQU8sS0FBS1Y7SUFFekMsT0FBT0c7QUFDVDtBQUVBLFNBQVNRLHVCQUF1QkMsT0FBTyxTQUFTLEdBQVY7SUFDcEMsT0FBT0EsT0FBT0MsV0FBVztBQUMzQjtBQUVBQyxPQUFPQyxPQUFPLEdBQUcsSUFBSWhDLEtBQUssK0JBQStCO0lBQ3ZEaUMsTUFBTTtJQUNOQyxTQUFTN0I7SUFDVDhCLFdBQVczQjtJQUNYNEIsWUFBWWQ7SUFDWmUsV0FBV1Q7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL3R5cGUvdGltZXN0YW1wLmpzPzM3N2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldKSQnKTsgICAgICAgICAgICAgICAgICAgLy8gWzNdIGRheVxuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/JCcpOyAgICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCxcbiAgaW5zdGFuY2VPZjogRGF0ZSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wXG59KTtcbiJdLCJuYW1lcyI6WyJUeXBlIiwicmVxdWlyZSIsIllBTUxfREFURV9SRUdFWFAiLCJSZWdFeHAiLCJZQU1MX1RJTUVTVEFNUF9SRUdFWFAiLCJyZXNvbHZlWWFtbFRpbWVzdGFtcCIsImRhdGEiLCJleGVjIiwiY29uc3RydWN0WWFtbFRpbWVzdGFtcCIsIm1hdGNoIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImZyYWN0aW9uIiwiZGVsdGEiLCJ0el9ob3VyIiwidHpfbWludXRlIiwiZGF0ZSIsIkVycm9yIiwiRGF0ZSIsIlVUQyIsInNsaWNlIiwibGVuZ3RoIiwic2V0VGltZSIsImdldFRpbWUiLCJyZXByZXNlbnRZYW1sVGltZXN0YW1wIiwib2JqZWN0IiwidG9JU09TdHJpbmciLCJtb2R1bGUiLCJleHBvcnRzIiwia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicmVwcmVzZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/lib/type/timestamp.js\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ }),
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ "(ssr)/./node_modules/js-yaml/dist/js-yaml.mjs":
 | 
						
						
						
							|  |  | /*!***********************************************!*\
 | 
						
						
						
							|  |  |   !*** ./node_modules/js-yaml/dist/js-yaml.mjs ***!
 | 
						
						
						
							|  |  |   \***********************************************/
 | 
						
						
						
							|  |  | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CORE_SCHEMA: () => (/* binding */ CORE_SCHEMA),\n/* harmony export */   DEFAULT_SCHEMA: () => (/* binding */ DEFAULT_SCHEMA),\n/* harmony export */   FAILSAFE_SCHEMA: () => (/* binding */ FAILSAFE_SCHEMA),\n/* harmony export */   JSON_SCHEMA: () => (/* binding */ JSON_SCHEMA),\n/* harmony export */   Schema: () => (/* binding */ Schema),\n/* harmony export */   Type: () => (/* binding */ Type),\n/* harmony export */   YAMLException: () => (/* binding */ YAMLException),\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */   dump: () => (/* binding */ dump),\n/* harmony export */   load: () => (/* binding */ load),\n/* harmony export */   loadAll: () => (/* binding */ loadAll),\n/* harmony export */   safeDump: () => (/* binding */ safeDump),\n/* harmony export */   safeLoad: () => (/* binding */ safeLoad),\n/* harmony export */   safeLoadAll: () => (/* binding */ safeLoadAll),\n/* harmony export */   types: () => (/* binding */ types)\n/* harmony export */ });\n/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ function isNothing(subject) {\n    return typeof subject === \"undefined\" || subject === null;\n}\nfunction isObject(subject) {\n    return typeof subject === \"object\" && subject !== null;\n}\nfunction toArray(sequence) {\n    if (Array.isArray(sequence)) return sequence;\n    else if (isNothing(sequence)) return [];\n    return [\n        sequence\n    ];\n}\nfunction extend(target, source) {\n    var index, length, key, sourceKeys;\n    if (source) {\n        sourceKeys = Object.keys(source);\n        for(index = 0, length = sourceKeys.length; index < length; index += 1){\n            key = sourceKeys[index];\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\nfunction repeat(string, count) {\n    var result = \"\", cycle;\n    for(cycle = 0; cycle < count; cycle += 1){\n        result += string;\n    }\n    return result;\n}\nfunction isNegativeZero(number) {\n    return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\nvar common = {\n    isNothing: isNothing_1,\n    isObject: isObject_1,\n    toArray: toArray_1,\n    repeat: repeat_1,\n    isNegativeZero: isNegativeZero_1,\n    extend: extend_1\n};\n// YAML error class. http://stackoverflow.com/questions/8458984\nfunction formatError(exception, compact) {\n    var where = \"\", message = exception.reason || \"(unknown reason)\";\n    if (!exception.mark) return message;\n    if (exception.mark.name) {\n        where += 'in \"' + exception.mark.name + '\" ';\n    }\n    where += \"(\" + (exception.mark.line + 1) + \":\" + (exception.mark.column + 1) + \")\";\n    if (!compact && exception.mark.snippet) {\n        where += \"\\n\\n\" + exception.mark.snippet;\n    }\n    return message + \" \" + where;\n}\nfunction YAMLException$1(reason, mark) {\n    // Super constructor\n    Error.call(this);\n    this.name = \"YAMLException\";\n    this.reason = reason;\n    this.mark = mark;\n    this.message = formatError(this, false);\n    // Include stack trace in error object\n    if (Error.captureStackTrace) {\n        // Chrome and NodeJS\n        Error.captureStackTrace(this, this.constructor);\n    } else {\n        // FF, IE 10+ and Safari 6+. Fallback for others\n        this.stack = new Error().stack || \"\";\n    }\n}\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\nYAMLException$1.prototype.toString = function toString(compact) {\n    return this.name + \": \" + formatError(this, compact);\n};\nvar exception = YAMLException$1;\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n    var head = \"\";\n    var tail = \"\";\n    var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n    if (position - lineStart > maxHalfLength) {\n        head = \" ... \";\n        lineStart = position - maxHalfLength + head.length;\n    }\n    if (lineEnd - position > maxHalfLength) {\n        tail = \" ...\";\n        lineEnd = position + maxHalfLength - tail.length;\n    }\n    return {\n        str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"→\") + tail,\n        pos: position - lineStart + head.length // relative position\n    };\n}\nfunction padStart(string, max) {\n    return common.repeat(\" \", max - string.length) + string;\n}\nfunction makeSnippet(mark, options) {\n    options = Object.create(options || null);\n    if (!mark.buffer) return null;\n    if (!options.maxLength) options.maxLength = 79;\n    if (typeof options.indent !== \"number\") options.indent = 1;\n    if (typeof options.linesBefore !== \"number\") options.linesBefore = 3;\n    if (typeof options.linesAfter !== \"number\") options.linesAfter = 2;\n    var re = /\\r?\\n|\\r|\\0/g;\n    var lineStarts = [\n        0\n    ];\n    var lineEnds = [];\n    var match;\n    var foundLineNo = -1;\n    while(match = re.exec(mark.buffer)){\n        lineEnds.push(match.index);\n        lineStarts.push(match.index + match[0].length);\n        if (mark.position <= match.index && foundLineNo < 0) {\n            foundLineNo = lineStarts.length - 2;\n        }\n    }\n    if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n    var result = \"\", i, line;\n    var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n    var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n    for(i = 1; i <= options.linesBefore; i++){\n        if (foundLineNo - i < 0) break;\n        line = getLine(mark.buffer, lineStarts[foundLineNo - i], lineEnds[foundLineNo - i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength);\n        result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n    }\n    line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n    result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n    result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\" + \"\\n\";\n    for(i = 1; i <= options.linesAfter; i++){\n        if (foundLineNo + i >= lineEnds.length) break;\n        line = getLine(mark.buffer, lineStarts[foundLineNo + i], lineEnds[foundLineNo + i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength);\n        result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n    }\n    return result.replace(/\\n$/, \"\");\n}\nvar snippet = makeSnippet;\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n    \"kind\",\n    \"multi\",\n    \"resolve\",\n    \"construct\",\n    \"instanceOf\",\n    \"predicate\",\n    \"represent\",\n    \"representName\",\n    \"defaultStyle\",\n    \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n    \"scalar\",\n    \"sequence\",\n    \"mapping\"\n];\nfunction compileStyleAliases(map) {\n    var result = {};\n    if (map !== null) {\n        Object.keys(map).forEach(function(style) {\n            map[style].forEach(function(alias) {\n                result[String(alias)] = style;\n            });\n        });\n    }\n    return result;\n}\nfunction Type$1(tag, options) {\n    options = options || {};\n    Object.keys(options).forEach(function(name) {\n        if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n            throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n        }\n    });\n    // TODO: Add tag format check.\n    this.options = options; // keep original options in case user wants to extend this type later\n    this.tag = tag;\n    this.kind = options[\"kind\"] || null;\n    this.resolve = options[\"resolve\"] || function() {\n        return true;\n    };\n    this.construct = options[\"construct\"] || function(data) {\n        return data;\n    };\n    this.instanceOf = options[\"instanceOf\"] || null;\n    this.predicate = options[\"predicate\"] || null;\n    this.represent = options[\"represent\"] || null;\n    this.representName = options[\"representName\"] || null;\n    this.defaultStyle = options[\"defaultStyle\"] || null;\n    this.multi = options[\"multi\"] || false;\n    this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n    if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n        throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n    }\n}\nvar type = Type$1;\n/*eslint-disable max-len*/ function compileList(schema, name) {\n    var result = [];\n    schema[name].forEach(function(currentType) {\n        var newIndex = result.length;\n        result.forEach(function(previousType, previousIndex) {\n            if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n                newIndex = previousIndex;\n            }\n        });\n        result[newIndex] = currentType;\n    });\n    return result;\n}\nfunction compileMap() {\n    var result = {\n        scalar: {},\n        sequence: {},\n        mapping: {},\n        fallback: {},\n        multi: {\n            scalar: [],\n            sequence: [],\n            mapping: [],\n            fallback: []\n        }\n    }, index, length;\n    function collectType(type) {\n        if (type.multi) {\n            result.multi[type.kind].push(type);\n            result.multi[\"fallback\"].push(type);\n        } else {\n            result[type.kind][type.tag] = result[\"fallback\"][type.tag] = type;\n        }\n    }\n    for(index = 0, length = arguments.length; index < length; index += 1){\n        arguments[index].forEach(collectType);\n    }\n    return result;\n}\nfunction Schema$1(definition) {\n    return this.extend(definition);\n}\nSchema$1.prototype.extend = function extend(definition) {\n    var implicit = [];\n    var explicit = [];\n    if (definition instanceof type) {\n        // Schema.extend(type)\n        explicit.push(definition);\n    } else if (Array.isArray(definition)) {\n        // Schema.extend([ type1, type2, ... ])\n        explicit = explicit.concat(definition);\n    } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n        // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n        if (definition.implicit) implicit = implicit.concat(definition.implicit);\n        if (definition.explicit) explicit = explicit.concat(definition.explicit);\n    } else {\n        throw new exception(\"Schema.extend argument should be a Type, [ Type ], \" + \"or a schema definition ({ implicit: [...], explicit: [...] })\");\n    }\n    implicit.forEach(function(type$1) {\n        if (!(type$1 instanceof type)) {\n            throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n        }\n        if (type$1.loadKind && type$1.loadKind !== \"scalar\") {\n            throw new exception(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n        }\n        if (type$1.multi) {\n            throw new exception(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n        }\n    });\n    explicit.forEach(function(type$1) {\n        if (!(type$1 instanceof type)) {\n            throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n        }\n    });\n    var result = Object.create(Schema$1.prototype);\n    result.implicit = (this.implicit || []).concat(implicit);\n    result.explicit = (this.explicit || []).concat(explicit);\n    result.compiledImplicit = compileList(result, \"implicit\");\n    result.compiledExplicit = compileList(result, \"explicit\");\n    result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n    return result;\n};\nvar schema = Schema$1;\nvar str = new type(\"tag:yaml.org,2002:str\", {\n    kind: \"scalar\",\n    construct: function(data) {\n        return data !== null ? data : \"\";\n    }\n});\nvar seq = new type(\"tag:yaml.org,2002:seq\", {\n    kind: \"sequence\",\n    construct: function(data) {\n        return data !== null ? data : [];\n    }\n});\nvar map = new type(\"tag:yaml.org,2002:map\", {\n    kind: \"mapping\",\n    construct: function(data) {\n        return data !== null ? data : {};\n    }\n});\nvar failsafe = new schema({\n    explicit: [\n        str,\n        seq,\n        map\n    ]\n});\nfunction resolveYamlNull(data) {\n    if (data === null) return true;\n    var max = data.length;\n    return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\nfunction constructYamlNull() {\n    return null;\n}\nfunction isNull(object) {\n    return object === null;\n}\nvar _null = new type(\"tag:yaml.org,2002:null\", {\n    kind: \"scalar\",\n    resolve: resolveYamlNull,\n    construct: constructYamlNull,\n    predicate: isNull,\n    represent: {\n        canonical: function() {\n            return \"~\";\n        },\n        lowercase: function() {\n            return \"null\";\n        },\n        uppercase: function() {\n            return \"NULL\";\n        },\n        camelcase: function() {\n            return \"Null\";\n        },\n        empty: function() {\n            return \"\";\n        }\n    },\n    defaultStyle: \"lowercase\"\n});\nfunction resolveYamlBoolean(data) {\n    if (data === null) return false;\n    var max = data.length;\n    return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\nfunction constructYamlBoolean(data) {\n    return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\nfunction isBoolean(object) {\n    return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\nvar bool = new type(\"tag:yaml.org,2002:bool\", {\n    kind: \"scalar\",\n    resolve: resolveYamlBoolean,\n    construct: constructYamlBoolean,\n    predicate: isBoolean,\n    represent: {\n        lowercase: function(object) {\n            return object ? \"true\" : \"false\";\n        },\n        uppercase: function(object) {\n            return object ? \"TRUE\" : \"FALSE\";\n        },\n        camelcase: function(object) {\n            return object ? \"True\" : \"False\";\n        }\n    },\n    defaultStyle: \"lowercase\"\n});\nfunction isHexCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x39 /* 9 */  || 0x41 /* A */  <= c && c <= 0x46 /* F */  || 0x61 /* a */  <= c && c <= 0x66 /* f */ ;\n}\nfunction isOctCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x37 /* 7 */ ;\n}\nfunction isDecCode(c) {\n    return 0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ;\n}\nfunction resolveYamlInteger(data) {\n    if (data === null) return false;\n    var max = data.length, index = 0, hasDigits = false, ch;\n    if (!max) return false;\n    ch = data[index];\n    // sign\n    if (ch === \"-\" || ch === \"+\") {\n        ch = data[++index];\n    }\n    if (ch === \"0\") {\n        // 0\n        if (index + 1 === max) return true;\n        ch = data[++index];\n        // base 2, base 8, base 16\n        if (ch === \"b\") {\n            // base 2\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (ch !== \"0\" && ch !== \"1\") return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n        if (ch === \"x\") {\n            // base 16\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (!isHexCode(data.charCodeAt(index))) return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n        if (ch === \"o\") {\n            // base 8\n            index++;\n            for(; index < max; index++){\n                ch = data[index];\n                if (ch === \"_\") continue;\n                if (!isOctCode(data.charCodeAt(index))) return false;\n                hasDigits = true;\n            }\n            return hasDigits && ch !== \"_\";\n        }\n    }\n    // base 10 (except 0)\n    // value should not start with `_`;\n    if (ch === \"_\") return false;\n    for(; index < max; index++){\n        ch = data[index];\n        if (ch === \"_\") continue;\n        if (!isDecCode(data.charCodeAt(index))) {\n            return false;\n        }\n        hasDigits = true;\n    }\n    // Should have digits and should not end with `_`\n    if (!hasDigits || ch === \"_\") return false;\n    return true;\n}\nfunction constructYamlInteger(data) {\n    var value = data, sign = 1, ch;\n    if (value.indexOf(\"_\") !== -1) {\n        value = value.replace(/_/g, \"\");\n    }\n    ch = value[0];\n    if (ch === \"-\" || ch === \"+\") {\n        if (ch === \"-\") sign = -1;\n        value = value.slice(1);\n        ch = value[0];\n    }\n    if (value === \"0\") return 0;\n    if (ch === \"0\") {\n        if (value[1] === \"b\") return sign * parseInt(value.slice(2), 2);\n        if (value[1] === \"x\") return sign * parseInt(value.slice(2), 16);\n        if (value[1] === \"o\") return sign * parseInt(value.slice(2), 8);\n    }\n    return sign * parseInt(value, 10);\n}\nfunction isInteger(object) {\n    return Object.prototype.toString.call(object) === \"[object Number]\" && object % 1 === 0 && !common.isNegativeZero(object);\n}\nvar int = new type(\"tag:yaml.org,2002:int\", {\n    kind: \"scalar\",\n    resolve: resolveYamlInteger,\n    construct: constructYamlInteger,\n    predicate: isInteger,\n    represent: {\n        binary: function(obj) {\n            return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n        },\n        octal: function(obj) {\n            return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n        },\n        decimal: function(obj) {\n            return obj.toString(10);\n        },\n        /* eslint-disable max-len */ hexadecimal: function(obj) {\n            return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n        }\n    },\n    defaultStyle: \"decimal\",\n    styleAliases: {\n        binary: [\n            2,\n            \"bin\"\n        ],\n        octal: [\n            8,\n            \"oct\"\n        ],\n        decimal: [\n            10,\n            \"dec\"\n        ],\n        hexadecimal: [\n            16,\n            \"hex\"\n        ]\n    }\n});\nvar YAML_FLOAT_PATTERN = new RegExp(// 2.5e4, 2.5 and integers\n\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?\" + // .2e4, .2\n// special case, seems not from spec\n\"|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?\" + // .inf\n\"|[-+]?\\\\.(?:inf|Inf|INF)\" + // .nan\n\"|\\\\.(?:nan|NaN|NAN))$\");\nfunction resolveYamlFloat(data) {\n    if (data === null) return false;\n    if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n    // Probably should update regexp & check speed\n    data[data.length - 1] === \"_\") {\n        return false;\n    }\n    return true;\n}\nfunction constructYamlFloat(data) {\n    var value, sign;\n    value = data.replace(/_/g, \"\").toLowerCase();\n    sign = value[0] === \"-\" ? -1 : 1;\n    if (\"+-\".indexOf(value[0]) >= 0) {\n        value = value.slice(1);\n    }\n    if (value === \".inf\") {\n        return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n    } else if (value === \".nan\") {\n        return NaN;\n    }\n    return sign * parseFloat(value, 10);\n}\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n    var res;\n    if (isNaN(object)) {\n        switch(style){\n            case \"lowercase\":\n                return \".nan\";\n            case \"uppercase\":\n                return \".NAN\";\n            case \"camelcase\":\n                return \".NaN\";\n        }\n    } else if (Number.POSITIVE_INFINITY === object) {\n        switch(style){\n            case \"lowercase\":\n                return \".inf\";\n            case \"uppercase\":\n                return \".INF\";\n            case \"camelcase\":\n                return \".Inf\";\n        }\n    } else if (Number.NEGATIVE_INFINITY === object) {\n        switch(style){\n            case \"lowercase\":\n                return \"-.inf\";\n            case \"uppercase\":\n                return \"-.INF\";\n            case \"camelcase\":\n                return \"-.Inf\";\n        }\n    } else if (common.isNegativeZero(object)) {\n        return \"-0.0\";\n    }\n    res = object.toString(10);\n    // JS stringifier can build scientific format without dots: 5e-100,\n    // while YAML requres dot: 5.e-100. Fix it with simple hack\n    return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\nfunction isFloat(object) {\n    return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\nvar float = new type(\"tag:yaml.org,2002:float\", {\n    kind: \"scalar\",\n    resolve: resolveYamlFloat,\n    construct: constructYamlFloat,\n    predicate: isFloat,\n    represent: representYamlFloat,\n    defaultStyle: \"lowercase\"\n});\nvar json = failsafe.extend({\n    implicit: [\n        _null,\n        bool,\n        int,\n        float\n    ]\n});\nvar core = json;\nvar YAML_DATE_REGEXP = new RegExp(\"^([0-9][0-9][0-9][0-9])\" + // [1] year\n\"-([0-9][0-9])\" + // [2] month\n\"-([0-9][0-9])$\"); // [3] day\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\"^([0-9][0-9][0-9][0-9])\" + // [1] year\n\"-([0-9][0-9]?)\" + // [2] month\n\"-([0-9][0-9]?)\" + // [3] day\n\"(?:[Tt]|[ \\\\t]+)\" + // ...\n\"([0-9][0-9]?)\" + // [4] hour\n\":([0-9][0-9])\" + // [5] minute\n\":([0-9][0-9])\" + // [6] second\n\"(?:\\\\.([0-9]*))?\" + // [7] fraction\n\"(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)\" + // [8] tz [9] tz_sign [10] tz_hour\n\"(?::([0-9][0-9]))?))?$\"); // [11] tz_minute\nfunction resolveYamlTimestamp(data) {\n    if (data === null) return false;\n    if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n    if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n    return false;\n}\nfunction constructYamlTimestamp(data) {\n    var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n    match = YAML_DATE_REGEXP.exec(data);\n    if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n    if (match === null) throw new Error(\"Date resolve error\");\n    // match: [1] year [2] month [3] day\n    year = +match[1];\n    month = +match[2] - 1; // JS month starts with 0\n    day = +match[3];\n    if (!match[4]) {\n        return new Date(Date.UTC(year, month, day));\n    }\n    // match: [4] hour [5] minute [6] second [7] fraction\n    hour = +match[4];\n    minute = +match[5];\n    second = +match[6];\n    if (match[7]) {\n        fraction = match[7].slice(0, 3);\n        while(fraction.length < 3){\n            fraction += \"0\";\n        }\n        fraction = +fraction;\n    }\n    // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n    if (match[9]) {\n        tz_hour = +match[10];\n        tz_minute = +(match[11] || 0);\n        delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n        if (match[9] === \"-\") delta = -delta;\n    }\n    date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n    if (delta) date.setTime(date.getTime() - delta);\n    return date;\n}\nfunction representYamlTimestamp(object /*, style*/ ) {\n    return object.toISOString();\n}\nvar timestamp = new type(\"tag:yaml.org,2002:timestamp\", {\n    kind: \"scalar\",\n    resolve: resolveYamlTimestamp,\n    construct: constructYamlTimestamp,\n    instanceOf: Date,\n    represent: representYamlTimestamp\n});\nfunction resolveYamlMerge(data) {\n    return data === \"<<\" || data === null;\n}\nvar merge = new type(\"tag:yaml.org,2002:merge\", {\n    kind: \"scalar\",\n    resolve: resolveYamlMerge\n});\n/*eslint-disable no-bitwise*/ // [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n    if (data === null) return false;\n    var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n    // Convert one by one.\n    for(idx = 0; idx < max; idx++){\n        code = map.indexOf(data.charAt(idx));\n        // Skip CR/LF\n        if (code > 64) continue;\n        // Fail on illegal characters\n        if (code < 0) return false;\n        bitlen += 6;\n    }\n    // If there are any bits left, source was corrupted\n    return bitlen % 8 === 0;\n}\nfunction constructYamlBinary(data) {\n    var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map = BASE64_MAP, bits = 0, result = [];\n    // Collect by 6*4 bits (3 bytes)\n    for(idx = 0; idx < max; idx++){\n        if (idx % 4 === 0 && idx) {\n            result.push(bits >> 16 & 0xFF);\n            result.push(bits >> 8 & 0xFF);\n            result.push(bits & 0xFF);\n        }\n        bits = bits << 6 | map.indexOf(input.charAt(idx));\n    }\n    // Dump tail\n    tailbits = max % 4 * 6;\n    if (tailbits === 0) {\n        result.push(bits >> 16 & 0xFF);\n        result.push(bits >> 8 & 0xFF);\n        result.push(bits & 0xFF);\n    } else if (tailbits === 18) {\n        result.push(bits >> 10 & 0xFF);\n        result.push(bits >> 2 & 0xFF);\n    } else if (tailbits === 12) {\n        result.push(bits >> 4 & 0xFF);\n    }\n    return new Uint8Array(result);\n}\nfunction representYamlBinary(object /*, style*/ ) {\n    var result = \"\", bits = 0, idx, tail, max = object.length, map = BASE64_MAP;\n    // Convert every three bytes to 4 ASCII characters.\n    for(idx = 0; idx < max; idx++){\n        if (idx % 3 === 0 && idx) {\n            result += map[bits >> 18 & 0x3F];\n            result += map[bits >> 12 & 0x3F];\n            result += map[bits >> 6 & 0x3F];\n            result += map[bits & 0x3F];\n        }\n        bits = (bits << 8) + object[idx];\n    }\n    // Dump tail\n    tail = max % 3;\n    if (tail === 0) {\n        result += map[bits >> 18 & 0x3F];\n        result += map[bits >> 12 & 0x3F];\n        result += map[bits >> 6 & 0x3F];\n        result += map[bits & 0x3F];\n    } else if (tail === 2) {\n        result += map[bits >> 10 & 0x3F];\n        result += map[bits >> 4 & 0x3F];\n        result += map[bits << 2 & 0x3F];\n        result += map[64];\n    } else if (tail === 1) {\n        result += map[bits >> 2 & 0x3F];\n        result += map[bits << 4 & 0x3F];\n        result += map[64];\n        result += map[64];\n    }\n    return result;\n}\nfunction isBinary(obj) {\n    return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\nvar binary = new type(\"tag:yaml.org,2002:binary\", {\n    kind: \"scalar\",\n    resolve: resolveYamlBinary,\n    construct: constructYamlBinary,\n    predicate: isBinary,\n    represent: representYamlBinary\n});\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n    if (data === null) return true;\n    var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        pairHasKey = false;\n        if (_toString$2.call(pair) !== \"[object Object]\") return false;\n        for(pairKey in pair){\n            if (_hasOwnProperty$3.call(pair, pairKey)) {\n                if (!pairHasKey) pairHasKey = true;\n                else return false;\n            }\n        }\n        if (!pairHasKey) return false;\n        if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n        else return false;\n    }\n    return true;\n}\nfunction constructYamlOmap(data) {\n    return data !== null ? data : [];\n}\nvar omap = new type(\"tag:yaml.org,2002:omap\", {\n    kind: \"sequence\",\n    resolve: resolveYamlOmap,\n    construct: constructYamlOmap\n});\nvar _toString$1 = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n    if (data === null) return true;\n    var index, length, pair, keys, result, object = data;\n    result = new Array(object.length);\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        if (_toString$1.call(pair) !== \"[object Object]\") return false;\n        keys = Object.keys(pair);\n        if (keys.length !== 1) return false;\n        result[index] = [\n            keys[0],\n            pair[keys[0]]\n        ];\n    }\n    return true;\n}\nfunction constructYamlPairs(data) {\n    if (data === null) return [];\n    var index, length, pair, keys, result, object = data;\n    result = new Array(object.length);\n    for(index = 0, length = object.length; index < length; index += 1){\n        pair = object[index];\n        keys = Object.keys(pair);\n        result[index] = [\n            keys[0],\n            pair[keys[0]]\n        ];\n    }\n    return result;\n}\nvar pairs = new type(\"tag:yaml.org,2002:pairs\", {\n    kind: \"sequence\",\n    resolve: resolveYamlPairs,\n    construct: constructYamlPairs\n});\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n    if (data === null) return true;\n    var key, object = data;\n    for(key in object){\n        if (_hasOwnProperty$2.call(object, key)) {\n            if (object[key] !== null) return false;\n        }\n    }\n    return true;\n}\nfunction constructYamlSet(data) {\n    return data !== null ? data : {};\n}\nvar set = new type(\"tag:yaml.org,2002:set\", {\n    kind: \"mapping\",\n    resolve: resolveYamlSet,\n    construct: constructYamlSet\n});\nvar _default = core.extend({\n    implicit: [\n        timestamp,\n        merge\n    ],\n    explicit: [\n        binary,\n        omap,\n        pairs,\n        set\n    ]\n});\n/*eslint-disable max-len,no-use-before-define*/ var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n    return Object.prototype.toString.call(obj);\n}\nfunction is_EOL(c) {\n    return c === 0x0A /* LF */  || c === 0x0D /* CR */ ;\n}\nfunction is_WHITE_SPACE(c) {\n    return c === 0x09 /* Tab */  || c === 0x20 /* Space */ ;\n}\nfunction is_WS_OR_EOL(c) {\n    return c === 0x09 /* Tab */  || c === 0x20 /* Space */  || c === 0x0A /* LF */  || c === 0x0D /* CR */ ;\n}\nfunction is_FLOW_INDICATOR(c) {\n    return c === 0x2C /* , */  || c === 0x5B /* [ */  || c === 0x5D /* ] */  || c === 0x7B /* { */  || c === 0x7D /* } */ ;\n}\nfunction fromHexCode(c) {\n    var lc;\n    if (0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ) {\n        return c - 0x30;\n    }\n    /*eslint-disable no-bitwise*/ lc = c | 0x20;\n    if (0x61 /* a */  <= lc && lc <= 0x66 /* f */ ) {\n        return lc - 0x61 + 10;\n    }\n    return -1;\n}\nfunction escapedHexLen(c) {\n    if (c === 0x78 /* x */ ) {\n        return 2;\n    }\n    if (c === 0x75 /* u */ ) {\n        return 4;\n    }\n    if (c === 0x55 /* U */ ) {\n        return 8;\n    }\n    return 0;\n}\nfunction fromDecimalCode(c) {\n    if (0x30 /* 0 */  <= c && c <= 0x39 /* 9 */ ) {\n        return c - 0x30;\n    }\n    return -1;\n}\nfunction simpleEscapeSequence(c) {\n    /* eslint-disable indent */ return c === 0x30 /* 0 */  ? \"\\x00\" : c === 0x61 /* a */  ? \"\\x07\" : c === 0x62 /* b */  ? \"\\b\" : c === 0x74 /* t */  ? \"\t\" : c === 0x09 /* Tab */  ? \"\t\" : c === 0x6E /* n */  ? \"\\n\" : c === 0x76 /* v */  ? \"\\v\" : c === 0x66 /* f */  ? \"\\f\" : c === 0x72 /* r */  ? \"\\r\" : c === 0x65 /* e */  ? \"\\x1b\" : c === 0x20 /* Space */  ? \" \" : c === 0x22 /* \" */  ? '\"' : c === 0x2F /* / */  ? \"/\" : c === 0x5C /* \\ */  ? \"\\\\\" : c === 0x4E /* N */  ? \"\\x85\" : c === 0x5F /* _ */  ? \"\\xa0\" : c === 0x4C /* L */  ? \"\\u2028\" : c === 0x50 /* P */  ? \"\\u2029\" : \"\";\n}\nfunction charFromCodepoint(c) {\n    if (c <= 0xFFFF) {\n        return String.fromCharCode(c);\n    }\n    // Encode UTF-16 surrogate pair\n    // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n    return String.fromCharCode((c - 0x010000 >> 10) + 0xD800, (c - 0x010000 & 0x03FF) + 0xDC00);\n}\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor(var i = 0; i < 256; i++){\n    simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n    simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nfunction State$1(input, options) {\n    this.input = input;\n    this.filename = options[\"filename\"] || null;\n    this.schema = options[\"schema\"] || _default;\n    this.onWarning = options[\"onWarning\"] || null;\n    // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n    // if such documents have no explicit %YAML directive\n    this.legacy = options[\"legacy\"] || false;\n    this.json = options[\"json\"] || false;\n    this.listener = options[\"listener\"] || null;\n    this.implicitTypes = this.schema.compiledImplicit;\n    this.typeMap = this.schema.compiledTypeMap;\n    this.length = input.length;\n    this.position = 0;\n    this.line = 0;\n    this.lineStart = 0;\n    this.lineIndent = 0;\n    // position of first leading tab in the current line,\n    // used to make sure there are no tabs in the indentation\n    this.firstTabInLine = -1;\n    this.documents = [];\n/*\n  this.version;\n  this.checkLineBreaks;\n  this.tagMap;\n  this.anchorMap;\n  this.tag;\n  this.anchor;\n  this.kind;\n  this.result;*/ }\nfunction generateError(state, message) {\n    var mark = {\n        name: state.filename,\n        buffer: state.input.slice(0, -1),\n        position: state.position,\n        line: state.line,\n        column: state.position - state.lineStart\n    };\n    mark.snippet = snippet(mark);\n    return new exception(message, mark);\n}\nfunction throwError(state, message) {\n    throw generateError(state, message);\n}\nfunction throwWarning(state, message) {\n    if (state.onWarning) {\n        state.onWarning.call(null, generateError(state, message));\n    }\n}\nvar directiveHandlers = {\n    YAML: function handleYamlDirective(state, name, args) {\n        var match, major, minor;\n        if (state.version !== null) {\n            throwError(state, \"duplication of %YAML directive\");\n        }\n        if (args.length !== 1) {\n            throwError(state, \"YAML directive accepts exactly one argument\");\n        }\n        match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n        if (match === null) {\n            throwError(state, \"ill-formed argument of the YAML directive\");\n        }\n        major = parseInt(match[1], 10);\n        minor = parseInt(match[2], 10);\n        if (major !== 1) {\n            throwError(state, \"unacceptable YAML version of the document\");\n        }\n        state.version = args[0];\n        state.checkLineBreaks = minor < 2;\n        if (minor !== 1 && minor !== 2) {\n            throwWarning(state, \"unsupported YAML version of the document\");\n        }\n    },\n    TAG: function handleTagDirective(state, name, args) {\n        var handle, prefix;\n        if (args.length !== 2) {\n            throwError(state, \"TAG directive accepts exactly two arguments\");\n        }\n        handle = args[0];\n        prefix = args[1];\n        if (!PATTERN_TAG_HANDLE.test(handle)) {\n            throwError(state, \"ill-formed tag handle (first argument) of the TAG directive\");\n        }\n        if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n            throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n        }\n        if (!PATTERN_TAG_URI.test(prefix)) {\n            throwError(state, \"ill-formed tag prefix (second argument) of the TAG directive\");\n        }\n        try {\n            prefix = decodeURIComponent(prefix);\n        } catch (err) {\n            throwError(state, \"tag prefix is malformed: \" + prefix);\n        }\n        state.tagMap[handle] = prefix;\n    }\n};\nfunction captureSegment(state, start, end, checkJson) {\n    var _position, _length, _character, _result;\n    if (start < end) {\n        _result = state.input.slice(start, end);\n        if (checkJson) {\n            for(_position = 0, _length = _result.length; _position < _length; _position += 1){\n                _character = _result.charCodeAt(_position);\n                if (!(_character === 0x09 || 0x20 <= _character && _character <= 0x10FFFF)) {\n                    throwError(state, \"expected valid JSON character\");\n                }\n            }\n        } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n            throwError(state, \"the stream contains non-printable characters\");\n        }\n        state.result += _result;\n    }\n}\nfunction mergeMappings(state, destination, source, overridableKeys) {\n    var sourceKeys, key, index, quantity;\n    if (!common.isObject(source)) {\n        throwError(state, \"cannot merge mappings; the provided source object is unacceptable\");\n    }\n    sourceKeys = Object.keys(source);\n    for(index = 0, quantity = sourceKeys.length; index < quantity; index += 1){\n        key = sourceKeys[index];\n        if (!_hasOwnProperty$1.call(destination, key)) {\n            destination[key] = source[key];\n            overridableKeys[key] = true;\n        }\n    }\n}\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n    var index, quantity;\n    // The output is a plain object here, so keys can only be strings.\n    // We need to convert keyNode to a string, but doing so can hang the process\n    // (deeply nested arrays that explode exponentially using aliases).\n    if (Array.isArray(keyNode)) {\n        keyNode = Array.prototype.slice.call(keyNode);\n        for(index = 0, quantity = keyNode.length; index < quantity; index += 1){\n            if (Array.isArray(keyNode[index])) {\n                throwError(state, \"nested arrays are not supported inside keys\");\n            }\n            if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n                keyNode[index] = \"[object Object]\";\n            }\n        }\n    }\n    // Avoid code execution in load() via toString property\n    // (still use its own toString for arrays, timestamps,\n    // and whatever user schema extensions happen to have @@toStringTag)\n    if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n        keyNode = \"[object Object]\";\n    }\n    keyNode = String(keyNode);\n    if (_result === null) {\n        _result = {};\n    }\n    if (keyTag === \"tag:yaml.org,2002:merge\") {\n        if (Array.isArray(valueNode)) {\n            for(index = 0, quantity = valueNode.length; index < quantity; index += 1){\n                mergeMappings(state, _result, valueNode[index], overridableKeys);\n            }\n        } else {\n            mergeMappings(state, _result, valueNode, overridableKeys);\n        }\n    } else {\n        if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {\n            state.line = startLine || state.line;\n            state.lineStart = startLineStart || state.lineStart;\n            state.position = startPos || state.position;\n            throwError(state, \"duplicated mapping key\");\n        }\n        // used for this specific key only because Object.defineProperty is slow\n        if (keyNode === \"__proto__\") {\n            Object.defineProperty(_result, keyNode, {\n                configurable: true,\n                enumerable: true,\n                writable: true,\n                value: valueNode\n            });\n        } else {\n            _result[keyNode] = valueNode;\n        }\n        delete overridableKeys[keyNode];\n    }\n    return _result;\n}\nfunction readLineBreak(state) {\n    var ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x0A /* LF */ ) {\n        state.position++;\n    } else if (ch === 0x0D /* CR */ ) {\n        state.position++;\n        if (state.input.charCodeAt(state.position) === 0x0A /* LF */ ) {\n            state.position++;\n        }\n    } else {\n        throwError(state, \"a line break is expected\");\n    }\n    state.line += 1;\n    state.lineStart = state.position;\n    state.firstTabInLine = -1;\n}\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n    var lineBreaks = 0, ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        while(is_WHITE_SPACE(ch)){\n            if (ch === 0x09 /* Tab */  && state.firstTabInLine === -1) {\n                state.firstTabInLine = state.position;\n            }\n            ch = state.input.charCodeAt(++state.position);\n        }\n        if (allowComments && ch === 0x23 /* # */ ) {\n            do {\n                ch = state.input.charCodeAt(++state.position);\n            }while (ch !== 0x0A /* LF */  && ch !== 0x0D /* CR */  && ch !== 0);\n        }\n        if (is_EOL(ch)) {\n            readLineBreak(state);\n            ch = state.input.charCodeAt(state.position);\n            lineBreaks++;\n            state.lineIndent = 0;\n            while(ch === 0x20 /* Space */ ){\n                state.lineIndent++;\n                ch = state.input.charCodeAt(++state.position);\n            }\n        } else {\n            break;\n        }\n    }\n    if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n        throwWarning(state, \"deficient indentation\");\n    }\n    return lineBreaks;\n}\nfunction testDocumentSeparator(state) {\n    var _position = state.position, ch;\n    ch = state.input.charCodeAt(_position);\n    // Condition state.position === state.lineStart is tested\n    // in parent on each call, for efficiency. No needs to test here again.\n    if ((ch === 0x2D /* - */  || ch === 0x2E /* . */ ) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {\n        _position += 3;\n        ch = state.input.charCodeAt(_position);\n        if (ch === 0 || is_WS_OR_EOL(ch)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction writeFoldedLines(state, count) {\n    if (count === 1) {\n        state.result += \" \";\n    } else if (count > 1) {\n        state.result += common.repeat(\"\\n\", count - 1);\n    }\n}\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n    var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 0x23 /* # */  || ch === 0x26 /* & */  || ch === 0x2A /* * */  || ch === 0x21 /* ! */  || ch === 0x7C /* | */  || ch === 0x3E /* > */  || ch === 0x27 /* ' */  || ch === 0x22 /* \" */  || ch === 0x25 /* % */  || ch === 0x40 /* @ */  || ch === 0x60 /* ` */ ) {\n        return false;\n    }\n    if (ch === 0x3F /* ? */  || ch === 0x2D /* - */ ) {\n        following = state.input.charCodeAt(state.position + 1);\n        if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n            return false;\n        }\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    captureStart = captureEnd = state.position;\n    hasPendingContent = false;\n    while(ch !== 0){\n        if (ch === 0x3A /* : */ ) {\n            following = state.input.charCodeAt(state.position + 1);\n            if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n                break;\n            }\n        } else if (ch === 0x23 /* # */ ) {\n            preceding = state.input.charCodeAt(state.position - 1);\n            if (is_WS_OR_EOL(preceding)) {\n                break;\n            }\n        } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n            break;\n        } else if (is_EOL(ch)) {\n            _line = state.line;\n            _lineStart = state.lineStart;\n            _lineIndent = state.lineIndent;\n            skipSeparationSpace(state, false, -1);\n            if (state.lineIndent >= nodeIndent) {\n                hasPendingContent = true;\n                ch = state.input.charCodeAt(state.position);\n                continue;\n            } else {\n                state.position = captureEnd;\n                state.line = _line;\n                state.lineStart = _lineStart;\n                state.lineIndent = _lineIndent;\n                break;\n            }\n        }\n        if (hasPendingContent) {\n            captureSegment(state, captureStart, captureEnd, false);\n            writeFoldedLines(state, state.line - _line);\n            captureStart = captureEnd = state.position;\n            hasPendingContent = false;\n        }\n        if (!is_WHITE_SPACE(ch)) {\n            captureEnd = state.position + 1;\n        }\n        ch = state.input.charCodeAt(++state.position);\n    }\n    captureSegment(state, captureStart, captureEnd, false);\n    if (state.result) {\n        return true;\n    }\n    state.kind = _kind;\n    state.result = _result;\n    return false;\n}\nfunction readSingleQuotedScalar(state, nodeIndent) {\n    var ch, captureStart, captureEnd;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x27 /* ' */ ) {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    state.position++;\n    captureStart = captureEnd = state.position;\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        if (ch === 0x27 /* ' */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            ch = state.input.charCodeAt(++state.position);\n            if (ch === 0x27 /* ' */ ) {\n                captureStart = state.position;\n                state.position++;\n                captureEnd = state.position;\n            } else {\n                return true;\n            }\n        } else if (is_EOL(ch)) {\n            captureSegment(state, captureStart, captureEnd, true);\n            writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n            captureStart = captureEnd = state.position;\n        } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n            throwError(state, \"unexpected end of the document within a single quoted scalar\");\n        } else {\n            state.position++;\n            captureEnd = state.position;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a single quoted scalar\");\n}\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n    var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x22 /* \" */ ) {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    state.position++;\n    captureStart = captureEnd = state.position;\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        if (ch === 0x22 /* \" */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            state.position++;\n            return true;\n        } else if (ch === 0x5C /* \\ */ ) {\n            captureSegment(state, captureStart, state.position, true);\n            ch = state.input.charCodeAt(++state.position);\n            if (is_EOL(ch)) {\n                skipSeparationSpace(state, false, nodeIndent);\n            // TODO: rework to inline fn with no type cast?\n            } else if (ch < 256 && simpleEscapeCheck[ch]) {\n                state.result += simpleEscapeMap[ch];\n                state.position++;\n            } else if ((tmp = escapedHexLen(ch)) > 0) {\n                hexLength = tmp;\n                hexResult = 0;\n                for(; hexLength > 0; hexLength--){\n                    ch = state.input.charCodeAt(++state.position);\n                    if ((tmp = fromHexCode(ch)) >= 0) {\n                        hexResult = (hexResult << 4) + tmp;\n                    } else {\n                        throwError(state, \"expected hexadecimal character\");\n                    }\n                }\n                state.result += charFromCodepoint(hexResult);\n                state.position++;\n            } else {\n                throwError(state, \"unknown escape sequence\");\n            }\n            captureStart = captureEnd = state.position;\n        } else if (is_EOL(ch)) {\n            captureSegment(state, captureStart, captureEnd, true);\n            writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n            captureStart = captureEnd = state.position;\n        } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n            throwError(state, \"unexpected end of the document within a double quoted scalar\");\n        } else {\n            state.position++;\n            captureEnd = state.position;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a double quoted scalar\");\n}\nfunction readFlowCollection(state, nodeIndent) {\n    var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = Object.create(null), keyNode, keyTag, valueNode, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x5B /* [ */ ) {\n        terminator = 0x5D; /* ] */ \n        isMapping = false;\n        _result = [];\n    } else if (ch === 0x7B /* { */ ) {\n        terminator = 0x7D; /* } */ \n        isMapping = true;\n        _result = {};\n    } else {\n        return false;\n    }\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(++state.position);\n    while(ch !== 0){\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if (ch === terminator) {\n            state.position++;\n            state.tag = _tag;\n            state.anchor = _anchor;\n            state.kind = isMapping ? \"mapping\" : \"sequence\";\n            state.result = _result;\n            return true;\n        } else if (!readNext) {\n            throwError(state, \"missed comma between flow collection entries\");\n        } else if (ch === 0x2C /* , */ ) {\n            // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n            throwError(state, \"expected the node content, but found ','\");\n        }\n        keyTag = keyNode = valueNode = null;\n        isPair = isExplicitPair = false;\n        if (ch === 0x3F /* ? */ ) {\n            following = state.input.charCodeAt(state.position + 1);\n            if (is_WS_OR_EOL(following)) {\n                isPair = isExplicitPair = true;\n                state.position++;\n                skipSeparationSpace(state, true, nodeIndent);\n            }\n        }\n        _line = state.line; // Save the current line.\n        _lineStart = state.lineStart;\n        _pos = state.position;\n        composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n        keyTag = state.tag;\n        keyNode = state.result;\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if ((isExplicitPair || state.line === _line) && ch === 0x3A /* : */ ) {\n            isPair = true;\n            ch = state.input.charCodeAt(++state.position);\n            skipSeparationSpace(state, true, nodeIndent);\n            composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n            valueNode = state.result;\n        }\n        if (isMapping) {\n            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n        } else if (isPair) {\n            _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n        } else {\n            _result.push(keyNode);\n        }\n        skipSeparationSpace(state, true, nodeIndent);\n        ch = state.input.charCodeAt(state.position);\n        if (ch === 0x2C /* , */ ) {\n            readNext = true;\n            ch = state.input.charCodeAt(++state.position);\n        } else {\n            readNext = false;\n        }\n    }\n    throwError(state, \"unexpected end of the stream within a flow collection\");\n}\nfunction readBlockScalar(state, nodeIndent) {\n    var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch === 0x7C /* | */ ) {\n        folding = false;\n    } else if (ch === 0x3E /* > */ ) {\n        folding = true;\n    } else {\n        return false;\n    }\n    state.kind = \"scalar\";\n    state.result = \"\";\n    while(ch !== 0){\n        ch = state.input.charCodeAt(++state.position);\n        if (ch === 0x2B /* + */  || ch === 0x2D /* - */ ) {\n            if (CHOMPING_CLIP === chomping) {\n                chomping = ch === 0x2B /* + */  ? CHOMPING_KEEP : CHOMPING_STRIP;\n            } else {\n                throwError(state, \"repeat of a chomping mode identifier\");\n            }\n        } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n            if (tmp === 0) {\n                throwError(state, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n            } else if (!detectedIndent) {\n                textIndent = nodeIndent + tmp - 1;\n                detectedIndent = true;\n            } else {\n                throwError(state, \"repeat of an indentation width identifier\");\n            }\n        } else {\n            break;\n        }\n    }\n    if (is_WHITE_SPACE(ch)) {\n        do {\n            ch = state.input.charCodeAt(++state.position);\n        }while (is_WHITE_SPACE(ch));\n        if (ch === 0x23 /* # */ ) {\n            do {\n                ch = state.input.charCodeAt(++state.position);\n            }while (!is_EOL(ch) && ch !== 0);\n        }\n    }\n    while(ch !== 0){\n        readLineBreak(state);\n        state.lineIndent = 0;\n        ch = state.input.charCodeAt(state.position);\n        while((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20 /* Space */ ){\n            state.lineIndent++;\n            ch = state.input.charCodeAt(++state.position);\n        }\n        if (!detectedIndent && state.lineIndent > textIndent) {\n            textIndent = state.lineIndent;\n        }\n        if (is_EOL(ch)) {\n            emptyLines++;\n            continue;\n        }\n        // End of the scalar.\n        if (state.lineIndent < textIndent) {\n            // Perform the chomping.\n            if (chomping === CHOMPING_KEEP) {\n                state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n            } else if (chomping === CHOMPING_CLIP) {\n                if (didReadContent) {\n                    state.result += \"\\n\";\n                }\n            }\n            break;\n        }\n        // Folded style: use fancy rules to handle line breaks.\n        if (folding) {\n            // Lines starting with white space characters (more-indented lines) are not folded.\n            if (is_WHITE_SPACE(ch)) {\n                atMoreIndented = true;\n                // except for the first content line (cf. Example 8.1)\n                state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n            // End of more-indented block.\n            } else if (atMoreIndented) {\n                atMoreIndented = false;\n                state.result += common.repeat(\"\\n\", emptyLines + 1);\n            // Just one line break - perceive as the same line.\n            } else if (emptyLines === 0) {\n                if (didReadContent) {\n                    state.result += \" \";\n                }\n            // Several line breaks - perceive as different lines.\n            } else {\n                state.result += common.repeat(\"\\n\", emptyLines);\n            }\n        // Literal style: just add exact number of line breaks between content lines.\n        } else {\n            // Keep all line breaks except the header line break.\n            state.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n        }\n        didReadContent = true;\n        detectedIndent = true;\n        emptyLines = 0;\n        captureStart = state.position;\n        while(!is_EOL(ch) && ch !== 0){\n            ch = state.input.charCodeAt(++state.position);\n        }\n        captureSegment(state, captureStart, state.position, false);\n    }\n    return true;\n}\nfunction readBlockSequence(state, nodeIndent) {\n    var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;\n    // there is a leading tab before this token, so it can't be a block sequence/mapping;\n    // it can still be flow sequence/mapping or a scalar\n    if (state.firstTabInLine !== -1) return false;\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        if (state.firstTabInLine !== -1) {\n            state.position = state.firstTabInLine;\n            throwError(state, \"tab characters must not be used in indentation\");\n        }\n        if (ch !== 0x2D /* - */ ) {\n            break;\n        }\n        following = state.input.charCodeAt(state.position + 1);\n        if (!is_WS_OR_EOL(following)) {\n            break;\n        }\n        detected = true;\n        state.position++;\n        if (skipSeparationSpace(state, true, -1)) {\n            if (state.lineIndent <= nodeIndent) {\n                _result.push(null);\n                ch = state.input.charCodeAt(state.position);\n                continue;\n            }\n        }\n        _line = state.line;\n        composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n        _result.push(state.result);\n        skipSeparationSpace(state, true, -1);\n        ch = state.input.charCodeAt(state.position);\n        if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n            throwError(state, \"bad indentation of a sequence entry\");\n        } else if (state.lineIndent < nodeIndent) {\n            break;\n        }\n    }\n    if (detected) {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        state.kind = \"sequence\";\n        state.result = _result;\n        return true;\n    }\n    return false;\n}\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n    var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n    // there is a leading tab before this token, so it can't be a block sequence/mapping;\n    // it can still be flow sequence/mapping or a scalar\n    if (state.firstTabInLine !== -1) return false;\n    if (state.anchor !== null) {\n        state.anchorMap[state.anchor] = _result;\n    }\n    ch = state.input.charCodeAt(state.position);\n    while(ch !== 0){\n        if (!atExplicitKey && state.firstTabInLine !== -1) {\n            state.position = state.firstTabInLine;\n            throwError(state, \"tab characters must not be used in indentation\");\n        }\n        following = state.input.charCodeAt(state.position + 1);\n        _line = state.line; // Save the current line.\n        //\n        // Explicit notation case. There are two separate blocks:\n        // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n        //\n        if ((ch === 0x3F /* ? */  || ch === 0x3A /* : */ ) && is_WS_OR_EOL(following)) {\n            if (ch === 0x3F /* ? */ ) {\n                if (atExplicitKey) {\n                    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n                    keyTag = keyNode = valueNode = null;\n                }\n                detected = true;\n                atExplicitKey = true;\n                allowCompact = true;\n            } else if (atExplicitKey) {\n                // i.e. 0x3A/* : */ === character after the explicit key.\n                atExplicitKey = false;\n                allowCompact = true;\n            } else {\n                throwError(state, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n            }\n            state.position += 1;\n            ch = following;\n        //\n        // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n        //\n        } else {\n            _keyLine = state.line;\n            _keyLineStart = state.lineStart;\n            _keyPos = state.position;\n            if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n                break;\n            }\n            if (state.line === _line) {\n                ch = state.input.charCodeAt(state.position);\n                while(is_WHITE_SPACE(ch)){\n                    ch = state.input.charCodeAt(++state.position);\n                }\n                if (ch === 0x3A /* : */ ) {\n                    ch = state.input.charCodeAt(++state.position);\n                    if (!is_WS_OR_EOL(ch)) {\n                        throwError(state, \"a whitespace character is expected after the key-value separator within a block mapping\");\n                    }\n                    if (atExplicitKey) {\n                        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n                        keyTag = keyNode = valueNode = null;\n                    }\n                    detected = true;\n                    atExplicitKey = false;\n                    allowCompact = false;\n                    keyTag = state.tag;\n                    keyNode = state.result;\n                } else if (detected) {\n                    throwError(state, \"can not read an implicit mapping pair; a colon is missed\");\n                } else {\n                    state.tag = _tag;\n                    state.anchor = _anchor;\n                    return true; // Keep the result of `composeNode`.\n                }\n            } else if (detected) {\n                throwError(state, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n            } else {\n                state.tag = _tag;\n                state.anchor = _anchor;\n                return true; // Keep the result of `composeNode`.\n            }\n        }\n        //\n        // Common reading code for both explicit and implicit notations.\n        //\n        if (state.line === _line || state.lineIndent > nodeIndent) {\n            if (atExplicitKey) {\n                _keyLine = state.line;\n                _keyLineStart = state.lineStart;\n                _keyPos = state.position;\n            }\n            if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n                if (atExplicitKey) {\n                    keyNode = state.result;\n                } else {\n                    valueNode = state.result;\n                }\n            }\n            if (!atExplicitKey) {\n                storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n                keyTag = keyNode = valueNode = null;\n            }\n            skipSeparationSpace(state, true, -1);\n            ch = state.input.charCodeAt(state.position);\n        }\n        if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {\n            throwError(state, \"bad indentation of a mapping entry\");\n        } else if (state.lineIndent < nodeIndent) {\n            break;\n        }\n    }\n    //\n    // Epilogue.\n    //\n    // Special case: last mapping's node contains only the key in explicit notation.\n    if (atExplicitKey) {\n        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n    }\n    // Expose the resulting mapping.\n    if (detected) {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        state.kind = \"mapping\";\n        state.result = _result;\n    }\n    return detected;\n}\nfunction readTagProperty(state) {\n    var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x21 /* ! */ ) return false;\n    if (state.tag !== null) {\n        throwError(state, \"duplication of a tag property\");\n    }\n    ch = state.input.charCodeAt(++state.position);\n    if (ch === 0x3C /* < */ ) {\n        isVerbatim = true;\n        ch = state.input.charCodeAt(++state.position);\n    } else if (ch === 0x21 /* ! */ ) {\n        isNamed = true;\n        tagHandle = \"!!\";\n        ch = state.input.charCodeAt(++state.position);\n    } else {\n        tagHandle = \"!\";\n    }\n    _position = state.position;\n    if (isVerbatim) {\n        do {\n            ch = state.input.charCodeAt(++state.position);\n        }while (ch !== 0 && ch !== 0x3E /* > */ );\n        if (state.position < state.length) {\n            tagName = state.input.slice(_position, state.position);\n            ch = state.input.charCodeAt(++state.position);\n        } else {\n            throwError(state, \"unexpected end of the stream within a verbatim tag\");\n        }\n    } else {\n        while(ch !== 0 && !is_WS_OR_EOL(ch)){\n            if (ch === 0x21 /* ! */ ) {\n                if (!isNamed) {\n                    tagHandle = state.input.slice(_position - 1, state.position + 1);\n                    if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n                        throwError(state, \"named tag handle cannot contain such characters\");\n                    }\n                    isNamed = true;\n                    _position = state.position + 1;\n                } else {\n                    throwError(state, \"tag suffix cannot contain exclamation marks\");\n                }\n            }\n            ch = state.input.charCodeAt(++state.position);\n        }\n        tagName = state.input.slice(_position, state.position);\n        if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n            throwError(state, \"tag suffix cannot contain flow indicator characters\");\n        }\n    }\n    if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n        throwError(state, \"tag name cannot contain such characters: \" + tagName);\n    }\n    try {\n        tagName = decodeURIComponent(tagName);\n    } catch (err) {\n        throwError(state, \"tag name is malformed: \" + tagName);\n    }\n    if (isVerbatim) {\n        state.tag = tagName;\n    } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n        state.tag = state.tagMap[tagHandle] + tagName;\n    } else if (tagHandle === \"!\") {\n        state.tag = \"!\" + tagName;\n    } else if (tagHandle === \"!!\") {\n        state.tag = \"tag:yaml.org,2002:\" + tagName;\n    } else {\n        throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n    }\n    return true;\n}\nfunction readAnchorProperty(state) {\n    var _position, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x26 /* & */ ) return false;\n    if (state.anchor !== null) {\n        throwError(state, \"duplication of an anchor property\");\n    }\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n    while(ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)){\n        ch = state.input.charCodeAt(++state.position);\n    }\n    if (state.position === _position) {\n        throwError(state, \"name of an anchor node must contain at least one character\");\n    }\n    state.anchor = state.input.slice(_position, state.position);\n    return true;\n}\nfunction readAlias(state) {\n    var _position, alias, ch;\n    ch = state.input.charCodeAt(state.position);\n    if (ch !== 0x2A /* * */ ) return false;\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n    while(ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)){\n        ch = state.input.charCodeAt(++state.position);\n    }\n    if (state.position === _position) {\n        throwError(state, \"name of an alias node must contain at least one character\");\n    }\n    alias = state.input.slice(_position, state.position);\n    if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n        throwError(state, 'unidentified alias \"' + alias + '\"');\n    }\n    state.result = state.anchorMap[alias];\n    skipSeparationSpace(state, true, -1);\n    return true;\n}\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n    var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type, flowIndent, blockIndent;\n    if (state.listener !== null) {\n        state.listener(\"open\", state);\n    }\n    state.tag = null;\n    state.anchor = null;\n    state.kind = null;\n    state.result = null;\n    allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n    if (allowToSeek) {\n        if (skipSeparationSpace(state, true, -1)) {\n            atNewLine = true;\n            if (state.lineIndent > parentIndent) {\n                indentStatus = 1;\n            } else if (state.lineIndent === parentIndent) {\n                indentStatus = 0;\n            } else if (state.lineIndent < parentIndent) {\n                indentStatus = -1;\n            }\n        }\n    }\n    if (indentStatus === 1) {\n        while(readTagProperty(state) || readAnchorProperty(state)){\n            if (skipSeparationSpace(state, true, -1)) {\n                atNewLine = true;\n                allowBlockCollections = allowBlockStyles;\n                if (state.lineIndent > parentIndent) {\n                    indentStatus = 1;\n                } else if (state.lineIndent === parentIndent) {\n                    indentStatus = 0;\n                } else if (state.lineIndent < parentIndent) {\n                    indentStatus = -1;\n                }\n            } else {\n                allowBlockCollections = false;\n            }\n        }\n    }\n    if (allowBlockCollections) {\n        allowBlockCollections = atNewLine || allowCompact;\n    }\n    if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n        if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n            flowIndent = parentIndent;\n        } else {\n            flowIndent = parentIndent + 1;\n        }\n        blockIndent = state.position - state.lineStart;\n        if (indentStatus === 1) {\n            if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {\n                hasContent = true;\n            } else {\n                if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {\n                    hasContent = true;\n                } else if (readAlias(state)) {\n                    hasContent = true;\n                    if (state.tag !== null || state.anchor !== null) {\n                        throwError(state, \"alias node should not have any properties\");\n                    }\n                } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n                    hasContent = true;\n                    if (state.tag === null) {\n                        state.tag = \"?\";\n                    }\n                }\n                if (state.anchor !== null) {\n                    state.anchorMap[state.anchor] = state.result;\n                }\n            }\n        } else if (indentStatus === 0) {\n            // Special case: block sequences are allowed to have same indentation level as the parent.\n            // http://www.yaml.org/spec/1.2/spec.html#id2799784\n            hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n        }\n    }\n    if (state.tag === null) {\n        if (state.anchor !== null) {\n            state.anchorMap[state.anchor] = state.result;\n        }\n    } else if (state.tag === \"?\") {\n        // Implicit resolving is not allowed for non-scalar types, and '?'\n        // non-specific tag is only automatically assigned to plain scalars.\n        //\n        // We only need to check kind conformity in case user explicitly assigns '?'\n        // tag, for example like this: \"!<?> [0]\"\n        //\n        if (state.result !== null && state.kind !== \"scalar\") {\n            throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n        }\n        for(typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1){\n            type = state.implicitTypes[typeIndex];\n            if (type.resolve(state.result)) {\n                state.result = type.construct(state.result);\n                state.tag = type.tag;\n                if (state.anchor !== null) {\n                    state.anchorMap[state.anchor] = state.result;\n                }\n                break;\n            }\n        }\n    } else if (state.tag !== \"!\") {\n        if (_hasOwnProperty$1.call(state.typeMap[state.kind || \"fallback\"], state.tag)) {\n            type = state.typeMap[state.kind || \"fallback\"][state.tag];\n        } else {\n            // looking for multi type\n            type = null;\n            typeList = state.typeMap.multi[state.kind || \"fallback\"];\n            for(typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1){\n                if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n                    type = typeList[typeIndex];\n                    break;\n                }\n            }\n        }\n        if (!type) {\n            throwError(state, \"unknown tag !<\" + state.tag + \">\");\n        }\n        if (state.result !== null && type.kind !== state.kind) {\n            throwError(state, \"unacceptable node kind for !<\" + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n        }\n        if (!type.resolve(state.result, state.tag)) {\n            throwError(state, \"cannot resolve a node with !<\" + state.tag + \"> explicit tag\");\n        } else {\n            state.result = type.construct(state.result, state.tag);\n            if (state.anchor !== null) {\n                state.anchorMap[state.anchor] = state.result;\n            }\n        }\n    }\n    if (state.listener !== null) {\n        state.listener(\"close\", state);\n    }\n    return state.tag !== null || state.anchor !== null || hasContent;\n}\nfunction readDocument(state) {\n    var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n    state.version = null;\n    state.checkLineBreaks = state.legacy;\n    state.tagMap = Object.create(null);\n    state.anchorMap = Object.create(null);\n    while((ch = state.input.charCodeAt(state.position)) !== 0){\n        skipSeparationSpace(state, true, -1);\n        ch = state.input.charCodeAt(state.position);\n        if (state.lineIndent > 0 || ch !== 0x25 /* % */ ) {\n            break;\n        }\n        hasDirectives = true;\n        ch = state.input.charCodeAt(++state.position);\n        _position = state.position;\n        while(ch !== 0 && !is_WS_OR_EOL(ch)){\n            ch = state.input.charCodeAt(++state.position);\n        }\n        directiveName = state.input.slice(_position, state.position);\n        directiveArgs = [];\n        if (directiveName.length < 1) {\n            throwError(state, \"directive name must not be less than one character in length\");\n        }\n        while(ch !== 0){\n            while(is_WHITE_SPACE(ch)){\n                ch = state.input.charCodeAt(++state.position);\n            }\n            if (ch === 0x23 /* # */ ) {\n                do {\n                    ch = state.input.charCodeAt(++state.position);\n                }while (ch !== 0 && !is_EOL(ch));\n                break;\n            }\n            if (is_EOL(ch)) break;\n            _position = state.position;\n            while(ch !== 0 && !is_WS_OR_EOL(ch)){\n                ch = state.input.charCodeAt(++state.position);\n            }\n            directiveArgs.push(state.input.slice(_position, state.position));\n        }\n        if (ch !== 0) readLineBreak(state);\n        if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n            directiveHandlers[directiveName](state, directiveName, directiveArgs);\n        } else {\n            throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n        }\n    }\n    skipSeparationSpace(state, true, -1);\n    if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D /* - */  && state.input.charCodeAt(state.position + 1) === 0x2D /* - */  && state.input.charCodeAt(state.position + 2) === 0x2D /* - */ ) {\n        state.position += 3;\n        skipSeparationSpace(state, true, -1);\n    } else if (hasDirectives) {\n        throwError(state, \"directives end mark is expected\");\n    }\n    composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n    skipSeparationSpace(state, true, -1);\n    if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n        throwWarning(state, \"non-ASCII line breaks are interpreted as content\");\n    }\n    state.documents.push(state.result);\n    if (state.position === state.lineStart && testDocumentSeparator(state)) {\n        if (state.input.charCodeAt(state.position) === 0x2E /* . */ ) {\n            state.position += 3;\n            skipSeparationSpace(state, true, -1);\n        }\n        return;\n    }\n    if (state.position < state.length - 1) {\n        throwError(state, \"end of the stream or a document separator is expected\");\n    } else {\n        return;\n    }\n}\nfunction loadDocuments(input, options) {\n    input = String(input);\n    options = options || {};\n    if (input.length !== 0) {\n        // Add tailing `\\n` if not exists\n        if (input.charCodeAt(input.length - 1) !== 0x0A /* LF */  && input.charCodeAt(input.length - 1) !== 0x0D /* CR */ ) {\n            input += \"\\n\";\n        }\n        // Strip BOM\n        if (input.charCodeAt(0) === 0xFEFF) {\n            input = input.slice(1);\n        }\n    }\n    var state = new State$1(input, options);\n    var nullpos = input.indexOf(\"\\x00\");\n    if (nullpos !== -1) {\n        state.position = nullpos;\n        throwError(state, \"null byte is not allowed in input\");\n    }\n    // Use 0 as string terminator. That significantly simplifies bounds check.\n    state.input += \"\\x00\";\n    while(state.input.charCodeAt(state.position) === 0x20 /* Space */ ){\n        state.lineIndent += 1;\n        state.position += 1;\n    }\n    while(state.position < state.length - 1){\n        readDocument(state);\n    }\n    return state.documents;\n}\nfunction loadAll$1(input, iterator, options) {\n    if (iterator !== null && typeof iterator === \"object\" && typeof options === \"undefined\") {\n        options = iterator;\n        iterator = null;\n    }\n    var documents = loadDocuments(input, options);\n    if (typeof iterator !== \"function\") {\n        return documents;\n    }\n    for(var index = 0, length = documents.length; index < length; index += 1){\n        iterator(documents[index]);\n    }\n}\nfunction load$1(input, options) {\n    var documents = loadDocuments(input, options);\n    if (documents.length === 0) {\n        /*eslint-disable no-undefined*/ return undefined;\n    } else if (documents.length === 1) {\n        return documents[0];\n    }\n    throw new exception(\"expected a single document in the stream, but found more\");\n}\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\nvar loader = {\n    loadAll: loadAll_1,\n    load: load_1\n};\n/*eslint-disable no-use-before-define*/ var _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */ \nvar CHAR_LINE_FEED = 0x0A; /* LF */ \nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ \nvar CHAR_SPACE = 0x20; /* Space */ \nvar CHAR_EXCLAMATION = 0x21; /* ! */ \nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */ \nvar CHAR_SHARP = 0x23; /* # */ \nvar CHAR_PERCENT = 0x25; /* % */ \nvar CHAR_AMPERSAND = 0x26; /* & */ \nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */ \nvar CHAR_ASTERISK = 0x2A; /* * */ \nvar CHAR_COMMA = 0x2C; /* , */ \nvar CHAR_MINUS = 0x2D; /* - */ \nvar CHAR_COLON = 0x3A; /* : */ \nvar CHAR_EQUALS = 0x3D; /* = */ \nvar CHAR_GREATER_THAN = 0x3E; /* > */ \nvar CHAR_QUESTION = 0x3F; /* ? */ \nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */ \nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ \nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ \nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */ \nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ \nvar CHAR_VERTICAL_LINE = 0x7C; /* | */ \nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ \nvar ESCAPE_SEQUENCES = {};\nESCAPE_SEQUENCES[0x00] = \"\\\\0\";\nESCAPE_SEQUENCES[0x07] = \"\\\\a\";\nESCAPE_SEQUENCES[0x08] = \"\\\\b\";\nESCAPE_SEQUENCES[0x09] = \"\\\\t\";\nESCAPE_SEQUENCES[0x0A] = \"\\\\n\";\nESCAPE_SEQUENCES[0x0B] = \"\\\\v\";\nESCAPE_SEQUENCES[0x0C] = \"\\\\f\";\nESCAPE_SEQUENCES[0x0D] = \"\\\\r\";\nESCAPE_SEQUENCES[0x1B] = \"\\\\e\";\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = \"\\\\\\\\\";\nESCAPE_SEQUENCES[0x85] = \"\\\\N\";\nESCAPE_SEQUENCES[0xA0] = \"\\\\_\";\nESCAPE_SEQUENCES[0x2028] = \"\\\\L\";\nESCAPE_SEQUENCES[0x2029] = \"\\\\P\";\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n    \"y\",\n    \"Y\",\n    \"yes\",\n    \"Yes\",\n    \"YES\",\n    \"on\",\n    \"On\",\n    \"ON\",\n    \"n\",\n    \"N\",\n    \"no\",\n    \"No\",\n    \"NO\",\n    \"off\",\n    \"Off\",\n    \"OFF\"\n];\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\nfunction compileStyleMap(schema, map) {\n    var result, keys, index, length, tag, style, type;\n    if (map === null) return {};\n    result = {};\n    keys = Object.keys(map);\n    for(index = 0, length = keys.length; index < length; index += 1){\n        tag = keys[index];\n        style = String(map[tag]);\n        if (tag.slice(0, 2) === \"!!\") {\n            tag = \"tag:yaml.org,2002:\" + tag.slice(2);\n        }\n        type = schema.compiledTypeMap[\"fallback\"][tag];\n        if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n            style = type.styleAliases[style];\n        }\n        result[tag] = style;\n    }\n    return result;\n}\nfunction encodeHex(character) {\n    var string, handle, length;\n    string = character.toString(16).toUpperCase();\n    if (character <= 0xFF) {\n        handle = \"x\";\n        length = 2;\n    } else if (character <= 0xFFFF) {\n        handle = \"u\";\n        length = 4;\n    } else if (character <= 0xFFFFFFFF) {\n        handle = \"U\";\n        length = 8;\n    } else {\n        throw new exception(\"code point within a string may not be greater than 0xFFFFFFFF\");\n    }\n    return \"\\\\\" + handle + common.repeat(\"0\", length - string.length) + string;\n}\nvar QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2;\nfunction State(options) {\n    this.schema = options[\"schema\"] || _default;\n    this.indent = Math.max(1, options[\"indent\"] || 2);\n    this.noArrayIndent = options[\"noArrayIndent\"] || false;\n    this.skipInvalid = options[\"skipInvalid\"] || false;\n    this.flowLevel = common.isNothing(options[\"flowLevel\"]) ? -1 : options[\"flowLevel\"];\n    this.styleMap = compileStyleMap(this.schema, options[\"styles\"] || null);\n    this.sortKeys = options[\"sortKeys\"] || false;\n    this.lineWidth = options[\"lineWidth\"] || 80;\n    this.noRefs = options[\"noRefs\"] || false;\n    this.noCompatMode = options[\"noCompatMode\"] || false;\n    this.condenseFlow = options[\"condenseFlow\"] || false;\n    this.quotingType = options[\"quotingType\"] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n    this.forceQuotes = options[\"forceQuotes\"] || false;\n    this.replacer = typeof options[\"replacer\"] === \"function\" ? options[\"replacer\"] : null;\n    this.implicitTypes = this.schema.compiledImplicit;\n    this.explicitTypes = this.schema.compiledExplicit;\n    this.tag = null;\n    this.result = \"\";\n    this.duplicates = [];\n    this.usedDuplicates = null;\n}\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n    var ind = common.repeat(\" \", spaces), position = 0, next = -1, result = \"\", line, length = string.length;\n    while(position < length){\n        next = string.indexOf(\"\\n\", position);\n        if (next === -1) {\n            line = string.slice(position);\n            position = length;\n        } else {\n            line = string.slice(position, next + 1);\n            position = next + 1;\n        }\n        if (line.length && line !== \"\\n\") result += ind;\n        result += line;\n    }\n    return result;\n}\nfunction generateNextLine(state, level) {\n    return \"\\n\" + common.repeat(\" \", state.indent * level);\n}\nfunction testImplicitResolving(state, str) {\n    var index, length, type;\n    for(index = 0, length = state.implicitTypes.length; index < length; index += 1){\n        type = state.implicitTypes[index];\n        if (type.resolve(str)) {\n            return true;\n        }\n    }\n    return false;\n}\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n    return c === CHAR_SPACE || c === CHAR_TAB;\n}\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n    return 0x00020 <= c && c <= 0x00007E || 0x000A1 <= c && c <= 0x00D7FF && c !== 0x2028 && c !== 0x2029 || 0x0E000 <= c && c <= 0x00FFFD && c !== CHAR_BOM || 0x10000 <= c && c <= 0x10FFFF;\n}\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char  ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n    return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;\n}\n// [127]  ns-plain-safe(c) ::= c = flow-out  ⇒ ns-plain-safe-out\n//                             c = flow-in   ⇒ ns-plain-safe-in\n//                             c = block-key ⇒ ns-plain-safe-out\n//                             c = flow-key  ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129]  ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130]  ns-plain-char(c) ::=  ( ns-plain-safe(c) - “:” - “#” )\n//                            | ( /* An ns-char preceding */ “#” )\n//                            | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n    var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n    var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n    return(// ns-plain-safe\n    (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP // false on '#'\n     && !(prev === CHAR_COLON && !cIsNsChar // false on ': '\n    ) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP // change to true on '[^ ]#'\n     || prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n    // Uses a subset of ns-char - c-indicator\n    // where ns-char = nb-char - s-white.\n    // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n    return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) // - s-white\n     && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;\n}\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n    // just not whitespace or colon, it will be checked to be plain character later\n    return !isWhitespace(c) && c !== CHAR_COLON;\n}\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n    var first = string.charCodeAt(pos), second;\n    if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n        second = string.charCodeAt(pos + 1);\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n            // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n    }\n    return first;\n}\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n    var leadingSpaceRe = /^\\n* /;\n    return leadingSpaceRe.test(string);\n}\nvar STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5;\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n//    STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n//    STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n//    STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {\n    var i;\n    var char = 0;\n    var prevChar = null;\n    var hasLineBreak = false;\n    var hasFoldableLine = false; // only checked if shouldTrackWidth\n    var shouldTrackWidth = lineWidth !== -1;\n    var previousLineBreak = -1; // count the first line correctly\n    var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));\n    if (singleLineOnly || forceQuotes) {\n        // Case: no block styles.\n        // Check for disallowed characters to rule out plain and single.\n        for(i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n            char = codePointAt(string, i);\n            if (!isPrintable(char)) {\n                return STYLE_DOUBLE;\n            }\n            plain = plain && isPlainSafe(char, prevChar, inblock);\n            prevChar = char;\n        }\n    } else {\n        // Case: block styles permitted.\n        for(i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n            char = codePointAt(string, i);\n            if (char === CHAR_LINE_FEED) {\n                hasLineBreak = true;\n                // Check if any line can be folded.\n                if (shouldTrackWidth) {\n                    hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented.\n                    i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n                    previousLineBreak = i;\n                }\n            } else if (!isPrintable(char)) {\n                return STYLE_DOUBLE;\n            }\n            plain = plain && isPlainSafe(char, prevChar, inblock);\n            prevChar = char;\n        }\n        // in case the end is missing a \\n\n        hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== \" \";\n    }\n    // Although every style can represent \\n without escaping, prefer block styles\n    // for multiline, since they're more readable and they don't add empty lines.\n    // Also prefer folding a super-long line.\n    if (!hasLineBreak && !hasFoldableLine) {\n        // Strings interpretable as another type have to be quoted;\n        // e.g. the string 'true' vs. the boolean true.\n        if (plain && !forceQuotes && !testAmbiguousType(string)) {\n            return STYLE_PLAIN;\n        }\n        return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n    }\n    // Edge case: block indentation indicator can only have one digit.\n    if (indentPerLevel > 9 && needIndentIndicator(string)) {\n        return STYLE_DOUBLE;\n    }\n    // At this point we know block styles are valid.\n    // Prefer literal style unless we want to fold.\n    if (!forceQuotes) {\n        return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n    }\n    return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n//  since the dumper adds its own newline. This always works:\n//    • No ending newline => unaffected; already using strip \"-\" chomping.\n//    • Ending newline    => removed then restored.\n//  Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n    state.dump = function() {\n        if (string.length === 0) {\n            return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n        }\n        if (!state.noCompatMode) {\n            if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n                return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"' + string + '\"' : \"'\" + string + \"'\";\n            }\n        }\n        var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n        // As indentation gets deeper, let the width decrease monotonically\n        // to the lower bound min(state.lineWidth, 40).\n        // Note that this implies\n        //  state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n        //  state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n        // This behaves better than a constant minimum width which disallows narrower options,\n        // or an indent threshold which causes the width to suddenly increase.\n        var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n        // Without knowing if keys are implicit/explicit, assume implicit for safety.\n        var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;\n        function testAmbiguity(string) {\n            return testImplicitResolving(state, string);\n        }\n        switch(chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)){\n            case STYLE_PLAIN:\n                return string;\n            case STYLE_SINGLE:\n                return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n            case STYLE_LITERAL:\n                return \"|\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));\n            case STYLE_FOLDED:\n                return \">\" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n            case STYLE_DOUBLE:\n                return '\"' + escapeString(string) + '\"';\n            default:\n                throw new exception(\"impossible error: invalid scalar style\");\n        }\n    }();\n}\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n    var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : \"\";\n    // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n    var clip = string[string.length - 1] === \"\\n\";\n    var keep = clip && (string[string.length - 2] === \"\\n\" || string === \"\\n\");\n    var chomp = keep ? \"+\" : clip ? \"\" : \"-\";\n    return indentIndicator + chomp + \"\\n\";\n}\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n    return string[string.length - 1] === \"\\n\" ? string.slice(0, -1) : string;\n}\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n    // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n    // unless they're before or after a more-indented line, or at the very\n    // beginning or end, in which case $k$ maps to $k$.\n    // Therefore, parse each chunk as newline(s) followed by a content line.\n    var lineRe = /(\\n+)([^\\n]*)/g;\n    // first line (possibly an empty line)\n    var result = function() {\n        var nextLF = string.indexOf(\"\\n\");\n        nextLF = nextLF !== -1 ? nextLF : string.length;\n        lineRe.lastIndex = nextLF;\n        return foldLine(string.slice(0, nextLF), width);\n    }();\n    // If we haven't reached the first content line yet, don't add an extra \\n.\n    var prevMoreIndented = string[0] === \"\\n\" || string[0] === \" \";\n    var moreIndented;\n    // rest of the lines\n    var match;\n    while(match = lineRe.exec(string)){\n        var prefix = match[1], line = match[2];\n        moreIndented = line[0] === \" \";\n        result += prefix + (!prevMoreIndented && !moreIndented && line !== \"\" ? \"\\n\" : \"\") + foldLine(line, width);\n        prevMoreIndented = moreIndented;\n    }\n    return result;\n}\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n    if (line === \"\" || line[0] === \" \") return line;\n    // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n    var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n    var match;\n    // start is an inclusive index. end, curr, and next are exclusive.\n    var start = 0, end, curr = 0, next = 0;\n    var result = \"\";\n    // Invariants: 0 <= start <= length-1.\n    //   0 <= curr <= next <= max(0, length-2). curr - start <= width.\n    // Inside the loop:\n    //   A match implies length >= 2, so curr and next are <= length-2.\n    while(match = breakRe.exec(line)){\n        next = match.index;\n        // maintain invariant: curr - start <= width\n        if (next - start > width) {\n            end = curr > start ? curr : next; // derive end <= length-2\n            result += \"\\n\" + line.slice(start, end);\n            // skip the space that was output as \\n\n            start = end + 1; // derive start <= length-1\n        }\n        curr = next;\n    }\n    // By the invariants, start <= length-1, so there is something left over.\n    // It is either the whole string or a part starting from non-whitespace.\n    result += \"\\n\";\n    // Insert a break if the remainder is too long and there is a break available.\n    if (line.length - start > width && curr > start) {\n        result += line.slice(start, curr) + \"\\n\" + line.slice(curr + 1);\n    } else {\n        result += line.slice(start);\n    }\n    return result.slice(1); // drop extra \\n joiner\n}\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n    var result = \"\";\n    var char = 0;\n    var escapeSeq;\n    for(var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++){\n        char = codePointAt(string, i);\n        escapeSeq = ESCAPE_SEQUENCES[char];\n        if (!escapeSeq && isPrintable(char)) {\n            result += string[i];\n            if (char >= 0x10000) result += string[i + 1];\n        } else {\n            result += escapeSeq || encodeHex(char);\n        }\n    }\n    return result;\n}\nfunction writeFlowSequence(state, level, object) {\n    var _result = \"\", _tag = state.tag, index, length, value;\n    for(index = 0, length = object.length; index < length; index += 1){\n        value = object[index];\n        if (state.replacer) {\n            value = state.replacer.call(object, String(index), value);\n        }\n        // Write only valid elements, put null instead of invalid elements.\n        if (writeNode(state, level, value, false, false) || typeof value === \"undefined\" && writeNode(state, level, null, false, false)) {\n            if (_result !== \"\") _result += \",\" + (!state.condenseFlow ? \" \" : \"\");\n            _result += state.dump;\n        }\n    }\n    state.tag = _tag;\n    state.dump = \"[\" + _result + \"]\";\n}\nfunction writeBlockSequence(state, level, object, compact) {\n    var _result = \"\", _tag = state.tag, index, length, value;\n    for(index = 0, length = object.length; index < length; index += 1){\n        value = object[index];\n        if (state.replacer) {\n            value = state.replacer.call(object, String(index), value);\n        }\n        // Write only valid elements, put null instead of invalid elements.\n        if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === \"undefined\" && writeNode(state, level + 1, null, true, true, false, true)) {\n            if (!compact || _result !== \"\") {\n                _result += generateNextLine(state, level);\n            }\n            if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n                _result += \"-\";\n            } else {\n                _result += \"- \";\n            }\n            _result += state.dump;\n        }\n    }\n    state.tag = _tag;\n    state.dump = _result || \"[]\"; // Empty sequence if no valid values.\n}\nfunction writeFlowMapping(state, level, object) {\n    var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;\n    for(index = 0, length = objectKeyList.length; index < length; index += 1){\n        pairBuffer = \"\";\n        if (_result !== \"\") pairBuffer += \", \";\n        if (state.condenseFlow) pairBuffer += '\"';\n        objectKey = objectKeyList[index];\n        objectValue = object[objectKey];\n        if (state.replacer) {\n            objectValue = state.replacer.call(object, objectKey, objectValue);\n        }\n        if (!writeNode(state, level, objectKey, false, false)) {\n            continue; // Skip this pair because of invalid key;\n        }\n        if (state.dump.length > 1024) pairBuffer += \"? \";\n        pairBuffer += state.dump + (state.condenseFlow ? '\"' : \"\") + \":\" + (state.condenseFlow ? \"\" : \" \");\n        if (!writeNode(state, level, objectValue, false, false)) {\n            continue; // Skip this pair because of invalid value.\n        }\n        pairBuffer += state.dump;\n        // Both key and value are valid.\n        _result += pairBuffer;\n    }\n    state.tag = _tag;\n    state.dump = \"{\" + _result + \"}\";\n}\nfunction writeBlockMapping(state, level, object, compact) {\n    var _result = \"\", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;\n    // Allow sorting keys so that the output file is deterministic\n    if (state.sortKeys === true) {\n        // Default sorting\n        objectKeyList.sort();\n    } else if (typeof state.sortKeys === \"function\") {\n        // Custom sort function\n        objectKeyList.sort(state.sortKeys);\n    } else if (state.sortKeys) {\n        // Something is wrong\n        throw new exception(\"sortKeys must be a boolean or a function\");\n    }\n    for(index = 0, length = objectKeyList.length; index < length; index += 1){\n        pairBuffer = \"\";\n        if (!compact || _result !== \"\") {\n            pairBuffer += generateNextLine(state, level);\n        }\n        objectKey = objectKeyList[index];\n        objectValue = object[objectKey];\n        if (state.replacer) {\n            objectValue = state.replacer.call(object, objectKey, objectValue);\n        }\n        if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n            continue; // Skip this pair because of invalid key.\n        }\n        explicitPair = state.tag !== null && state.tag !== \"?\" || state.dump && state.dump.length > 1024;\n        if (explicitPair) {\n            if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n                pairBuffer += \"?\";\n            } else {\n                pairBuffer += \"? \";\n            }\n        }\n        pairBuffer += state.dump;\n        if (explicitPair) {\n            pairBuffer += generateNextLine(state, level);\n        }\n        if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n            continue; // Skip this pair because of invalid value.\n        }\n        if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n            pairBuffer += \":\";\n        } else {\n            pairBuffer += \": \";\n        }\n        pairBuffer += state.dump;\n        // Both key and value are valid.\n        _result += pairBuffer;\n    }\n    state.tag = _tag;\n    state.dump = _result || \"{}\"; // Empty mapping if no valid pairs.\n}\nfunction detectType(state, object, explicit) {\n    var _result, typeList, index, length, type, style;\n    typeList = explicit ? state.explicitTypes : state.implicitTypes;\n    for(index = 0, length = typeList.length; index < length; index += 1){\n        type = typeList[index];\n        if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === \"object\" && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {\n            if (explicit) {\n                if (type.multi && type.representName) {\n                    state.tag = type.representName(object);\n                } else {\n                    state.tag = type.tag;\n                }\n            } else {\n                state.tag = \"?\";\n            }\n            if (type.represent) {\n                style = state.styleMap[type.tag] || type.defaultStyle;\n                if (_toString.call(type.represent) === \"[object Function]\") {\n                    _result = type.represent(object, style);\n                } else if (_hasOwnProperty.call(type.represent, style)) {\n                    _result = type.represent[style](object, style);\n                } else {\n                    throw new exception(\"!<\" + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n                }\n                state.dump = _result;\n            }\n            return true;\n        }\n    }\n    return false;\n}\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n    state.tag = null;\n    state.dump = object;\n    if (!detectType(state, object, false)) {\n        detectType(state, object, true);\n    }\n    var type = _toString.call(state.dump);\n    var inblock = block;\n    var tagStr;\n    if (block) {\n        block = state.flowLevel < 0 || state.flowLevel > level;\n    }\n    var objectOrArray = type === \"[object Object]\" || type === \"[object Array]\", duplicateIndex, duplicate;\n    if (objectOrArray) {\n        duplicateIndex = state.duplicates.indexOf(object);\n        duplicate = duplicateIndex !== -1;\n    }\n    if (state.tag !== null && state.tag !== \"?\" || duplicate || state.indent !== 2 && level > 0) {\n        compact = false;\n    }\n    if (duplicate && state.usedDuplicates[duplicateIndex]) {\n        state.dump = \"*ref_\" + duplicateIndex;\n    } else {\n        if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n            state.usedDuplicates[duplicateIndex] = true;\n        }\n        if (type === \"[object Object]\") {\n            if (block && Object.keys(state.dump).length !== 0) {\n                writeBlockMapping(state, level, state.dump, compact);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + state.dump;\n                }\n            } else {\n                writeFlowMapping(state, level, state.dump);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n                }\n            }\n        } else if (type === \"[object Array]\") {\n            if (block && state.dump.length !== 0) {\n                if (state.noArrayIndent && !isblockseq && level > 0) {\n                    writeBlockSequence(state, level - 1, state.dump, compact);\n                } else {\n                    writeBlockSequence(state, level, state.dump, compact);\n                }\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + state.dump;\n                }\n            } else {\n                writeFlowSequence(state, level, state.dump);\n                if (duplicate) {\n                    state.dump = \"&ref_\" + duplicateIndex + \" \" + state.dump;\n                }\n            }\n        } else if (type === \"[object String]\") {\n            if (state.tag !== \"?\") {\n                writeScalar(state, state.dump, level, iskey, inblock);\n            }\n        } else if (type === \"[object Undefined]\") {\n            return false;\n        } else {\n            if (state.skipInvalid) return false;\n            throw new exception(\"unacceptable kind of an object to dump \" + type);\n        }\n        if (state.tag !== null && state.tag !== \"?\") {\n            // Need to encode all characters except those allowed by the spec:\n            //\n            // [35] ns-dec-digit    ::=  [#x30-#x39] /* 0-9 */\n            // [36] ns-hex-digit    ::=  ns-dec-digit\n            //                         | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n            // [37] ns-ascii-letter ::=  [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n            // [38] ns-word-char    ::=  ns-dec-digit | ns-ascii-letter | “-”\n            // [39] ns-uri-char     ::=  “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n            //                         | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n            //                         | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n            //\n            // Also need to encode '!' because it has special meaning (end of tag prefix).\n            //\n            tagStr = encodeURI(state.tag[0] === \"!\" ? state.tag.slice(1) : state.tag).replace(/!/g, \"%21\");\n            if (state.tag[0] === \"!\") {\n                tagStr = \"!\" + tagStr;\n            } else if (tagStr.slice(0, 18) === \"tag:yaml.org,2002:\") {\n                tagStr = \"!!\" + tagStr.slice(18);\n            } else {\n                tagStr = \"!<\" + tagStr + \">\";\n            }\n            state.dump = tagStr + \" \" + state.dump;\n        }\n    }\n    return true;\n}\nfunction getDuplicateReferences(object, state) {\n    var objects = [], duplicatesIndexes = [], index, length;\n    inspectNode(object, objects, duplicatesIndexes);\n    for(index = 0, length = duplicatesIndexes.length; index < length; index += 1){\n        state.duplicates.push(objects[duplicatesIndexes[index]]);\n    }\n    state.usedDuplicates = new Array(length);\n}\nfunction inspectNode(object, objects, duplicatesIndexes) {\n    var objectKeyList, index, length;\n    if (object !== null && typeof object === \"object\") {\n        index = objects.indexOf(object);\n        if (index !== -1) {\n            if (duplicatesIndexes.indexOf(index) === -1) {\n                duplicatesIndexes.push(index);\n            }\n        } else {\n            objects.push(object);\n            if (Array.isArray(object)) {\n                for(index = 0, length = object.length; index < length; index += 1){\n                    inspectNode(object[index], objects, duplicatesIndexes);\n                }\n            } else {\n                objectKeyList = Object.keys(object);\n                for(index = 0, length = objectKeyList.length; index < length; index += 1){\n                    inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n                }\n            }\n        }\n    }\n}\nfunction dump$1(input, options) {\n    options = options || {};\n    var state = new State(options);\n    if (!state.noRefs) getDuplicateReferences(input, state);\n    var value = input;\n    if (state.replacer) {\n        value = state.replacer.call({\n            \"\": value\n        }, \"\", value);\n    }\n    if (writeNode(state, 0, value, true, true)) return state.dump + \"\\n\";\n    return \"\";\n}\nvar dump_1 = dump$1;\nvar dumper = {\n    dump: dump_1\n};\nfunction renamed(from, to) {\n    return function() {\n        throw new Error(\"Function yaml.\" + from + \" is removed in js-yaml 4. \" + \"Use yaml.\" + to + \" instead, which is now safe by default.\");\n    };\n}\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n// Re-export all types in case user wants to create custom schema\nvar types = {\n    binary: binary,\n    float: float,\n    map: map,\n    null: _null,\n    pairs: pairs,\n    set: set,\n    timestamp: timestamp,\n    bool: bool,\n    int: int,\n    merge: merge,\n    omap: omap,\n    seq: seq,\n    str: str\n};\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed(\"safeLoad\", \"load\");\nvar safeLoadAll = renamed(\"safeLoadAll\", \"loadAll\");\nvar safeDump = renamed(\"safeDump\", \"dump\");\nvar jsYaml = {\n    Type: Type,\n    Schema: Schema,\n    FAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n    JSON_SCHEMA: JSON_SCHEMA,\n    CORE_SCHEMA: CORE_SCHEMA,\n    DEFAULT_SCHEMA: DEFAULT_SCHEMA,\n    load: load,\n    loadAll: loadAll,\n    dump: dump,\n    YAMLException: YAMLException,\n    types: types,\n    safeLoad: safeLoad,\n    safeLoadAll: safeLoadAll,\n    safeDump: safeDump\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (jsYaml);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvanMteWFtbC9kaXN0L2pzLXlhbWwubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlFQUFpRSxHQUNqRSxTQUFTQSxVQUFVQyxPQUFPO0lBQ3hCLE9BQU8sT0FBUUEsWUFBWSxlQUFpQkEsWUFBWTtBQUMxRDtBQUdBLFNBQVNDLFNBQVNELE9BQU87SUFDdkIsT0FBTyxPQUFRQSxZQUFZLFlBQWNBLFlBQVk7QUFDdkQ7QUFHQSxTQUFTRSxRQUFRQyxRQUFRO0lBQ3ZCLElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0YsV0FBVyxPQUFPQTtTQUMvQixJQUFJSixVQUFVSSxXQUFXLE9BQU8sRUFBRTtJQUV2QyxPQUFPO1FBQUVBO0tBQVU7QUFDckI7QUFHQSxTQUFTRyxPQUFPQyxNQUFNLEVBQUVDLE1BQU07SUFDNUIsSUFBSUMsT0FBT0MsUUFBUUMsS0FBS0M7SUFFeEIsSUFBSUosUUFBUTtRQUNWSSxhQUFhQyxPQUFPQyxJQUFJLENBQUNOO1FBRXpCLElBQUtDLFFBQVEsR0FBR0MsU0FBU0UsV0FBV0YsTUFBTSxFQUFFRCxRQUFRQyxRQUFRRCxTQUFTLEVBQUc7WUFDdEVFLE1BQU1DLFVBQVUsQ0FBQ0gsTUFBTTtZQUN2QkYsTUFBTSxDQUFDSSxJQUFJLEdBQUdILE1BQU0sQ0FBQ0csSUFBSTtRQUMzQjtJQUNGO0lBRUEsT0FBT0o7QUFDVDtBQUdBLFNBQVNRLE9BQU9DLE1BQU0sRUFBRUMsS0FBSztJQUMzQixJQUFJQyxTQUFTLElBQUlDO0lBRWpCLElBQUtBLFFBQVEsR0FBR0EsUUFBUUYsT0FBT0UsU0FBUyxFQUFHO1FBQ3pDRCxVQUFVRjtJQUNaO0lBRUEsT0FBT0U7QUFDVDtBQUdBLFNBQVNFLGVBQWVDLE1BQU07SUFDNUIsT0FBTyxXQUFZLEtBQU9DLE9BQU9DLGlCQUFpQixLQUFLLElBQUlGO0FBQzdEO0FBR0EsSUFBSUcsY0FBbUJ6QjtBQUN2QixJQUFJMEIsYUFBbUJ4QjtBQUN2QixJQUFJeUIsWUFB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O0FBQ2pFLElBQUl3Z0IsUUFBUTtJQUNWelksUUFBV0E7SUFDWG9CLE9BQVdBO0lBQ1g1RixLQUFXQTtJQUNYa2QsTUFBV2xhO0lBQ1hpRyxPQUFXQTtJQUNYSSxLQUFXQTtJQUNYakMsV0FBV0E7SUFDWDNELE1BQVdBO0lBQ1hjLEtBQVdBO0lBQ1grQyxPQUFXQTtJQUNYdUIsTUFBV0E7SUFDWG5HLEtBQVdBO0lBQ1huRSxLQUFXQTtBQUNiO0FBRUEsdUNBQXVDO0FBQ3ZDLElBQUk0ZSxXQUFzQlosUUFBUSxZQUFZO0FBQzlDLElBQUlhLGNBQXNCYixRQUFRLGVBQWU7QUFDakQsSUFBSWMsV0FBc0JkLFFBQVEsWUFBWTtBQUU5QyxJQUFJZSxTQUFTO0lBQ1paLE1BQU1BO0lBQ05DLFFBQVFBO0lBQ1JDLGlCQUFpQkE7SUFDakJDLGFBQWFBO0lBQ2JDLGFBQWFBO0lBQ2JDLGdCQUFnQkE7SUFDaEJqSixNQUFNQTtJQUNORCxTQUFTQTtJQUNUNEYsTUFBTUE7SUFDTnVELGVBQWVBO0lBQ2ZDLE9BQU9BO0lBQ1BFLFVBQVVBO0lBQ1ZDLGFBQWFBO0lBQ2JDLFVBQVVBO0FBQ1g7QUFFQSxpRUFBZUMsTUFBTUEsRUFBQztBQUN5SSIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL2pzLXlhbWwvZGlzdC9qcy15YW1sLm1qcz83Yzc1Il0sInNvdXJjZXNDb250ZW50IjpbIlxuLyohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqL1xuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHx8IChzdWJqZWN0ID09PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICdvYmplY3QnKSAmJiAoc3ViamVjdCAhPT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gdG9BcnJheShzZXF1ZW5jZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTtcbiAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKG51bWJlciA9PT0gMCkgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxudmFyIGlzTm90aGluZ18xICAgICAgPSBpc05vdGhpbmc7XG52YXIgaXNPYmplY3RfMSAgICAgICA9IGlzT2JqZWN0O1xudmFyIHRvQXJyYXlfMSAgICAgICAgPSB0b0FycmF5O1xudmFyIHJlcGVhdF8xICAgICAgICAgPSByZXBlYXQ7XG52YXIgaXNOZWdhdGl2ZVplcm9fMSA9IGlzTmVnYXRpdmVaZXJvO1xudmFyIGV4dGVuZF8xICAgICAgICAgPSBleHRlbmQ7XG5cbnZhciBjb21tb24gPSB7XG5cdGlzTm90aGluZzogaXNOb3RoaW5nXzEsXG5cdGlzT2JqZWN0OiBpc09iamVjdF8xLFxuXHR0b0FycmF5OiB0b0FycmF5XzEsXG5cdHJlcGVhdDogcmVwZWF0XzEsXG5cdGlzTmVnYXRpdmVaZXJvOiBpc05lZ2F0aXZlWmVyb18xLFxuXHRleHRlbmQ6IGV4dGVuZF8xXG59O1xuXG4vLyBZQU1MIGVycm9yIGNsYXNzLiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0NTg5ODRcblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcihleGNlcHRpb24sIGNvbXBhY3QpIHtcbiAgdmFyIHdoZXJlID0gJycsIG1lc3NhZ2UgPSBleGNlcHRpb24ucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJztcblxuICBpZiAoIWV4Y2VwdGlvbi5tYXJrKSByZXR1cm4gbWVzc2FnZTtcblxuICBpZiAoZXhjZXB0aW9uLm1hcmsubmFtZSkge1xuICAgIHdoZXJlICs9ICdpbiBcIicgKyBleGNlcHRpb24ubWFyay5uYW1lICsgJ1wiICc7XG4gIH1cblxuICB3aGVyZSArPSAnKCcgKyAoZXhjZXB0aW9uLm1hcmsubGluZSArIDEpICsgJzonICsgKGV4Y2VwdGlvbi5tYXJrLmNvbHVtbiArIDEpICsgJyknO1xuXG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24ubWFyay5zbmlwcGV0KSB7XG4gICAgd2hlcmUgKz0gJ1xcblxcbicgKyBleGNlcHRpb24ubWFyay5zbmlwcGV0O1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2UgKyAnICcgKyB3aGVyZTtcbn1cblxuXG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuXG4gIC8vIEluY2x1ZGUgc3RhY2sgdHJhY2UgaW4gZXJyb3Igb2JqZWN0XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIC8vIENocm9tZSBhbmQgTm9kZUpTXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gRkYsIElFIDEwKyBhbmQgU2FmYXJpIDYrLiBGYWxsYmFjayBmb3Igb3RoZXJzXG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2sgfHwgJyc7XG4gIH1cbn1cblxuXG4vLyBJbmhlcml0IGZyb20gRXJyb3JcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbiQxO1xuXG5cbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgZm9ybWF0RXJyb3IodGhpcywgY29tcGFjdCk7XG59O1xuXG5cbnZhciBleGNlcHRpb24gPSBZQU1MRXhjZXB0aW9uJDE7XG5cbi8vIGdldCBzbmlwcGV0IGZvciBhIHNpbmdsZSBsaW5lLCByZXNwZWN0aW5nIG1heExlbmd0aFxuZnVuY3Rpb24gZ2V0TGluZShidWZmZXIsIGxpbmVTdGFydCwgbGluZUVuZCwgcG9zaXRpb24sIG1heExpbmVMZW5ndGgpIHtcbiAgdmFyIGhlYWQgPSAnJztcbiAgdmFyIHRhaWwgPSAnJztcbiAgdmFyIG1heEhhbGZMZW5ndGggPSBNYXRoLmZsb29yKG1heExpbmVMZW5ndGggLyAyKSAtIDE7XG5cbiAgaWYgKHBvc2l0aW9uIC0gbGluZVN0YXJ0ID4gbWF4SGFsZkxlbmd0aCkge1xuICAgIGhlYWQgPSAnIC4uLiAnO1xuICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uIC0gbWF4SGFsZkxlbmd0aCArIGhlYWQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGxpbmVFbmQgLSBwb3NpdGlvbiA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICB0YWlsID0gJyAuLi4nO1xuICAgIGxpbmVFbmQgPSBwb3NpdGlvbiArIG1heEhhbGZMZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyOiBoZWFkICsgYnVmZmVyLnNsaWNlKGxpbmVTdGFydCwgbGluZUVuZCkucmVwbGFjZSgvXFx0L2csICfihpInKSArIHRhaWwsXG4gICAgcG9zOiBwb3NpdGlvbiAtIGxpbmVTdGFydCArIGhlYWQubGVuZ3RoIC8vIHJlbGF0aXZlIHBvc2l0aW9uXG4gIH07XG59XG5cblxuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoJyAnLCBtYXggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG5mdW5jdGlvbiBtYWtlU25pcHBldChtYXJrLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMgfHwgbnVsbCk7XG5cbiAgaWYgKCFtYXJrLmJ1ZmZlcikgcmV0dXJuIG51bGw7XG5cbiAgaWYgKCFvcHRpb25zLm1heExlbmd0aCkgb3B0aW9ucy5tYXhMZW5ndGggPSA3OTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCAgICAgICE9PSAnbnVtYmVyJykgb3B0aW9ucy5pbmRlbnQgICAgICA9IDE7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5saW5lc0JlZm9yZSAhPT0gJ251bWJlcicpIG9wdGlvbnMubGluZXNCZWZvcmUgPSAzO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNBZnRlciAgIT09ICdudW1iZXInKSBvcHRpb25zLmxpbmVzQWZ0ZXIgID0gMjtcblxuICB2YXIgcmUgPSAvXFxyP1xcbnxcXHJ8XFwwL2c7XG4gIHZhciBsaW5lU3RhcnRzID0gWyAwIF07XG4gIHZhciBsaW5lRW5kcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBmb3VuZExpbmVObyA9IC0xO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZS5leGVjKG1hcmsuYnVmZmVyKSkpIHtcbiAgICBsaW5lRW5kcy5wdXNoKG1hdGNoLmluZGV4KTtcbiAgICBsaW5lU3RhcnRzLnB1c2gobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgaWYgKG1hcmsucG9zaXRpb24gPD0gbWF0Y2guaW5kZXggJiYgZm91bmRMaW5lTm8gPCAwKSB7XG4gICAgICBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMjtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRMaW5lTm8gPCAwKSBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcblxuICB2YXIgcmVzdWx0ID0gJycsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNCZWZvcmU7IGkrKykge1xuICAgIGlmIChmb3VuZExpbmVObyAtIGkgPCAwKSBicmVhaztcbiAgICBsaW5lID0gZ2V0TGluZShcbiAgICAgIG1hcmsuYnVmZmVyLFxuICAgICAgbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldLFxuICAgICAgbGluZUVuZHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIG1hcmsucG9zaXRpb24gLSAobGluZVN0YXJ0c1tmb3VuZExpbmVOb10gLSBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vIC0gaV0pLFxuICAgICAgbWF4TGluZUxlbmd0aFxuICAgICk7XG4gICAgcmVzdWx0ID0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgLSBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbicgKyByZXN1bHQ7XG4gIH1cblxuICBsaW5lID0gZ2V0TGluZShtYXJrLmJ1ZmZlciwgbGluZVN0YXJ0c1tmb3VuZExpbmVOb10sIGxpbmVFbmRzW2ZvdW5kTGluZU5vXSwgbWFyay5wb3NpdGlvbiwgbWF4TGluZUxlbmd0aCk7XG4gIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KCcgJywgb3B0aW9ucy5pbmRlbnQpICsgcGFkU3RhcnQoKG1hcmsubGluZSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgK1xuICAgICcgfCAnICsgbGluZS5zdHIgKyAnXFxuJztcbiAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJy0nLCBvcHRpb25zLmluZGVudCArIGxpbmVOb0xlbmd0aCArIDMgKyBsaW5lLnBvcykgKyAnXicgKyAnXFxuJztcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNBZnRlcjsgaSsrKSB7XG4gICAgaWYgKGZvdW5kTGluZU5vICsgaSA+PSBsaW5lRW5kcy5sZW5ndGgpIGJyZWFrO1xuICAgIGxpbmUgPSBnZXRMaW5lKFxuICAgICAgbWFyay5idWZmZXIsXG4gICAgICBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vICsgaV0sXG4gICAgICBsaW5lRW5kc1tmb3VuZExpbmVObyArIGldLFxuICAgICAgbWFyay5wb3NpdGlvbiAtIChsaW5lU3RhcnRzW2ZvdW5kTGluZU5vXSAtIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gKyBpXSksXG4gICAgICBtYXhMaW5lTGVuZ3RoXG4gICAgKTtcbiAgICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbiQvLCAnJyk7XG59XG5cblxudmFyIHNuaXBwZXQgPSBtYWtlU25pcHBldDtcblxudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgJ2tpbmQnLFxuICAnbXVsdGknLFxuICAncmVzb2x2ZScsXG4gICdjb25zdHJ1Y3QnLFxuICAnaW5zdGFuY2VPZicsXG4gICdwcmVkaWNhdGUnLFxuICAncmVwcmVzZW50JyxcbiAgJ3JlcHJlc2VudE5hbWUnLFxuICAnZGVmYXVsdFN0eWxlJyxcbiAgJ3N0eWxlQWxpYXNlcydcbl07XG5cbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gICdzY2FsYXInLFxuICAnc2VxdWVuY2UnLFxuICAnbWFwcGluZydcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAobWFwICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgbWFwW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gVHlwZSQxKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMub3B0aW9ucyAgICAgICA9IG9wdGlvbnM7IC8vIGtlZXAgb3JpZ2luYWwgb3B0aW9ucyBpbiBjYXNlIHVzZXIgd2FudHMgdG8gZXh0ZW5kIHRoaXMgdHlwZSBsYXRlclxuICB0aGlzLnRhZyAgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudE5hbWUgPSBvcHRpb25zWydyZXByZXNlbnROYW1lJ10gfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gIHx8IG51bGw7XG4gIHRoaXMubXVsdGkgICAgICAgICA9IG9wdGlvbnNbJ211bHRpJ10gICAgICAgICB8fCBmYWxzZTtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG52YXIgdHlwZSA9IFR5cGUkMTtcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuKi9cblxuXG5cblxuXG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50VHlwZSkge1xuICAgIHZhciBuZXdJbmRleCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7XG4gICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmXG4gICAgICAgICAgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQgJiZcbiAgICAgICAgICBwcmV2aW91c1R5cGUubXVsdGkgPT09IGN1cnJlbnRUeXBlLm11bHRpKSB7XG5cbiAgICAgICAgbmV3SW5kZXggPSBwcmV2aW91c0luZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzdWx0W25ld0luZGV4XSA9IGN1cnJlbnRUeXBlO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBpbGVNYXAoLyogbGlzdHMuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgc2NhbGFyOiB7fSxcbiAgICAgICAgc2VxdWVuY2U6IHt9LFxuICAgICAgICBtYXBwaW5nOiB7fSxcbiAgICAgICAgZmFsbGJhY2s6IHt9LFxuICAgICAgICBtdWx0aToge1xuICAgICAgICAgIHNjYWxhcjogW10sXG4gICAgICAgICAgc2VxdWVuY2U6IFtdLFxuICAgICAgICAgIG1hcHBpbmc6IFtdLFxuICAgICAgICAgIGZhbGxiYWNrOiBbXVxuICAgICAgICB9XG4gICAgICB9LCBpbmRleCwgbGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tdWx0aSkge1xuICAgICAgcmVzdWx0Lm11bHRpW3R5cGUua2luZF0ucHVzaCh0eXBlKTtcbiAgICAgIHJlc3VsdC5tdWx0aVsnZmFsbGJhY2snXS5wdXNoKHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdHlwZS5raW5kXVt0eXBlLnRhZ10gPSByZXN1bHRbJ2ZhbGxiYWNrJ11bdHlwZS50YWddID0gdHlwZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBhcmd1bWVudHNbaW5kZXhdLmZvckVhY2goY29sbGVjdFR5cGUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gU2NoZW1hJDEoZGVmaW5pdGlvbikge1xuICByZXR1cm4gdGhpcy5leHRlbmQoZGVmaW5pdGlvbik7XG59XG5cblxuU2NoZW1hJDEucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZChkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcblxuICBpZiAoZGVmaW5pdGlvbiBpbnN0YW5jZW9mIHR5cGUpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHR5cGUpXG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKFsgdHlwZTEsIHR5cGUyLCAuLi4gXSlcbiAgICBleHBsaWNpdCA9IGV4cGxpY2l0LmNvbmNhdChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbi5pbXBsaWNpdCkgfHwgQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmV4cGxpY2l0KSkpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHsgZXhwbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSwgaW1wbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSB9KVxuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KSBpbXBsaWNpdCA9IGltcGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmltcGxpY2l0KTtcbiAgICBpZiAoZGVmaW5pdGlvbi5leHBsaWNpdCkgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5leHBsaWNpdCk7XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCAnICtcbiAgICAgICdvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pJyk7XG4gIH1cblxuICBpbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlJDEubG9hZEtpbmQgJiYgdHlwZSQxLmxvYWRLaW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUkMS5tdWx0aSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV4cGxpY2l0LmZvckVhY2goZnVuY3Rpb24gKHR5cGUkMSkge1xuICAgIGlmICghKHR5cGUkMSBpbnN0YW5jZW9mIHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEkMS5wcm90b3R5cGUpO1xuXG4gIHJlc3VsdC5pbXBsaWNpdCA9ICh0aGlzLmltcGxpY2l0IHx8IFtdKS5jb25jYXQoaW1wbGljaXQpO1xuICByZXN1bHQuZXhwbGljaXQgPSAodGhpcy5leHBsaWNpdCB8fCBbXSkuY29uY2F0KGV4cGxpY2l0KTtcblxuICByZXN1bHQuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgJ2ltcGxpY2l0Jyk7XG4gIHJlc3VsdC5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QocmVzdWx0LCAnZXhwbGljaXQnKTtcbiAgcmVzdWx0LmNvbXBpbGVkVHlwZU1hcCAgPSBjb21waWxlTWFwKHJlc3VsdC5jb21waWxlZEltcGxpY2l0LCByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxudmFyIHNjaGVtYSA9IFNjaGVtYSQxO1xuXG52YXIgc3RyID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogJyc7IH1cbn0pO1xuXG52YXIgc2VxID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsgfVxufSk7XG5cbnZhciBtYXAgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWFwJywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307IH1cbn0pO1xuXG52YXIgZmFpbHNhZmUgPSBuZXcgc2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICBzdHIsXG4gICAgc2VxLFxuICAgIG1hcFxuICBdXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gMSAmJiBkYXRhID09PSAnficpIHx8XG4gICAgICAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJ051bGwnIHx8IGRhdGEgPT09ICdOVUxMJykpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDtcbn1cblxudmFyIF9udWxsID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd+JzsgICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdudWxsJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOVUxMJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOdWxsJzsgfSxcbiAgICBlbXB0eTogICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcnOyAgICAgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICd0cnVlJyB8fCBkYXRhID09PSAnVHJ1ZScgfHwgZGF0YSA9PT0gJ1RSVUUnKSkgfHxcbiAgICAgICAgIChtYXggPT09IDUgJiYgKGRhdGEgPT09ICdmYWxzZScgfHwgZGF0YSA9PT0gJ0ZhbHNlJyB8fCBkYXRhID09PSAnRkFMU0UnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCb29sZWFuKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICd0cnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVFJVRSc7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG5cbnZhciBib29sID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIHByZWRpY2F0ZTogaXNCb29sZWFuLFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICd0cnVlJyA6ICdmYWxzZSc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVFJVRScgOiAnRkFMU0UnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RydWUnIDogJ0ZhbHNlJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gaXNIZXhDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB8fFxuICAgICAgICAgKCgweDQxLyogQSAqLyA8PSBjKSAmJiAoYyA8PSAweDQ2LyogRiAqLykpIHx8XG4gICAgICAgICAoKDB4NjEvKiBhICovIDw9IGMpICYmIChjIDw9IDB4NjYvKiBmICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzcvKiA3ICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgaGFzRGlnaXRzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gZGF0YVtpbmRleF07XG5cbiAgLy8gc2lnblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAvLyAwXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KSByZXR1cm4gdHJ1ZTtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG5cbiAgICAvLyBiYXNlIDIsIGJhc2UgOCwgYmFzZSAxNlxuXG4gICAgaWYgKGNoID09PSAnYicpIHtcbiAgICAgIC8vIGJhc2UgMlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAneCcpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAnXyc7XG4gICAgfVxuXG5cbiAgICBpZiAoY2ggPT09ICdvJykge1xuICAgICAgLy8gYmFzZSA4XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJhc2UgMTAgKGV4Y2VwdCAwKVxuXG4gIC8vIHZhbHVlIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgX2A7XG4gIGlmIChjaCA9PT0gJ18nKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNob3VsZCBoYXZlIGRpZ2l0cyBhbmQgc2hvdWxkIG5vdCBlbmQgd2l0aCBgX2BcbiAgaWYgKCFoYXNEaWdpdHMgfHwgY2ggPT09ICdfJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEsIHNpZ24gPSAxLCBjaDtcblxuICBpZiAodmFsdWUuaW5kZXhPZignXycpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXy9nLCAnJyk7XG4gIH1cblxuICBjaCA9IHZhbHVlWzBdO1xuXG4gIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICBpZiAoY2ggPT09ICctJykgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gMDtcblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ2InKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICBpZiAodmFsdWVbMV0gPT09ICd4JykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ28nKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlZ2VyKG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiZcbiAgICAgICAgIChvYmplY3QgJSAxID09PSAwICYmICFjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbnZhciBpbnQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6aW50Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiAgICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzBiJyArIG9iai50b1N0cmluZygyKSA6ICctMGInICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpOyB9LFxuICAgIG9jdGFsOiAgICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogPj0gMCA/ICcwbycgICsgb2JqLnRvU3RyaW5nKDgpIDogJy0wbycgICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOyB9LFxuICAgIGRlY2ltYWw6ICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmoudG9TdHJpbmcoMTApOyB9LFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqID49IDAgPyAnMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogICctMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2RlY2ltYWwnLFxuICBzdHlsZUFsaWFzZXM6IHtcbiAgICBiaW5hcnk6ICAgICAgWyAyLCAgJ2JpbicgXSxcbiAgICBvY3RhbDogICAgICAgWyA4LCAgJ29jdCcgXSxcbiAgICBkZWNpbWFsOiAgICAgWyAxMCwgJ2RlYycgXSxcbiAgICBoZXhhZGVjaW1hbDogWyAxNiwgJ2hleCcgXVxuICB9XG59KTtcblxudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gICdeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuMmU0LCAuMlxuICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuaW5mXG4gICd8Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKScgK1xuICAvLyAubmFuXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8XG4gICAgICAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2BcbiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbjtcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG5cbiAgaWYgKCcrLScuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcuaW5mJykge1xuICAgIHJldHVybiAoc2lnbiA9PT0gMSkgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJy5uYW4nKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUsIDEwKTtcbn1cblxuXG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcblxuICBpZiAoaXNOYU4ob2JqZWN0KSkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLm5hbic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5OQU4nO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuTmFOJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICctLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy0uSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLS5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiAnLTAuMCc7XG4gIH1cblxuICByZXMgPSBvYmplY3QudG9TdHJpbmcoMTApO1xuXG4gIC8vIEpTIHN0cmluZ2lmaWVyIGNhbiBidWlsZCBzY2llbnRpZmljIGZvcm1hdCB3aXRob3V0IGRvdHM6IDVlLTEwMCxcbiAgLy8gd2hpbGUgWUFNTCByZXF1cmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZSgnZScsICcuZScpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBOdW1iZXJdJykgJiZcbiAgICAgICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxudmFyIGZsb2F0ID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuXG52YXIganNvbiA9IGZhaWxzYWZlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgX251bGwsXG4gICAgYm9vbCxcbiAgICBpbnQsXG4gICAgZmxvYXRcbiAgXVxufSk7XG5cbnZhciBjb3JlID0ganNvbjtcblxudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldKSQnKTsgICAgICAgICAgICAgICAgICAgLy8gWzNdIGRheVxuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/JCcpOyAgICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxudmFyIHRpbWVzdGFtcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE1lcmdlKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICc8PCcgfHwgZGF0YSA9PT0gbnVsbDtcbn1cblxudmFyIG1lcmdlID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cblxuXG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gKGJpdGxlbiAlIDgpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHtcbiAgdmFyIGlkeCwgdGFpbGJpdHMsXG4gICAgICBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csICcnKSwgLy8gcmVtb3ZlIENSL0xGICYgcGFkZGluZyB0byBzaW1wbGlmeSBzY2FuXG4gICAgICBtYXggPSBpbnB1dC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQLFxuICAgICAgYml0cyA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgNCA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDYpIHwgbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDEwKSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDIpICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gNCkgJiAweEZGKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gICdbb2JqZWN0IFVpbnQ4QXJyYXldJztcbn1cblxudmFyIGJpbmFyeSA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnknLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xuXG52YXIgX2hhc093blByb3BlcnR5JDMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF90b1N0cmluZyQyICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmIChfdG9TdHJpbmckMi5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChwYWlyS2V5IGluIHBhaXIpIHtcbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkkMy5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7XG4gICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFpckhhc0tleSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sT21hcChkYXRhKSB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xufVxuXG52YXIgb21hcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xuXG52YXIgX3RvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChfdG9TdHJpbmckMS5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBbXTtcblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgcGFpcnMgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcblxuICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5JDIuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbnZhciBzZXQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2V0Jywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xuXG52YXIgX2RlZmF1bHQgPSBjb3JlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgdGltZXN0YW1wLFxuICAgIG1lcmdlXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgYmluYXJ5LFxuICAgIG9tYXAsXG4gICAgcGFpcnMsXG4gICAgc2V0XG4gIF1cbn0pO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4sbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG5cblxuXG5cblxuXG52YXIgX2hhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5cbnZhciBDT05URVhUX0ZMT1dfSU4gICA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCAgPSAyO1xudmFyIENPTlRFWFRfQkxPQ0tfSU4gID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG5cblxudmFyIENIT01QSU5HX0NMSVAgID0gMTtcbnZhciBDSE9NUElOR19TVFJJUCA9IDI7XG52YXIgQ0hPTVBJTkdfS0VFUCAgPSAzO1xuXG5cbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgICAgICAgICA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTICAgICAgID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFICAgICAgICAgICAgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xudmFyIFBBVFRFUk5fVEFHX1VSSSAgICAgICAgICAgICAgID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuXG5mdW5jdGlvbiBfY2xhc3Mob2JqKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsgfVxuXG5mdW5jdGlvbiBpc19FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MEEvKiBMRiAqLykgfHwgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fCAoYyA9PT0gMHgyMC8qIFNwYWNlICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBBLyogTEYgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gYyA9PT0gMHgyQy8qICwgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUIvKiBbICovIHx8XG4gICAgICAgICBjID09PSAweDVELyogXSAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3Qi8qIHsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4N0QvKiB9ICovO1xufVxuXG5mdW5jdGlvbiBmcm9tSGV4Q29kZShjKSB7XG4gIHZhciBsYztcblxuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG4gIGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKCgweDYxLyogYSAqLyA8PSBsYykgJiYgKGxjIDw9IDB4NjYvKiBmICovKSkge1xuICAgIHJldHVybiBsYyAtIDB4NjEgKyAxMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAweDc4LyogeCAqLykgeyByZXR1cm4gMjsgfVxuICBpZiAoYyA9PT0gMHg3NS8qIHUgKi8pIHsgcmV0dXJuIDQ7IH1cbiAgaWYgKGMgPT09IDB4NTUvKiBVICovKSB7IHJldHVybiA4OyB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbiAgcmV0dXJuIChjID09PSAweDMwLyogMCAqLykgPyAnXFx4MDAnIDpcbiAgICAgICAgKGMgPT09IDB4NjEvKiBhICovKSA/ICdcXHgwNycgOlxuICAgICAgICAoYyA9PT0gMHg2Mi8qIGIgKi8pID8gJ1xceDA4JyA6XG4gICAgICAgIChjID09PSAweDc0LyogdCAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4MDkvKiBUYWIgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDZFLyogbiAqLykgPyAnXFx4MEEnIDpcbiAgICAgICAgKGMgPT09IDB4NzYvKiB2ICovKSA/ICdcXHgwQicgOlxuICAgICAgICAoYyA9PT0gMHg2Ni8qIGYgKi8pID8gJ1xceDBDJyA6XG4gICAgICAgIChjID09PSAweDcyLyogciAqLykgPyAnXFx4MEQnIDpcbiAgICAgICAgKGMgPT09IDB4NjUvKiBlICovKSA/ICdcXHgxQicgOlxuICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSA/ICcgJyA6XG4gICAgICAgIChjID09PSAweDIyLyogXCIgKi8pID8gJ1xceDIyJyA6XG4gICAgICAgIChjID09PSAweDJGLyogLyAqLykgPyAnLycgOlxuICAgICAgICAoYyA9PT0gMHg1Qy8qIFxcICovKSA/ICdcXHg1QycgOlxuICAgICAgICAoYyA9PT0gMHg0RS8qIE4gKi8pID8gJ1xceDg1JyA6XG4gICAgICAgIChjID09PSAweDVGLyogXyAqLykgPyAnXFx4QTAnIDpcbiAgICAgICAgKGMgPT09IDB4NEMvKiBMICovKSA/ICdcXHUyMDI4JyA6XG4gICAgICAgIChjID09PSAweDUwLyogUCAqLykgPyAnXFx1MjAyOScgOiAnJztcbn1cblxuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgfVxuICAvLyBFbmNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyXG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiNDb2RlX3BvaW50c19VLjJCMDEwMDAwX3RvX1UuMkIxMEZGRkZcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgKChjIC0gMHgwMTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAoKGMgLSAweDAxMDAwMCkgJiAweDAzRkYpICsgMHhEQzAwXG4gICk7XG59XG5cbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOyAvLyBpbnRlZ2VyLCBmb3IgZmFzdCBhY2Nlc3NcbnZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cblxuXG5mdW5jdGlvbiBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICB0aGlzLmZpbGVuYW1lICA9IG9wdGlvbnNbJ2ZpbGVuYW1lJ10gIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hICAgID0gb3B0aW9uc1snc2NoZW1hJ10gICAgfHwgX2RlZmF1bHQ7XG4gIHRoaXMub25XYXJuaW5nID0gb3B0aW9uc1snb25XYXJuaW5nJ10gfHwgbnVsbDtcbiAgLy8gKEhpZGRlbikgUmVtb3ZlPyBtYWtlcyB0aGUgbG9hZGVyIHRvIGV4cGVjdCBZQU1MIDEuMSBkb2N1bWVudHNcbiAgLy8gaWYgc3VjaCBkb2N1bWVudHMgaGF2ZSBubyBleHBsaWNpdCAlWUFNTCBkaXJlY3RpdmVcbiAgdGhpcy5sZWdhY3kgICAgPSBvcHRpb25zWydsZWdhY3knXSAgICB8fCBmYWxzZTtcblxuICB0aGlzLmpzb24gICAgICA9IG9wdGlvbnNbJ2pzb24nXSAgICAgIHx8IGZhbHNlO1xuICB0aGlzLmxpc3RlbmVyICA9IG9wdGlvbnNbJ2xpc3RlbmVyJ10gIHx8IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwICAgICAgID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuXG4gIHRoaXMubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiAgID0gMDtcbiAgdGhpcy5saW5lICAgICAgID0gMDtcbiAgdGhpcy5saW5lU3RhcnQgID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcblxuICAvLyBwb3NpdGlvbiBvZiBmaXJzdCBsZWFkaW5nIHRhYiBpbiB0aGUgY3VycmVudCBsaW5lLFxuICAvLyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdGFicyBpbiB0aGUgaW5kZW50YXRpb25cbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogICAgIHN0YXRlLmZpbGVuYW1lLFxuICAgIGJ1ZmZlcjogICBzdGF0ZS5pbnB1dC5zbGljZSgwLCAtMSksIC8vIG9taXQgdHJhaWxpbmcgXFwwXG4gICAgcG9zaXRpb246IHN0YXRlLnBvc2l0aW9uLFxuICAgIGxpbmU6ICAgICBzdGF0ZS5saW5lLFxuICAgIGNvbHVtbjogICBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydFxuICB9O1xuXG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG5cbiAgcmV0dXJuIG5ldyBleGNlcHRpb24obWVzc2FnZSwgbWFyayk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHRocm93V2FybmluZyhzdGF0ZSwgbWVzc2FnZSkge1xuICBpZiAoc3RhdGUub25XYXJuaW5nKSB7XG4gICAgc3RhdGUub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkpO1xuICB9XG59XG5cblxudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuXG4gIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBtYXRjaCwgbWFqb3IsIG1pbm9yO1xuXG4gICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgbWF0Y2ggPSAvXihbMC05XSspXFwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuXG4gICAgaWYgKG1ham9yICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS52ZXJzaW9uID0gYXJnc1swXTtcbiAgICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSAobWlub3IgPCAyKTtcblxuICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCcpO1xuICAgIH1cbiAgfSxcblxuICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZSwgbmFtZSwgYXJncykge1xuXG4gICAgdmFyIGhhbmRsZSwgcHJlZml4O1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cycpO1xuICAgIH1cblxuICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgcHJlZml4ID0gYXJnc1sxXTtcblxuICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QoaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgXCInICsgaGFuZGxlICsgJ1wiIHRhZyBoYW5kbGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJlZml4ID0gZGVjb2RlVVJJQ29tcG9uZW50KHByZWZpeCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICcgKyBwcmVmaXgpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDsgX3Bvc2l0aW9uIDwgX2xlbmd0aDsgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSAweDA5IHx8XG4gICAgICAgICAgICAgICgweDIwIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAweDEwRkZGRikpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHtcbiAgdmFyIHNvdXJjZUtleXMsIGtleSwgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUnKTtcbiAgfVxuXG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG5cbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSxcbiAgc3RhcnRMaW5lLCBzdGFydExpbmVTdGFydCwgc3RhcnRQb3MpIHtcblxuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuXG4gIC8vIFRoZSBvdXRwdXQgaXMgYSBwbGFpbiBvYmplY3QgaGVyZSwgc28ga2V5cyBjYW4gb25seSBiZSBzdHJpbmdzLlxuICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQga2V5Tm9kZSB0byBhIHN0cmluZywgYnV0IGRvaW5nIHNvIGNhbiBoYW5nIHRoZSBwcm9jZXNzXG4gIC8vIChkZWVwbHkgbmVzdGVkIGFycmF5cyB0aGF0IGV4cGxvZGUgZXhwb25lbnRpYWxseSB1c2luZyBhbGlhc2VzKS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHtcbiAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gJ29iamVjdCcgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSAnW29iamVjdCBPYmplY3RdJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBjb2RlIGV4ZWN1dGlvbiBpbiBsb2FkKCkgdmlhIHRvU3RyaW5nIHByb3BlcnR5XG4gIC8vIChzdGlsbCB1c2UgaXRzIG93biB0b1N0cmluZyBmb3IgYXJyYXlzLCB0aW1lc3RhbXBzLFxuICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICdvYmplY3QnICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBrZXlOb2RlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gIH1cblxuXG4gIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7XG5cbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cblxuICBpZiAoa2V5VGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJlxuICAgICAgICAhX2hhc093blByb3BlcnR5JDEuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmXG4gICAgICAgIF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0IHx8IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRlZCBtYXBwaW5nIGtleScpO1xuICAgIH1cblxuICAgIC8vIHVzZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IG9ubHkgYmVjYXVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgaXMgc2xvd1xuICAgIGlmIChrZXlOb2RlID09PSAnX19wcm90b19fJykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9yZXN1bHQsIGtleU5vZGUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlTm9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHRba2V5Tm9kZV0gPSB2YWx1ZU5vZGU7XG4gICAgfVxuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4MEEvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MEQvKiBDUiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDBBLyogTEYgKi8pIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gIHN0YXRlLmZpcnN0VGFiSW5MaW5lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgaWYgKGNoID09PSAweDA5LyogVGFiICovICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgY2ggIT09IDApO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKChjaCA9PT0gMHgyRC8qIC0gKi8gfHwgY2ggPT09IDB4MkUvKiAuICovKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICAgIGNoID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8XG4gICAgICBjaCA9PT0gMHgyMy8qICMgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI2LyogJiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MkEvKiAqICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyMS8qICEgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDdDLyogfCAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4M0UvKiA+ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyNy8qICcgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIyLyogXCIgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI1LyogJSAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4NDAvKiBAICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg2MC8qIGAgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY2ggPT09IDB4M0YvKiA/ICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjcvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjcvKiAnICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhleExlbmd0aCxcbiAgICAgIGhleFJlc3VsdCxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDIyLyogXCIgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyMi8qIFwiICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDVDLyogXFwgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE86IHJld29yayB0byBpbmxpbmUgZm4gd2l0aCBubyB0eXBlIGNhc3Q/XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkge1xuICAgICAgICBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGhleFJlc3VsdCA9IDA7XG5cbiAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpO1xuXG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIGVzY2FwZSBzZXF1ZW5jZScpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIHJlYWROZXh0ID0gdHJ1ZSxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9wb3MsXG4gICAgICBfdGFnICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9yZXN1bHQsXG4gICAgICBfYW5jaG9yICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIHRlcm1pbmF0b3IsXG4gICAgICBpc1BhaXIsXG4gICAgICBpc0V4cGxpY2l0UGFpcixcbiAgICAgIGlzTWFwcGluZyxcbiAgICAgIG92ZXJyaWRhYmxlS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBrZXlOb2RlLFxuICAgICAga2V5VGFnLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4NUIvKiBbICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4NUQ7LyogXSAqL1xuICAgIGlzTWFwcGluZyA9IGZhbHNlO1xuICAgIF9yZXN1bHQgPSBbXTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHg3Qi8qIHsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg3RDsvKiB9ICovXG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyAnbWFwcGluZycgOiAnc2VxdWVuY2UnO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMnKTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDJDLyogLCAqLykge1xuICAgICAgLy8gXCJmbG93IGNvbGxlY3Rpb24gZW50cmllcyBjYW4gbmV2ZXIgYmUgY29tcGxldGVseSBlbXB0eVwiLCBhcyBwZXIgWUFNTCAxLjIsIHNlY3Rpb24gNy40XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCdcIik7XG4gICAgfVxuXG4gICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTtcblxuICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICBfcG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgaXNQYWlyID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc01hcHBpbmcpIHtcbiAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFpcikge1xuICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG5cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDB4MkMvKiAsICovKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgZm9sZGluZyxcbiAgICAgIGNob21waW5nICAgICAgID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICAgIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZEluZGVudCA9IGZhbHNlLFxuICAgICAgdGV4dEluZGVudCAgICAgPSBub2RlSW5kZW50LFxuICAgICAgZW1wdHlMaW5lcyAgICAgPSAwLFxuICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDdDLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRS8qID4gKi8pIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQi8qICsgKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHtcbiAgICAgICAgY2hvbXBpbmcgPSAoY2ggPT09IDB4MkIvKiArICovKSA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG5cbiAgICBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJlxuICAgICAgICAgICAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykpIHtcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgKGNmLiBFeGFtcGxlIDguMSlcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcblxuICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEp1c3Qgb25lIGxpbmUgYnJlYWsgLSBwZXJjZWl2ZSBhcyB0aGUgc2FtZSBsaW5lLlxuICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLZWVwIGFsbCBsaW5lIGJyZWFrcyBleGNlcHQgdGhlIGhlYWRlciBsaW5lIGJyZWFrLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkaWRSZWFkQ29udGVudCA9IHRydWU7XG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSxcbiAgICAgIF90YWcgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICA9IFtdLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgZGV0ZWN0ZWQgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICAvLyB0aGVyZSBpcyBhIGxlYWRpbmcgdGFiIGJlZm9yZSB0aGlzIHRva2VuLCBzbyBpdCBjYW4ndCBiZSBhIGJsb2NrIHNlcXVlbmNlL21hcHBpbmc7XG4gIC8vIGl0IGNhbiBzdGlsbCBiZSBmbG93IHNlcXVlbmNlL21hcHBpbmcgb3IgYSBzY2FsYXJcbiAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhdGUuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChjaCAhPT0gMHgyRC8qIC0gKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpO1xuICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdzZXF1ZW5jZSc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZyxcbiAgICAgIGFsbG93Q29tcGFjdCxcbiAgICAgIF9saW5lLFxuICAgICAgX2tleUxpbmUsXG4gICAgICBfa2V5TGluZVN0YXJ0LFxuICAgICAgX2tleVBvcyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgICAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgICAgICA9IHt9LFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGtleVRhZyAgICAgICAgPSBudWxsLFxuICAgICAga2V5Tm9kZSAgICAgICA9IG51bGwsXG4gICAgICB2YWx1ZU5vZGUgICAgID0gbnVsbCxcbiAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZSxcbiAgICAgIGRldGVjdGVkICAgICAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIC8vIHRoZXJlIGlzIGEgbGVhZGluZyB0YWIgYmVmb3JlIHRoaXMgdG9rZW4sIHNvIGl0IGNhbid0IGJlIGEgYmxvY2sgc2VxdWVuY2UvbWFwcGluZztcbiAgLy8gaXQgY2FuIHN0aWxsIGJlIGZsb3cgc2VxdWVuY2UvbWFwcGluZyBvciBhIHNjYWxhclxuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKCFhdEV4cGxpY2l0S2V5ICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uJyk7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgIF9saW5lID0gc3RhdGUubGluZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4M0EvKiA6ICovKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZScpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG5cbiAgICAvL1xuICAgIC8vIEltcGxpY2l0IG5vdGF0aW9uIGNhc2UuIEZsb3ctc3R5bGUgbm9kZSBhcyB0aGUga2V5IGZpcnN0LCB0aGVuIFwiOlwiLCBhbmQgdGhlIHZhbHVlLlxuICAgIC8vXG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIGlmICghY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuICAgICAgICAvLyBOZWl0aGVyIGltcGxpY2l0IG5vciBleHBsaWNpdCBub3RhdGlvbi5cbiAgICAgICAgLy8gUmVhZGluZyBpcyBkb25lLiBHbyB0byB0aGUgZXBpbG9ndWUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Egd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcblxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleScpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb21tb24gcmVhZGluZyBjb2RlIGZvciBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBub3RhdGlvbnMuXG4gICAgLy9cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgICAgX2tleVBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBFcGlsb2d1ZS5cbiAgLy9cblxuICAvLyBTcGVjaWFsIGNhc2U6IGxhc3QgbWFwcGluZydzIG5vZGUgY29udGFpbnMgb25seSB0aGUga2V5IGluIGV4cGxpY2l0IG5vdGF0aW9uLlxuICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhlIHJlc3VsdGluZyBtYXBwaW5nLlxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdtYXBwaW5nJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGlzVmVyYmF0aW0gPSBmYWxzZSxcbiAgICAgIGlzTmFtZWQgICAgPSBmYWxzZSxcbiAgICAgIHRhZ0hhbmRsZSxcbiAgICAgIHRhZ05hbWUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMS8qICEgKi8pIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDNDLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2UgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgIHRhZ0hhbmRsZSA9ICchISc7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gJyEnO1xuICB9XG5cbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gMHgzRS8qID4gKi8pO1xuXG4gICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoKSB7XG4gICAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcblxuICAgICAgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgICAgICBpZiAoIWlzTmFtZWQpIHtcbiAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAnICsgdGFnTmFtZSk7XG4gIH1cblxuICB0cnkge1xuICAgIHRhZ05hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodGFnTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6ICcgKyB0YWdOYW1lKTtcbiAgfVxuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgc3RhdGUudGFnID0gdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnIScpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnISEnKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDI2LyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyQS8qICogKi8pIHJldHVybiBmYWxzZTtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZUxpc3QsXG4gICAgICB0eXBlLFxuICAgICAgZmxvd0luZGVudCxcbiAgICAgIGJsb2NrSW5kZW50O1xuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdvcGVuJywgc3RhdGUpO1xuICB9XG5cbiAgc3RhdGUudGFnICAgID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCAgID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgIENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fFxuICAgIENPTlRFWFRfQkxPQ0tfSU4gID09PSBub2RlQ29udGV4dDtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8XG4gICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsIHx8IHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2FsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG5cbiAgfSBlbHNlIGlmIChzdGF0ZS50YWcgPT09ICc/Jykge1xuICAgIC8vIEltcGxpY2l0IHJlc29sdmluZyBpcyBub3QgYWxsb3dlZCBmb3Igbm9uLXNjYWxhciB0eXBlcywgYW5kICc/J1xuICAgIC8vIG5vbi1zcGVjaWZpYyB0YWcgaXMgb25seSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuXG4gICAgLy9cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sga2luZCBjb25mb3JtaXR5IGluIGNhc2UgdXNlciBleHBsaWNpdGx5IGFzc2lnbnMgJz8nXG4gICAgLy8gdGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6IFwiITw/PiBbMF1cIlxuICAgIC8vXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZS5raW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG5cbiAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICBpZiAodHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gJyEnKSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlID0gc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddW3N0YXRlLnRhZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvb2tpbmcgZm9yIG11bHRpIHR5cGVcbiAgICAgIHR5cGUgPSBudWxsO1xuICAgICAgdHlwZUxpc3QgPSBzdGF0ZS50eXBlTWFwLm11bHRpW3N0YXRlLmtpbmQgfHwgJ2ZhbGxiYWNrJ107XG5cbiAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gdHlwZUxpc3QubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICAgIGlmIChzdGF0ZS50YWcuc2xpY2UoMCwgdHlwZUxpc3RbdHlwZUluZGV4XS50YWcubGVuZ3RoKSA9PT0gdHlwZUxpc3RbdHlwZUluZGV4XS50YWcpIHtcbiAgICAgICAgICB0eXBlID0gdHlwZUxpc3RbdHlwZUluZGV4XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdHlwZSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gdGFnICE8JyArIHN0YXRlLnRhZyArICc+Jyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlLmtpbmQgIT09IHN0YXRlLmtpbmQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCcgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8JyArIHN0YXRlLnRhZyArICc+IGV4cGxpY2l0IHRhZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQsIHN0YXRlLnRhZyk7XG4gICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdjbG9zZScsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gc3RhdGUudGFnICE9PSBudWxsIHx8ICBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBfcG9zaXRpb24sXG4gICAgICBkaXJlY3RpdmVOYW1lLFxuICAgICAgZGlyZWN0aXZlQXJncyxcbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0YXRlLmFuY2hvck1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUvKiAlICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSBicmVhaztcblxuICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSAgICAgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDB4MkQvKiAtICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MkUvKiAuICovKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAweDBBLyogTEYgKi8gJiZcbiAgICAgICAgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwRC8qIENSICovKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKTtcblxuICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoJ1xcMCcpO1xuXG4gIGlmIChudWxscG9zICE9PSAtMSkge1xuICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvcztcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0Jyk7XG4gIH1cblxuICAvLyBVc2UgMCBhcyBzdHJpbmcgdGVybWluYXRvci4gVGhhdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgYm91bmRzIGNoZWNrLlxuICBzdGF0ZS5pbnB1dCArPSAnXFwwJztcblxuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgKz0gMTtcbiAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgcmVhZERvY3VtZW50KHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZS5kb2N1bWVudHM7XG59XG5cblxuZnVuY3Rpb24gbG9hZEFsbCQxKGlucHV0LCBpdGVyYXRvciwgb3B0aW9ucykge1xuICBpZiAoaXRlcmF0b3IgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2YgaXRlcmF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzO1xuICB9XG5cbiAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBkb2N1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcblxuICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBleGNlcHRpb24oJ2V4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlJyk7XG59XG5cblxudmFyIGxvYWRBbGxfMSA9IGxvYWRBbGwkMTtcbnZhciBsb2FkXzEgICAgPSBsb2FkJDE7XG5cbnZhciBsb2FkZXIgPSB7XG5cdGxvYWRBbGw6IGxvYWRBbGxfMSxcblx0bG9hZDogbG9hZF8xXG59O1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxuXG5cblxuXG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgQ0hBUl9CT00gICAgICAgICAgICAgICAgICA9IDB4RkVGRjtcbnZhciBDSEFSX1RBQiAgICAgICAgICAgICAgICAgID0gMHgwOTsgLyogVGFiICovXG52YXIgQ0hBUl9MSU5FX0ZFRUQgICAgICAgICAgICA9IDB4MEE7IC8qIExGICovXG52YXIgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gICAgICA9IDB4MEQ7IC8qIENSICovXG52YXIgQ0hBUl9TUEFDRSAgICAgICAgICAgICAgICA9IDB4MjA7IC8qIFNwYWNlICovXG52YXIgQ0hBUl9FWENMQU1BVElPTiAgICAgICAgICA9IDB4MjE7IC8qICEgKi9cbnZhciBDSEFSX0RPVUJMRV9RVU9URSAgICAgICAgID0gMHgyMjsgLyogXCIgKi9cbnZhciBDSEFSX1NIQVJQICAgICAgICAgICAgICAgID0gMHgyMzsgLyogIyAqL1xudmFyIENIQVJfUEVSQ0VOVCAgICAgICAgICAgICAgPSAweDI1OyAvKiAlICovXG52YXIgQ0hBUl9BTVBFUlNBTkQgICAgICAgICAgICA9IDB4MjY7IC8qICYgKi9cbnZhciBDSEFSX1NJTkdMRV9RVU9URSAgICAgICAgID0gMHgyNzsgLyogJyAqL1xudmFyIENIQVJfQVNURVJJU0sgICAgICAgICAgICAgPSAweDJBOyAvKiAqICovXG52YXIgQ0hBUl9DT01NQSAgICAgICAgICAgICAgICA9IDB4MkM7IC8qICwgKi9cbnZhciBDSEFSX01JTlVTICAgICAgICAgICAgICAgID0gMHgyRDsgLyogLSAqL1xudmFyIENIQVJfQ09MT04gICAgICAgICAgICAgICAgPSAweDNBOyAvKiA6ICovXG52YXIgQ0hBUl9FUVVBTFMgICAgICAgICAgICAgICA9IDB4M0Q7IC8qID0gKi9cbnZhciBDSEFSX0dSRUFURVJfVEhBTiAgICAgICAgID0gMHgzRTsgLyogPiAqL1xudmFyIENIQVJfUVVFU1RJT04gICAgICAgICAgICAgPSAweDNGOyAvKiA/ICovXG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUICAgICAgICA9IDB4NDA7IC8qIEAgKi9cbnZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgID0gMHg1QjsgLyogWyAqL1xudmFyIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAweDVEOyAvKiBdICovXG52YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICA9IDB4NjA7IC8qIGAgKi9cbnZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAgID0gMHg3QjsgLyogeyAqL1xudmFyIENIQVJfVkVSVElDQUxfTElORSAgICAgICAgPSAweDdDOyAvKiB8ICovXG52YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICA9IDB4N0Q7IC8qIH0gKi9cblxudmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTtcblxuRVNDQVBFX1NFUVVFTkNFU1sweDAwXSAgID0gJ1xcXFwwJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwN10gICA9ICdcXFxcYSc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDhdICAgPSAnXFxcXGInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA5XSAgID0gJ1xcXFx0JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQV0gICA9ICdcXFxcbic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEJdICAgPSAnXFxcXHYnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBDXSAgID0gJ1xcXFxmJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwRF0gICA9ICdcXFxccic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MUJdICAgPSAnXFxcXGUnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIyXSAgID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4NUNdICAgPSAnXFxcXFxcXFwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDg1XSAgID0gJ1xcXFxOJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHhBMF0gICA9ICdcXFxcXyc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjAyOF0gPSAnXFxcXEwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjldID0gJ1xcXFxQJztcblxudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICAneScsICdZJywgJ3llcycsICdZZXMnLCAnWUVTJywgJ29uJywgJ09uJywgJ09OJyxcbiAgJ24nLCAnTicsICdubycsICdObycsICdOTycsICdvZmYnLCAnT2ZmJywgJ09GRidcbl07XG5cbnZhciBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVggPSAvXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcXC5bMC05X10qKT8kLztcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU7XG5cbiAgaWYgKG1hcCA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHJlc3VsdCA9IHt9O1xuICBrZXlzID0gT2JqZWN0LmtleXMobWFwKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwW3RhZ10pO1xuXG4gICAgaWYgKHRhZy5zbGljZSgwLCAyKSA9PT0gJyEhJykge1xuICAgICAgdGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuICAgIHR5cGUgPSBzY2hlbWEuY29tcGlsZWRUeXBlTWFwWydmYWxsYmFjayddW3RhZ107XG5cbiAgICBpZiAodHlwZSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlLnN0eWxlQWxpYXNlcywgc3R5bGUpKSB7XG4gICAgICBzdHlsZSA9IHR5cGUuc3R5bGVBbGlhc2VzW3N0eWxlXTtcbiAgICB9XG5cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3Rlcikge1xuICB2YXIgc3RyaW5nLCBoYW5kbGUsIGxlbmd0aDtcblxuICBzdHJpbmcgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKGNoYXJhY3RlciA8PSAweEZGKSB7XG4gICAgaGFuZGxlID0gJ3gnO1xuICAgIGxlbmd0aCA9IDI7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRikge1xuICAgIGhhbmRsZSA9ICd1JztcbiAgICBsZW5ndGggPSA0O1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweEZGRkZGRkZGKSB7XG4gICAgaGFuZGxlID0gJ1UnO1xuICAgIGxlbmd0aCA9IDg7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRicpO1xuICB9XG5cbiAgcmV0dXJuICdcXFxcJyArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoJzAnLCBsZW5ndGggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG52YXIgUVVPVElOR19UWVBFX1NJTkdMRSA9IDEsXG4gICAgUVVPVElOR19UWVBFX0RPVUJMRSA9IDI7XG5cbmZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgdGhpcy5zY2hlbWEgICAgICAgID0gb3B0aW9uc1snc2NoZW1hJ10gfHwgX2RlZmF1bHQ7XG4gIHRoaXMuaW5kZW50ICAgICAgICA9IE1hdGgubWF4KDEsIChvcHRpb25zWydpbmRlbnQnXSB8fCAyKSk7XG4gIHRoaXMubm9BcnJheUluZGVudCA9IG9wdGlvbnNbJ25vQXJyYXlJbmRlbnQnXSB8fCBmYWxzZTtcbiAgdGhpcy5za2lwSW52YWxpZCAgID0gb3B0aW9uc1snc2tpcEludmFsaWQnXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgICAgID0gKGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1snZmxvd0xldmVsJ10pID8gLTEgOiBvcHRpb25zWydmbG93TGV2ZWwnXSk7XG4gIHRoaXMuc3R5bGVNYXAgICAgICA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1snc3R5bGVzJ10gfHwgbnVsbCk7XG4gIHRoaXMuc29ydEtleXMgICAgICA9IG9wdGlvbnNbJ3NvcnRLZXlzJ10gfHwgZmFsc2U7XG4gIHRoaXMubGluZVdpZHRoICAgICA9IG9wdGlvbnNbJ2xpbmVXaWR0aCddIHx8IDgwO1xuICB0aGlzLm5vUmVmcyAgICAgICAgPSBvcHRpb25zWydub1JlZnMnXSB8fCBmYWxzZTtcbiAgdGhpcy5ub0NvbXBhdE1vZGUgID0gb3B0aW9uc1snbm9Db21wYXRNb2RlJ10gfHwgZmFsc2U7XG4gIHRoaXMuY29uZGVuc2VGbG93ICA9IG9wdGlvbnNbJ2NvbmRlbnNlRmxvdyddIHx8IGZhbHNlO1xuICB0aGlzLnF1b3RpbmdUeXBlICAgPSBvcHRpb25zWydxdW90aW5nVHlwZSddID09PSAnXCInID8gUVVPVElOR19UWVBFX0RPVUJMRSA6IFFVT1RJTkdfVFlQRV9TSU5HTEU7XG4gIHRoaXMuZm9yY2VRdW90ZXMgICA9IG9wdGlvbnNbJ2ZvcmNlUXVvdGVzJ10gfHwgZmFsc2U7XG4gIHRoaXMucmVwbGFjZXIgICAgICA9IHR5cGVvZiBvcHRpb25zWydyZXBsYWNlciddID09PSAnZnVuY3Rpb24nID8gb3B0aW9uc1sncmVwbGFjZXInXSA6IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy5leHBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdDtcblxuICB0aGlzLnRhZyA9IG51bGw7XG4gIHRoaXMucmVzdWx0ID0gJyc7XG5cbiAgdGhpcy5kdXBsaWNhdGVzID0gW107XG4gIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsO1xufVxuXG4vLyBJbmRlbnRzIGV2ZXJ5IGxpbmUgaW4gYSBzdHJpbmcuIEVtcHR5IGxpbmVzIChcXG4gb25seSkgYXJlIG5vdCBpbmRlbnRlZC5cbmZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmcsIHNwYWNlcykge1xuICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgnICcsIHNwYWNlcyksXG4gICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICBuZXh0ID0gLTEsXG4gICAgICByZXN1bHQgPSAnJyxcbiAgICAgIGxpbmUsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgIG5leHQgPSBzdHJpbmcuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG5cbiAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gJ1xcbicpIHJlc3VsdCArPSBpbmQ7XG5cbiAgICByZXN1bHQgKz0gbGluZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKSB7XG4gIHJldHVybiAnXFxuJyArIGNvbW1vbi5yZXBlYXQoJyAnLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlKHN0cikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gWzMzXSBzLXdoaXRlIDo6PSBzLXNwYWNlIHwgcy10YWJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBjYW4gYmUgcHJpbnRlZCB3aXRob3V0IGVzY2FwaW5nLlxuLy8gRnJvbSBZQU1MIDEuMjogXCJhbnkgYWxsb3dlZCBjaGFyYWN0ZXJzIGtub3duIHRvIGJlIG5vbi1wcmludGFibGVcbi8vIHNob3VsZCBhbHNvIGJlIGVzY2FwZWQuIFtIb3dldmVyLF0gVGhpcyBpc27igJl0IG1hbmRhdG9yeVwiXG4vLyBEZXJpdmVkIGZyb20gbmItY2hhciAtIFxcdCAtICN4ODUgLSAjeEEwIC0gI3gyMDI4IC0gI3gyMDI5LlxuZnVuY3Rpb24gaXNQcmludGFibGUoYykge1xuICByZXR1cm4gICgweDAwMDIwIDw9IGMgJiYgYyA8PSAweDAwMDA3RSlcbiAgICAgIHx8ICgoMHgwMDBBMSA8PSBjICYmIGMgPD0gMHgwMEQ3RkYpICYmIGMgIT09IDB4MjAyOCAmJiBjICE9PSAweDIwMjkpXG4gICAgICB8fCAoKDB4MEUwMDAgPD0gYyAmJiBjIDw9IDB4MDBGRkZEKSAmJiBjICE9PSBDSEFSX0JPTSlcbiAgICAgIHx8ICAoMHgxMDAwMCA8PSBjICYmIGMgPD0gMHgxMEZGRkYpO1xufVxuXG4vLyBbMzRdIG5zLWNoYXIgOjo9IG5iLWNoYXIgLSBzLXdoaXRlXG4vLyBbMjddIG5iLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1jaGFyIC0gYy1ieXRlLW9yZGVyLW1hcmtcbi8vIFsyNl0gYi1jaGFyICA6Oj0gYi1saW5lLWZlZWQgfCBiLWNhcnJpYWdlLXJldHVyblxuLy8gSW5jbHVkaW5nIHMtd2hpdGUgKGZvciBzb21lIHJlYXNvbiwgZXhhbXBsZXMgZG9lc24ndCBtYXRjaCBzcGVjcyBpbiB0aGlzIGFzcGVjdClcbi8vIG5zLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1saW5lLWZlZWQgLSBiLWNhcnJpYWdlLXJldHVybiAtIGMtYnl0ZS1vcmRlci1tYXJrXG5mdW5jdGlvbiBpc05zQ2hhck9yV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBpc1ByaW50YWJsZShjKVxuICAgICYmIGMgIT09IENIQVJfQk9NXG4gICAgLy8gLSBiLWNoYXJcbiAgICAmJiBjICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTlxuICAgICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuXG4vLyBbMTI3XSAgbnMtcGxhaW4tc2FmZShjKSA6Oj0gYyA9IGZsb3ctb3V0ICDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1pbiAgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGJsb2NrLWtleSDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1rZXkgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyBbMTI4XSBucy1wbGFpbi1zYWZlLW91dCA6Oj0gbnMtY2hhclxuLy8gWzEyOV0gIG5zLXBsYWluLXNhZmUtaW4gOjo9IG5zLWNoYXIgLSBjLWZsb3ctaW5kaWNhdG9yXG4vLyBbMTMwXSAgbnMtcGxhaW4tY2hhcihjKSA6Oj0gICggbnMtcGxhaW4tc2FmZShjKSAtIOKAnDrigJ0gLSDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAvKiBBbiBucy1jaGFyIHByZWNlZGluZyAqLyDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCDigJw64oCdIC8qIEZvbGxvd2VkIGJ5IGFuIG5zLXBsYWluLXNhZmUoYykgKi8gKVxuZnVuY3Rpb24gaXNQbGFpblNhZmUoYywgcHJldiwgaW5ibG9jaykge1xuICB2YXIgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlID0gaXNOc0NoYXJPcldoaXRlc3BhY2UoYyk7XG4gIHZhciBjSXNOc0NoYXIgPSBjSXNOc0NoYXJPcldoaXRlc3BhY2UgJiYgIWlzV2hpdGVzcGFjZShjKTtcbiAgcmV0dXJuIChcbiAgICAvLyBucy1wbGFpbi1zYWZlXG4gICAgaW5ibG9jayA/IC8vIGMgPSBmbG93LWluXG4gICAgICBjSXNOc0NoYXJPcldoaXRlc3BhY2VcbiAgICAgIDogY0lzTnNDaGFyT3JXaGl0ZXNwYWNlXG4gICAgICAgIC8vIC0gYy1mbG93LWluZGljYXRvclxuICAgICAgICAmJiBjICE9PSBDSEFSX0NPTU1BXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVFxuICAgICAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVFxuICApXG4gICAgLy8gbnMtcGxhaW4tY2hhclxuICAgICYmIGMgIT09IENIQVJfU0hBUlAgLy8gZmFsc2Ugb24gJyMnXG4gICAgJiYgIShwcmV2ID09PSBDSEFSX0NPTE9OICYmICFjSXNOc0NoYXIpIC8vIGZhbHNlIG9uICc6ICdcbiAgICB8fCAoaXNOc0NoYXJPcldoaXRlc3BhY2UocHJldikgJiYgIWlzV2hpdGVzcGFjZShwcmV2KSAmJiBjID09PSBDSEFSX1NIQVJQKSAvLyBjaGFuZ2UgdG8gdHJ1ZSBvbiAnW14gXSMnXG4gICAgfHwgKHByZXYgPT09IENIQVJfQ09MT04gJiYgY0lzTnNDaGFyKTsgLy8gY2hhbmdlIHRvIHRydWUgb24gJzpbXiBdJ1xufVxuXG4vLyBTaW1wbGlmaWVkIHRlc3QgZm9yIHZhbHVlcyBhbGxvd2VkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgLy8gVXNlcyBhIHN1YnNldCBvZiBucy1jaGFyIC0gYy1pbmRpY2F0b3JcbiAgLy8gd2hlcmUgbnMtY2hhciA9IG5iLWNoYXIgLSBzLXdoaXRlLlxuICAvLyBObyBzdXBwb3J0IG9mICggKCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnC3igJ0gKSAvKiBGb2xsb3dlZCBieSBhbiBucy1wbGFpbi1zYWZlKGMpKSAqLyApIHBhcnRcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NXG4gICAgJiYgIWlzV2hpdGVzcGFjZShjKSAvLyAtIHMtd2hpdGVcbiAgICAvLyAtIChjLWluZGljYXRvciA6Oj1cbiAgICAvLyDigJwt4oCdIHwg4oCcP+KAnSB8IOKAnDrigJ0gfCDigJws4oCdIHwg4oCcW+KAnSB8IOKAnF3igJ0gfCDigJx74oCdIHwg4oCcfeKAnVxuICAgICYmIGMgIT09IENIQVJfTUlOVVNcbiAgICAmJiBjICE9PSBDSEFSX1FVRVNUSU9OXG4gICAgJiYgYyAhPT0gQ0hBUl9DT0xPTlxuICAgICYmIGMgIT09IENIQVJfQ09NTUFcbiAgICAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVRcbiAgICAvLyB8IOKAnCPigJ0gfCDigJwm4oCdIHwg4oCcKuKAnSB8IOKAnCHigJ0gfCDigJx84oCdIHwg4oCcPeKAnSB8IOKAnD7igJ0gfCDigJwn4oCdIHwg4oCcXCLigJ1cbiAgICAmJiBjICE9PSBDSEFSX1NIQVJQXG4gICAgJiYgYyAhPT0gQ0hBUl9BTVBFUlNBTkRcbiAgICAmJiBjICE9PSBDSEFSX0FTVEVSSVNLXG4gICAgJiYgYyAhPT0gQ0hBUl9FWENMQU1BVElPTlxuICAgICYmIGMgIT09IENIQVJfVkVSVElDQUxfTElORVxuICAgICYmIGMgIT09IENIQVJfRVFVQUxTXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkVBVEVSX1RIQU5cbiAgICAmJiBjICE9PSBDSEFSX1NJTkdMRV9RVU9URVxuICAgICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFXG4gICAgLy8gfCDigJwl4oCdIHwg4oCcQOKAnSB8IOKAnGDigJ0pXG4gICAgJiYgYyAhPT0gQ0hBUl9QRVJDRU5UXG4gICAgJiYgYyAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5cbi8vIFNpbXBsaWZpZWQgdGVzdCBmb3IgdmFsdWVzIGFsbG93ZWQgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHBsYWluIHN0eWxlLlxuZnVuY3Rpb24gaXNQbGFpblNhZmVMYXN0KGMpIHtcbiAgLy8ganVzdCBub3Qgd2hpdGVzcGFjZSBvciBjb2xvbiwgaXQgd2lsbCBiZSBjaGVja2VkIHRvIGJlIHBsYWluIGNoYXJhY3RlciBsYXRlclxuICByZXR1cm4gIWlzV2hpdGVzcGFjZShjKSAmJiBjICE9PSBDSEFSX0NPTE9OO1xufVxuXG4vLyBTYW1lIGFzICdzdHJpbmcnLmNvZGVQb2ludEF0KHBvcyksIGJ1dCB3b3JrcyBpbiBvbGRlciBicm93c2Vycy5cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgcG9zKSB7XG4gIHZhciBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KHBvcyksIHNlY29uZDtcbiAgaWYgKGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgcG9zICsgMSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBzZWNvbmQgPSBzdHJpbmcuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgIHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5cbi8vIERldGVybWluZXMgd2hldGhlciBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaXMgcmVxdWlyZWQuXG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cblxudmFyIFNUWUxFX1BMQUlOICAgPSAxLFxuICAgIFNUWUxFX1NJTkdMRSAgPSAyLFxuICAgIFNUWUxFX0xJVEVSQUwgPSAzLFxuICAgIFNUWUxFX0ZPTERFRCAgPSA0LFxuICAgIFNUWUxFX0RPVUJMRSAgPSA1O1xuXG4vLyBEZXRlcm1pbmVzIHdoaWNoIHNjYWxhciBzdHlsZXMgYXJlIHBvc3NpYmxlIGFuZCByZXR1cm5zIHRoZSBwcmVmZXJyZWQgc3R5bGUuXG4vLyBsaW5lV2lkdGggPSAtMSA9PiBubyBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBzdHIubGVuZ3RoID4gMC5cbi8vIFBvc3QtY29uZGl0aW9uczpcbi8vICAgIFNUWUxFX1BMQUlOIG9yIFNUWUxFX1NJTkdMRSA9PiBubyBcXG4gYXJlIGluIHRoZSBzdHJpbmcuXG4vLyAgICBTVFlMRV9MSVRFUkFMID0+IG5vIGxpbmVzIGFyZSBzdWl0YWJsZSBmb3IgZm9sZGluZyAob3IgbGluZVdpZHRoIGlzIC0xKS5cbi8vICAgIFNUWUxFX0ZPTERFRCA9PiBhIGxpbmUgPiBsaW5lV2lkdGggYW5kIGNhbiBiZSBmb2xkZWQgKGFuZCBsaW5lV2lkdGggIT0gLTEpLlxuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCxcbiAgdGVzdEFtYmlndW91c1R5cGUsIHF1b3RpbmdUeXBlLCBmb3JjZVF1b3RlcywgaW5ibG9jaykge1xuXG4gIHZhciBpO1xuICB2YXIgY2hhciA9IDA7XG4gIHZhciBwcmV2Q2hhciA9IG51bGw7XG4gIHZhciBoYXNMaW5lQnJlYWsgPSBmYWxzZTtcbiAgdmFyIGhhc0ZvbGRhYmxlTGluZSA9IGZhbHNlOyAvLyBvbmx5IGNoZWNrZWQgaWYgc2hvdWxkVHJhY2tXaWR0aFxuICB2YXIgc2hvdWxkVHJhY2tXaWR0aCA9IGxpbmVXaWR0aCAhPT0gLTE7XG4gIHZhciBwcmV2aW91c0xpbmVCcmVhayA9IC0xOyAvLyBjb3VudCB0aGUgZmlyc3QgbGluZSBjb3JyZWN0bHlcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChjb2RlUG9pbnRBdChzdHJpbmcsIDApKVxuICAgICAgICAgICYmIGlzUGxhaW5TYWZlTGFzdChjb2RlUG9pbnRBdChzdHJpbmcsIHN0cmluZy5sZW5ndGggLSAxKSk7XG5cbiAgaWYgKHNpbmdsZUxpbmVPbmx5IHx8IGZvcmNlUXVvdGVzKSB7XG4gICAgLy8gQ2FzZTogbm8gYmxvY2sgc3R5bGVzLlxuICAgIC8vIENoZWNrIGZvciBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgdG8gcnVsZSBvdXQgcGxhaW4gYW5kIHNpbmdsZS5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhciwgcHJldkNoYXIsIGluYmxvY2spO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBDYXNlOiBibG9jayBzdHlsZXMgcGVybWl0dGVkLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBjaGFyID49IDB4MTAwMDAgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueSBsaW5lIGNhbiBiZSBmb2xkZWQuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8XG4gICAgICAgICAgICAvLyBGb2xkYWJsZSBsaW5lID0gdG9vIGxvbmcsIGFuZCBub3QgbW9yZS1pbmRlbnRlZC5cbiAgICAgICAgICAgIChpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICcgJyk7XG4gICAgICAgICAgcHJldmlvdXNMaW5lQnJlYWsgPSBpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2Q2hhciwgaW5ibG9jayk7XG4gICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgfVxuICAgIC8vIGluIGNhc2UgdGhlIGVuZCBpcyBtaXNzaW5nIGEgXFxuXG4gICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IChzaG91bGRUcmFja1dpZHRoICYmXG4gICAgICAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJlxuICAgICAgIHN0cmluZ1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAnICcpKTtcbiAgfVxuICAvLyBBbHRob3VnaCBldmVyeSBzdHlsZSBjYW4gcmVwcmVzZW50IFxcbiB3aXRob3V0IGVzY2FwaW5nLCBwcmVmZXIgYmxvY2sgc3R5bGVzXG4gIC8vIGZvciBtdWx0aWxpbmUsIHNpbmNlIHRoZXkncmUgbW9yZSByZWFkYWJsZSBhbmQgdGhleSBkb24ndCBhZGQgZW1wdHkgbGluZXMuXG4gIC8vIEFsc28gcHJlZmVyIGZvbGRpbmcgYSBzdXBlci1sb25nIGxpbmUuXG4gIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHtcbiAgICAvLyBTdHJpbmdzIGludGVycHJldGFibGUgYXMgYW5vdGhlciB0eXBlIGhhdmUgdG8gYmUgcXVvdGVkO1xuICAgIC8vIGUuZy4gdGhlIHN0cmluZyAndHJ1ZScgdnMuIHRoZSBib29sZWFuIHRydWUuXG4gICAgaWYgKHBsYWluICYmICFmb3JjZVF1b3RlcyAmJiAhdGVzdEFtYmlndW91c1R5cGUoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIFNUWUxFX1BMQUlOO1xuICAgIH1cbiAgICByZXR1cm4gcXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyBTVFlMRV9ET1VCTEUgOiBTVFlMRV9TSU5HTEU7XG4gIH1cbiAgLy8gRWRnZSBjYXNlOiBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgY2FuIG9ubHkgaGF2ZSBvbmUgZGlnaXQuXG4gIGlmIChpbmRlbnRQZXJMZXZlbCA+IDkgJiYgbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgfVxuICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYmxvY2sgc3R5bGVzIGFyZSB2YWxpZC5cbiAgLy8gUHJlZmVyIGxpdGVyYWwgc3R5bGUgdW5sZXNzIHdlIHdhbnQgdG8gZm9sZC5cbiAgaWYgKCFmb3JjZVF1b3Rlcykge1xuICAgIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xuICB9XG4gIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbn1cblxuLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4vLyBOQi4gV2UgZHJvcCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lIChpZiBhbnkpIG9mIGEgcmV0dXJuZWQgYmxvY2sgc2NhbGFyXG4vLyAgc2luY2UgdGhlIGR1bXBlciBhZGRzIGl0cyBvd24gbmV3bGluZS4gVGhpcyBhbHdheXMgd29ya3M6XG4vLyAgICDigKIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbi8vICAgIOKAoiBFbmRpbmcgbmV3bGluZSAgICA9PiByZW1vdmVkIHRoZW4gcmVzdG9yZWQuXG4vLyAgSW1wb3J0YW50bHksIHRoaXMga2VlcHMgdGhlIFwiK1wiIGNob21wIGluZGljYXRvciBmcm9tIGdhaW5pbmcgYW4gZXh0cmEgbGluZS5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSwgaW5ibG9jaykge1xuICBzdGF0ZS5kdW1wID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXRlLnF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gJ1wiXCInIDogXCInJ1wiO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm5vQ29tcGF0TW9kZSkge1xuICAgICAgaWYgKERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYLmluZGV4T2Yoc3RyaW5nKSAhPT0gLTEgfHwgREVQUkVDQVRFRF9CQVNFNjBfU1lOVEFYLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gc3RhdGUucXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyAoJ1wiJyArIHN0cmluZyArICdcIicpIDogKFwiJ1wiICsgc3RyaW5nICsgXCInXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7IC8vIG5vIDAtaW5kZW50IHNjYWxhcnNcbiAgICAvLyBBcyBpbmRlbnRhdGlvbiBnZXRzIGRlZXBlciwgbGV0IHRoZSB3aWR0aCBkZWNyZWFzZSBtb25vdG9uaWNhbGx5XG4gICAgLy8gdG8gdGhlIGxvd2VyIGJvdW5kIG1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKS5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbXBsaWVzXG4gICAgLy8gIHN0YXRlLmxpbmVXaWR0aCDiiaQgNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGlzIGZpeGVkIGF0IHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyAgc3RhdGUubGluZVdpZHRoID4gNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGRlY3JlYXNlcyB1bnRpbCB0aGUgbG93ZXIgYm91bmQuXG4gICAgLy8gVGhpcyBiZWhhdmVzIGJldHRlciB0aGFuIGEgY29uc3RhbnQgbWluaW11bSB3aWR0aCB3aGljaCBkaXNhbGxvd3MgbmFycm93ZXIgb3B0aW9ucyxcbiAgICAvLyBvciBhbiBpbmRlbnQgdGhyZXNob2xkIHdoaWNoIGNhdXNlcyB0aGUgd2lkdGggdG8gc3VkZGVubHkgaW5jcmVhc2UuXG4gICAgdmFyIGxpbmVXaWR0aCA9IHN0YXRlLmxpbmVXaWR0aCA9PT0gLTFcbiAgICAgID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTtcblxuICAgIC8vIFdpdGhvdXQga25vd2luZyBpZiBrZXlzIGFyZSBpbXBsaWNpdC9leHBsaWNpdCwgYXNzdW1lIGltcGxpY2l0IGZvciBzYWZldHkuXG4gICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXlcbiAgICAgIC8vIE5vIGJsb2NrIHN0eWxlcyBpbiBmbG93IG1vZGUuXG4gICAgICB8fCAoc3RhdGUuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gc3RhdGUuZmxvd0xldmVsKTtcbiAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cmluZykge1xuICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNob29zZVNjYWxhclN0eWxlKHN0cmluZywgc2luZ2xlTGluZU9ubHksIHN0YXRlLmluZGVudCwgbGluZVdpZHRoLFxuICAgICAgdGVzdEFtYmlndWl0eSwgc3RhdGUucXVvdGluZ1R5cGUsIHN0YXRlLmZvcmNlUXVvdGVzICYmICFpc2tleSwgaW5ibG9jaykpIHtcblxuICAgICAgY2FzZSBTVFlMRV9QTEFJTjpcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOlxuICAgICAgICByZXR1cm4gXCInXCIgKyBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6XG4gICAgICAgIHJldHVybiAnfCcgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkpO1xuICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6XG4gICAgICAgIHJldHVybiAnPicgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nKSArICdcIic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZScpO1xuICAgIH1cbiAgfSgpKTtcbn1cblxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0cmluZyBpcyB2YWxpZCBmb3IgYSBibG9jayBzY2FsYXIsIDEgPD0gaW5kZW50UGVyTGV2ZWwgPD0gOS5cbmZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZywgaW5kZW50UGVyTGV2ZWwpIHtcbiAgdmFyIGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSA/IFN0cmluZyhpbmRlbnRQZXJMZXZlbCkgOiAnJztcblxuICAvLyBub3RlIHRoZSBzcGVjaWFsIGNhc2U6IHRoZSBzdHJpbmcgJ1xcbicgY291bnRzIGFzIGEgXCJ0cmFpbGluZ1wiIGVtcHR5IGxpbmUuXG4gIHZhciBjbGlwID0gICAgICAgICAgc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gJ1xcbic7XG4gIHZhciBrZWVwID0gY2xpcCAmJiAoc3RyaW5nW3N0cmluZy5sZW5ndGggLSAyXSA9PT0gJ1xcbicgfHwgc3RyaW5nID09PSAnXFxuJyk7XG4gIHZhciBjaG9tcCA9IGtlZXAgPyAnKycgOiAoY2xpcCA/ICcnIDogJy0nKTtcblxuICByZXR1cm4gaW5kZW50SW5kaWNhdG9yICsgY2hvbXAgKyAnXFxuJztcbn1cblxuLy8gKFNlZSB0aGUgbm90ZSBmb3Igd3JpdGVTY2FsYXIuKVxuZnVuY3Rpb24gZHJvcEVuZGluZ05ld2xpbmUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAnXFxuJyA/IHN0cmluZy5zbGljZSgwLCAtMSkgOiBzdHJpbmc7XG59XG5cbi8vIE5vdGU6IGEgbG9uZyBsaW5lIHdpdGhvdXQgYSBzdWl0YWJsZSBicmVhayBwb2ludCB3aWxsIGV4Y2VlZCB0aGUgd2lkdGggbGltaXQuXG4vLyBQcmUtY29uZGl0aW9uczogZXZlcnkgY2hhciBpbiBzdHIgaXNQcmludGFibGUsIHN0ci5sZW5ndGggPiAwLCB3aWR0aCA+IDAuXG5mdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHtcbiAgLy8gSW4gZm9sZGVkIHN0eWxlLCAkayQgY29uc2VjdXRpdmUgbmV3bGluZXMgb3V0cHV0IGFzICRrKzEkIG5ld2xpbmVz4oCUXG4gIC8vIHVubGVzcyB0aGV5J3JlIGJlZm9yZSBvciBhZnRlciBhIG1vcmUtaW5kZW50ZWQgbGluZSwgb3IgYXQgdGhlIHZlcnlcbiAgLy8gYmVnaW5uaW5nIG9yIGVuZCwgaW4gd2hpY2ggY2FzZSAkayQgbWFwcyB0byAkayQuXG4gIC8vIFRoZXJlZm9yZSwgcGFyc2UgZWFjaCBjaHVuayBhcyBuZXdsaW5lKHMpIGZvbGxvd2VkIGJ5IGEgY29udGVudCBsaW5lLlxuICB2YXIgbGluZVJlID0gLyhcXG4rKShbXlxcbl0qKS9nO1xuXG4gIC8vIGZpcnN0IGxpbmUgKHBvc3NpYmx5IGFuIGVtcHR5IGxpbmUpXG4gIHZhciByZXN1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG4gICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZy5sZW5ndGg7XG4gICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjtcbiAgICByZXR1cm4gZm9sZExpbmUoc3RyaW5nLnNsaWNlKDAsIG5leHRMRiksIHdpZHRoKTtcbiAgfSgpKTtcbiAgLy8gSWYgd2UgaGF2ZW4ndCByZWFjaGVkIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgeWV0LCBkb24ndCBhZGQgYW4gZXh0cmEgXFxuLlxuICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZ1swXSA9PT0gJ1xcbicgfHwgc3RyaW5nWzBdID09PSAnICc7XG4gIHZhciBtb3JlSW5kZW50ZWQ7XG5cbiAgLy8gcmVzdCBvZiB0aGUgbGluZXNcbiAgdmFyIG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkpIHtcbiAgICB2YXIgcHJlZml4ID0gbWF0Y2hbMV0sIGxpbmUgPSBtYXRjaFsyXTtcbiAgICBtb3JlSW5kZW50ZWQgPSAobGluZVswXSA9PT0gJyAnKTtcbiAgICByZXN1bHQgKz0gcHJlZml4XG4gICAgICArICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09ICcnXG4gICAgICAgID8gJ1xcbicgOiAnJylcbiAgICAgICsgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHcmVlZHkgbGluZSBicmVha2luZy5cbi8vIFBpY2tzIHRoZSBsb25nZXN0IGxpbmUgdW5kZXIgdGhlIGxpbWl0IGVhY2ggdGltZSxcbi8vIG90aGVyd2lzZSBzZXR0bGVzIGZvciB0aGUgc2hvcnRlc3QgbGluZSBvdmVyIHRoZSBsaW1pdC5cbi8vIE5CLiBNb3JlLWluZGVudGVkIGxpbmVzICpjYW5ub3QqIGJlIGZvbGRlZCwgYXMgdGhhdCB3b3VsZCBhZGQgYW4gZXh0cmEgXFxuLlxuZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHtcbiAgaWYgKGxpbmUgPT09ICcnIHx8IGxpbmVbMF0gPT09ICcgJykgcmV0dXJuIGxpbmU7XG5cbiAgLy8gU2luY2UgYSBtb3JlLWluZGVudGVkIGxpbmUgYWRkcyBhIFxcbiwgYnJlYWtzIGNhbid0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UuXG4gIHZhciBicmVha1JlID0gLyBbXiBdL2c7IC8vIG5vdGU6IHRoZSBtYXRjaCBpbmRleCB3aWxsIGFsd2F5cyBiZSA8PSBsZW5ndGgtMi5cbiAgdmFyIG1hdGNoO1xuICAvLyBzdGFydCBpcyBhbiBpbmNsdXNpdmUgaW5kZXguIGVuZCwgY3VyciwgYW5kIG5leHQgYXJlIGV4Y2x1c2l2ZS5cbiAgdmFyIHN0YXJ0ID0gMCwgZW5kLCBjdXJyID0gMCwgbmV4dCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcblxuICAvLyBJbnZhcmlhbnRzOiAwIDw9IHN0YXJ0IDw9IGxlbmd0aC0xLlxuICAvLyAgIDAgPD0gY3VyciA8PSBuZXh0IDw9IG1heCgwLCBsZW5ndGgtMikuIGN1cnIgLSBzdGFydCA8PSB3aWR0aC5cbiAgLy8gSW5zaWRlIHRoZSBsb29wOlxuICAvLyAgIEEgbWF0Y2ggaW1wbGllcyBsZW5ndGggPj0gMiwgc28gY3VyciBhbmQgbmV4dCBhcmUgPD0gbGVuZ3RoLTIuXG4gIHdoaWxlICgobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpKSB7XG4gICAgbmV4dCA9IG1hdGNoLmluZGV4O1xuICAgIC8vIG1haW50YWluIGludmFyaWFudDogY3VyciAtIHN0YXJ0IDw9IHdpZHRoXG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSAoY3VyciA+IHN0YXJ0KSA/IGN1cnIgOiBuZXh0OyAvLyBkZXJpdmUgZW5kIDw9IGxlbmd0aC0yXG4gICAgICByZXN1bHQgKz0gJ1xcbicgKyBsaW5lLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgLy8gc2tpcCB0aGUgc3BhY2UgdGhhdCB3YXMgb3V0cHV0IGFzIFxcblxuICAgICAgc3RhcnQgPSBlbmQgKyAxOyAgICAgICAgICAgICAgICAgICAgLy8gZGVyaXZlIHN0YXJ0IDw9IGxlbmd0aC0xXG4gICAgfVxuICAgIGN1cnIgPSBuZXh0O1xuICB9XG5cbiAgLy8gQnkgdGhlIGludmFyaWFudHMsIHN0YXJ0IDw9IGxlbmd0aC0xLCBzbyB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCBvdmVyLlxuICAvLyBJdCBpcyBlaXRoZXIgdGhlIHdob2xlIHN0cmluZyBvciBhIHBhcnQgc3RhcnRpbmcgZnJvbSBub24td2hpdGVzcGFjZS5cbiAgcmVzdWx0ICs9ICdcXG4nO1xuICAvLyBJbnNlcnQgYSBicmVhayBpZiB0aGUgcmVtYWluZGVyIGlzIHRvbyBsb25nIGFuZCB0aGVyZSBpcyBhIGJyZWFrIGF2YWlsYWJsZS5cbiAgaWYgKGxpbmUubGVuZ3RoIC0gc3RhcnQgPiB3aWR0aCAmJiBjdXJyID4gc3RhcnQpIHtcbiAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCwgY3VycikgKyAnXFxuJyArIGxpbmUuc2xpY2UoY3VyciArIDEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7IC8vIGRyb3AgZXh0cmEgXFxuIGpvaW5lclxufVxuXG4vLyBFc2NhcGVzIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgZXNjYXBlU2VxO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTtcblxuICAgIGlmICghZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nW2ldO1xuICAgICAgaWYgKGNoYXIgPj0gMHgxMDAwMCkgcmVzdWx0ICs9IHN0cmluZ1tpICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICB2YWx1ZTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIHZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIFN0cmluZyhpbmRleCksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLCBwdXQgbnVsbCBpbnN0ZWFkIG9mIGludmFsaWQgZWxlbWVudHMuXG4gICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIHZhbHVlLCBmYWxzZSwgZmFsc2UpIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICB3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBudWxsLCBmYWxzZSwgZmFsc2UpKSkge1xuXG4gICAgICBpZiAoX3Jlc3VsdCAhPT0gJycpIF9yZXN1bHQgKz0gJywnICsgKCFzdGF0ZS5jb25kZW5zZUZsb3cgPyAnICcgOiAnJyk7XG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9ICdbJyArIF9yZXN1bHQgKyAnXSc7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCA9ICcnLFxuICAgICAgX3RhZyAgICA9IHN0YXRlLnRhZyxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgdmFsdWU7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBTdHJpbmcoaW5kZXgpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cywgcHV0IG51bGwgaW5zdGVhZCBvZiBpbnZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgdmFsdWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG51bGwsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSkpIHtcblxuICAgICAgaWYgKCFjb21wYWN0IHx8IF9yZXN1bHQgIT09ICcnKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gJy0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLSAnO1xuICAgICAgfVxuXG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ1tdJzsgLy8gRW1wdHkgc2VxdWVuY2UgaWYgbm8gdmFsaWQgdmFsdWVzLlxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG5cbiAgICBwYWlyQnVmZmVyID0gJyc7XG4gICAgaWYgKF9yZXN1bHQgIT09ICcnKSBwYWlyQnVmZmVyICs9ICcsICc7XG5cbiAgICBpZiAoc3RhdGUuY29uZGVuc2VGbG93KSBwYWlyQnVmZmVyICs9ICdcIic7XG5cbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICBvYmplY3RWYWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBvYmplY3RLZXksIG9iamVjdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAnPyAnO1xuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiAnJykgKyAnOicgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gJycgOiAnICcpO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSAneycgKyBfcmVzdWx0ICsgJ30nO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCAgICAgICA9ICcnLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICBvYmplY3RLZXksXG4gICAgICBvYmplY3RWYWx1ZSxcbiAgICAgIGV4cGxpY2l0UGFpcixcbiAgICAgIHBhaXJCdWZmZXI7XG5cbiAgLy8gQWxsb3cgc29ydGluZyBrZXlzIHNvIHRoYXQgdGhlIG91dHB1dCBmaWxlIGlzIGRldGVybWluaXN0aWNcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgLy8gRGVmYXVsdCBzb3J0aW5nXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgLy8gU29tZXRoaW5nIGlzIHdyb25nXG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignc29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSAnJykge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/JykgfHxcbiAgICAgICAgICAgICAgICAgICAoc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8gJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6JztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOiAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ3t9JzsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbn1cblxuZnVuY3Rpb24gZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUsIHN0eWxlO1xuXG4gIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiAgfHwgdHlwZS5wcmVkaWNhdGUpICYmXG4gICAgICAgICghdHlwZS5pbnN0YW5jZU9mIHx8ICgodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpICYmIChvYmplY3QgaW5zdGFuY2VvZiB0eXBlLmluc3RhbmNlT2YpKSkgJiZcbiAgICAgICAgKCF0eXBlLnByZWRpY2F0ZSAgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSkpIHtcblxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlLm11bHRpICYmIHR5cGUucmVwcmVzZW50TmFtZSkge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSAnPyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLnJlcHJlc2VudCkge1xuICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGUudGFnXSB8fCB0eXBlLmRlZmF1bHRTdHlsZTtcblxuICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwodHlwZS5yZXByZXNlbnQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJyE8JyArIHR5cGUudGFnICsgJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90IFwiJyArIHN0eWxlICsgJ1wiIHN0eWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTZXJpYWxpemVzIGBvYmplY3RgIGFuZCB3cml0ZXMgaXQgdG8gZ2xvYmFsIGByZXN1bHRgLlxuLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGludmFsaWQgb2JqZWN0LlxuLy9cbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5LCBpc2Jsb2Nrc2VxKSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG5cbiAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkge1xuICAgIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cblxuICB2YXIgdHlwZSA9IF90b1N0cmluZy5jYWxsKHN0YXRlLmR1bXApO1xuICB2YXIgaW5ibG9jayA9IGJsb2NrO1xuICB2YXIgdGFnU3RyO1xuXG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gKHN0YXRlLmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWwpO1xuICB9XG5cbiAgdmFyIG9iamVjdE9yQXJyYXkgPSB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fCB0eXBlID09PSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgZHVwbGljYXRlSW5kZXgsXG4gICAgICBkdXBsaWNhdGU7XG5cbiAgaWYgKG9iamVjdE9yQXJyYXkpIHtcbiAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlLmR1cGxpY2F0ZXMuaW5kZXhPZihvYmplY3QpO1xuICAgIGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZUluZGV4ICE9PSAtMTtcbiAgfVxuXG4gIGlmICgoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB8fCBkdXBsaWNhdGUgfHwgKHN0YXRlLmluZGVudCAhPT0gMiAmJiBsZXZlbCA+IDApKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICBzdGF0ZS5kdW1wID0gJypyZWZfJyArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIGlmIChibG9jayAmJiAoT2JqZWN0LmtleXMoc3RhdGUuZHVtcCkubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICBpZiAoc3RhdGUubm9BcnJheUluZGVudCAmJiAhaXNibG9ja3NlcSAmJiBsZXZlbCA+IDApIHtcbiAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsIC0gMSwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArICcgJyArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICBpZiAoc3RhdGUudGFnICE9PSAnPycpIHtcbiAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUsIHN0YXRlLmR1bXAsIGxldmVsLCBpc2tleSwgaW5ibG9jayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBVbmRlZmluZWRdJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuc2tpcEludmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJ3VuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICcgKyB0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB7XG4gICAgICAvLyBOZWVkIHRvIGVuY29kZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgdGhvc2UgYWxsb3dlZCBieSB0aGUgc3BlYzpcbiAgICAgIC8vXG4gICAgICAvLyBbMzVdIG5zLWRlYy1kaWdpdCAgICA6Oj0gIFsjeDMwLSN4MzldIC8qIDAtOSAqL1xuICAgICAgLy8gWzM2XSBucy1oZXgtZGlnaXQgICAgOjo9ICBucy1kZWMtZGlnaXRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyN4NDEtI3g0Nl0gLyogQS1GICovIHwgWyN4NjEtI3g2Nl0gLyogYS1mICovXG4gICAgICAvLyBbMzddIG5zLWFzY2lpLWxldHRlciA6Oj0gIFsjeDQxLSN4NUFdIC8qIEEtWiAqLyB8IFsjeDYxLSN4N0FdIC8qIGEteiAqL1xuICAgICAgLy8gWzM4XSBucy13b3JkLWNoYXIgICAgOjo9ICBucy1kZWMtZGlnaXQgfCBucy1hc2NpaS1sZXR0ZXIgfCDigJwt4oCdXG4gICAgICAvLyBbMzldIG5zLXVyaS1jaGFyICAgICA6Oj0gIOKAnCXigJ0gbnMtaGV4LWRpZ2l0IG5zLWhleC1kaWdpdCB8IG5zLXdvcmQtY2hhciB8IOKAnCPigJ1cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCcO+KAnSB8IOKAnC/igJ0gfCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnEDigJ0gfCDigJwm4oCdIHwg4oCcPeKAnSB8IOKAnCvigJ0gfCDigJwk4oCdIHwg4oCcLOKAnVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfCDigJxf4oCdIHwg4oCcLuKAnSB8IOKAnCHigJ0gfCDigJx+4oCdIHwg4oCcKuKAnSB8IOKAnCfigJ0gfCDigJwo4oCdIHwg4oCcKeKAnSB8IOKAnFvigJ0gfCDigJxd4oCdXG4gICAgICAvL1xuICAgICAgLy8gQWxzbyBuZWVkIHRvIGVuY29kZSAnIScgYmVjYXVzZSBpdCBoYXMgc3BlY2lhbCBtZWFuaW5nIChlbmQgb2YgdGFnIHByZWZpeCkuXG4gICAgICAvL1xuICAgICAgdGFnU3RyID0gZW5jb2RlVVJJKFxuICAgICAgICBzdGF0ZS50YWdbMF0gPT09ICchJyA/IHN0YXRlLnRhZy5zbGljZSgxKSA6IHN0YXRlLnRhZ1xuICAgICAgKS5yZXBsYWNlKC8hL2csICclMjEnKTtcblxuICAgICAgaWYgKHN0YXRlLnRhZ1swXSA9PT0gJyEnKSB7XG4gICAgICAgIHRhZ1N0ciA9ICchJyArIHRhZ1N0cjtcbiAgICAgIH0gZWxzZSBpZiAodGFnU3RyLnNsaWNlKDAsIDE4KSA9PT0gJ3RhZzp5YW1sLm9yZywyMDAyOicpIHtcbiAgICAgICAgdGFnU3RyID0gJyEhJyArIHRhZ1N0ci5zbGljZSgxOCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdTdHIgPSAnITwnICsgdGFnU3RyICsgJz4nO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5kdW1wID0gdGFnU3RyICsgJyAnICsgc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sXG4gICAgICBkdXBsaWNhdGVzSW5kZXhlcyA9IFtdLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBzdGF0ZS5kdXBsaWNhdGVzLnB1c2gob2JqZWN0c1tkdXBsaWNhdGVzSW5kZXhlc1tpbmRleF1dKTtcbiAgfVxuICBzdGF0ZS51c2VkRHVwbGljYXRlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7XG4gIHZhciBvYmplY3RLZXlMaXN0LFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgIGluZGV4ID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGR1bXAkMShpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG5cbiAgaWYgKCFzdGF0ZS5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlKTtcblxuICB2YXIgdmFsdWUgPSBpbnB1dDtcblxuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyAnJzogdmFsdWUgfSwgJycsIHZhbHVlKTtcbiAgfVxuXG4gIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIHZhbHVlLCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlLmR1bXAgKyAnXFxuJztcblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBkdW1wXzEgPSBkdW1wJDE7XG5cbnZhciBkdW1wZXIgPSB7XG5cdGR1bXA6IGR1bXBfMVxufTtcblxuZnVuY3Rpb24gcmVuYW1lZChmcm9tLCB0bykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24geWFtbC4nICsgZnJvbSArICcgaXMgcmVtb3ZlZCBpbiBqcy15YW1sIDQuICcgK1xuICAgICAgJ1VzZSB5YW1sLicgKyB0byArICcgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4nKTtcbiAgfTtcbn1cblxuXG52YXIgVHlwZSAgICAgICAgICAgICAgICA9IHR5cGU7XG52YXIgU2NoZW1hICAgICAgICAgICAgICA9IHNjaGVtYTtcbnZhciBGQUlMU0FGRV9TQ0hFTUEgICAgID0gZmFpbHNhZmU7XG52YXIgSlNPTl9TQ0hFTUEgICAgICAgICA9IGpzb247XG52YXIgQ09SRV9TQ0hFTUEgICAgICAgICA9IGNvcmU7XG52YXIgREVGQVVMVF9TQ0hFTUEgICAgICA9IF9kZWZhdWx0O1xudmFyIGxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbnZhciBsb2FkQWxsICAgICAgICAgICAgID0gbG9hZGVyLmxvYWRBbGw7XG52YXIgZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xudmFyIFlBTUxFeGNlcHRpb24gICAgICAgPSBleGNlcHRpb247XG5cbi8vIFJlLWV4cG9ydCBhbGwgdHlwZXMgaW4gY2FzZSB1c2VyIHdhbnRzIHRvIGNyZWF0ZSBjdXN0b20gc2NoZW1hXG52YXIgdHlwZXMgPSB7XG4gIGJpbmFyeTogICAgYmluYXJ5LFxuICBmbG9hdDogICAgIGZsb2F0LFxuICBtYXA6ICAgICAgIG1hcCxcbiAgbnVsbDogICAgICBfbnVsbCxcbiAgcGFpcnM6ICAgICBwYWlycyxcbiAgc2V0OiAgICAgICBzZXQsXG4gIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICBib29sOiAgICAgIGJvb2wsXG4gIGludDogICAgICAgaW50LFxuICBtZXJnZTogICAgIG1lcmdlLFxuICBvbWFwOiAgICAgIG9tYXAsXG4gIHNlcTogICAgICAgc2VxLFxuICBzdHI6ICAgICAgIHN0clxufTtcblxuLy8gUmVtb3ZlZCBmdW5jdGlvbnMgZnJvbSBKUy1ZQU1MIDMuMC54XG52YXIgc2FmZUxvYWQgICAgICAgICAgICA9IHJlbmFtZWQoJ3NhZmVMb2FkJywgJ2xvYWQnKTtcbnZhciBzYWZlTG9hZEFsbCAgICAgICAgID0gcmVuYW1lZCgnc2FmZUxvYWRBbGwnLCAnbG9hZEFsbCcpO1xudmFyIHNhZmVEdW1wICAgICAgICAgICAgPSByZW5hbWVkKCdzYWZlRHVtcCcsICdkdW1wJyk7XG5cbnZhciBqc1lhbWwgPSB7XG5cdFR5cGU6IFR5cGUsXG5cdFNjaGVtYTogU2NoZW1hLFxuXHRGQUlMU0FGRV9TQ0hFTUE6IEZBSUxTQUZFX1NDSEVNQSxcblx0SlNPTl9TQ0hFTUE6IEpTT05fU0NIRU1BLFxuXHRDT1JFX1NDSEVNQTogQ09SRV9TQ0hFTUEsXG5cdERFRkFVTFRfU0NIRU1BOiBERUZBVUxUX1NDSEVNQSxcblx0bG9hZDogbG9hZCxcblx0bG9hZEFsbDogbG9hZEFsbCxcblx0ZHVtcDogZHVtcCxcblx0WUFNTEV4Y2VwdGlvbjogWUFNTEV4Y2VwdGlvbixcblx0dHlwZXM6IHR5cGVzLFxuXHRzYWZlTG9hZDogc2FmZUxvYWQsXG5cdHNhZmVMb2FkQWxsOiBzYWZlTG9hZEFsbCxcblx0c2FmZUR1bXA6IHNhZmVEdW1wXG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc1lhbWw7XG5leHBvcnQgeyBDT1JFX1NDSEVNQSwgREVGQVVMVF9TQ0hFTUEsIEZBSUxTQUZFX1NDSEVNQSwgSlNPTl9TQ0hFTUEsIFNjaGVtYSwgVHlwZSwgWUFNTEV4Y2VwdGlvbiwgZHVtcCwgbG9hZCwgbG9hZEFsbCwgc2FmZUR1bXAsIHNhZmVMb2FkLCBzYWZlTG9hZEFsbCwgdHlwZXMgfTtcbiJdLCJuYW1lcyI6WyJpc05vdGhpbmciLCJzdWJqZWN0IiwiaXNPYmplY3QiLCJ0b0FycmF5Iiwic2VxdWVuY2UiLCJBcnJheSIsImlzQXJyYXkiLCJleHRlbmQiLCJ0YXJnZXQiLCJzb3VyY2UiLCJpbmRleCIsImxlbmd0aCIsImtleSIsInNvdXJjZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicmVwZWF0Iiwic3RyaW5nIiwiY291bnQiLCJyZXN1bHQiLCJjeWNsZSIsImlzTmVnYXRpdmVaZXJvIiwibnVtYmVyIiwiTnVtYmVyIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJpc05vdGhpbmdfMSIsImlzT2JqZWN0XzEiLCJ0b0FycmF5XzEiLCJyZXBlYXRfMSIsImlzTmVnYXRpdmVaZXJvXzEiLCJleHRlbmRfMSIsImNvbW1vbiIsImZvcm1hdEVycm9yIiwiZXhjZXB0aW9uIiwiY29tcGFjdCIsIndoZXJlIiwibWVzc2FnZSIsInJlYXNvbiIsIm1hcmsiLCJuYW1lIiwibGluZSIsImNvbHVtbiIsInNuaXBwZXQiLCJZQU1MRXhjZXB0aW9uJDEiLCJFcnJvciIsImNhbGwiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwic3RhY2siLCJwcm90b3R5cGUiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImdldExpbmUiLCJidWZmZXIiLCJsaW5lU3RhcnQiLCJsaW5lRW5kIiwicG9zaXRpb24iLCJtYXhMaW5lTGVuZ3RoIiwiaGVhZCIsInRhaWwiLCJtYXhIYWxmTGVuZ3RoIiwiTWF0aCIsImZsb29yIiwic3RyIiwic2xpY2UiLCJyZXBsYWNlIiwicG9zIiwicGFkU3RhcnQiLCJtYXgiLCJtYWtlU25pcHBldCIsIm9wdGlvbnMiLCJtYXhMZW5ndGgiLCJpbmRlbnQiLCJsaW5lc0JlZm9yZSIsImxpbmVzQWZ0ZXIiLCJyZSIsImxpbmVTdGFydHMiLCJsaW5lRW5kcyIsIm1hdGNoIiwiZm91bmRMaW5lTm8iLCJleGVjIiwicHVzaCIsImkiLCJsaW5lTm9MZW5ndGgiLCJtaW4iLCJUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMiLCJZQU1MX05PREVfS0lORFMiLCJjb21waWxlU3R5bGVBbGlhc2VzIiwibWFwIiwiZm9yRWFjaCIsInN0eWxlIiwiYWxpYXMiLCJTdHJpbmciLCJUeXBlJDEiLCJ0YWciLCJpbmRleE9mIiwia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJkYXRhIiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsInJlcHJlc2VudE5hbWUiLCJkZWZhdWx0U3R5bGUiLCJtdWx0aSIsInN0eWxlQWxpYXNlcyIsInR5cGUiLCJjb21waWxlTGlzdCIsInNjaGVtYSIsImN1cnJlbnRUeXBlIiwibmV3SW5kZXgiLCJwcmV2aW91c1R5cGUiLCJwcmV2aW91c0luZGV4IiwiY29tcGlsZU1hcCIsInNjYWxhciIsIm1hcHBpbmciLCJmYWxsYmFjayIsImNvbGxlY3RUeXBlIiwiYXJndW1lbnRzIiwiU2NoZW1hJDEiLCJkZWZpbml0aW9uIiwiaW1wbGljaXQiLCJleHBsaWNpdCIsImNvbmNhdCIsInR5cGUkMSIsImxvYWRLaW5kIiwiY29tcGlsZWRJbXBsaWNpdCIsImNvbXBpbGVkRXhwbGljaXQiLCJjb21waWxlZFR5cGVNYXAiLCJzZXEiLCJmYWlsc2FmZSIsInJlc29sdmVZYW1sTnVsbCIsImNvbnN0cnVjdFlhbWxOdWxsIiwiaXNOdWxsIiwib2JqZWN0IiwiX251bGwiLCJjYW5vbmljYWwiLCJsb3dlcmNhc2UiLCJ1cHBlcmNhc2UiLCJjYW1lbGNhc2UiLCJlbXB0eSIsInJlc29sdmVZYW1sQm9vbGVhbiIsImNvbnN0cnVjdFlhbWxCb29sZWFuIiwiaXNCb29sZWFuIiwiYm9vbCIsImlzSGV4Q29kZSIsImMiLCJpc09jdENvZGUiLCJpc0RlY0NvZGUiLCJyZXNvbHZlWWFtbEludGVnZXIiLCJoYXNEaWdpdHMiLCJjaCIsImNoYXJDb2RlQXQiLCJjb25zdHJ1Y3RZYW1sSW50ZWdlciIsInZhbHVlIiwic2lnbiIsInBhcnNlSW50IiwiaXNJbnRlZ2VyIiwiaW50IiwiYmluYXJ5Iiwib2JqIiwib2N0YWwiLCJkZWNpbWFsIiwiaGV4YWRlY2ltYWwiLCJ0b1VwcGVyQ2FzZSIsIllBTUxfRkxPQVRfUEFUVEVSTiIsIlJlZ0V4cCIsInJlc29sdmVZYW1sRmxvYXQiLCJ0ZXN0IiwiY29uc3RydWN0WWFtbEZsb2F0IiwidG9Mb3dlckNhc2UiLCJQT1NJVElWRV9JTkZJTklUWSIsIk5hTiIsInBhcnNlRmxvYXQiLCJTQ0lFTlRJRklDX1dJVEhPVVRfRE9UIiwicmVwcmVzZW50WWFtbEZsb2F0IiwicmVzIiwiaXNOYU4iLCJpc0Zsb2F0IiwiZmxvYXQiLCJqc29uIiwiY29yZSIsIllBTUxfREFURV9SRUdFWFAiLCJZQU1MX1RJTUVTVEFNUF9SRUdFWFAiLCJyZXNvbHZlWWFtbFRpbWVzdGFtcCIsImNvbnN0cnVjdFlhbWxUaW1lc3RhbXAiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiZnJhY3Rpb24iLCJkZWx0YSIsInR6X2hvdXIiLCJ0el9taW51dGUiLCJkYXRlIiwiRGF0ZSIsIlVUQyIsInNldFRpbWUiLCJnZXRUaW1lIiwicmVwcmVzZW50WWFtbFRpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwidGltZXN0YW1wIiwicmVzb2x2ZVlhbWxNZXJnZSIsIm1lcmdlIiwiQkFTRTY0X01BUCIsInJlc29sdmVZYW1sQmluYXJ5IiwiY29kZSIsImlkeCIsImJpdGxlbiIsImNoYXJBdCIsImNvbnN0cnVjdFlhbWxCaW5hcnkiLCJ0YWlsYml0cyIsImlucHV0IiwiYml0cyIsIlVpbnQ4QXJyYXkiLCJyZXByZXNlbnRZYW1sQmluYXJ5IiwiaXNCaW5hcnkiLCJfaGFzT3duUHJvcGVydHkkMyIsImhhc093blByb3BlcnR5IiwiX3RvU3RyaW5nJDIiLCJyZXNvbHZlWWFtbE9tYXAiLCJvYmplY3RLZXlzIiwicGFpciIsInBhaXJLZXkiLCJwYWlySGFzS2V5IiwiY29uc3RydWN0WWFtbE9tYXAiLCJvbWFwIiwiX3RvU3RyaW5nJDEiLCJyZXNvbHZlWWFtbFBhaXJzIiwiY29uc3RydWN0WWFtbFBhaXJzIiwicGFpcnMiLCJfaGFzT3duUHJvcGVydHkkMiIsInJlc29sdmVZYW1sU2V0IiwiY29uc3RydWN0WWFtbFNldCIsInNldCIsIl9kZWZhdWx0IiwiX2hhc093blByb3BlcnR5JDEiLCJDT05URVhUX0ZMT1dfSU4iLCJDT05URVhUX0ZMT1dfT1VUIiwiQ09OVEVYVF9CTE9DS19JTiIsIkNPTlRFWFRfQkxPQ0tfT1VUIiwiQ0hPTVBJTkdfQ0xJUCIsIkNIT01QSU5HX1NUUklQIiwiQ0hPTVBJTkdfS0VFUCIsIlBBVFRFUk5fTk9OX1BSSU5UQUJMRSIsIlBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTIiwiUEFUVEVSTl9GTE9XX0lORElDQVRPUlMiLCJQQVRURVJOX1RBR19IQU5ETEUiLCJQQVRURVJOX1RBR19VUkkiLCJfY2xhc3MiLCJpc19FT0wiLCJpc19XSElURV9TUEFDRSIsImlzX1dTX09SX0VPTCIsImlzX0ZMT1dfSU5ESUNBVE9SIiwiZnJvbUhleENvZGUiLCJsYyIsImVzY2FwZWRIZXhMZW4iLCJmcm9tRGVjaW1hbENvZGUiLCJzaW1wbGVFc2NhcGVTZXF1ZW5jZSIsImNoYXJGcm9tQ29kZXBvaW50IiwiZnJvbUNoYXJDb2RlIiwic2ltcGxlRXNjYXBlQ2hlY2siLCJzaW1wbGVFc2NhcGVNYXAiLCJTdGF0ZSQxIiwiZmlsZW5hbWUiLCJvbldhcm5pbmciLCJsZWdhY3kiLCJsaXN0ZW5lciIsImltcGxpY2l0VHlwZXMiLCJ0eXBlTWFwIiwibGluZUluZGVudCIsImZpcnN0VGFiSW5MaW5lIiwiZG9jdW1lbnRzIiwiZ2VuZXJhdGVFcnJvciIsInN0YXRlIiwidGhyb3dFcnJvciIsInRocm93V2FybmluZyIsImRpcmVjdGl2ZUhhbmRsZXJzIiwiWUFNTCIsImhhbmRsZVlhbWxEaXJlY3RpdmUiLCJhcmdzIiwibWFqb3IiLCJtaW5vciIsInZlcnNpb24iLCJjaGVja0xpbmVCcmVha3MiLCJUQUciLCJoYW5kbGVUYWdEaXJlY3RpdmUiLCJoYW5kbGUiLCJwcmVmaXgiLCJ0YWdNYXAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlcnIiLCJjYXB0dXJlU2VnbWVudCIsInN0YXJ0IiwiZW5kIiwiY2hlY2tKc29uIiwiX3Bvc2l0aW9uIiwiX2xlbmd0aCIsIl9jaGFyYWN0ZXIiLCJfcmVzdWx0IiwibWVyZ2VNYXBwaW5ncyIsImRlc3RpbmF0aW9uIiwib3ZlcnJpZGFibGVLZXlzIiwicXVhbnRpdHkiLCJzdG9yZU1hcHBpbmdQYWlyIiwia2V5VGFnIiwia2V5Tm9kZSIsInZhbHVlTm9kZSIsInN0YXJ0TGluZSIsInN0YXJ0TGluZVN0YXJ0Iiwic3RhcnRQb3MiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsInJlYWRMaW5lQnJlYWsiLCJza2lwU2VwYXJhdGlvblNwYWNlIiwiYWxsb3dDb21tZW50cyIsImNoZWNrSW5kZW50IiwibGluZUJyZWFrcyIsInRlc3REb2N1bWVudFNlcGFyYXRvciIsIndyaXRlRm9sZGVkTGluZXMiLCJyZWFkUGxhaW5TY2FsYXIiLCJub2RlSW5kZW50Iiwid2l0aGluRmxvd0NvbGxlY3Rpb24iLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJjYXB0dXJlU3RhcnQiLCJjYXB0dXJlRW5kIiwiaGFzUGVuZGluZ0NvbnRlbnQiLCJfbGluZSIsIl9saW5lU3RhcnQiLCJfbGluZUluZGVudCIsIl9raW5kIiwicmVhZFNpbmdsZVF1b3RlZFNjYWxhciIsInJlYWREb3VibGVRdW90ZWRTY2FsYXIiLCJoZXhMZW5ndGgiLCJoZXhSZXN1bHQiLCJ0bXAiLCJyZWFkRmxvd0NvbGxlY3Rpb24iLCJyZWFkTmV4dCIsIl9wb3MiLCJfdGFnIiwiX2FuY2hvciIsImFuY2hvciIsInRlcm1pbmF0b3IiLCJpc1BhaXIiLCJpc0V4cGxpY2l0UGFpciIsImlzTWFwcGluZyIsImFuY2hvck1hcCIsImNvbXBvc2VOb2RlIiwicmVhZEJsb2NrU2NhbGFyIiwiZm9sZGluZyIsImNob21waW5nIiwiZGlkUmVhZENvbnRlbnQiLCJkZXRlY3RlZEluZGVudCIsInRleHRJbmRlbnQiLCJlbXB0eUxpbmVzIiwiYXRNb3JlSW5kZW50ZWQiLCJyZWFkQmxvY2tTZXF1ZW5jZSIsImRldGVjdGVkIiwicmVhZEJsb2NrTWFwcGluZyIsImZsb3dJbmRlbnQiLCJhbGxvd0NvbXBhY3QiLCJfa2V5TGluZSIsIl9rZXlMaW5lU3RhcnQiLCJfa2V5UG9zIiwiYXRFeHBsaWNpdEtleSIsInJlYWRUYWdQcm9wZXJ0eSIsImlzVmVyYmF0aW0iLCJpc05hbWVkIiwidGFnSGFuZGxlIiwidGFnTmFtZSIsInJlYWRBbmNob3JQcm9wZXJ0eSIsInJlYWRBbGlhcyIsInBhcmVudEluZGVudCIsIm5vZGVDb250ZXh0IiwiYWxsb3dUb1NlZWsiLCJhbGxvd0Jsb2NrU3R5bGVzIiwiYWxsb3dCbG9ja1NjYWxhcnMiLCJhbGxvd0Jsb2NrQ29sbGVjdGlvbnMiLCJpbmRlbnRTdGF0dXMiLCJhdE5ld0xpbmUiLCJoYXNDb250ZW50IiwidHlwZUluZGV4IiwidHlwZVF1YW50aXR5IiwidHlwZUxpc3QiLCJibG9ja0luZGVudCIsInJlYWREb2N1bWVudCIsImRvY3VtZW50U3RhcnQiLCJkaXJlY3RpdmVOYW1lIiwiZGlyZWN0aXZlQXJncyIsImhhc0RpcmVjdGl2ZXMiLCJsb2FkRG9jdW1lbnRzIiwibnVsbHBvcyIsImxvYWRBbGwkMSIsIml0ZXJhdG9yIiwibG9hZCQxIiwidW5kZWZpbmVkIiwibG9hZEFsbF8xIiwibG9hZF8xIiwibG9hZGVyIiwibG9hZEFsbCIsImxvYWQiLCJfdG9TdHJpbmciLCJfaGFzT3duUHJvcGVydHkiLCJDSEFSX0JPTSIsIkNIQVJfVEFCIiwiQ0hBUl9MSU5FX0ZFRUQiLCJDSEFSX0NBUlJJQUdFX1JFVFVSTiIsIkNIQVJfU1BBQ0UiLCJDSEFSX0VYQ0xBTUFUSU9OIiwiQ0hBUl9ET1VCTEVfUVVPVEUiLCJDSEFSX1NIQVJQIiwiQ0hBUl9QRVJDRU5UIiwiQ0hBUl9BTVBFUlNBTkQiLCJDSEFSX1NJTkdMRV9RVU9URSIsIkNIQVJfQVNURVJJU0siLCJDSEFSX0NPTU1BIiwiQ0hBUl9NSU5VUyIsIkNIQVJfQ09MT04iLCJDSEFSX0VRVUFMUyIsIkNIQVJfR1JFQVRFUl9USEFOIiwiQ0hBUl9RVUVTVElPTiIsIkNIQVJfQ09NTUVSQ0lBTF9BVCIsIkNIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCIsIkNIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQiLCJDSEFSX0dSQVZFX0FDQ0VOVCIsIkNIQVJfTEVGVF9DVVJMWV9CUkFDS0VUIiwiQ0hBUl9WRVJUSUNBTF9MSU5FIiwiQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUIiwiRVNDQVBFX1NFUVVFTkNFUyIsIkRFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYIiwiREVQUkVDQVRFRF9CQVNFNjBfU1lOVEFYIiwiY29tcGlsZVN0eWxlTWFwIiwiZW5jb2RlSGV4IiwiY2hhcmFjdGVyIiwiUVVPVElOR19UWVBFX1NJTkdMRSIsIlFVT1RJTkdfVFlQRV9ET1VCTEUiLCJTdGF0ZSIsIm5vQXJyYXlJbmRlbnQiLCJza2lwSW52YWxpZCIsImZsb3dMZXZlbCIsInN0eWxlTWFwIiwic29ydEtleXMiLCJsaW5lV2lkdGgiLCJub1JlZnMiLCJub0NvbXBhdE1vZGUiLCJjb25kZW5zZUZsb3ciLCJxdW90aW5nVHlwZSIsImZvcmNlUXVvdGVzIiwicmVwbGFjZXIiLCJleHBsaWNpdFR5cGVzIiwiZHVwbGljYXRlcyIsInVzZWREdXBsaWNhdGVzIiwiaW5kZW50U3RyaW5nIiwic3BhY2VzIiwiaW5kIiwibmV4dCIsImdlbmVyYXRlTmV4dExpbmUiLCJsZXZlbCIsInRlc3RJbXBsaWNpdFJlc29sdmluZyIsImlzV2hpdGVzcGFjZSIsImlzUHJpbnRhYmxlIiwiaXNOc0NoYXJPcldoaXRlc3BhY2UiLCJpc1BsYWluU2FmZSIsInByZXYiLCJpbmJsb2NrIiwiY0lzTnNDaGFyT3JXaGl0ZXNwYWNlIiwiY0lzTnNDaGFyIiwiaXNQbGFpblNhZmVGaXJzdCIsImlzUGxhaW5TYWZlTGFzdCIsImNvZGVQb2ludEF0IiwiZmlyc3QiLCJuZWVkSW5kZW50SW5kaWNhdG9yIiwibGVhZGluZ1NwYWNlUmUiLCJTVFlMRV9QTEFJTiIsIlNUWUxFX1NJTkdMRSIsIlNUWUxFX0xJVEVSQUwiLCJTVFlMRV9GT0xERUQiLCJTVFlMRV9ET1VCTEUiLCJjaG9vc2VTY2FsYXJTdHlsZSIsInNpbmdsZUxpbmVPbmx5IiwiaW5kZW50UGVyTGV2ZWwiLCJ0ZXN0QW1iaWd1b3VzVHlwZSIsImNoYXIiLCJwcmV2Q2hhciIsImhhc0xpbmVCcmVhayIsImhhc0ZvbGRhYmxlTGluZSIsInNob3VsZFRyYWNrV2lkdGgiLCJwcmV2aW91c0xpbmVCcmVhayIsInBsYWluIiwid3JpdGVTY2FsYXIiLCJpc2tleSIsImR1bXAiLCJ0ZXN0QW1iaWd1aXR5IiwiYmxvY2tIZWFkZXIiLCJkcm9wRW5kaW5nTmV3bGluZSIsImZvbGRTdHJpbmciLCJlc2NhcGVTdHJpbmciLCJpbmRlbnRJbmRpY2F0b3IiLCJjbGlwIiwia2VlcCIsImNob21wIiwid2lkdGgiLCJsaW5lUmUiLCJuZXh0TEYiLCJsYXN0SW5kZXgiLCJmb2xkTGluZSIsInByZXZNb3JlSW5kZW50ZWQiLCJtb3JlSW5kZW50ZWQiLCJicmVha1JlIiwiY3VyciIsImVzY2FwZVNlcSIsIndyaXRlRmxvd1NlcXVlbmNlIiwid3JpdGVOb2RlIiwid3JpdGVCbG9ja1NlcXVlbmNlIiwid3JpdGVGbG93TWFwcGluZyIsIm9iamVjdEtleUxpc3QiLCJvYmplY3RLZXkiLCJvYmplY3RWYWx1ZSIsInBhaXJCdWZmZXIiLCJ3cml0ZUJsb2NrTWFwcGluZyIsImV4cGxpY2l0UGFpciIsInNvcnQiLCJkZXRlY3RUeXBlIiwiYmxvY2siLCJpc2Jsb2Nrc2VxIiwidGFnU3RyIiwib2JqZWN0T3JBcnJheSIsImR1cGxpY2F0ZUluZGV4IiwiZHVwbGljYXRlIiwiZW5jb2RlVVJJIiwiZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyIsIm9iamVjdHMiLCJkdXBsaWNhdGVzSW5kZXhlcyIsImluc3BlY3ROb2RlIiwiZHVtcCQxIiwiZHVtcF8xIiwiZHVtcGVyIiwicmVuYW1lZCIsImZyb20iLCJ0byIsIlR5cGUiLCJTY2hlbWEiLCJGQUlMU0FGRV9TQ0hFTUEiLCJKU09OX1NDSEVNQSIsIkNPUkVfU0NIRU1BIiwiREVGQVVMVF9TQ0hFTUEiLCJZQU1MRXhjZXB0aW9uIiwidHlwZXMiLCJudWxsIiwic2FmZUxvYWQiLCJzYWZlTG9hZEFsbCIsInNhZmVEdW1wIiwianNZYW1sIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/js-yaml/dist/js-yaml.mjs\n");
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | /***/ })
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ; |